qms-angular 1.1.39 → 1.1.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. package/bundles/qms-angular.umd.js +185 -69
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
  4. package/esm2015/lib/common/models/qms-tree-node.model.js +1 -1
  5. package/esm2015/lib/components/select-access-dialog/model/select-access-config.model.js +5 -1
  6. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +56 -11
  7. package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +2 -1
  8. package/esm2015/lib/components/select-department/select-department.component.js +3 -3
  9. package/esm2015/lib/components/select-department-tree/model/select-department-tree.config.js +2 -1
  10. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +90 -44
  11. package/esm2015/lib/components/select-department-tree/service/select-department-tree-global.service.js +7 -1
  12. package/esm2015/lib/components/treeNew/tree.component.js +3 -3
  13. package/esm2015/lib/model/no.js +2 -2
  14. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +4 -2
  15. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +2 -2
  16. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +4 -4
  17. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +6 -4
  18. package/fesm2015/qms-angular.js +172 -65
  19. package/fesm2015/qms-angular.js.map +1 -1
  20. package/lib/common/models/qms-flat-node.model.d.ts +4 -0
  21. package/lib/common/models/qms-tree-node.model.d.ts +8 -0
  22. package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +4 -0
  23. package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +2 -0
  24. package/lib/components/select-department/model/select-department-popup-data.model.d.ts +1 -0
  25. package/lib/components/select-department-tree/model/select-department-tree.config.d.ts +1 -0
  26. package/lib/components/select-department-tree/select-department-tree.component.d.ts +4 -0
  27. package/package.json +1 -1
  28. package/qms-angular.metadata.json +1 -1
  29. package/src/assets/jointjs/scss/bpmn.scss +9 -0
  30. package/src/lib/components/select-department/select-department.component.scss +1 -0
  31. package/src/lib/components/select-department-tree/select-department-tree.component.scss +23 -0
@@ -107,6 +107,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
107
107
  this.initTarget();
108
108
  this.initConnectionType();
109
109
  this.initLink();
110
+ this.bpmnService.isExpandedPanel = true;
111
+ this.bpmnService.isFullScreen = true;
110
112
  });
111
113
  }
112
114
  initTarget() {
@@ -813,7 +815,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
813
815
  QMSCKEditorBpmnComponent.decorators = [
814
816
  { type: Component, args: [{
815
817
  selector: 'qms-bpmn',
816
- template: "<div id=\"qmsckeditor-bpmn\" class=\"qmsckeditor qmsckeditor__bpmn__container\">\r\n <div id=\"qmsckeditor-load-template-header\">\r\n <span\r\n id=\"qmsckeditor-bpmn-header_001\"\r\n mat-icon-button\r\n class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <span\r\n id=\"qmsckeditor-bpmn-header_002\"\r\n mat-icon-button\r\n class=\"qmsckeditor button__done\"\r\n (click)=\"onInsertImage()\"\r\n >\r\n <mat-icon>done</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-load-template-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-template_002_001\">\r\n {{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div id=\"bpmn\" class=\"bpmn__editor\">\r\n <div id=\"toolbarpanel\">\r\n <div id=\"toolbar-container\"></div>\r\n </div>\r\n <div id=\"leftpanel\">\r\n <div id=\"paperpanel\">\r\n <div id=\"paper-container\"></div>\r\n </div>\r\n <div id=\"stencilpanel\">\r\n <mat-expansion-panel\r\n id=\"panel-stencil-container\"\r\n [expanded]=\"expandedPanel\"\r\n (click)=\"expandPanel()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div id=\"stencil-container\"></div>\r\n </mat-expansion-panel>\r\n <!-- <div id=\"stencil-container\"></div> -->\r\n </div>\r\n </div>\r\n <div id=\"rightpanel\">\r\n <mat-tab-group\r\n mat-stretch-tabs\r\n mat-align-tabs=\"center\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <mat-tab\r\n [label]=\"LANG.BPMN.PROPERTIES\"\r\n id=\"qmsckeditor_bpmn_properties\"\r\n >\r\n <div id=\"inspector-container\"></div>\r\n <!-- <div class=\"about\" *ngIf=\"!selectedCellView\">\r\n <h1>{{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}</h1>\r\n </div> -->\r\n </mat-tab>\r\n <mat-tab\r\n [label]=\"LANG.BPMN.CONNECTION\"\r\n id=\"qmsckeditor_bpmn_connection\"\r\n >\r\n <!-- <div class=\"about\" *ngIf=\"!selectedCellView\">\r\n <h1>{{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}</h1>\r\n </div> -->\r\n <mat-expansion-panel\r\n id=\"qmsckeditor_bpmn_connection_panel\"\r\n [expanded]=\"true\"\r\n (opened)=\"(true)\"\r\n (closed)=\"(false)\"\r\n hideToggle\r\n *ngIf=\"!!selectedCellView\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ LANG.BPMN.CONNECTION }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmsckeditor_bpmn_connection_panel_001\" class=\"col-12 mt8\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ANCHOR_BY_NAME }}</mat-label>\r\n <mat-select\r\n [(ngModel)]=\"connectionType\"\r\n name=\"connectionType\"\r\n (ngModelChange)=\"onConnectionTypeChange()\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of connectionTypes\"\r\n [value]=\"item.id\"\r\n disableOptionCentering\r\n >\r\n {{ item.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_002\"\r\n class=\"col-12 mt8 connection-wrapper\"\r\n *ngIf=\"!!link\"\r\n >\r\n <mat-card class=\"mat-card-wrapper\">\r\n <div class=\"row\">\r\n <div class=\"col-1 mt-n4\">\r\n <mat-icon aria-hidden=\"true\" class=\"fs32\">{{\r\n link.icon\r\n }}</mat-icon>\r\n </div>\r\n <div class=\"col-11 connection-content\">\r\n <div>\r\n <mat-card-title class=\"fs16\">{{\r\n link.title\r\n }}</mat-card-title>\r\n <mat-card-subtitle>{{ link.content }}</mat-card-subtitle>\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon (click)=\"removeLink()\">close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_003\"\r\n class=\"col-12 mt24\"\r\n *ngIf=\"!!link && link.documentType === 1\"\r\n >\r\n <div class=\"row\">\r\n <div class=\"col-10\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12\">\r\n <mat-label>{{\r\n LANG.BPMN.CHOOSE_ANCHOR_IN_TEXT_OPTIONAL\r\n }}</mat-label>\r\n <mat-label *ngIf=\"isLoadingDocumentAnchor\">\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </mat-label>\r\n <mat-select\r\n [(ngModel)]=\"anchorByName\"\r\n name=\"anchorByName\"\r\n (ngModelChange)=\"onAnchorByNameChange()\"\r\n disableOptionCentering\r\n >\r\n <mat-option\r\n *ngIf=\"\r\n documentAnchors === null ||\r\n documentAnchors.length == 0\r\n \"\r\n disabled\r\n ></mat-option>\r\n <mat-option\r\n *ngFor=\"let docAnchor of documentAnchors\"\r\n [value]=\"docAnchor.anchorValue\"\r\n >\r\n {{ docAnchor.viewValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-2 mt8 pa0\">\r\n <button\r\n mat-raised-button\r\n [matTooltip]=\"LANG.BPMN.RELOAD_ANCHORS\"\r\n (click)=\"reloadAnchors()\"\r\n [disabled]=\"isLoadingDocumentAnchor\"\r\n >\r\n <mat-icon>autorenew</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_004\"\r\n class=\"col-12 mt8\"\r\n *ngIf=\"!!link\"\r\n >\r\n <mat-form-field appearance=\"fill\" class=\"col-12\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TARGET }}</mat-label>\r\n <mat-select\r\n [(ngModel)]=\"selectedTarget\"\r\n name=\"selectedTarget\"\r\n disableOptionCentering\r\n >\r\n <mat-option\r\n *ngFor=\"let target of targets\"\r\n [value]=\"target.id\"\r\n >\r\n {{ target.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n </div>\r\n </div>\r\n</div>\r\n",
818
+ template: "<div id=\"qmsckeditor-bpmn\" class=\"qmsckeditor qmsckeditor__bpmn__container\">\r\n <div id=\"qmsckeditor-load-template-header\">\r\n <span\r\n id=\"qmsckeditor-bpmn-header_001\"\r\n mat-icon-button\r\n class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <span\r\n id=\"qmsckeditor-bpmn-header_002\"\r\n mat-icon-button\r\n class=\"qmsckeditor button__done\"\r\n (click)=\"onInsertImage()\"\r\n >\r\n <mat-icon>done</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-load-template-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-template_002_001\">\r\n {{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div id=\"bpmn\" class=\"bpmn__editor\">\r\n <div id=\"toolbarpanel\">\r\n <div id=\"toolbar-container\"></div>\r\n </div>\r\n <div id=\"leftpanel\" class=\"full-screen-bpmn-editor_panel\">\r\n <div id=\"paperpanel\" class=\"full-screen-bpmn-editor_paperpanel\">\r\n <div id=\"paper-container\"></div>\r\n </div>\r\n <div id=\"stencilpanel\">\r\n <mat-expansion-panel\r\n id=\"panel-stencil-container\"\r\n [expanded]=\"expandedPanel\"\r\n (click)=\"expandPanel()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div id=\"stencil-container\"></div>\r\n </mat-expansion-panel>\r\n <!-- <div id=\"stencil-container\"></div> -->\r\n </div>\r\n </div>\r\n <div id=\"rightpanel\" class=\"full-screen-bpmn-editor_panel\">\r\n <mat-tab-group\r\n mat-stretch-tabs\r\n mat-align-tabs=\"center\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <mat-tab\r\n [label]=\"LANG.BPMN.PROPERTIES\"\r\n id=\"qmsckeditor_bpmn_properties\"\r\n >\r\n <div id=\"inspector-container\"></div>\r\n <!-- <div class=\"about\" *ngIf=\"!selectedCellView\">\r\n <h1>{{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}</h1>\r\n </div> -->\r\n </mat-tab>\r\n <mat-tab\r\n [label]=\"LANG.BPMN.CONNECTION\"\r\n id=\"qmsckeditor_bpmn_connection\"\r\n >\r\n <!-- <div class=\"about\" *ngIf=\"!selectedCellView\">\r\n <h1>{{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}</h1>\r\n </div> -->\r\n <mat-expansion-panel\r\n id=\"qmsckeditor_bpmn_connection_panel\"\r\n [expanded]=\"true\"\r\n (opened)=\"(true)\"\r\n (closed)=\"(false)\"\r\n hideToggle\r\n *ngIf=\"!!selectedCellView\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ LANG.BPMN.CONNECTION }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmsckeditor_bpmn_connection_panel_001\" class=\"col-12 mt8\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ANCHOR_BY_NAME }}</mat-label>\r\n <mat-select\r\n [(ngModel)]=\"connectionType\"\r\n name=\"connectionType\"\r\n (ngModelChange)=\"onConnectionTypeChange()\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of connectionTypes\"\r\n [value]=\"item.id\"\r\n disableOptionCentering\r\n >\r\n {{ item.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_002\"\r\n class=\"col-12 mt8 connection-wrapper\"\r\n *ngIf=\"!!link\"\r\n >\r\n <mat-card class=\"mat-card-wrapper\">\r\n <div class=\"row\">\r\n <div class=\"col-1 mt-n4\">\r\n <mat-icon aria-hidden=\"true\" class=\"fs32\">{{\r\n link.icon\r\n }}</mat-icon>\r\n </div>\r\n <div class=\"col-11 connection-content\">\r\n <div>\r\n <mat-card-title class=\"fs16\">{{\r\n link.title\r\n }}</mat-card-title>\r\n <mat-card-subtitle>{{ link.content }}</mat-card-subtitle>\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon (click)=\"removeLink()\">close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_003\"\r\n class=\"col-12 mt24\"\r\n *ngIf=\"!!link && link.documentType === 1\"\r\n >\r\n <div class=\"row\">\r\n <div class=\"col-10\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12\">\r\n <mat-label>{{\r\n LANG.BPMN.CHOOSE_ANCHOR_IN_TEXT_OPTIONAL\r\n }}</mat-label>\r\n <mat-label *ngIf=\"isLoadingDocumentAnchor\">\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </mat-label>\r\n <mat-select\r\n [(ngModel)]=\"anchorByName\"\r\n name=\"anchorByName\"\r\n (ngModelChange)=\"onAnchorByNameChange()\"\r\n disableOptionCentering\r\n >\r\n <mat-option\r\n *ngIf=\"\r\n documentAnchors === null ||\r\n documentAnchors.length == 0\r\n \"\r\n disabled\r\n ></mat-option>\r\n <mat-option\r\n *ngFor=\"let docAnchor of documentAnchors\"\r\n [value]=\"docAnchor.anchorValue\"\r\n >\r\n {{ docAnchor.viewValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-2 mt8 pa0\">\r\n <button\r\n mat-raised-button\r\n [matTooltip]=\"LANG.BPMN.RELOAD_ANCHORS\"\r\n (click)=\"reloadAnchors()\"\r\n [disabled]=\"isLoadingDocumentAnchor\"\r\n >\r\n <mat-icon>autorenew</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n id=\"qmsckeditor_bpmn_connection_panel_004\"\r\n class=\"col-12 mt8\"\r\n *ngIf=\"!!link\"\r\n >\r\n <mat-form-field appearance=\"fill\" class=\"col-12\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TARGET }}</mat-label>\r\n <mat-select\r\n [(ngModel)]=\"selectedTarget\"\r\n name=\"selectedTarget\"\r\n disableOptionCentering\r\n >\r\n <mat-option\r\n *ngFor=\"let target of targets\"\r\n [value]=\"target.id\"\r\n >\r\n {{ target.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n </div>\r\n </div>\r\n</div>\r\n",
817
819
  styles: [":host ::ng-deep .qmsckeditor__bpmn__container .bpmn__editor{width:100%;height:600px}:host ::ng-deep .qmsckeditor__bpmn__container #leftpanel{float:left;width:70%;height:550px}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel{float:right;width:30%;height:550px;border:solid;border-width:0 1px 1px 0;overflow-y:auto}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .textarea-field{display:flex;justify-content:space-between}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .range-field{height:40px;margin-bottom:15px}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .units{font-size:12px}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .connection-wrapper{padding-bottom:1.34375em}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .connection-wrapper .mat-card-wrapper{padding-right:0}:host ::ng-deep .qmsckeditor__bpmn__container #rightpanel .connection-wrapper .connection-content{display:flex;justify-content:space-between}:host ::ng-deep .qmsckeditor__bpmn__container #toolbarpanel{position:relative;top:0;bottom:0;left:0;right:0;margin-bottom:16px;height:50px;width:100%}:host ::ng-deep .qmsckeditor__bpmn__container #paperpanel{position:relative;top:0;bottom:0;left:0;right:0;height:400px;width:100%}:host ::ng-deep .qmsckeditor__bpmn__container #stencilpanel{position:relative;top:0;bottom:0;left:0;right:0;height:150px;width:100%}:host ::ng-deep .qmsckeditor__bpmn__container #toolbar-container{position:relative;top:0;bottom:0;left:0;right:0;width:100%;height:100%}:host ::ng-deep .qmsckeditor__bpmn__container #paper-container{position:relative;top:0;bottom:0;left:0;right:0;width:100%;height:inherit}:host ::ng-deep .qmsckeditor__bpmn__container #inspector-container{position:relative;top:0;right:0;bottom:0;width:100%;background:#fff}:host ::ng-deep .qmsckeditor__bpmn__container #stencil-container{position:absolute;top:0;bottom:0;left:0;right:0;width:1174px;height:inherit}:host ::ng-deep .qmsckeditor__bpmn__container #statusbar-container{position:absolute;left:0;right:0;bottom:0;height:25px}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container{position:absolute;left:0;right:0;bottom:0;height:150px;overflow-x:auto;overflow-y:hidden;background-image:url(\"data:image/png;base64,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\");background-repeat:repeat;transition:all .5s ease-in-out 0s}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container .mat-expansion-panel-header-title{color:#fff}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container .joint-theme-default{background:none}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container .mat-expansion-indicator:after{color:#fff;transform:rotate(-135deg)}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container .mat-expansion-panel-header{min-width:1224px;max-width:100%}:host ::ng-deep .qmsckeditor__bpmn__container #panel-stencil-container .joint-stencil>.content{width:1200px}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item .input-wrapper input{width:70%;float:none}:host ::ng-deep .qmsckeditor__bpmn__container .object-property[data-property$=\"/fill\"]{width:100%}:host ::ng-deep .qmsckeditor__bpmn__container .object-property[data-property$=\"/stroke\"]{width:100%}:host ::ng-deep .qmsckeditor__bpmn__container .field[data-field$=\"/fill\"]{width:100%}:host ::ng-deep .qmsckeditor__bpmn__container .field[data-field$=\"/stroke\"]{width:100%}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item:nth-child(odd){background:#ecefff;background:-webkit-gradient(left,#ecefff 0,#fafafa 100%);background:linear-gradient(270deg,#91a1c9 0,#fafafa);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#ECEFFF\",endColorstr=\"#3571b0\",GradientType=0)}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item:nth-child(2n){background:#ecefff;background:-webkit-gradient(left,#ecefff 0,#fafafa 100%);background:linear-gradient(270deg,#91a1c9 0,#fafafa);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#ECEFFF\",endColorstr=\"#3571b0\",GradientType=0)}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item .list-item:nth-child(odd){background:#eceff7;background:-webkit-gradient(left,#eceff7 0,#eceff7 100%);background:linear-gradient(270deg,#eceff7 0,#eceff7);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#eceff7\",endColorstr=\"#eceff7\",GradientType=0)}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item .list-item:nth-child(2n){background:#eceff7;background:-webkit-gradient(left,#eceff7 0,#eceff7 100%);background:linear-gradient(270deg,#eceff7 0,#eceff7);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#eceff7\",endColorstr=\"#eceff7\",GradientType=0)}:host ::ng-deep .qmsckeditor__bpmn__container .joint-inspector.joint-theme-bpmn .list-item{border-radius:10px;box-shadow:0 1px 1px 1px rgba(0,0,0,.2)}"]
818
820
  },] }
819
821
  ];
@@ -832,4 +834,4 @@ QMSCKEditorBpmnComponent.propDecorators = {
832
834
  ckEditor: [{ type: Input }],
833
835
  onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
834
836
  };
835
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUs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QixzQkFBc0I7WUFNdEIsd0JBQXdCO1lBR3hCLHdCQUF3QjtZQS9CYixZQUFZO1lBcUJ2QixtQkFBbUIsdUJBNkZuQixNQUFNLFNBQUMsZUFBZTs7O3VCQXZDMUIsS0FBSzt3QkFnREwsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnRcIjtcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdFwiO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4ubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWRpYWxvZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXNhdmUtYXMtdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2R1bGUvY29uZmlybS9xbXMtY2tlZGl0b3ItY29uZmlybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWFwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJwbW5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2F2ZVRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vc2F2ZS10ZW1wbGF0ZS9zYXZlLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUYXJnZXRUeXBlTmFtZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUmVsYXRlZENvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1yZWxhdGlvbi9xbXNja2VkaXRvci1yZWxhdGVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpbmtBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWxpbmsvYXR0YWNobWVudHMvbGluay1hdHRhY2htZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBhcmFtZXRlci5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUmVsYXRpb24gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1yZWxhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2RvY3VtZW50LXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaW5rQW5jaG9yIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9saW5rLWFuY2hvci5lbnVtXCI7XHJcbmltcG9ydCB7IENLRWRpdG9yTGlua0NvbnN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJzXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdXBsb2FkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9GaWxlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZmlsZUhlbHBlclwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5FeHBhbmQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2NrZWRpdG9yLWJwbW4tZXhwYW5kLmVudW1cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcclxuXHJcbi8vVE9ETzogbW92ZSB0byBjb21tb24gZm9sZGVyXHJcbmludGVyZmFjZSBJVGFyZ2V0IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ29ubmVjdGlvblR5cGUge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuLy9UT0RPOiBtb3ZlIHRvIGNvbW1vbiBmb2xkZXJcclxuaW50ZXJmYWNlIElBbmNob3Ige1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuICAgIHZpZXdWYWx1ZTogc3RyaW5nO1xyXG4gICAgYW5jaG9yVmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuY2xhc3MgSUxpbmsge1xyXG4gICAgdGFyZ2V0OiBUYXJnZXRUeXBlTmFtZTtcclxuICAgIHVybDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRvY3VtZW50VHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGU7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgICAgIHRoaXMudXJsID0gJyc7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuY29udGVudCA9ICcnO1xyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncW1zLWJwbW4nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBASW5wdXQoKSBja0VkaXRvcjogYW55O1xyXG4gICAganNvbkNvbnRlbnQ6IHN0cmluZztcclxuICAgIGV4cGFuZGVkUGFuZWwgPSB0cnVlO1xyXG4gICAgaWQgPSAnJztcclxuICAgIG1vZHVsZTogbnVtYmVyO1xyXG4gICAgZW50aXR5SWQgPSAnJztcclxuICAgIGVkaXRvckNvbnRlbnQgPSAnJztcclxuXHJcbiAgICBicG1uOiBRTVNDS0VkaXRvckJwbW4gPSBuZXcgUU1TQ0tFZGl0b3JCcG1uKCk7XHJcbiAgICBicG1uVGVtbGF0ZXM6IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10gPSBbXTtcclxuXHJcbiAgICBjb25uZWN0aW9uVHlwZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZTtcclxuICAgIHNlbGVjdGVkQ29ubmVjdGlvblR5cGU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGU7XHJcbiAgICB0YXJnZXRzOiBJVGFyZ2V0W10gPSBbXTtcclxuICAgIGNvbm5lY3Rpb25UeXBlczogSUNvbm5lY3Rpb25UeXBlW10gPSBbXTtcclxuXHJcbiAgICBzZWxlY3RlZFRhcmdldDogVGFyZ2V0VHlwZU5hbWUgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICBsaW5rVXJsID0gJyc7XHJcbiAgICBsaW5rVGl0bGUgPSAnJztcclxuICAgIGFuY2hvckJ5TmFtZSA9ICcnO1xyXG4gICAgbGlua0ljb24gPSAnJztcclxuICAgIGxpbmtJZDogc3RyaW5nID0gJyc7XHJcbiAgICBkb2N1bWVudFR5cGU6IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlID0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXI7XHJcbiAgICBkb2N1bWVudEljb25zOiBhbnk7XHJcblxyXG4gICAgbGluazogSUxpbms7XHJcbiAgICBkb2N1bWVudEFuY2hvcnM6IElBbmNob3JbXTtcclxuICAgIGlzTG9hZGluZ0RvY3VtZW50QW5jaG9yOiBib29sZWFuO1xyXG4gICAgc2VsZWN0ZWRDZWxsVmlldzogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYnBtblNlcnZpY2U6IEJwbW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYnBtbkFwaVNlcnZpY2U6IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsaW5rU2VydmljZTogUU1TQ0tFZGl0b3JMaW5rU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IFFNU0NLRWRpdG9yQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFFNU0NLRWRpdG9yQnBtbkRhdGFcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pZCA9IGRhdGEuaWQ7XHJcbiAgICAgICAgdGhpcy5tb2R1bGUgPSBkYXRhLm1vZHVsZTtcclxuICAgICAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBkYXRhLmVkaXRvckNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmVBc1RlbXBsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGVtcGxhdGUodGhpcy5MQU5HLkJQTU4uREVMRVRFX1RFTVBMQVRFLCB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9URU1QTEFURSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0Lk1VU1RfU0VMRUNUX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGhpcy5MQU5HLkJQTU4uU0VMRUNUX1RFTVBMQVRFLCB0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEVfSU5GT1JNQVRJT04sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5DSEFOR0lOR19URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5SRVNFVF9URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVzZXRUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZXRlZENlbGxWaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJwbW5UZW1sYXRlcyA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnBtblNlcnZpY2UuYnVpbGREaWFncmFtKFxyXG4gICAgICAgICAgICB0aGlzLmJwbW5UZW1sYXRlcyxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQ0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU4sXHJcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgIHRoaXMuTEFOR1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pbml0RG9jdW1lbnRJY29ucygpO1xyXG4gICAgICAgIHRoaXMuaW5pdFRhcmdldCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0TGluaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRUYXJnZXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IGlkOiBUYXJnZXRUeXBlTmFtZS5uZXcsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJUR0VUX05FVyB9KTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyBpZDogVGFyZ2V0VHlwZU5hbWUuc2FtZSwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TQU1FIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0Q29ubmVjdGlvblR5cGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblR5cGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcywgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkRPQ1VNRU5UX1BST0NFU1MgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdERvY3VtZW50SWNvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zID0ge307XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50XSA9ICd0ZXh0X3NuaXBwZXQnO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzXSA9ICdhY2NvdW50X3RyZWUnO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhXSA9ICdmb2xkZXInO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5mb2xkZXJdID0gJ2ZvbGRlcic7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyXSA9ICd0ZXh0X3NuaXBwZXQnO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRMaW5rKCkge1xyXG4gICAgICAgIHRoaXMubGluayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5saW5rSWQgPSAnJztcclxuICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgICAgIHRoaXMubGlua0ljb24gPSB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXJdXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICB0aGlzLmFuY2hvckJ5TmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubGlua1RpdGxlID0gJyc7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEFuY2hvcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBleHBhbmRQYW5lbCgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUGFuZWwgPSAhdGhpcy5leHBhbmRlZFBhbmVsO1xyXG4gICAgICAgIHRoaXMuYnBtblNlcnZpY2UuaXNFeHBhbmRlZFBhbmVsID0gIXRoaXMuYnBtblNlcnZpY2UuaXNFeHBhbmRlZFBhbmVsO1xyXG4gICAgICAgIGNvbnN0IHBhbmVsU3RlbmNpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYW5lbC1zdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgICAgICBpZiAoIXBhbmVsU3RlbmNpbClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBwYXBlckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk7XHJcbiAgICAgICAgY29uc3Qgc3RlbmNpbENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVuY2lscGFuZWwnKTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmNoZWNrQ2FzZUJwbW5FeHBhbmRQYW5lbCgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLmlzRnVsbFNjcmVlbkFuZG5vdEV4cGFuZFBhbmVsOlxyXG4gICAgICAgICAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgICAgICAgICBwYW5lbFN0ZW5jaWwuc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJDb250YWluZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcclxuICAgICAgICAgICAgICAgIHBhcGVyQ29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLmlzRnVsbFNjcmVlbkFuZGlzRXhwYW5kUGFuZWw6XHJcbiAgICAgICAgICAgICAgICBzdGVuY2lsQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XHJcbiAgICAgICAgICAgICAgICBwYW5lbFN0ZW5jaWwuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhcGVyQ29udGFpbmVyPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XHJcbiAgICAgICAgICAgICAgICBwYXBlckNvbnRhaW5lcj8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5ub3RGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw6XHJcbiAgICAgICAgICAgICAgICBzdGVuY2lsQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhbmVsU3RlbmNpbC5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgICAgICAgICBwYXBlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTAwcHgnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5ub3RGdWxsU2NyZWVuQW5kaXNFeHBhbmRQYW5lbDpcclxuICAgICAgICAgICAgICAgIHN0ZW5jaWxDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhbmVsU3RlbmNpbC5zdHlsZS5oZWlnaHQgPSAnMTUwcHgnO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRUZW1wbGF0ZXMoKTogUHJvbWlzZTxRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5icG1uR2V0VGVtcGxhdGVzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRCcG1uQnlJZChpZClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0Lmpzb25Db250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaE9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnBtbiA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkID8gdGhpcy5pZCA6IGd1aWRIZWxwZXIuZW1wdHksXHJcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBpc1RlbXBsYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SW1hZ2VDb250ZW50KHBhcGVyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgcGFwZXIudG9QTkcoKGltYWdlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyU3RyaW5nID0gaW1hZ2VEYXRhLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGFyclN0cmluZ1sxXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uSW5zZXJ0SW1hZ2UoKSB7XHJcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgICAgIGNvbnN0IHBhcGVyID0gd2luZG93W2BwYXBlcmBdO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBwYXBlci5wYXBlclRvTG9jYWxSZWN0KHBhcGVyLmdldENvbnRlbnRCQm94KCkpO1xyXG4gICAgICAgIGNvbnN0IGdyYXBoT2JqZWN0ID0gZ3JhcGgudG9KU09OKCk7XHJcbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpO1xyXG4gICAgICAgIGNvbnN0IGltYWdlQ29udGVudCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGF3YWl0IHRoaXMuZ2V0SW1hZ2VDb250ZW50KHBhcGVyKTtcclxuICAgICAgICBjb25zdCBmaWxlID0gYmFzZTY0U3RyaW5nVG9GaWxlKGltYWdlQ29udGVudCwgYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGgsIHBhcGVyLCBncmFwaE9iamVjdC5jZWxscyk7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VtYXAgPSB0aGlzLnRvSW1hZ2VNYXAoaWQsIGdyYXBoT2JqZWN0LmNlbGxzLCBjbGllbnRSZWN0KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB7IGtleTogYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCwgdmFsdWVzOiByZWxhdGl2ZVVybCwgaW1hZ2VtYXA6IGltYWdlbWFwIH1cclxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbG9zZURpYWxvZygpIHtcclxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlTGluaygpIHtcclxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XHJcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9ET0NVTUVOVF9PUl9QUk9DRVNTO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dDb25maXJtRGlhbG9nKHRpdGxlLCBjb250ZW50LCBmYWxzZSwgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IHRydWUgfHwgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0NvbmZpcm1lZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcclxuICAgICAgICBpZiAodGhpcy5saW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGhpcy5MQU5HLlFNU0NLRURJVE9SLklORk9STUFUSU9OLCB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9FWElTVElOR19DT05ORUNUSU9OLCB0cnVlLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbm5lY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkhhbmRib29rRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkF0dGFjaG1lbnREaWFsb2coKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQW5jaG9yQnlOYW1lQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuSGFuZGJvb2tEaWFsb2coaXNPbmx5RG9jdW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUmVsYXRpb24oKTtcclxuICAgICAgICBkYXRhLmlzT25seURvY3VtZW50ID0gaXNPbmx5RG9jdW1lbnQ7XHJcbiAgICAgICAgZGF0YS5pc0VuYWJsZUZvbGRlciA9ICFpc09ubHlEb2N1bWVudDtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JSZWxhdGVkQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc2NTBweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0gcmVzdWx0LnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rSWQgPSB0aGlzLmdldExpbmtJZChyZXN1bHQudXJsLCByZXN1bHQudHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1RpdGxlID0gYCR7cmVzdWx0LnRpdGxlfSgke3Jlc3VsdC5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChyZXN1bHQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rVXJsID0gcmVzdWx0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpbmtUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSByZXN1bHQudGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNlbGxWaWV3VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkF0dGFjaG1lbnREaWFsb2coKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclBhcmFtdGVyKCk7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLm1vZHVsZTtcclxuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5lbnRpdHlJZDtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oTGlua0F0dGFjaG1lbnRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc2NTBweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzY1MHB4JyxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtVcmwgPSByZXN1bHQudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5saW5rVGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSByZXN1bHQudGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDZWxsVmlld1ZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFuY2hvckRvY3VtZW50KGRvY3VtZW50SWQpIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvY3VtZW50QW5jaG9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50QW5jaG9ycyA9IHRoaXMuZXh0cmFjdERvY3VtZW50QW5jaG9ycyhkb2N1bWVudHMgfHwgW10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb2N1bWVudEFuY2hvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0RG9jdW1lbnRBbmNob3JzKGFuY2hvckRvY3VtZW50OiBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudFtdKSB7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yczogSUFuY2hvcltdID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xyXG4gICAgICAgIGxldCBpZCA9IDM7XHJcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVRhZ3MgPSBkb21Db250ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBhbmNob3JzLmZpbmRJbmRleCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0YWcubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiAxLFxyXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfQVRUQUNITUVOVCxcclxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiAyLFxyXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfUkVMQVRFRF9ET0NVTUVOVCxcclxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuUmVsYXRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmNob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZEFuY2hvcnMoKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5saW5rSWQgJiYgdGhpcy5kb2N1bWVudFR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLmxpbmtJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTGluaygpIHtcclxuICAgICAgICBjb25zdCBsaW5rID0gbmV3IElMaW5rKCk7XHJcbiAgICAgICAgbGluay50YXJnZXQgPSB0aGlzLnNlbGVjdGVkVGFyZ2V0O1xyXG4gICAgICAgIGxpbmsudGl0bGUgPSB0aGlzLmxpbmtUaXRsZTtcclxuICAgICAgICBsaW5rLnVybCA9IHRoaXMubGlua1VybDtcclxuICAgICAgICBsaW5rLmRvY3VtZW50VHlwZSA9IHRoaXMuZG9jdW1lbnRUeXBlIHx8IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgICAgIGxpbmsuaWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1tsaW5rLmRvY3VtZW50VHlwZV07XHJcbiAgICAgICAgbGluay5jb250ZW50ID0gJyc7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmRvY3VtZW50VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgbGluay51cmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3RoaXMubGlua0lkfSMke3RoaXMuYW5jaG9yQnlOYW1lfWA7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmNvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSUR9OiAke3RoaXMubGlua0lkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgbGluay5jb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLklEfTogJHt0aGlzLmxpbmtJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuYXJlYTpcclxuICAgICAgICAgICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcjpcclxuICAgICAgICAgICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGluaztcclxuICAgIH1cclxuXHJcbiAgICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgICAgICBjb25zdCBqc29uQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKTtcclxuICAgICAgICBsZXQgdGVtcGxhdGUgPSBuZXcgUU1TQ0tFZGl0b3JCcG1uKCk7XHJcbiAgICAgICAgdGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICAgIGlkOiBndWlkSGVscGVyLmVtcHR5LFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JTYXZlQXNUZW1wbGF0ZSgpO1xyXG4gICAgICAgIGRhdGEudGVtcGxhdGVUeXBlID0gQ0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU47XHJcbiAgICAgICAgZGF0YS5icG1uID0gdGVtcGxhdGU7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnMjIwcHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuY2tFZGl0b3I7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVERPXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0ZWRUZW1wbGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEpzb25Db250ZW50ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF07XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkSnNvbkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcclxuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgICAgICAgICAgdGhpcy5vblNlbGV0ZWRDZWxsVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkRlbGV0ZVRlbXBsYXRlKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcclxuICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxldGVkQ2VsbFZpZXcoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICAgICAgdGhpcy5pbml0TGluaygpO1xyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRDZWxsVmlldykge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkVHlwZXMgPSBbJ2JwbW4yLkZsb3cnLCAnYnBtbjIuSGVhZGVyZWRQb29sJywgJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnLCAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnLCAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJ107XHJcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlcy50eXBlIHx8IGV4Y2x1ZGVkVHlwZXMuZmluZEluZGV4KHR5cGUgPT4gdHlwZS50b0xvd2VyQ2FzZSgpID09IGF0dHJpYnV0ZXMudHlwZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbFZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5rVXJsID0gYXR0cmlidXRlcy5saW5rVXJsIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5saW5rVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUxpbmtVcmwodGhpcy5saW5rVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gYXR0cmlidXRlcy5saW5rVGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1RpdGxlID0gYXR0cmlidXRlcy5saW5rVGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rID0gdGhpcy5idWlsZExpbmsoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblRhYkNoYW5nZSgkZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlRBQl9OQU1FXSA9ICRldmVudC50YWIudGV4dExhYmVsO1xyXG4gICAgICAgIGlmICgkZXZlbnQudGFiLnRleHRMYWJlbCA9PSB0aGlzLkxBTkcuQlBNTi5QUk9QRVJUSUVTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2Uub3BlblNoYXBlRnVuY3Rpb25hbGl0eSh0aGlzLkxBTkcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXJzZUxpbmtVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoISF1cmwpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xyXG4gICAgICAgICAgICB0aGlzLmxpbmtJY29uID0gdGhpcy5kb2N1bWVudEljb25zW3RoaXMuZG9jdW1lbnRUeXBlXTtcclxuICAgICAgICAgICAgdGhpcy5saW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIHRoaXMuZG9jdW1lbnRUeXBlKTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5saW5rSWQgJiYgdGhpcy5kb2N1bWVudFR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yQnlOYW1lID0gdXJsLnN1YnN0cihoYXNoSW5kZXggKyAxLCB1cmwubGVuZ3RoIC0gaGFzaEluZGV4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQodGhpcy5saW5rSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcnRpYWxVcmwodHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUpIHtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkw7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuYXJlYTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkw7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmtJZCh1cmw6IHN0cmluZywgdHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUpIHtcclxuICAgICAgICBsZXQgcGFydGlhbFVybEluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcGFydGlhbFVybExlbmd0aCA9IDA7XHJcbiAgICAgICAgbGV0IGlkID0gJyc7XHJcbiAgICAgICAgbGV0IGZyb20gPSAwO1xyXG4gICAgICAgIGxldCB1cmxMb3dlckNhc2UgPSAhIXVybCA/IHVybC50b0xvd2VyQ2FzZSgpIDogJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZignIycpO1xyXG5cclxuICAgICAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XHJcbiAgICAgICAgICAgIHBhcnRpYWxVcmxJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKHBhcnRpYWxVcmwpO1xyXG5cclxuICAgICAgICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xyXG4gICAgICAgICAgICBmcm9tID0gcGFydGlhbFVybEluZGV4ICsgcGFydGlhbFVybExlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgaGFzaEluZGV4IC0gZnJvbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pLmluZGV4T2YoJy8nKTtcclxuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChpZCwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgICAgIGlkID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERvY3VtZW50VHlwZSh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLnByb2Nlc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmFyZWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGluayA9IHRoaXMuYnVpbGRMaW5rKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5saW5rLnVybCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgdGhpcy5saW5rLnRhcmdldCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVGl0bGUnLCB0aGlzLmxpbmsudGl0bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblJlc2V0VGVtcGxhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgb2dySnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuT1JHX0pTT05DT05URU5UXTtcclxuICAgICAgICBpZiAob2dySnNvbkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcclxuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uob2dySnNvbkNvbnRlbnQpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2Uuc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxldGVkQ2VsbFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcclxuICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICBkYXRhLmlzTWVzc2FnZSA9IGlzTWVzc2FnZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoOiBhbnksIHBhcGVyOiBhbnksIGNlbGxzOiBhbnlbXSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGJib3ggPSBncmFwaC5nZXRDZWxsKGNlbGxzW2ldKS5maW5kVmlldyhwYXBlcikuZ2V0QkJveFRvQ2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKCk7XHJcbiAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChiYm94ICYmIGNlbGxzW2ldPy5zaXplPy53aWR0aClcclxuICAgICAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IChiYm94LndpZHRoID4gY2VsbHNbaV0uc2l6ZS53aWR0aCkgPyAoYmJveC53aWR0aCAtIGNlbGxzW2ldLnNpemUud2lkdGgpIDogMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9JbWFnZU1hcChpZDogYW55LCBjZWxsczogYW55W10sIGNsaWVudFJlY3Q6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IG1hcCA9IHsgbmFtZTogaWQsIGlkOiBpZCwgYXJlYXM6IFtdLCBpbWFnZUhlaWdodDogMCwgaW1hZ2VXaWR0aDogMCB9O1xyXG4gICAgICAgIG1hcC5pbWFnZUhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xyXG4gICAgICAgIG1hcC5pbWFnZVdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcclxuICAgICAgICBpZiAoY2VsbHMgJiYgY2VsbHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzVmVydGljYWxQb29sID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBzaGFwZSA9IGNlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpemUgPSBzaGFwZVsnc2l6ZSddIHx8IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICAgICAgICAgICAgbGV0IGJib3ggPSBzaGFwZVsnYmJveCddIHx8IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gc2hhcGVbJ3Bvc2l0aW9uJ10gfHwgeyB4OiAwLCB5OiAwIH07XHJcblxyXG4gICAgICAgICAgICAgICAgYmJveC54ID0gcG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICAgIGJib3gueSA9IHBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgICAgICBiYm94LndpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIGJib3guaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGNvb3JkcyBwb3NpdGlvbiBjZW50ZXIgb2YgUG9vbFxyXG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlclggPSBiYm94LnggKyAxIC8gMiAqIGJib3gud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyWSA9IGJib3gueSArIDEgLyAyICogYmJveC5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKChzaGFwZS50eXBlID09IFwiYnBtbjIuUG9vbFwiIHx8IHNoYXBlLnR5cGUgPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpICYmIHNoYXBlLmFuZ2xlICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdyA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVbJ3NpemUnXSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdYID0gY2VudGVyWCAtIDEgLyAyICogc2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3WSA9IGNlbnRlclkgLSAxIC8gMiAqIHNpemUuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiYm94LnggPSBuZXdYO1xyXG4gICAgICAgICAgICAgICAgICAgIGJib3gueSA9IG5ld1k7XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC53aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC5oZWlnaHQgPSBzaXplLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzaGFwZVsnYmJveCddID0gYmJveDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WCA9IHRoaXMuZ2V0TWluWE9mZnNldChjZWxscyk7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXRZID0gdGhpcy5nZXRNaW5ZT2Zmc2V0KGNlbGxzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsT2Zmc2V0WSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBzaGFwZSA9IGNlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhyZWYgPSBzaGFwZS5saW5rVXJsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHNoYXBlLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWx0ID0gc2hhcGUubGlua1RpdGxlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaGFwZS50eXBlID09ICdicG1uMi5Qb29sJyB8fCBzaGFwZS50eXBlID09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE9mZnNldFkgPSAoc2hhcGUuYWRkaXRpb25hbFdpZHRoIC8gMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoISFocmVmICYmIGhyZWYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gc2hhcGVbJ3NpemUnXSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYmJveCA9IHNoYXBlWydiYm94J10gfHwgeyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gc2hhcGVbJ3Bvc2l0aW9uJ10gfHwgeyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC54ID0gcG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICAgICAgICBiYm94LnkgPSBwb3NpdGlvbi55O1xyXG4gICAgICAgICAgICAgICAgICAgIGJib3gud2lkdGggPSBzaXplLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJib3guaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB4MSwgeTEsIHgyLCB5MjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlLmluY2x1ZGVUZXh0SW5DbGlja2FibGVBcmVhID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSAoYmJveC54IC0gb2Zmc2V0WCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGJib3gueSAtIG9mZnNldFkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4MiA9ICh4MSArIHNoYXBlLmJib3gud2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSAoeTEgKyBzaGFwZS5iYm94LmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVggPSBvZmZzZXRYLCB0cmFuc2Zvcm1ZID0gb2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gKGJib3gueCAtIHRyYW5zZm9ybVgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChiYm94LnkgLSB0cmFuc2Zvcm1ZKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSAoeDEgKyBzaXplLndpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gKHkxICsgc2l6ZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29vcmRzID0gYCR7eDF9LCR7eTF9LCR7eDJ9LCR7eTJ9YDtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNoYXBlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnBtbjIuQWN0aXZpdHknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5HYXRld2F5JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnBtbjIuRXZlbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5Db252ZXJzYXRpb24nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5EYXRhT2JqZWN0JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnBtbjIuRGF0YVN0b3JlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnBtbi5DaG9yZW9ncmFwaHknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uLk1lc3NhZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLmFyZWFzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlOiAncmVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBjb29yZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IGFsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5hcmVhcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZTogJ3JlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogY29vcmRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGhyZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiBhbHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluWE9mZnNldChzaGFwZXMpIHtcclxuICAgICAgICB2YXIgZmlsdGVyU2hhcGVzID0gc2hhcGVzLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG4gICAgICAgICAgICByZXR1cm4gcy50eXBlICE9PSAnYnBtbjIuRmxvdydcclxuICAgICAgICAgICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaydcclxuICAgICAgICAgICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJ1xyXG4gICAgICAgICAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5Bbm5vdGF0aW9uTGluaydcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIG1pblZhbHVlO1xyXG4gICAgICAgIHZhciBtaW5PYmplY3Q7XHJcblxyXG4gICAgICAgIGlmICghZmlsdGVyU2hhcGVzIHx8ICFmaWx0ZXJTaGFwZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1pblZhbHVlID0gdGhpcy5nZXRYUG9zaXRpb24oc2hhcGVzWzBdKTtcclxuICAgICAgICAgICAgbWluT2JqZWN0ID0gc2hhcGVzWzBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1pblZhbHVlID0gdGhpcy5nZXRYUG9zaXRpb24oZmlsdGVyU2hhcGVzWzBdKTtcclxuICAgICAgICAgICAgbWluT2JqZWN0ID0gZmlsdGVyU2hhcGVzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBmaWx0ZXJTaGFwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHhQb3NpdGlvbiA9IHRoaXMuZ2V0WFBvc2l0aW9uKGZpbHRlclNoYXBlc1tpXSk7XHJcbiAgICAgICAgICAgIGlmICh4UG9zaXRpb24gPCBtaW5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSB4UG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0WFBvc2l0aW9uKHNoYXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNoYXBlLmJib3gueCAtIChzaGFwZS5hZGRpdGlvbmFsV2lkdGggLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRZUG9zaXRpb24oc2hhcGUpIHtcclxuICAgICAgICByZXR1cm4gc2hhcGUuYmJveC55O1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1pbllPZmZzZXQoc2hhcGVzKSB7XHJcbiAgICAgICAgdmFyIGZpbHRlclNoYXBlcyA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHMudHlwZSAhPT0gJ2JwbW4yLkZsb3cnXHJcbiAgICAgICAgICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnXHJcbiAgICAgICAgICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbidcclxuICAgICAgICAgICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIG1pblZhbHVlO1xyXG4gICAgICAgIHZhciBtaW5PYmplY3Q7XHJcblxyXG4gICAgICAgIGlmICghZmlsdGVyU2hhcGVzIHx8ICFmaWx0ZXJTaGFwZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1pblZhbHVlID0gc2hhcGVzWzBdLmJib3gueTtcclxuICAgICAgICAgICAgbWluT2JqZWN0ID0gc2hhcGVzWzBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1pblZhbHVlID0gZmlsdGVyU2hhcGVzWzBdLmJib3gueTtcclxuICAgICAgICAgICAgbWluT2JqZWN0ID0gZmlsdGVyU2hhcGVzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBmaWx0ZXJTaGFwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHlQb3NpdGlvbiA9IHRoaXMuZ2V0WVBvc2l0aW9uKGZpbHRlclNoYXBlc1tpXSk7XHJcbiAgICAgICAgICAgIGlmICh5UG9zaXRpb24gPCBtaW5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSB5UG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgY2hlY2tDYXNlQnBtbkV4cGFuZFBhbmVsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiAmJiAhdGhpcy5leHBhbmRlZFBhbmVsKVxyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLmlzRnVsbFNjcmVlbkFuZG5vdEV4cGFuZFBhbmVsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5icG1uU2VydmljZS5pc0Z1bGxTY3JlZW4gJiYgdGhpcy5leHBhbmRlZFBhbmVsKVxyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLmlzRnVsbFNjcmVlbkFuZGlzRXhwYW5kUGFuZWw7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5icG1uU2VydmljZS5pc0Z1bGxTY3JlZW4gJiYgIXRoaXMuZXhwYW5kZWRQYW5lbClcclxuICAgICAgICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5ub3RGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5icG1uU2VydmljZS5pc0Z1bGxTY3JlZW4gJiYgdGhpcy5leHBhbmRlZFBhbmVsKVxyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLm5vdEZ1bGxTY3JlZW5BbmRpc0V4cGFuZFBhbmVsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
837
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUs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Q1AsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLG81UEFBaUQ7O2FBRXBEOzs7WUF4RVEsU0FBUztZQUVULHVCQUF1QjtZQVd2QixXQUFXO1lBRFgseUJBQXlCO1lBVXpCLHNCQUFzQjtZQU10Qix3QkFBd0I7WUFHeEIsd0JBQXdCO1lBL0JiLFlBQVk7WUFxQnZCLG1CQUFtQix1QkE2Rm5CLE1BQU0sU0FBQyxlQUFlOzs7dUJBdkMxQixLQUFLO3dCQWdETCxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0XCI7XHJcbmltcG9ydCBndWlkSGVscGVyIGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXJcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi10ZW1wbGF0ZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW4gfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yU2F2ZUFzVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3Itc2F2ZS1hcy10ZW1wbGF0ZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZHVsZS9jb25maXJtL3Ftcy1ja2VkaXRvci1jb25maXJtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcW1zLWNrZWRpdG9yLWJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnBtblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTYXZlVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9zYXZlLXRlbXBsYXRlL3NhdmUtdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3RhcmdldC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JSZWxhdGVkQ29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLXJlbGF0aW9uL3Ftc2NrZWRpdG9yLXJlbGF0ZWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGlua0F0dGFjaG1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItbGluay9hdHRhY2htZW50cy9saW5rLWF0dGFjaG1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IFFNU0NLRWRpdG9yUGFyYW10ZXIgZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGFyYW1ldGVyLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JSZWxhdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXJlbGF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvZG9jdW1lbnQtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua0FuY2hvckRvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWxpbmstYW5jaG9yLWRvY3VtZW50Lm1vZGVsXCI7XHJcbmltcG9ydCB7IExpbmtBbmNob3IgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2xpbmstYW5jaG9yLmVudW1cIjtcclxuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tICcuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yTGluay5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci11cGxvYWQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBiYXNlNjRTdHJpbmdUb0ZpbGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9maWxlSGVscGVyXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkV4cGFuZCB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvY2tlZGl0b3ItYnBtbi1leHBhbmQuZW51bVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWNvbW1vbi5zZXJ2aWNlc1wiO1xyXG5cclxuLy9UT0RPOiBtb3ZlIHRvIGNvbW1vbiBmb2xkZXJcclxuaW50ZXJmYWNlIElUYXJnZXQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElDb25uZWN0aW9uVHlwZSB7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG4vL1RPRE86IG1vdmUgdG8gY29tbW9uIGZvbGRlclxyXG5pbnRlcmZhY2UgSUFuY2hvciB7XHJcbiAgICB2YWx1ZTogbnVtYmVyO1xyXG4gICAgdmlld1ZhbHVlOiBzdHJpbmc7XHJcbiAgICBhbmNob3JWYWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5jbGFzcyBJTGluayB7XHJcbiAgICB0YXJnZXQ6IFRhcmdldFR5cGVOYW1lO1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZG9jdW1lbnRUeXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZTtcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGNvbnRlbnQ6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXI7XHJcbiAgICAgICAgdGhpcy51cmwgPSAnJztcclxuICAgICAgICB0aGlzLnRpdGxlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pY29uID0gJyc7XHJcbiAgICAgICAgdGhpcy5jb250ZW50ID0gJyc7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdxbXMtYnBtbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50IGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIExBTkc6IGFueTtcclxuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XHJcbiAgICBqc29uQ29udGVudDogc3RyaW5nO1xyXG4gICAgZXhwYW5kZWRQYW5lbCA9IHRydWU7XHJcbiAgICBpZCA9ICcnO1xyXG4gICAgbW9kdWxlOiBudW1iZXI7XHJcbiAgICBlbnRpdHlJZCA9ICcnO1xyXG4gICAgZWRpdG9yQ29udGVudCA9ICcnO1xyXG5cclxuICAgIGJwbW46IFFNU0NLRWRpdG9yQnBtbiA9IG5ldyBRTVNDS0VkaXRvckJwbW4oKTtcclxuICAgIGJwbW5UZW1sYXRlczogUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXSA9IFtdO1xyXG5cclxuICAgIGNvbm5lY3Rpb25UeXBlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlO1xyXG4gICAgc2VsZWN0ZWRDb25uZWN0aW9uVHlwZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZTtcclxuICAgIHRhcmdldHM6IElUYXJnZXRbXSA9IFtdO1xyXG4gICAgY29ubmVjdGlvblR5cGVzOiBJQ29ubmVjdGlvblR5cGVbXSA9IFtdO1xyXG5cclxuICAgIHNlbGVjdGVkVGFyZ2V0OiBUYXJnZXRUeXBlTmFtZSA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgIGxpbmtVcmwgPSAnJztcclxuICAgIGxpbmtUaXRsZSA9ICcnO1xyXG4gICAgYW5jaG9yQnlOYW1lID0gJyc7XHJcbiAgICBsaW5rSWNvbiA9ICcnO1xyXG4gICAgbGlua0lkOiBzdHJpbmcgPSAnJztcclxuICAgIGRvY3VtZW50VHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUgPSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICAgIGRvY3VtZW50SWNvbnM6IGFueTtcclxuXHJcbiAgICBsaW5rOiBJTGluaztcclxuICAgIGRvY3VtZW50QW5jaG9yczogSUFuY2hvcltdO1xyXG4gICAgaXNMb2FkaW5nRG9jdW1lbnRBbmNob3I6IGJvb2xlYW47XHJcbiAgICBzZWxlY3RlZENlbGxWaWV3OiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBicG1uU2VydmljZTogQnBtblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBicG1uQXBpU2VydmljZTogUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNDS0VkaXRvckJwbW5Db21wb25lbnQ+LFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUU1TQ0tFZGl0b3JCcG1uRGF0YVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlkID0gZGF0YS5pZDtcclxuICAgICAgICB0aGlzLm1vZHVsZSA9IGRhdGEubW9kdWxlO1xyXG4gICAgICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGRhdGEuZWRpdG9yQ29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuU0FWRV9BU19URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZUFzVGVtcGxhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuREVMRVRFX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25EZWxldGVUZW1wbGF0ZSh0aGlzLkxBTkcuQlBNTi5ERUxFVEVfVEVNUExBVEUsIHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX1RFTVBMQVRFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEUsIHRoaXMuTEFORy5CUE1OLlNFTEVDVF9URU1QTEFURV9JTkZPUk1BVElPTiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LkNIQU5HSU5HX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFRlbXBsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlJFU0VUX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25SZXNldFRlbXBsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxldGVkQ2VsbFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnBtblRlbWxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5nZXRKc29uQ29udGVudCh0aGlzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5idWlsZERpYWdyYW0oXHJcbiAgICAgICAgICAgIHRoaXMuYnBtblRlbWxhdGVzLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTixcclxuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCxcclxuICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgdGhpcy5MQU5HXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmluaXREb2N1bWVudEljb25zKCk7XHJcbiAgICAgICAgdGhpcy5pbml0VGFyZ2V0KCk7XHJcbiAgICAgICAgdGhpcy5pbml0Q29ubmVjdGlvblR5cGUoKTtcclxuICAgICAgICB0aGlzLmluaXRMaW5rKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYnBtblNlcnZpY2UuaXNFeHBhbmRlZFBhbmVsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRhcmdldCgpIHtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgaWQ6IFRhcmdldFR5cGVOYW1lLm5ldywgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUlRHRVRfTkVXIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IGlkOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEFSR0VUX1NBTUUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRDb25uZWN0aW9uVHlwZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uVHlwZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZXMucHVzaCh7IGlkOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzLCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuRE9DVU1FTlRfUFJPQ0VTUyB9KTtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZXMucHVzaCh7IGlkOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BVFRBQ0hNRU5UIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0RG9jdW1lbnRJY29ucygpIHtcclxuICAgICAgICB0aGlzLmRvY3VtZW50SWNvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnRdID0gJ3RleHRfc25pcHBldCc7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLnByb2Nlc3NdID0gJ2FjY291bnRfdHJlZSc7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmFyZWFdID0gJ2ZvbGRlcic7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcl0gPSAnZm9sZGVyJztcclxuICAgICAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXJdID0gJ3RleHRfc25pcHBldCc7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdExpbmsoKSB7XHJcbiAgICAgICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxpbmtJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXI7XHJcbiAgICAgICAgdGhpcy5saW5rSWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcl1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgICAgIHRoaXMuYW5jaG9yQnlOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5saW5rVGl0bGUgPSAnJztcclxuICAgICAgICB0aGlzLmRvY3VtZW50QW5jaG9ycyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cGFuZFBhbmVsKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRQYW5lbCA9ICF0aGlzLmV4cGFuZGVkUGFuZWw7XHJcbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5pc0V4cGFuZGVkUGFuZWwgPSAhdGhpcy5icG1uU2VydmljZS5pc0V4cGFuZGVkUGFuZWw7XHJcbiAgICAgICAgY29uc3QgcGFuZWxTdGVuY2lsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbmVsLXN0ZW5jaWwtY29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIGlmICghcGFuZWxTdGVuY2lsKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcGVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKTtcclxuICAgICAgICBjb25zdCBzdGVuY2lsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZW5jaWxwYW5lbCcpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY2hlY2tDYXNlQnBtbkV4cGFuZFBhbmVsKCkpIHtcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw6XHJcbiAgICAgICAgICAgICAgICBzdGVuY2lsQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhbmVsU3RlbmNpbC5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgICAgICAgICBwYXBlckNvbnRhaW5lcj8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJDb250YWluZXI/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kaXNFeHBhbmRQYW5lbDpcclxuICAgICAgICAgICAgICAgIHN0ZW5jaWxDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhbmVsU3RlbmNpbC5zdHlsZS5oZWlnaHQgPSAnMTUwcHgnO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJDb250YWluZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcclxuICAgICAgICAgICAgICAgIHBhcGVyQ29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLm5vdEZ1bGxTY3JlZW5BbmRub3RFeHBhbmRQYW5lbDpcclxuICAgICAgICAgICAgICAgIHN0ZW5jaWxDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xyXG4gICAgICAgICAgICAgICAgcGFuZWxTdGVuY2lsLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICAgICAgICAgIHBhcGVyQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICc1MDBweCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLm5vdEZ1bGxTY3JlZW5BbmRpc0V4cGFuZFBhbmVsOlxyXG4gICAgICAgICAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTUwcHgnO1xyXG4gICAgICAgICAgICAgICAgcGFuZWxTdGVuY2lsLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XHJcbiAgICAgICAgICAgICAgICBwYXBlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmJwbW5HZXRUZW1wbGF0ZXMoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRKc29uQ29udGVudChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEJwbW5CeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqc29uQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoT2JqZWN0KTtcclxuICAgICAgICAgICAgdGhpcy5icG1uID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcclxuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuYnBtbk1vZGlmeWluZyh0aGlzLmJwbW4pXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJbWFnZUNvbnRlbnQocGFwZXI6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBwYXBlci50b1BORygoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTdHJpbmcgPSBpbWFnZURhdGEuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJyU3RyaW5nWzFdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25JbnNlcnRJbWFnZSgpIHtcclxuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICAgICAgY29uc3QgcGFwZXIgPSB3aW5kb3dbYHBhcGVyYF07XHJcbiAgICAgICAgY29uc3QgY2xpZW50UmVjdCA9IHBhcGVyLnBhcGVyVG9Mb2NhbFJlY3QocGFwZXIuZ2V0Q29udGVudEJCb3goKSk7XHJcbiAgICAgICAgY29uc3QgZ3JhcGhPYmplY3QgPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgICBjb25zdCBpZCA9IGF3YWl0IHRoaXMuc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCk7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDb250ZW50ID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgYXdhaXQgdGhpcy5nZXRJbWFnZUNvbnRlbnQocGFwZXIpO1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBiYXNlNjRTdHJpbmdUb0ZpbGUoaW1hZ2VDb250ZW50LCBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gKTtcclxuICAgICAgICBjb25zdCByZWxhdGl2ZVVybCA9IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRJbWFnZShmaWxlKS50b1Byb21pc2UoKTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aChncmFwaCwgcGFwZXIsIGdyYXBoT2JqZWN0LmNlbGxzKTtcclxuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IHRoaXMudG9JbWFnZU1hcChpZCwgZ3JhcGhPYmplY3QuY2VsbHMsIGNsaWVudFJlY3QpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsb3NlRGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVMaW5rKCkge1xyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xyXG4gICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcclxuICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGl0bGUsIGNvbnRlbnQsIGZhbHNlLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdHJ1ZSB8fCAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlLmlzQ29uZmlybWVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgb25Db25uZWN0aW9uVHlwZUNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xyXG4gICAgICAgIGlmICh0aGlzLmxpbmspIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSU5GT1JNQVRJT04sIHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0VYSVNUSU5HX0NPTk5FQ1RJT04sIHRydWUsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUgPSAwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY29ubmVjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSGFuZGJvb2tEaWFsb2coZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQXR0YWNobWVudERpYWxvZygpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BbmNob3JCeU5hbWVDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsVmlld1ZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5IYW5kYm9va0RpYWxvZyhpc09ubHlEb2N1bWVudDogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JSZWxhdGlvbigpO1xyXG4gICAgICAgIGRhdGEuaXNPbmx5RG9jdW1lbnQgPSBpc09ubHlEb2N1bWVudDtcclxuICAgICAgICBkYXRhLmlzRW5hYmxlRm9sZGVyID0gIWlzT25seURvY3VtZW50O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclJlbGF0ZWRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc2NTBweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzY1MHB4JyxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSByZXN1bHQudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtJZCA9IHRoaXMuZ2V0TGlua0lkKHJlc3VsdC51cmwsIHJlc3VsdC50eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSBgJHtyZXN1bHQudGl0bGV9KCR7cmVzdWx0LmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHJlc3VsdC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtVcmwgPSByZXN1bHQudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGlua1RpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtUaXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUgPSAwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUGFyYW10ZXIoKTtcclxuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMubW9kdWxlO1xyXG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihMaW5rQXR0YWNobWVudENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1VybCA9IHJlc3VsdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpbmtUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtUaXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNlbGxWaWV3VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QW5jaG9yRG9jdW1lbnQoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9jdW1lbnRBbmNob3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubGlua1NlcnZpY2VcclxuICAgICAgICAgICAgLmdldEFuY2hvckRvY3VtZW50TGlzdChkb2N1bWVudElkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkb2N1bWVudHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBbmNob3JzID0gdGhpcy5leHRyYWN0RG9jdW1lbnRBbmNob3JzKGRvY3VtZW50cyB8fCBbXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvY3VtZW50QW5jaG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3REb2N1bWVudEFuY2hvcnMoYW5jaG9yRG9jdW1lbnQ6IFFNU0NLRWRpdG9yTGlua0FuY2hvckRvY3VtZW50W10pIHtcclxuICAgICAgICBjb25zdCBhbmNob3JzOiBJQW5jaG9yW10gPSBbeyB2YWx1ZTogMCwgdmlld1ZhbHVlOiAnJywgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQmxhbmsgfV07XHJcbiAgICAgICAgbGV0IGlkID0gMztcclxuICAgICAgICBpZiAoYW5jaG9yRG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgYW5jaG9yRG9jdW1lbnQuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gZS5yaWNoVGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvbUNvbnRlbnQgPSBkaXY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGlmIChhVGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSBhVGFnc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguYW5jaG9yVmFsdWUgPT09IHRhZy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JWYWx1ZTogdGFnLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IDEsXHJcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxyXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5BdHRhY2htZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IDIsXHJcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9SRUxBVEVEX0RPQ1VNRU5ULFxyXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuY2hvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkQW5jaG9ycygpIHtcclxuICAgICAgICBpZiAoISF0aGlzLmxpbmtJZCAmJiB0aGlzLmRvY3VtZW50VHlwZSA9PSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHRoaXMubGlua0lkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRMaW5rKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBuZXcgSUxpbmsoKTtcclxuICAgICAgICBsaW5rLnRhcmdldCA9IHRoaXMuc2VsZWN0ZWRUYXJnZXQ7XHJcbiAgICAgICAgbGluay50aXRsZSA9IHRoaXMubGlua1RpdGxlO1xyXG4gICAgICAgIGxpbmsudXJsID0gdGhpcy5saW5rVXJsO1xyXG4gICAgICAgIGxpbmsuZG9jdW1lbnRUeXBlID0gdGhpcy5kb2N1bWVudFR5cGUgfHwgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUub3RoZXI7XHJcbiAgICAgICAgbGluay5pY29uID0gdGhpcy5kb2N1bWVudEljb25zW2xpbmsuZG9jdW1lbnRUeXBlXTtcclxuICAgICAgICBsaW5rLmNvbnRlbnQgPSAnJztcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZG9jdW1lbnRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgICAgICBsaW5rLnVybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5saW5rSWR9IyR7dGhpcy5hbmNob3JCeU5hbWV9YDtcclxuICAgICAgICAgICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICBsaW5rLmNvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSUR9OiAke3RoaXMubGlua0lkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhOlxyXG4gICAgICAgICAgICAgICAgbGluay5jb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLklEfTogJHt0aGlzLmxpbmtJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgbGluay5jb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLklEfTogJHt0aGlzLmxpbmtJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2F2ZUFzVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvckJwbW4oKTtcclxuICAgICAgICB0ZW1wbGF0ZSA9IHtcclxuICAgICAgICAgICAgaWQ6IGd1aWRIZWxwZXIuZW1wdHksXHJcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcclxuICAgICAgICAgICAgaXNUZW1wbGF0ZTogdHJ1ZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlKCk7XHJcbiAgICAgICAgZGF0YS50ZW1wbGF0ZVR5cGUgPSBDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTjtcclxuICAgICAgICBkYXRhLmJwbW4gPSB0ZW1wbGF0ZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZVRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICcyMjBweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5ja0VkaXRvcjtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBURE9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RlZFRlbXBsYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRKc29uQ29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShzZWxlY3RlZEpzb25Db250ZW50KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZXRlZENlbGxWaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlVGVtcGxhdGUodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGV0ZWRDZWxsVmlldygpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcclxuICAgICAgICB0aGlzLmluaXRMaW5rKCk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLnNlbGVjdGVkQ2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcztcclxuICAgICAgICAgICAgY29uc3QgZXhjbHVkZWRUeXBlcyA9IFsnYnBtbjIuRmxvdycsICdicG1uMi5IZWFkZXJlZFBvb2wnLCAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycsICdicG1uMi5Bbm5vdGF0aW9uTGluaycsICdicG1uMi5EYXRhQXNzb2NpYXRpb24nXTtcclxuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLnR5cGUgfHwgZXhjbHVkZWRUeXBlcy5maW5kSW5kZXgodHlwZSA9PiB0eXBlLnRvTG93ZXJDYXNlKCkgPT0gYXR0cmlidXRlcy50eXBlLnRvTG93ZXJDYXNlKCkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldyA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtVcmwgPSBhdHRyaWJ1dGVzLmxpbmtVcmwgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmxpbmtVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlTGlua1VybCh0aGlzLmxpbmtVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBhdHRyaWJ1dGVzLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSBhdHRyaWJ1dGVzLmxpbmtUaXRsZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmsgPSB0aGlzLmJ1aWxkTGluaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKCRldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpIHtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuVEFCX05BTUVdID0gJGV2ZW50LnRhYi50ZXh0TGFiZWw7XHJcbiAgICAgICAgaWYgKCRldmVudC50YWIudGV4dExhYmVsID09IHRoaXMuTEFORy5CUE1OLlBST1BFUlRJRVMpIHtcclxuICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5vcGVuU2hhcGVGdW5jdGlvbmFsaXR5KHRoaXMuTEFORyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTGlua1VybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghIXVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IHRoaXMuZ2V0RG9jdW1lbnRUeXBlKHVybCk7XHJcbiAgICAgICAgICAgIHRoaXMubGlua0ljb24gPSB0aGlzLmRvY3VtZW50SWNvbnNbdGhpcy5kb2N1bWVudFR5cGVdO1xyXG4gICAgICAgICAgICB0aGlzLmxpbmtJZCA9IHRoaXMuZ2V0TGlua0lkKHVybCwgdGhpcy5kb2N1bWVudFR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmxpbmtJZCAmJiB0aGlzLmRvY3VtZW50VHlwZSA9PSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JCeU5hbWUgPSB1cmwuc3Vic3RyKGhhc2hJbmRleCArIDEsIHVybC5sZW5ndGggLSBoYXNoSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLmxpbmtJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFydGlhbFVybCh0eXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkw7XHJcbiAgICAgICAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSkge1xyXG4gICAgICAgIGxldCBwYXJ0aWFsVXJsSW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBwYXJ0aWFsVXJsTGVuZ3RoID0gMDtcclxuICAgICAgICBsZXQgaWQgPSAnJztcclxuICAgICAgICBsZXQgZnJvbSA9IDA7XHJcbiAgICAgICAgbGV0IHVybExvd2VyQ2FzZSA9ICEhdXJsID8gdXJsLnRvTG93ZXJDYXNlKCkgOiAnJztcclxuXHJcbiAgICAgICAgY29uc3QgcGFydGlhbFVybCA9IHRoaXMuZ2V0UGFydGlhbFVybCh0eXBlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKCcjJyk7XHJcblxyXG4gICAgICAgIGlmICghIXBhcnRpYWxVcmwpIHtcclxuICAgICAgICAgICAgcGFydGlhbFVybEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YocGFydGlhbFVybCk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWFsVXJsTGVuZ3RoID0gcGFydGlhbFVybC5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZyb20gPSBwYXJ0aWFsVXJsSW5kZXggKyBwYXJ0aWFsVXJsTGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBoYXNoSW5kZXggLSBmcm9tKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSkuaW5kZXhPZignLycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgbGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGlkLCAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgaWQgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RG9jdW1lbnRUeXBlKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2VzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuYXJlYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5mb2xkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDZWxsVmlld1ZhbHVlcygpIHtcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5saW5rID0gdGhpcy5idWlsZExpbmsoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLmxpbmsudXJsKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCB0aGlzLmxpbmsudGFyZ2V0KTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMubGluay50aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzZXRUZW1wbGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBvZ3JKc29uQ29udGVudCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5PUkdfSlNPTkNPTlRFTlRdO1xyXG4gICAgICAgIGlmIChvZ3JKc29uQ29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShvZ3JKc29uQ29udGVudCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgICAgICAgICAgdGhpcy5vblNlbGV0ZWRDZWxsVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29uZmlybURpYWxvZyh0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGlzTWVzc2FnZTogYm9vbGVhbiwgY2FsbGJhY2s/OiAocmVzdWx0PzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgIGRhdGEuaXNNZXNzYWdlID0gaXNNZXNzYWdlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGg6IGFueSwgcGFwZXI6IGFueSwgY2VsbHM6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcclxuICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gMDtcclxuICAgICAgICAgICAgaWYgKGJib3ggJiYgY2VsbHNbaV0/LnNpemU/LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0b0ltYWdlTWFwKGlkOiBhbnksIGNlbGxzOiBhbnlbXSwgY2xpZW50UmVjdDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgbWFwID0geyBuYW1lOiBpZCwgaWQ6IGlkLCBhcmVhczogW10sIGltYWdlSGVpZ2h0OiAwLCBpbWFnZVdpZHRoOiAwIH07XHJcbiAgICAgICAgbWFwLmltYWdlSGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XHJcbiAgICAgICAgbWFwLmltYWdlV2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xyXG4gICAgICAgIGlmIChjZWxscyAmJiBjZWxscy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgaXNWZXJ0aWNhbFBvb2wgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNoYXBlID0gY2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IHNoYXBlWydzaXplJ10gfHwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcbiAgICAgICAgICAgICAgICBsZXQgYmJveCA9IHNoYXBlWydiYm94J10gfHwgeyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb24gPSBzaGFwZVsncG9zaXRpb24nXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBiYm94LnggPSBwb3NpdGlvbi54O1xyXG4gICAgICAgICAgICAgICAgYmJveC55ID0gcG9zaXRpb24ueTtcclxuICAgICAgICAgICAgICAgIGJib3gud2lkdGggPSBzaXplLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgYmJveC5oZWlnaHQgPSBzaXplLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29vcmRzIHBvc2l0aW9uIGNlbnRlciBvZiBQb29sXHJcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyWCA9IGJib3gueCArIDEgLyAyICogYmJveC53aWR0aDtcclxuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJZID0gYmJveC55ICsgMSAvIDIgKiBiYm94LmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoKHNoYXBlLnR5cGUgPT0gXCJicG1uMi5Qb29sXCIgfHwgc2hhcGUudHlwZSA9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykgJiYgc2hhcGUuYW5nbGUgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3ID0gc2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB3O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaGFwZVsnc2l6ZSddID0gc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ggPSBjZW50ZXJYIC0gMSAvIDIgKiBzaXplLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdZID0gY2VudGVyWSAtIDEgLyAyICogc2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJib3gueCA9IG5ld1g7XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC55ID0gbmV3WTtcclxuICAgICAgICAgICAgICAgICAgICBiYm94LndpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBiYm94LmhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNoYXBlWydiYm94J10gPSBiYm94O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXRYID0gdGhpcy5nZXRNaW5YT2Zmc2V0KGNlbGxzKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFkgPSB0aGlzLmdldE1pbllPZmZzZXQoY2VsbHMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxPZmZzZXRZID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNoYXBlID0gY2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgaHJlZiA9IHNoYXBlLmxpbmtVcmw7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gc2hhcGUubGlua1RhcmdldDtcclxuICAgICAgICAgICAgICAgIGxldCBhbHQgPSBzaGFwZS5saW5rVGl0bGU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYXBlLnR5cGUgPT0gJ2JwbW4yLlBvb2wnIHx8IHNoYXBlLnR5cGUgPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsT2Zmc2V0WSA9IChzaGFwZS5hZGRpdGlvbmFsV2lkdGggLyAyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghIWhyZWYgJiYgaHJlZi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBzaGFwZVsnc2l6ZSddIHx8IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBiYm94ID0gc2hhcGVbJ2Jib3gnXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzaGFwZVsncG9zaXRpb24nXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICBiYm94LnggPSBwb3NpdGlvbi54O1xyXG4gICAgICAgICAgICAgICAgICAgIGJib3gueSA9IHBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC53aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYmJveC5oZWlnaHQgPSBzaXplLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGUuaW5jbHVkZVRleHRJbkNsaWNrYWJsZUFyZWEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IChiYm94LnggLSBvZmZzZXRYKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSAoYmJveC55IC0gb2Zmc2V0WSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gKHgxICsgc2hhcGUuYmJveC53aWR0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5MiA9ICh5MSArIHNoYXBlLmJib3guaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtWCA9IG9mZnNldFgsIHRyYW5zZm9ybVkgPSBvZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSAoYmJveC54IC0gdHJhbnNmb3JtWCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGJib3gueSAtIHRyYW5zZm9ybVkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4MiA9ICh4MSArIHNpemUud2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSAoeTEgKyBzaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb29yZHMgPSBgJHt4MX0sJHt5MX0sJHt4Mn0sJHt5Mn1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5BY3Rpdml0eSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkdhdGV3YXknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5FdmVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkNvbnZlcnNhdGlvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkRhdGFPYmplY3QnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uMi5EYXRhU3RvcmUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdicG1uLkNob3Jlb2dyYXBoeSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JwbW4uTWVzc2FnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuYXJlYXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU6ICdyZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IGNvb3JkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogYWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLmFyZWFzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlOiAncmVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBjb29yZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IGFsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNaW5YT2Zmc2V0KHNoYXBlcykge1xyXG4gICAgICAgIHZhciBmaWx0ZXJTaGFwZXMgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzLnR5cGUgIT09ICdicG1uMi5GbG93J1xyXG4gICAgICAgICAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJ1xyXG4gICAgICAgICAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nXHJcbiAgICAgICAgICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgbWluVmFsdWU7XHJcbiAgICAgICAgdmFyIG1pbk9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKCFmaWx0ZXJTaGFwZXMgfHwgIWZpbHRlclNoYXBlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWluVmFsdWUgPSB0aGlzLmdldFhQb3NpdGlvbihzaGFwZXNbMF0pO1xyXG4gICAgICAgICAgICBtaW5PYmplY3QgPSBzaGFwZXNbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluVmFsdWUgPSB0aGlzLmdldFhQb3NpdGlvbihmaWx0ZXJTaGFwZXNbMF0pO1xyXG4gICAgICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGZpbHRlclNoYXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgeFBvc2l0aW9uID0gdGhpcy5nZXRYUG9zaXRpb24oZmlsdGVyU2hhcGVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHhQb3NpdGlvbiA8IG1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IHhQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIG1pbk9iamVjdCA9IGZpbHRlclNoYXBlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRYUG9zaXRpb24oc2hhcGUpIHtcclxuICAgICAgICByZXR1cm4gc2hhcGUuYmJveC54IC0gKHNoYXBlLmFkZGl0aW9uYWxXaWR0aCAvIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFlQb3NpdGlvbihzaGFwZSkge1xyXG4gICAgICAgIHJldHVybiBzaGFwZS5iYm94Lnk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluWU9mZnNldChzaGFwZXMpIHtcclxuICAgICAgICB2YXIgZmlsdGVyU2hhcGVzID0gc2hhcGVzLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG4gICAgICAgICAgICByZXR1cm4gcy50eXBlICE9PSAnYnBtbjIuRmxvdydcclxuICAgICAgICAgICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaydcclxuICAgICAgICAgICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJ1xyXG4gICAgICAgICAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5Bbm5vdGF0aW9uTGluaydcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgbWluVmFsdWU7XHJcbiAgICAgICAgdmFyIG1pbk9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKCFmaWx0ZXJTaGFwZXMgfHwgIWZpbHRlclNoYXBlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWluVmFsdWUgPSBzaGFwZXNbMF0uYmJveC55O1xyXG4gICAgICAgICAgICBtaW5PYmplY3QgPSBzaGFwZXNbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluVmFsdWUgPSBmaWx0ZXJTaGFwZXNbMF0uYmJveC55O1xyXG4gICAgICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGZpbHRlclNoYXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgeVBvc2l0aW9uID0gdGhpcy5nZXRZUG9zaXRpb24oZmlsdGVyU2hhcGVzW2ldKTtcclxuICAgICAgICAgICAgaWYgKHlQb3NpdGlvbiA8IG1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IHlQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIG1pbk9iamVjdCA9IGZpbHRlclNoYXBlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBjaGVja0Nhc2VCcG1uRXhwYW5kUGFuZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYnBtblNlcnZpY2UuaXNGdWxsU2NyZWVuICYmICF0aGlzLmV4cGFuZGVkUGFuZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiAmJiB0aGlzLmV4cGFuZGVkUGFuZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kaXNFeHBhbmRQYW5lbDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiAmJiAhdGhpcy5leHBhbmRlZFBhbmVsKVxyXG4gICAgICAgICAgICByZXR1cm4gUU1TQ0tFZGl0b3JCcG1uRXhwYW5kLm5vdEZ1bGxTY3JlZW5BbmRub3RFeHBhbmRQYW5lbDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiAmJiB0aGlzLmV4cGFuZGVkUGFuZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBRTVNDS0VkaXRvckJwbW5FeHBhbmQubm90RnVsbFNjcmVlbkFuZGlzRXhwYW5kUGFuZWw7XHJcbiAgICB9XHJcbn1cclxuIl19