qms-angular 1.1.64 → 1.1.65

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.
Files changed (66) hide show
  1. package/bundles/qms-angular.umd.js +1974 -1657
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/enum/bpmn-add-connection-type.enum.js +6 -0
  4. package/esm2015/lib/common/enum/data-type.enum.js +2 -1
  5. package/esm2015/lib/common/enum/shape-connection-action.enum.js +7 -0
  6. package/esm2015/lib/common/enum/shape-targets.enum.js +6 -0
  7. package/esm2015/lib/common/qms-icon.const.js +13 -1
  8. package/esm2015/lib/components/app-icon/icon-registry.service.js +17 -2
  9. package/esm2015/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.js +3 -0
  10. package/esm2015/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.js +2 -1
  11. package/esm2015/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.js +5 -0
  12. package/esm2015/lib/components/qms-bpmn/models/shape-connection-action-event.model.js +3 -0
  13. package/esm2015/lib/components/qms-bpmn/models/shape-connection-action.model.js +3 -0
  14. package/esm2015/lib/components/qms-bpmn/models/shape-connection-detail.model.js +32 -0
  15. package/esm2015/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.js +7 -0
  16. package/esm2015/lib/components/qms-bpmn/qms-bpmn.component.js +120 -16
  17. package/esm2015/lib/components/qms-bpmn/qms-bpmn.module.js +15 -5
  18. package/esm2015/lib/components/related/list-other-related/list-related.component.js +6 -3
  19. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +2 -2
  20. package/esm2015/lib/components/select-process-data/select-process-data.component.js +2 -3
  21. package/esm2015/lib/components/select-process-data-tree/select-process-data-tree.component.js +1 -1
  22. package/esm2015/lib/components/select-process-document/select-process-document.component.js +3 -3
  23. package/esm2015/lib/components/treeNew/tree.component.js +3 -3
  24. package/esm2015/lib/model/en.js +8 -2
  25. package/esm2015/lib/model/no.js +8 -2
  26. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +4 -1
  27. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +38 -34
  28. package/esm2015/lib/qms-ckeditor-components/models/connect-type.model.js +1 -1
  29. package/esm2015/lib/qms-ckeditor-components/models/qms-bpmn-config.model.js +2 -1
  30. package/esm2015/lib/services/qms-bpmn.service.js +24 -1
  31. package/esm2015/public-api.js +11 -1
  32. package/esm2015/qms-angular.js +3 -1
  33. package/fesm2015/qms-angular.js +2150 -1905
  34. package/fesm2015/qms-angular.js.map +1 -1
  35. package/lib/common/enum/bpmn-add-connection-type.enum.d.ts +4 -0
  36. package/lib/common/enum/data-type.enum.d.ts +2 -1
  37. package/lib/common/enum/shape-connection-action.enum.d.ts +5 -0
  38. package/lib/common/enum/shape-targets.enum.d.ts +4 -0
  39. package/lib/common/qms-icon.const.d.ts +5 -0
  40. package/lib/components/app-icon/icon-registry.service.d.ts +5 -0
  41. package/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.d.ts +5 -0
  42. package/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.d.ts +1 -0
  43. package/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.d.ts +13 -0
  44. package/lib/components/qms-bpmn/models/shape-connection-action-event.model.d.ts +7 -0
  45. package/lib/components/qms-bpmn/models/shape-connection-action.model.d.ts +5 -0
  46. package/lib/components/qms-bpmn/models/shape-connection-detail.model.d.ts +71 -0
  47. package/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.d.ts +6 -0
  48. package/lib/components/qms-bpmn/qms-bpmn.component.d.ts +51 -10
  49. package/lib/components/related/list-other-related/list-related.component.d.ts +1 -1
  50. package/lib/model/en.d.ts +6 -0
  51. package/lib/model/no.d.ts +6 -0
  52. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +4 -1
  53. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +19 -19
  54. package/lib/qms-ckeditor-components/models/connect-type.model.d.ts +2 -0
  55. package/lib/qms-ckeditor-components/models/qms-bpmn-config.model.d.ts +4 -0
  56. package/package.json +1 -1
  57. package/public-api.d.ts +10 -0
  58. package/qms-angular.d.ts +2 -0
  59. package/qms-angular.metadata.json +1 -1
  60. package/src/assets/jointjs/scss/bpmn.css +2 -2
  61. package/src/lib/components/qms-bpmn/qms-bpmn.component.scss +263 -0
  62. package/src/lib/components/related/list-other-related/list-related.component.scss +201 -197
  63. package/src/lib/components/select-process-data/select-process-data.component.scss +0 -2
  64. package/src/lib/components/select-process-data-tree/select-process-data-tree.component.scss +0 -1
  65. package/src/lib/components/select-process-document/select-process-document.component.scss +4 -0
  66. package/src/lib/components/treeNew/tree.component.scss +4 -0
@@ -815,9 +815,9 @@ export class SelectProcessDocumentPopupComponent {
815
815
  SelectProcessDocumentPopupComponent.decorators = [
816
816
  { type: Component, args: [{
817
817
  selector: 'qms-select-process-document',
818
- template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\n <span>{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\" qms-tool-tip=\"{{tooltipLocationSearchResult ? option.location : ''}}\"\n mode=\"dark\">\n <mat-icon *ngIf=\"!option.svgIcon\" leading-icon type=\"image-square\"\n [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <mat-icon *ngIf=\"option.svgIcon\" leading-icon type=\"image-square\">\n <img [src]=\"option.svgIcon\" />\n </mat-icon>\n <div qms-list-header>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n class=\"panel-tree-min-width\" (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\"\n [class.panel-tree]=\"isCommonExpanded\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree-new [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\" [expandOnTitleClick]=\"!splitView\"\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeProcess($event)\">\n </qms-tree-new>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\" class=\"panel-tree-min-width\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" [class.panel-tree]=\"isDocumentExpanded\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree-new [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\" [expandOnTitleClick]=\"!splitView\"\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeDocument($event)\">\n </qms-tree-new>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\" *ngIf=\"!hideSplitviewCheckbox\">\n </mat-checkbox>\n <button class=\"button-boder\" mat-icon-button [disableRipple]=\"true\" (click)=\"toggleSelectItem(node)\"\n *ngIf=\"node.itemName\">\n <mat-icon *ngIf=\"!node.svgIcon\" class=\"mat-icon-rtl-mirror material-icons-outlined\"\n [svgIcon]=\"getNodeIcon(node)\">\n </mat-icon>\n <mat-icon *ngIf=\"node.svgIcon\" leading-icon type=\"image-square\">\n <img [src]=\"node.svgIcon\" />\n </mat-icon>\n </button>\n <span class=\"text-node-item\" style=\"cursor: pointer\" (click)=\"toggleSelectItem(node)\" [class.bgSelected]=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">\n <span class=\"text-node\" [class.select-one-checked]=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">{{ node.itemName }}</span>\n <mat-icon class=\"select-one-checked\" *ngIf=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">\n done\n </mat-icon>\n </span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(item.id) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" id={{item.id}}>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\" (click)=\"removeCheckedNodeList(item)\">\n cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div>",
818
+ template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\n <span>{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\" qms-tool-tip=\"{{tooltipLocationSearchResult ? option.location : ''}}\"\n mode=\"dark\">\n <mat-icon *ngIf=\"!option.svgIcon\" leading-icon type=\"image-square\"\n [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <mat-icon *ngIf=\"option.svgIcon\" leading-icon type=\"image-square\">\n <img class=\"unset-vertical-align\" [src]=\"option.svgIcon\" />\n </mat-icon>\n <div qms-list-header>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n class=\"panel-tree-min-width\" (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\"\n [class.panel-tree]=\"isCommonExpanded\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree-new [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\" [expandOnTitleClick]=\"!splitView\"\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeProcess($event)\">\n </qms-tree-new>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\" class=\"panel-tree-min-width\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" [class.panel-tree]=\"isDocumentExpanded\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree-new [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\" [expandOnTitleClick]=\"!splitView\"\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeDocument($event)\">\n </qms-tree-new>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\" *ngIf=\"!hideSplitviewCheckbox\">\n </mat-checkbox>\n <button class=\"button-boder\" mat-icon-button [disableRipple]=\"true\" (click)=\"toggleSelectItem(node)\"\n *ngIf=\"node.itemName\">\n <mat-icon *ngIf=\"!node.svgIcon\" class=\"mat-icon-rtl-mirror material-icons-outlined\"\n [svgIcon]=\"getNodeIcon(node)\">\n </mat-icon>\n <mat-icon *ngIf=\"node.svgIcon\" leading-icon type=\"image-square\">\n <img class=\"unset-vertical-align\" [src]=\"node.svgIcon\" />\n </mat-icon>\n </button>\n <span class=\"text-node-item\" style=\"cursor: pointer\" (click)=\"toggleSelectItem(node)\" [class.bgSelected]=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">\n <span class=\"text-node\" [class.select-one-checked]=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">{{ node.itemName }}</span>\n <mat-icon class=\"select-one-checked\" *ngIf=\"\n isSelectOne &&\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\n \">\n done\n </mat-icon>\n </span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(item.id) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" id={{item.id}}>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\" (click)=\"removeCheckedNodeList(item)\">\n cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div>",
819
819
  encapsulation: ViewEncapsulation.None,
820
- 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-min-width{min-width:-webkit-fill-available}.qmslib__related__popup__container .panel-tree{overflow:auto;width:-moz-fit-content;width:fit-content}.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:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;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-container .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}"]
820
+ 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-min-width{min-width:-webkit-fill-available}.qmslib__related__popup__container .panel-tree{overflow:auto;width:-moz-fit-content;width:fit-content}.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:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;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)}.qmslib__related__popup__container .unset-vertical-align{vertical-align:unset}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-container .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}"]
821
821
  },] }
822
822
  ];
823
823
  SelectProcessDocumentPopupComponent.ctorParameters = () => [
@@ -836,4 +836,4 @@ SelectProcessDocumentPopupComponent.propDecorators = {
836
836
  autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
837
837
  onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
838
838
  };
839
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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WUFDZixZQUFZO1lBUVosc0JBQXNCO1lBYjBCLFVBQVU7WUFrQjFELDhCQUE4Qix1QkF5RmxDLE1BQU0sU0FBQyxlQUFlOzs7d0JBZnhCLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxFQUFFOzJCQUVqQyxTQUFTLFNBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkE4Q25GLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEksIFAgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW0vZG9jdW1lbnQtbm9kZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUmVsYXRlZENvbnN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL3JlbGF0ZWQuY29uc3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBOZXdUcmVlTW9kZWwgfSBmcm9tICcuLi90cmVlTmV3L21vZGVsL3RyZWUubW9kZWwnO1xuaW1wb3J0IHsgTmV3VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3RyZWVOZXcvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvcG9wLXVwLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0ZWQtcHJvY2Vzcy1kb2N1bWVudC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LWdsb2JhbC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBMQU5HOiBhbnk7XG4gIG1vZHVsZUlkID0gMDtcbiAgbW9kdWxlTmFtZSA9ICcnO1xuICB0cmVlRGF0YTE6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcbiAgdHJlZURhdGEyOiBBcnJheTxOZXdUcmVlTW9kZWw+ID0gW107XG4gIHRyZWVDb25maWcxOiBUcmVlQ29uZmlnO1xuICB0cmVlQ29uZmlnMjogVHJlZUNvbmZpZztcblxuICBjaGVja2VkTm9kZUxpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcbiAgc2VsZWN0ZWROb2RlOiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XG4gIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuICBzZWxlY3RlZERhdGEyOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XG5cbiAgY29tbW9uQ2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgZG9jdW1lbnRDaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuICBzaW5nbGVQcm9jZXNzTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xuICBzaW5nbGVEb2N1bWVudExpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcbiAgc3BsaXRWaWV3OiBib29sZWFuO1xuXG4gIG1vZHVsZSA9IE1vZHVsZVR5cGU7XG4gIGRhdGFUeXBlID0gRGF0YVR5cGU7XG4gIGl0ZW1UeXBlID0gMDtcbiAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XG4gIGRpc2FibGVkTGlzdDogYW55ID0gW107XG4gIGRpc2FibGVkTGlzdDI6IGFueSA9IFtdO1xuICBpc1NlbGVjdE9uZTogYm9vbGVhbjtcbiAgY2FuT25seVNlbGVjdEl0ZW06IGJvb2xlYW47XG5cbiAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcbiAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xuXG4gIHNlYXJjaE9yZGVyID0gW1xuICAgIHsga2V5OiAncHJvY2Vzc0ludGVyY29ubmVjdGVkJywgdmFsdWU6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCB9LFxuICAgIHsga2V5OiAncHJvY2VzcycsIHZhbHVlOiBEYXRhVHlwZS5wcm9jZXNzIH0sXG4gICAgeyBrZXk6ICdkb2N1bWVudCcsIHZhbHVlOiBEYXRhVHlwZS5kb2N1bWVudCB9LFxuICAgIHsga2V5OiAnYXJlYScsIHZhbHVlOiBEYXRhVHlwZS5hcmVhIH0sXG4gICAgeyBrZXk6ICdmb2xkZXInLCB2YWx1ZTogRGF0YVR5cGUuZm9sZGVyIH1cbiAgXTtcblxuICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyZWRPcHRpb25zOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcbiAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XG5cbiAgaXRlbUluU3BsaXR2aWV3OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcbiAgc2VsZWN0ZWRGb2xkZXI6IFRyZWVGbGF0Tm9kZSA9IG51bGw7XG4gIHNwbGl0Vmlld1RpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBsaXN0Q2hpbGRyZW5TZWxlY3RPbmU6IGFueSA9IFtdO1xuXG4gIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvblNlbGVjdEZvbGRlckl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XG4gIG9uRXhwYW5kUHJvY2Vzc0FyZWEgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XG4gIG9uRXhwYW5kRm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xuICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcbiAgdHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQ6IGFueTtcbiAgaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcbiAgaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZmFsc2U7XG4gIHRvb2x0aXBMb2NhdGlvblNlYXJjaFJlc3VsdCA9IGZhbHNlO1xuICBAVmlld0NoaWxkcmVuKE5ld1RyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxOZXdUcmVlQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXG4gIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBsaXN0Q2hlY2tlZFRvb2x0aXA6IGFueVtdID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudD4sXG4gICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhXG4gICkge1xuICAgIHRoaXMubW9kdWxlSWQgPSBkYXRhLm1vZHVsZUlkO1xuICAgIHRoaXMubW9kdWxlTmFtZSA9IGRhdGEubW9kdWxlTmFtZTtcbiAgICB0aGlzLnRyZWVEYXRhMSA9IGRhdGEudHJlZURhdGExO1xuICAgIHRoaXMudHJlZURhdGEyID0gZGF0YS50cmVlRGF0YTI7XG4gICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XG4gICAgdGhpcy50cmVlQ29uZmlnMiA9IGRhdGEudHJlZUNvbmZpZzI7XG4gICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhID0gZGF0YT8uc2VsZWN0ZWROb2RlIHx8IFtdO1xuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XG4gICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcbiAgICB0aGlzLmRpc2FibGVkTGlzdDIgPSBkYXRhLmRpc2FibGVkTGlzdDIgfHwgW107XG4gICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBkYXRhLmNoZWNrZWROb2RlTGlzdCB8fCBbXTtcbiAgICB0aGlzLnNwbGl0VmlldyA9IGRhdGEuc3BsaXRWaWV3O1xuICAgIHRoaXMuaXNTZWxlY3RPbmUgPSBkYXRhLmlzU2VsZWN0T25lO1xuICAgIHRoaXMuY2FuT25seVNlbGVjdEl0ZW0gPSBkYXRhLmNhbk9ubHlTZWxlY3RJdGVtO1xuICAgIHRoaXMuaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZGF0YS5oaWRlU3BsaXR2aWV3Q2hlY2tib3g7XG4gICAgdGhpcy50b29sdGlwTG9jYXRpb25TZWFyY2hSZXN1bHQgPSBkYXRhLnRvb2x0aXBMb2NhdGlvblNlYXJjaFJlc3VsdDtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSW50ZXJjb25uZWN0ZWRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShbXSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXG4gIG9uTWVzc2FnZShldmVudCkge1xuICAgIGlmIChldmVudC5kYXRhID09PSBSZWxhdGVkQ29uc3QuSElERV9TRUFSQ0hfUkVTVUxUKSB7XG4gICAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0YSgpO1xuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNlYXJjaFJlbGF0ZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudG9SZWxhdGVkT3B0aW9ucyhyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNwbGl0Vmlld1ZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IHJlcztcbiAgICAgIGlmIChyZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBsaXN0Tm9kZVByb2Nlc3M6IE5ld1RyZWVNb2RlbFtdID0gW107XG4gICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IE5ld1RyZWVNb2RlbFtdID0gW107XG5cbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgbGV0IG5ld05vZGVQcm9jZXNzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xuICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3MucGFyZW50SWQgPSBpdGVtLnBhcmVudElkO1xuICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3Muc3ZnSWNvbiA9IGl0ZW0uc3ZnSWNvbjtcbiAgICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xuICAgICAgICAgICAgbGlzdE5vZGVQcm9jZXNzLnB1c2gobmV3Tm9kZVByb2Nlc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xuICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIHRoaXMuaXNJbnB1dFZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvY2Vzc0FyZWFDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKSB7XG4gICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XG4gICAgICAgIHJlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCAuLi5ub3RTaG93bkNoaWxkcmVuXTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKSB7XG4gICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XG4gICAgICAgIHJlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCAuLi5ub3RTaG93bkNoaWxkcmVuXTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XG4gIH1cblxuICBzZXRTZWxlY3RlZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGV4cGFuZGFibGU6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGhhc0NoaWxkOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0RG9jdW1lbnQucHVzaChuZXdOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcbiAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4udGhpcy5zZWxlY3RlZERhdGEyXTtcbiAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZSh0aGlzLmNoZWNrZWROb2RlTGlzdFswXS5pZCwgdGhpcy5jaGVja2VkTm9kZUxpc3RbMF0ucGFyZW50SWQpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG4gICAgY29uc3QgdGVtcEFyciA9IFtdO1xuICAgIGNvbnN0IHRlbXBBcnJEb2N1bWVudCA9IFtdO1xuICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XG4gICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XG5cbiAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xuICAgIGlmICh0ZW1wQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRlbXBBcnJdO1xuICAgIH1cblxuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICB0ZW1wQXJyRG9jdW1lbnQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBuZXdTZWxlY3REb2N1bWVudExpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QgPSBuZXdTZWxlY3REb2N1bWVudExpc3Q7XG4gICAgaWYgKHRlbXBBcnJEb2N1bWVudC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGVtcEFyckRvY3VtZW50XTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgIGlmICghdGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRSZXN1bHRIZWlnaHQoYXJyPzogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdKSB7XG4gICAgbGV0IG1heEhlaWdodCA9IDQ4NDtcbiAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxpbmVfX2RpdmlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lX19kaXZpZGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHBvcHVwX2NvbnRlbnQgJiYgbGluZV9fZGl2aWRlcikge1xuICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXInKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB2aWV3cmVwb3J0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JlbGF0ZWQtdmlld3BvcnQnKVswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICh2aWV3cmVwb3J0cykge1xuICAgICAgaWYgKGNvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IDw9IG1heEhlaWdodCkge1xuICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubXlDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuaXNJbnB1dFZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoISFfdmFsKSB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnMobW9kdWxlSWQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZmlyc3RFbCA9IHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lW2luZGV4XTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IHNlY29uZEVsID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbal07XG4gICAgICAgICAgaWYgKGZpcnN0RWwuaWQgPT09IHNlY29uZEVsLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoeCA9PiB4Lml0ZW1UeXBlID09PSBtb2R1bGVJZCk7XG4gIH1cblxuICBzaG93U2VhcmNoUmVzdWx0KCkge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICB9XG5cbiAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHNlbGVjdFJlbGF0ZWQoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gW107XG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgJiYgeC5pdGVtVHlwZSA9PT0gaXRlbS5pdGVtVHlwZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCB8fCBpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xuICAgICAgICAvLyBkb2N1bWVudFxuICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0Mi5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcbiAgICAgICAgfSkgPj0gMDtcblxuICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGlzRXhpc3RJbkRpc2FibGVkID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgIHJldHVybiB4LmlkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgJiYgeC5pdGVtVHlwZSA9PT0gaXRlbS5pdGVtVHlwZSk7XG4gICAgICAgIH0pID49IDA7XG4gICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhZGROb2RlVG9UcmVlKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XG4gICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xuICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xuICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xuICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcbiAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XG4gICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZTtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgfHwgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgaWYgKHRoaXMudHJlZURhdGEyLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IG5ld05vZGVEb2NzLmV4cGFuZGFibGUpID49IDApIHtcbiAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIG5ld05vZGVEb2NzXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSkgPj0gMCkge1xuICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IFsuLi50aGlzLnRyZWVEYXRhMSwgbmV3Tm9kZURvY3NdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFRvQ2hlY2tsaXN0Tm9kZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xuICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcbiAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XG4gICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xuICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QgPSBbXTtcbiAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSk7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXG4gICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLm5hbWUsXG4gICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogbmV3Tm9kZURvY3MubGV2ZWxUeXBlLFxuICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxuICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5jb21tb25DaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IG5ld05vZGVEb2NzLmlkLFxuICAgICAgICAgICAgICBuYW1lOiBuZXdOb2RlRG9jcy5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IG5ld05vZGVEb2NzLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSxcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICBpdGVtTmFtZTogbmV3Tm9kZURvY3MubmFtZSxcbiAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXG4gICAgICAgIHBhcmVudElkOiBuZXdOb2RlRG9jcy5wYXJlbnRJZCxcbiAgICAgICAgcGFyZW50TmFtZTogaXRlbS5wYXJlbnROYW1lLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxuICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlLFxuICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxuICAgICAgICBzdGF0dXNOYW1lOiBpdGVtLnN0YXR1c05hbWUsXG4gICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgIGRpc3BsYXlJZDogTnVtYmVyLnBhcnNlRmxvYXQoaXRlbS5pdGVtTnVtYmVySWQpLFxuICAgICAgICBzdmdJY29uOiBpdGVtLnN2Z0ljb25cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgICAgdGhpcy5pZENoZWNrSWNvblNwbGl0VmlldyA9IHRoaXMuaWRUb0NoZWNrU2VsZWN0T25lKGl0ZW0uaWQsIG5ld05vZGVEb2NzLnBhcmVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTZWxlY3RlZERhdGEoaXRlbTogVHJlZUZsYXROb2RlKSB7XG4gICAgY29uc3Qgc2VsZWN0UHJvY2VzcyA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdERvY3VtZW50ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcbiAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2Vzc107XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCAuLi5zZWxlY3REb2N1bWVudF07XG4gICAgfVxuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5mb2xkZXIgfHwgaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YTIuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gaXRlbS5leHBhbmRhYmxlKSA8IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgaXRlbV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSkgPCAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCBpdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xuICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcbiAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcbiAgICAgIGxldmVsOiAwLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcbiAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlXG4gICAgfSk7XG4gIH1cblxuICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcbiAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xuICB9XG5cbiAgb25DbG9zZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gW107XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfTtcblxuICBvbkFkZENsaWNrKCkge1xuICAgIC8vIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gW107XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5jaGVja2VkTm9kZUxpc3QpO1xuICB9XG5cbiAgZ2V0U3RhdHVzTmFtZShpZCkge1xuICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XG4gICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XG4gICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdHVzTmFtZTtcbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KHRyZWVOb2Rlcykge1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSBudWxsO1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT09IG51bGwgJiYgeC5uYW1lICE9PSAnJyk7XG5cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZVByb2Nlc3ModHJlZU5vZGVzKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzLmRhdGFOb2RlcyA9IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xuXG4gIH1cblxuICBnZXRTdGF0dXNEb2NzKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZURhdGEyLmZpbHRlcih4ID0+IHguaWQgPT09IGlkKVswXS5zdGF0dXNJZDtcbiAgfVxuXG4gIGdldFN0YXR1c1Byb2Nlc3MoaWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlRGF0YTEuZmlsdGVyKHggPT4geC5pZCA9PT0gaWQpWzBdLnN0YXR1c0lkO1xuICB9XG5cbiAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcblxuICAgIGVsbUhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChpbmNsdWRlTWFyZ2luKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgZWxtTWFyZ2luID0gcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Ub3AucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20ucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIH1cblxuICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcbiAgfVxuXG4gIGdldEl0ZW1DaGlwTmFtZShpdGVtOiBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pdGVtTmFtZTtcbiAgfVxuXG4gIGlzRWxsaXBzaXNBY3RpdmUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBjaGVja2VkTm9kZSA9IHRoaXMubGlzdENoZWNrZWRUb29sdGlwLmZpbmQoeCA9PiB4LmlkID09PSBpZCk7XG4gICAgaWYgKGNoZWNrZWROb2RlKSB7XG4gICAgICByZXR1cm4gY2hlY2tlZE5vZGUuY2hlY2tSZXN1bHQ7XG4gICAgfVxuICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBpZiAoZS5vZmZzZXRXaWR0aCA8IGUuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgdCA9IHsgaWQsIGNoZWNrUmVzdWx0OiB0cnVlIH07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdCA9IHsgaWQsIGNoZWNrUmVzdWx0OiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0Q2hlY2tlZFRvb2x0aXAucHVzaCh0KTtcbiAgICAgIHJldHVybiB0LmNoZWNrUmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXROb2RlSWNvbihpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgc3dpdGNoIChpdGVtLml0ZW1UeXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RlcGFydG1lbnRfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ3JlZ2lvbmFsX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Gb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2xvY2FsX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDoge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2RlcGFydG1lbnQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Ub3BGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2VudGVycHJpc2UnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Gb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2xvY2FsJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgcmV0dXJuICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnO1xuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgIHJldHVybiAncHJvY2Vzc19pbnRlcmNvbm5lY3RlZCc7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICB9XG4gIH1cblxuICBnZXRUaXRsZSh0eXBlOiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5QUk9DRVNTRVM7XG4gICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5ET0NVTUVOVFM7XG4gICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5GT0xERVI7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5JTlRFUkNPTk5FQ1RFRF9QUk9DRVNTRVM7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLlBST0NFU1NfSUR9OiAke2l0ZW0uaXRlbU51bWJlcklkfTsgJHtpdGVtLnN0YXR1c05hbWV9YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5ET0NVTUVOVF9JRH06ICR7aXRlbS5pdGVtTnVtYmVySWR9OyAke2l0ZW0uc3RhdHVzTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICBpZDogc2VsZWN0ZWROb2RlLmlkLFxuICAgICAgICBpdGVtTmFtZTogbm9kZS5pdGVtTmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcbiAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgIGl0ZW1UeXBlOiBzZWxlY3RlZE5vZGUuaXRlbVR5cGUsXG4gICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IHNlbGVjdGVkTm9kZS5pdGVtTnVtYmVySWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcbiAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShub2RlLmlkLCBub2RlLnBhcmVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc05vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcbiAgICBpdGVtLmlkID0gbm9kZS5pZDtcbiAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcbiAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xuICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XG4gICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhKVxuICAgICAgdGhpcy5vbkV4cGFuZFByb2Nlc3NBcmVhLmVtaXQoaXRlbSk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgY2FuU2hvd1NlYXJjaE9wdGlvbihtb2R1bGVJZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkKS5sZW5ndGg7XG4gIH1cblxuICBzZWxlY3ROb2RlVHJlZUV2ZW50KG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xuICAgIGlmICghbm9kZS5pdGVtVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcbiAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4Lml0ZW1UeXBlID09PSBub2RlLml0ZW1UeXBlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICBpZDogbm9kZS5pZCxcbiAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXG4gICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICBpdGVtVHlwZTogbm9kZS5pdGVtVHlwZSxcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGV0IGl0ZW06IE5ld1RyZWVNb2RlbDtcbiAgICAgIGxldCBzdGF0dXMgPSAwO1xuICAgICAgbGV0IHN0YXR1c05hbWUgPSAnJztcbiAgICAgIGlmIChub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMi5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGExLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT0gbm9kZS5leHBhbmRhYmxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHN0YXR1c05hbWUgPSBpdGVtLnN0YXR1c05hbWU7XG4gICAgICAgIHN0YXR1cyA9IGl0ZW0uc3RhdHVzSWQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZSh7XG4gICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcbiAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBzdGF0dXNOYW1lOiBzdGF0dXNOYW1lLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXG4gICAgICAgIHN2Z0ljb246IGl0ZW0uc3ZnSWNvblxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkRGF0YShub2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXRDaGlsZE5vZGVTZWxlY3RPbmUobGlzdENoaWxkcmVuKSB7XG4gICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBbXTtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IGxpc3RDaGlsZHJlbjtcbiAgfVxuXG4gIGdldEl0ZW1PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUsIHR5cGU6IERhdGFUeXBlKSB7XG4gICAgaWYgKHRoaXMuc3BsaXRWaWV3KSB7XG4gICAgICBjb25zdCBwYXJlbnRUZXh0cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0LW5vZGUtcGFyZW50Jyk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwocGFyZW50VGV4dHMsIChlbCkgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUtaXRlbScpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChpdGVtRWxlbWVudCwgKGVsKSA9PiB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1pdGVtJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xuICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuRE9DVU1FTlRTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgIHRoaXMuc3BsaXRWaWV3VGl0bGUgPSBgJHt0aGlzLkxBTkcuTUVTU0FHRS5QUk9DRVNTRVNfSU4udG9VcHBlckNhc2UoKX0gXCIke25vZGUubmFtZX1cImA7XG4gICAgICB9XG4gICAgICBsZXQgaXRlbSA9IG5ldyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKCk7XG4gICAgICBpdGVtLmlkID0gbm9kZS5pZDtcbiAgICAgIGl0ZW0uaXRlbVR5cGUgPSB0eXBlO1xuICAgICAgaXRlbS5pdGVtTmFtZSA9IG5vZGUubmFtZTtcbiAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XG4gICAgICBpdGVtLnN2Z0ljb24gPSBub2RlLnN2Z0ljb247XG4gICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcbiAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xuICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcbiAgICAgIHRoaXMub25TZWxlY3RGb2xkZXJJdGVtLmVtaXQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgaGFzU2VsZWN0ZWQocmVsYXRlZDogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xuICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gIHRvUmVsYXRlZE9wdGlvbnMocmVsYXRlZHM6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSk6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSB7XG4gICAgY29uc3QgcmVzdWx0czogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XG4gICAgZm9yIChjb25zdCByZWxhdGVkIG9mIHJlbGF0ZWRzKSB7XG4gICAgICByZXN1bHRzLnB1c2goeyAuLi5yZWxhdGVkLCBkaXNhYmxlZDogdGhpcy5oYXNTZWxlY3RlZChyZWxhdGVkKSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBpZFRvQ2hlY2tTZWxlY3RPbmUoaWQ6IHN0cmluZywgcGFyZW50SWQ6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtpZH0tJHtwYXJlbnRJZH1gO1xuICB9XG59XG4iXX0=
839
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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WUFDZixZQUFZO1lBUVosc0JBQXNCO1lBYjBCLFVBQVU7WUFrQjFELDhCQUE4Qix1QkF5RmxDLE1BQU0sU0FBQyxlQUFlOzs7d0JBZnhCLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxFQUFFOzJCQUVqQyxTQUFTLFNBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkE4Q25GLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEksIFAgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW0vZG9jdW1lbnQtbm9kZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUmVsYXRlZENvbnN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL3JlbGF0ZWQuY29uc3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBOZXdUcmVlTW9kZWwgfSBmcm9tICcuLi90cmVlTmV3L21vZGVsL3RyZWUubW9kZWwnO1xuaW1wb3J0IHsgTmV3VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3RyZWVOZXcvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvcG9wLXVwLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0ZWQtcHJvY2Vzcy1kb2N1bWVudC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LWdsb2JhbC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBMQU5HOiBhbnk7XG4gIG1vZHVsZUlkID0gMDtcbiAgbW9kdWxlTmFtZSA9ICcnO1xuICB0cmVlRGF0YTE6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcbiAgdHJlZURhdGEyOiBBcnJheTxOZXdUcmVlTW9kZWw+ID0gW107XG4gIHRyZWVDb25maWcxOiBUcmVlQ29uZmlnO1xuICB0cmVlQ29uZmlnMjogVHJlZUNvbmZpZztcblxuICBjaGVja2VkTm9kZUxpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcbiAgc2VsZWN0ZWROb2RlOiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XG4gIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuICBzZWxlY3RlZERhdGEyOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XG5cbiAgY29tbW9uQ2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgZG9jdW1lbnRDaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuICBzaW5nbGVQcm9jZXNzTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xuICBzaW5nbGVEb2N1bWVudExpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcbiAgc3BsaXRWaWV3OiBib29sZWFuO1xuXG4gIG1vZHVsZSA9IE1vZHVsZVR5cGU7XG4gIGRhdGFUeXBlID0gRGF0YVR5cGU7XG4gIGl0ZW1UeXBlID0gMDtcbiAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XG4gIGRpc2FibGVkTGlzdDogYW55ID0gW107XG4gIGRpc2FibGVkTGlzdDI6IGFueSA9IFtdO1xuICBpc1NlbGVjdE9uZTogYm9vbGVhbjtcbiAgY2FuT25seVNlbGVjdEl0ZW06IGJvb2xlYW47XG5cbiAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcbiAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xuXG4gIHNlYXJjaE9yZGVyID0gW1xuICAgIHsga2V5OiAncHJvY2Vzc0ludGVyY29ubmVjdGVkJywgdmFsdWU6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCB9LFxuICAgIHsga2V5OiAncHJvY2VzcycsIHZhbHVlOiBEYXRhVHlwZS5wcm9jZXNzIH0sXG4gICAgeyBrZXk6ICdkb2N1bWVudCcsIHZhbHVlOiBEYXRhVHlwZS5kb2N1bWVudCB9LFxuICAgIHsga2V5OiAnYXJlYScsIHZhbHVlOiBEYXRhVHlwZS5hcmVhIH0sXG4gICAgeyBrZXk6ICdmb2xkZXInLCB2YWx1ZTogRGF0YVR5cGUuZm9sZGVyIH1cbiAgXTtcblxuICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyZWRPcHRpb25zOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcbiAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XG5cbiAgaXRlbUluU3BsaXR2aWV3OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcbiAgc2VsZWN0ZWRGb2xkZXI6IFRyZWVGbGF0Tm9kZSA9IG51bGw7XG4gIHNwbGl0Vmlld1RpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBsaXN0Q2hpbGRyZW5TZWxlY3RPbmU6IGFueSA9IFtdO1xuXG4gIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvblNlbGVjdEZvbGRlckl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XG4gIG9uRXhwYW5kUHJvY2Vzc0FyZWEgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XG4gIG9uRXhwYW5kRm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xuICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcbiAgdHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQ6IGFueTtcbiAgaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcbiAgaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZmFsc2U7XG4gIHRvb2x0aXBMb2NhdGlvblNlYXJjaFJlc3VsdCA9IGZhbHNlO1xuICBAVmlld0NoaWxkcmVuKE5ld1RyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxOZXdUcmVlQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXG4gIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBsaXN0Q2hlY2tlZFRvb2x0aXA6IGFueVtdID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudD4sXG4gICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhXG4gICkge1xuICAgIHRoaXMubW9kdWxlSWQgPSBkYXRhLm1vZHVsZUlkO1xuICAgIHRoaXMubW9kdWxlTmFtZSA9IGRhdGEubW9kdWxlTmFtZTtcbiAgICB0aGlzLnRyZWVEYXRhMSA9IGRhdGEudHJlZURhdGExO1xuICAgIHRoaXMudHJlZURhdGEyID0gZGF0YS50cmVlRGF0YTI7XG4gICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XG4gICAgdGhpcy50cmVlQ29uZmlnMiA9IGRhdGEudHJlZUNvbmZpZzI7XG4gICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhID0gZGF0YT8uc2VsZWN0ZWROb2RlIHx8IFtdO1xuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XG4gICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcbiAgICB0aGlzLmRpc2FibGVkTGlzdDIgPSBkYXRhLmRpc2FibGVkTGlzdDIgfHwgW107XG4gICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBkYXRhLmNoZWNrZWROb2RlTGlzdCB8fCBbXTtcbiAgICB0aGlzLnNwbGl0VmlldyA9IGRhdGEuc3BsaXRWaWV3O1xuICAgIHRoaXMuaXNTZWxlY3RPbmUgPSBkYXRhLmlzU2VsZWN0T25lO1xuICAgIHRoaXMuY2FuT25seVNlbGVjdEl0ZW0gPSBkYXRhLmNhbk9ubHlTZWxlY3RJdGVtO1xuICAgIHRoaXMuaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZGF0YS5oaWRlU3BsaXR2aWV3Q2hlY2tib3g7XG4gICAgdGhpcy50b29sdGlwTG9jYXRpb25TZWFyY2hSZXN1bHQgPSBkYXRhLnRvb2x0aXBMb2NhdGlvblNlYXJjaFJlc3VsdDtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSW50ZXJjb25uZWN0ZWRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShbXSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXG4gIG9uTWVzc2FnZShldmVudCkge1xuICAgIGlmIChldmVudC5kYXRhID09PSBSZWxhdGVkQ29uc3QuSElERV9TRUFSQ0hfUkVTVUxUKSB7XG4gICAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0YSgpO1xuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNlYXJjaFJlbGF0ZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudG9SZWxhdGVkT3B0aW9ucyhyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNwbGl0Vmlld1ZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IHJlcztcbiAgICAgIGlmIChyZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBsaXN0Tm9kZVByb2Nlc3M6IE5ld1RyZWVNb2RlbFtdID0gW107XG4gICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IE5ld1RyZWVNb2RlbFtdID0gW107XG5cbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgbGV0IG5ld05vZGVQcm9jZXNzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xuICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3MucGFyZW50SWQgPSBpdGVtLnBhcmVudElkO1xuICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3Muc3ZnSWNvbiA9IGl0ZW0uc3ZnSWNvbjtcbiAgICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xuICAgICAgICAgICAgbGlzdE5vZGVQcm9jZXNzLnB1c2gobmV3Tm9kZVByb2Nlc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xuICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIHRoaXMuaXNJbnB1dFZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvY2Vzc0FyZWFDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKSB7XG4gICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XG4gICAgICAgIHJlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCAuLi5ub3RTaG93bkNoaWxkcmVuXTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKSB7XG4gICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XG4gICAgICAgIHJlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCAuLi5ub3RTaG93bkNoaWxkcmVuXTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XG4gIH1cblxuICBzZXRTZWxlY3RlZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGV4cGFuZGFibGU6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGhhc0NoaWxkOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0RG9jdW1lbnQucHVzaChuZXdOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcbiAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4udGhpcy5zZWxlY3RlZERhdGEyXTtcbiAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZSh0aGlzLmNoZWNrZWROb2RlTGlzdFswXS5pZCwgdGhpcy5jaGVja2VkTm9kZUxpc3RbMF0ucGFyZW50SWQpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG4gICAgY29uc3QgdGVtcEFyciA9IFtdO1xuICAgIGNvbnN0IHRlbXBBcnJEb2N1bWVudCA9IFtdO1xuICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XG4gICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XG5cbiAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xuICAgIGlmICh0ZW1wQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRlbXBBcnJdO1xuICAgIH1cblxuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICB0ZW1wQXJyRG9jdW1lbnQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBuZXdTZWxlY3REb2N1bWVudExpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QgPSBuZXdTZWxlY3REb2N1bWVudExpc3Q7XG4gICAgaWYgKHRlbXBBcnJEb2N1bWVudC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGVtcEFyckRvY3VtZW50XTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgIGlmICghdGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRSZXN1bHRIZWlnaHQoYXJyPzogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdKSB7XG4gICAgbGV0IG1heEhlaWdodCA9IDQ4NDtcbiAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxpbmVfX2RpdmlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lX19kaXZpZGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHBvcHVwX2NvbnRlbnQgJiYgbGluZV9fZGl2aWRlcikge1xuICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXInKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB2aWV3cmVwb3J0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JlbGF0ZWQtdmlld3BvcnQnKVswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICh2aWV3cmVwb3J0cykge1xuICAgICAgaWYgKGNvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IDw9IG1heEhlaWdodCkge1xuICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubXlDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuaXNJbnB1dFZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoISFfdmFsKSB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnMobW9kdWxlSWQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZmlyc3RFbCA9IHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lW2luZGV4XTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IHNlY29uZEVsID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbal07XG4gICAgICAgICAgaWYgKGZpcnN0RWwuaWQgPT09IHNlY29uZEVsLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoeCA9PiB4Lml0ZW1UeXBlID09PSBtb2R1bGVJZCk7XG4gIH1cblxuICBzaG93U2VhcmNoUmVzdWx0KCkge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICB9XG5cbiAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHNlbGVjdFJlbGF0ZWQoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gW107XG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgJiYgeC5pdGVtVHlwZSA9PT0gaXRlbS5pdGVtVHlwZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCB8fCBpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xuICAgICAgICAvLyBkb2N1bWVudFxuICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0Mi5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcbiAgICAgICAgfSkgPj0gMDtcblxuICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGlzRXhpc3RJbkRpc2FibGVkID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgIHJldHVybiB4LmlkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgJiYgeC5pdGVtVHlwZSA9PT0gaXRlbS5pdGVtVHlwZSk7XG4gICAgICAgIH0pID49IDA7XG4gICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhZGROb2RlVG9UcmVlKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XG4gICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xuICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xuICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xuICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcbiAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XG4gICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZTtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgfHwgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgaWYgKHRoaXMudHJlZURhdGEyLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IG5ld05vZGVEb2NzLmV4cGFuZGFibGUpID49IDApIHtcbiAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIG5ld05vZGVEb2NzXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSkgPj0gMCkge1xuICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IFsuLi50aGlzLnRyZWVEYXRhMSwgbmV3Tm9kZURvY3NdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFRvQ2hlY2tsaXN0Tm9kZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xuICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcbiAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XG4gICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xuICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QgPSBbXTtcbiAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSk7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXG4gICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLm5hbWUsXG4gICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogbmV3Tm9kZURvY3MubGV2ZWxUeXBlLFxuICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxuICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5jb21tb25DaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IG5ld05vZGVEb2NzLmlkLFxuICAgICAgICAgICAgICBuYW1lOiBuZXdOb2RlRG9jcy5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IG5ld05vZGVEb2NzLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSxcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICBpdGVtTmFtZTogbmV3Tm9kZURvY3MubmFtZSxcbiAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXG4gICAgICAgIHBhcmVudElkOiBuZXdOb2RlRG9jcy5wYXJlbnRJZCxcbiAgICAgICAgcGFyZW50TmFtZTogaXRlbS5wYXJlbnROYW1lLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxuICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlLFxuICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxuICAgICAgICBzdGF0dXNOYW1lOiBpdGVtLnN0YXR1c05hbWUsXG4gICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgIGRpc3BsYXlJZDogTnVtYmVyLnBhcnNlRmxvYXQoaXRlbS5pdGVtTnVtYmVySWQpLFxuICAgICAgICBzdmdJY29uOiBpdGVtLnN2Z0ljb25cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcbiAgICAgICAgdGhpcy5pZENoZWNrSWNvblNwbGl0VmlldyA9IHRoaXMuaWRUb0NoZWNrU2VsZWN0T25lKGl0ZW0uaWQsIG5ld05vZGVEb2NzLnBhcmVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTZWxlY3RlZERhdGEoaXRlbTogVHJlZUZsYXROb2RlKSB7XG4gICAgY29uc3Qgc2VsZWN0UHJvY2VzcyA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdERvY3VtZW50ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcbiAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2Vzc107XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCAuLi5zZWxlY3REb2N1bWVudF07XG4gICAgfVxuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5mb2xkZXIgfHwgaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YTIuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gaXRlbS5leHBhbmRhYmxlKSA8IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgaXRlbV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSkgPCAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCBpdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xuICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcbiAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcbiAgICAgIGxldmVsOiAwLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcbiAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlXG4gICAgfSk7XG4gIH1cblxuICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcbiAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xuICB9XG5cbiAgb25DbG9zZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gW107XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfTtcblxuICBvbkFkZENsaWNrKCkge1xuICAgIC8vIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xuICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gW107XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5jaGVja2VkTm9kZUxpc3QpO1xuICB9XG5cbiAgZ2V0U3RhdHVzTmFtZShpZCkge1xuICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XG4gICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XG4gICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdHVzTmFtZTtcbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KHRyZWVOb2Rlcykge1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSBudWxsO1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT09IG51bGwgJiYgeC5uYW1lICE9PSAnJyk7XG5cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZVByb2Nlc3ModHJlZU5vZGVzKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzLmRhdGFOb2RlcyA9IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xuXG4gIH1cblxuICBnZXRTdGF0dXNEb2NzKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZURhdGEyLmZpbHRlcih4ID0+IHguaWQgPT09IGlkKVswXS5zdGF0dXNJZDtcbiAgfVxuXG4gIGdldFN0YXR1c1Byb2Nlc3MoaWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlRGF0YTEuZmlsdGVyKHggPT4geC5pZCA9PT0gaWQpWzBdLnN0YXR1c0lkO1xuICB9XG5cbiAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcblxuICAgIGVsbUhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChpbmNsdWRlTWFyZ2luKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgZWxtTWFyZ2luID0gcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Ub3AucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20ucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIH1cblxuICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcbiAgfVxuXG4gIGdldEl0ZW1DaGlwTmFtZShpdGVtOiBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pdGVtTmFtZTtcbiAgfVxuXG4gIGlzRWxsaXBzaXNBY3RpdmUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBjaGVja2VkTm9kZSA9IHRoaXMubGlzdENoZWNrZWRUb29sdGlwLmZpbmQoeCA9PiB4LmlkID09PSBpZCk7XG4gICAgaWYgKGNoZWNrZWROb2RlKSB7XG4gICAgICByZXR1cm4gY2hlY2tlZE5vZGUuY2hlY2tSZXN1bHQ7XG4gICAgfVxuICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBpZiAoZS5vZmZzZXRXaWR0aCA8IGUuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgdCA9IHsgaWQsIGNoZWNrUmVzdWx0OiB0cnVlIH07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdCA9IHsgaWQsIGNoZWNrUmVzdWx0OiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0Q2hlY2tlZFRvb2x0aXAucHVzaCh0KTtcbiAgICAgIHJldHVybiB0LmNoZWNrUmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXROb2RlSWNvbihpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XG4gICAgc3dpdGNoIChpdGVtLml0ZW1UeXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RlcGFydG1lbnRfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ3JlZ2lvbmFsX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Gb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2xvY2FsX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDoge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2RlcGFydG1lbnQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Ub3BGb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2VudGVycHJpc2UnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Gb2xkZXI6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2xvY2FsJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgcmV0dXJuICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnO1xuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgIHJldHVybiAncHJvY2Vzc19pbnRlcmNvbm5lY3RlZCc7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICB9XG4gIH1cblxuICBnZXRUaXRsZSh0eXBlOiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5QUk9DRVNTRVM7XG4gICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5ET0NVTUVOVFM7XG4gICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5GT0xERVI7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5JTlRFUkNPTk5FQ1RFRF9QUk9DRVNTRVM7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLlBST0NFU1NfSUR9OiAke2l0ZW0uaXRlbU51bWJlcklkfTsgJHtpdGVtLnN0YXR1c05hbWV9YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5ET0NVTUVOVF9JRH06ICR7aXRlbS5pdGVtTnVtYmVySWR9OyAke2l0ZW0uc3RhdHVzTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICBpZDogc2VsZWN0ZWROb2RlLmlkLFxuICAgICAgICBpdGVtTmFtZTogbm9kZS5pdGVtTmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcbiAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgIGl0ZW1UeXBlOiBzZWxlY3RlZE5vZGUuaXRlbVR5cGUsXG4gICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IHNlbGVjdGVkTm9kZS5pdGVtTnVtYmVySWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcbiAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKSB7XG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShub2RlLmlkLCBub2RlLnBhcmVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc05vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcbiAgICBpdGVtLmlkID0gbm9kZS5pZDtcbiAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcbiAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xuICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XG4gICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhKVxuICAgICAgdGhpcy5vbkV4cGFuZFByb2Nlc3NBcmVhLmVtaXQoaXRlbSk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgY2FuU2hvd1NlYXJjaE9wdGlvbihtb2R1bGVJZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkKS5sZW5ndGg7XG4gIH1cblxuICBzZWxlY3ROb2RlVHJlZUV2ZW50KG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xuICAgIGlmICghbm9kZS5pdGVtVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcbiAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4Lml0ZW1UeXBlID09PSBub2RlLml0ZW1UeXBlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICBpZDogbm9kZS5pZCxcbiAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXG4gICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICBpdGVtVHlwZTogbm9kZS5pdGVtVHlwZSxcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGV0IGl0ZW06IE5ld1RyZWVNb2RlbDtcbiAgICAgIGxldCBzdGF0dXMgPSAwO1xuICAgICAgbGV0IHN0YXR1c05hbWUgPSAnJztcbiAgICAgIGlmIChub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMi5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGExLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT0gbm9kZS5leHBhbmRhYmxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHN0YXR1c05hbWUgPSBpdGVtLnN0YXR1c05hbWU7XG4gICAgICAgIHN0YXR1cyA9IGl0ZW0uc3RhdHVzSWQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZSh7XG4gICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcbiAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBzdGF0dXNOYW1lOiBzdGF0dXNOYW1lLFxuICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXG4gICAgICAgIHN2Z0ljb246IGl0ZW0uc3ZnSWNvblxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkRGF0YShub2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXRDaGlsZE5vZGVTZWxlY3RPbmUobGlzdENoaWxkcmVuKSB7XG4gICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBbXTtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IGxpc3RDaGlsZHJlbjtcbiAgfVxuXG4gIGdldEl0ZW1PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUsIHR5cGU6IERhdGFUeXBlKSB7XG4gICAgaWYgKHRoaXMuc3BsaXRWaWV3KSB7XG4gICAgICBjb25zdCBwYXJlbnRUZXh0cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0LW5vZGUtcGFyZW50Jyk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwocGFyZW50VGV4dHMsIChlbCkgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUtaXRlbScpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChpdGVtRWxlbWVudCwgKGVsKSA9PiB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1pdGVtJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xuICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuRE9DVU1FTlRTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgIHRoaXMuc3BsaXRWaWV3VGl0bGUgPSBgJHt0aGlzLkxBTkcuTUVTU0FHRS5QUk9DRVNTRVNfSU4udG9VcHBlckNhc2UoKX0gXCIke25vZGUubmFtZX1cImA7XG4gICAgICB9XG4gICAgICBsZXQgaXRlbSA9IG5ldyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKCk7XG4gICAgICBpdGVtLmlkID0gbm9kZS5pZDtcbiAgICAgIGl0ZW0uaXRlbVR5cGUgPSB0eXBlO1xuICAgICAgaXRlbS5pdGVtTmFtZSA9IG5vZGUubmFtZTtcbiAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XG4gICAgICBpdGVtLnN2Z0ljb24gPSBub2RlLnN2Z0ljb247XG4gICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcbiAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xuICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcbiAgICAgIHRoaXMub25TZWxlY3RGb2xkZXJJdGVtLmVtaXQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgaGFzU2VsZWN0ZWQocmVsYXRlZDogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xuICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gIHRvUmVsYXRlZE9wdGlvbnMocmVsYXRlZHM6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSk6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSB7XG4gICAgY29uc3QgcmVzdWx0czogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XG4gICAgZm9yIChjb25zdCByZWxhdGVkIG9mIHJlbGF0ZWRzKSB7XG4gICAgICByZXN1bHRzLnB1c2goeyAuLi5yZWxhdGVkLCBkaXNhYmxlZDogdGhpcy5oYXNTZWxlY3RlZChyZWxhdGVkKSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBpZFRvQ2hlY2tTZWxlY3RPbmUoaWQ6IHN0cmluZywgcGFyZW50SWQ6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtpZH0tJHtwYXJlbnRJZH1gO1xuICB9XG59XG4iXX0=