@hmcts/ccd-case-ui-toolkit 7.0.24-upload-timestamp → 7.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2020/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +35 -7
  2. package/esm2020/lib/shared/components/case-editor/services/page-validation.service.mjs +10 -5
  3. package/esm2020/lib/shared/components/case-history/case-history.component.mjs +13 -13
  4. package/esm2020/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +3 -3
  5. package/esm2020/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.mjs +3 -3
  6. package/esm2020/lib/shared/components/palette/complex/read-complex-field.component.mjs +14 -12
  7. package/esm2020/lib/shared/components/palette/document/write-document-field.component.mjs +25 -16
  8. package/esm2020/lib/shared/components/palette/dynamic-list/dynamic-list.pipe.mjs +2 -2
  9. package/esm2020/lib/shared/domain/http/http-error.model.mjs +7 -1
  10. package/esm2020/lib/shared/services/fields/fields.purger.mjs +4 -3
  11. package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +108 -57
  12. package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  13. package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +106 -55
  14. package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  15. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +2 -1
  16. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  17. package/lib/shared/components/case-editor/services/page-validation.service.d.ts +1 -1
  18. package/lib/shared/components/case-editor/services/page-validation.service.d.ts.map +1 -1
  19. package/lib/shared/components/palette/complex/read-complex-field.component.d.ts.map +1 -1
  20. package/lib/shared/components/palette/document/write-document-field.component.d.ts +1 -0
  21. package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
  22. package/lib/shared/domain/http/http-error.model.d.ts +1 -0
  23. package/lib/shared/domain/http/http-error.model.d.ts.map +1 -1
  24. package/lib/shared/services/fields/fields.purger.d.ts.map +1 -1
  25. package/package.json +1 -1
@@ -307,7 +307,7 @@ CaseFileViewFolderComponent.UNCATEGORISED_DOCUMENTS_TITLE = 'Uncategorised docum
307
307
  CaseFileViewFolderComponent.DOCUMENT_SEARCH_FORM_CONTROL_NAME = 'documentSearchFormControl';
308
308
  CaseFileViewFolderComponent.MINIMUM_SEARCH_CHARACTERS = 1;
309
309
  CaseFileViewFolderComponent.ɵfac = function CaseFileViewFolderComponent_Factory(t) { return new (t || CaseFileViewFolderComponent)(i0.ɵɵdirectiveInject(i1.WindowService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i1.DocumentManagementService), i0.ɵɵdirectiveInject(i3.MatLegacyDialog), i0.ɵɵdirectiveInject(i4.AbstractAppConfig)); };
310
- CaseFileViewFolderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseFileViewFolderComponent, selectors: [["ccd-case-file-view-folder"]], inputs: { categoriesAndDocuments: "categoriesAndDocuments", allowMoving: "allowMoving" }, outputs: { clickedDocument: "clickedDocument", moveDocument: "moveDocument" }, decls: 9, vars: 3, consts: [[1, "document-filter-container"], [1, "form-group", "document-filter", 3, "formGroup"], ["type", "search", "id", "document-search", "name", "documentSearchFormControl", "formControlName", "documentSearchFormControl", "placeholder", "Search by document name", 1, "form-control", "document-search"], [1, "document-folders-header"], [1, "document-folders-header__title"], [3, "sortAscending", "sortDescending"], ["class", "document-tree-container", 4, "ngIf"], [1, "document-tree-container"], [4, "ngIf"], [3, "dataSource", "treeControl"], ["class", "document-tree-container__node document-tree-container__node--document", 4, "cdkTreeNodeDef"], ["class", "document-tree-container__node document-tree-container__folder", 4, "cdkTreeNodeDef", "cdkTreeNodeDefWhen"], [1, "document-tree-container__node", "document-tree-container__node--document"], [1, "node", 3, "click"], ["disabled", "", 1, "node__icon"], ["src", "/assets/img/case-file-view/case-file-view-document.svg", "alt", "Document icon", 1, "node__iconImg"], [1, "node__name", "node-name-document"], [1, "node__document-upload-timestamp"], [1, "node__document-options"], [3, "allowMoving", "changeFolderAction", "openInANewTabAction", "downloadAction", "printAction"], [1, "document-tree-container__node", "document-tree-container__folder"], ["cdkTreeNodeToggle", "", 1, "node"], [1, "node__icon"], ["alt", "Folder icon", 1, "node__iconImg", 3, "src"], [1, "node__count"], [1, "node__name", "node__name--folder"], ["cdkTreeNodeOutlet", ""]], template: function CaseFileViewFolderComponent_Template(rf, ctx) { if (rf & 1) {
310
+ CaseFileViewFolderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseFileViewFolderComponent, selectors: [["ccd-case-file-view-folder"]], inputs: { categoriesAndDocuments: "categoriesAndDocuments", allowMoving: "allowMoving" }, outputs: { clickedDocument: "clickedDocument", moveDocument: "moveDocument" }, decls: 9, vars: 3, consts: [[1, "document-filter-container"], [1, "form-group", "document-filter", 3, "formGroup"], ["type", "search", "id", "document-search", "name", "documentSearchFormControl", "formControlName", "documentSearchFormControl", "placeholder", "Search by document name", "aria-label", "Search by document name", 1, "form-control", "document-search"], [1, "document-folders-header"], [1, "document-folders-header__title"], [3, "sortAscending", "sortDescending"], ["class", "document-tree-container", 4, "ngIf"], [1, "document-tree-container"], [4, "ngIf"], [3, "dataSource", "treeControl"], ["class", "document-tree-container__node document-tree-container__node--document", 4, "cdkTreeNodeDef"], ["class", "document-tree-container__node document-tree-container__folder", 4, "cdkTreeNodeDef", "cdkTreeNodeDefWhen"], [1, "document-tree-container__node", "document-tree-container__node--document"], [1, "node", 3, "click"], ["disabled", "", 1, "node__icon"], ["src", "/assets/img/case-file-view/case-file-view-document.svg", "alt", "Document icon", 1, "node__iconImg"], [1, "node__name", "node-name-document"], [1, "node__document-upload-timestamp"], [1, "node__document-options"], [3, "allowMoving", "changeFolderAction", "openInANewTabAction", "downloadAction", "printAction"], [1, "document-tree-container__node", "document-tree-container__folder"], ["cdkTreeNodeToggle", "", 1, "node"], [1, "node__icon"], ["alt", "Folder icon", 1, "node__iconImg", 3, "src"], [1, "node__count"], [1, "node__name", "node__name--folder"], ["cdkTreeNodeOutlet", ""]], template: function CaseFileViewFolderComponent_Template(rf, ctx) { if (rf & 1) {
311
311
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
312
312
  i0.ɵɵelement(2, "input", 2);
313
313
  i0.ɵɵelementEnd()();
@@ -328,7 +328,7 @@ CaseFileViewFolderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
328
328
  } }, dependencies: [i5.NgIf, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgControlStatusGroup, i6.FormGroupDirective, i6.FormControlName, i7.CdkNestedTreeNode, i7.CdkTreeNodeDef, i7.CdkTreeNodeToggle, i7.CdkTree, i7.CdkTreeNodeOutlet, i8.CaseFileViewFolderSortComponent, i9.CaseFileViewFolderDocumentActionsComponent, i5.DatePipe], styles: ["[_nghost-%COMP%]{display:flex;height:100%;flex-direction:column}[_nghost-%COMP%] .document-tree-container[_ngcontent-%COMP%]{flex:1 0}.document-filter-container[_ngcontent-%COMP%]{border-bottom:2px solid #C9C9C9}.document-filter-container[_ngcontent-%COMP%] .document-filter[_ngcontent-%COMP%]{padding:10px}.document-filter-container[_ngcontent-%COMP%] .document-filter[_ngcontent-%COMP%] .document-search[_ngcontent-%COMP%]{background:url(/assets/images/icon-search-black.svg) no-repeat right #FFF;background-position-x:calc(100% - 4px);padding-right:30px;width:100%}.document-filter-container[_ngcontent-%COMP%] .documents-title[_ngcontent-%COMP%]{height:30%;margin-left:8px;font-weight:700}.document-tree-container[_ngcontent-%COMP%]{padding:4px;overflow-x:hidden;overflow-y:scroll}.document-tree-container__node[_ngcontent-%COMP%]{display:block}.document-tree-container__node[_ngcontent-%COMP%] .document-tree-container__node[_ngcontent-%COMP%]{padding-left:40px}.document-tree-container[_ngcontent-%COMP%] .document-tree-invisible[_ngcontent-%COMP%]{display:none}.document-tree-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:7px}.document-tree-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border:4px solid rgba(0,0,0,0);background-clip:padding-box;border-radius:9999px;background-color:#aaa}.document-tree-container[_ngcontent-%COMP%]::-webkit-scrollbar-button{display:none}.document-tree-container[_ngcontent-%COMP%]::-webkit-scrollbar-track-piece{background:#EEE}.document-tree-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#CCC}.document-folders-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid #C9C9C9;padding:10px}.document-folders-header__title[_ngcontent-%COMP%]{font-weight:700}.node[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;padding:10px;background:none;border:0;cursor:pointer;white-space:nowrap}.node--selected[_ngcontent-%COMP%]{background:#fff2cc}.node__icon[_ngcontent-%COMP%]{position:relative;display:inline-block}.node__count[_ngcontent-%COMP%]{color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.875rem;padding-top:4px}.node__iconImg[_ngcontent-%COMP%]{display:block;height:30px;width:30px}.node__name[_ngcontent-%COMP%]{margin-left:6px;font-size:1rem;overflow:hidden;text-overflow:ellipsis}.node__document-options[_ngcontent-%COMP%]{margin-left:auto;margin-right:0}.node__document-upload-timestamp[_ngcontent-%COMP%]{font-size:.8rem;float:left;padding-left:10px}"] });
329
329
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseFileViewFolderComponent, [{
330
330
  type: Component,
331
- args: [{ selector: 'ccd-case-file-view-folder', template: "<div class=\"document-filter-container\">\n <div class=\"form-group document-filter\" [formGroup]=\"documentFilterFormGroup\">\n <input class=\"form-control document-search\"\n type=\"search\"\n id=\"document-search\"\n name=\"documentSearchFormControl\"\n formControlName=\"documentSearchFormControl\"\n placeholder=\"Search by document name\">\n </div>\n</div>\n\n<div class=\"document-folders-header\">\n <div class=\"document-folders-header__title\">Documents ({{ documentCount }})</div>\n <div>\n <ccd-case-file-view-folder-sort\n (sortAscending)=\"sortDataSourceAscending($event)\"\n (sortDescending)=\"sortDataSourceDescending($event)\"\n ></ccd-case-file-view-folder-sort>\n </div>\n</div>\n\n<div class=\"document-tree-container\" *ngIf=\"documentTreeData\">\n <div *ngIf=\"!nestedDataSource || nestedDataSource.length === 0\">\n No results found\n </div>\n <div>\n <cdk-tree [dataSource]=\"nestedDataSource\" [treeControl]=\"nestedTreeControl\">\n <!-- document -->\n <cdk-nested-tree-node class=\"document-tree-container__node document-tree-container__node--document\" *cdkTreeNodeDef=\"let node\">\n <button class=\"node\" (click)=\"selectedNodeItem = node; clickedDocument.emit(node)\"\n [class.node--selected]=\"selectedNodeItem?.name === node.name\">\n <div class=\"node__icon\" disabled>\n <img src=\"/assets/img/case-file-view/case-file-view-document.svg\" class=\"node__iconImg\" alt=\"Document icon\">\n </div>\n <span class=\"node__name node-name-document\">\n {{node.name}}\n <br>\n <span class=\"node__document-upload-timestamp\">{{node.upload_timestamp | date:\"dd MMM YYYY\"}}</span>\n </span>\n <div class=\"node__document-options\">\n <ccd-case-file-view-folder-document-actions\n (changeFolderAction)=\"triggerDocumentAction('changeFolder', node)\"\n (openInANewTabAction)=\"triggerDocumentAction('openInANewTab', node)\"\n (downloadAction)=\"triggerDocumentAction('download', node)\"\n (printAction)=\"triggerDocumentAction('print', node)\"\n [allowMoving]=\"allowMoving\"\n >\n </ccd-case-file-view-folder-document-actions>\n </div>\n </button>\n </cdk-nested-tree-node>\n <!-- folder-->\n <cdk-nested-tree-node class=\"document-tree-container__node document-tree-container__folder\" *cdkTreeNodeDef=\"let node; when: nestedChildren\">\n <button class=\"node\" cdkTreeNodeToggle>\n <div class=\"node__icon\" [attr.aria-label]=\"'toggle ' + node.name\" >\n <img class=\"node__iconImg\"\n [src]=\"nestedTreeControl.isExpanded(node) ? '/assets/images/folder-open.png' : '/assets/images/folder.png'\" alt=\"Folder icon\">\n <span class=\"node__count\">{{node.childDocumentCount}}</span>\n </div>\n <span class=\"node__name node__name--folder\">{{node.name}}</span>\n </button>\n\n <div [class.document-tree-invisible]=\"!nestedTreeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column}:host .document-tree-container{flex:1 0}.document-filter-container{border-bottom:2px solid #C9C9C9}.document-filter-container .document-filter{padding:10px}.document-filter-container .document-filter .document-search{background:url(/assets/images/icon-search-black.svg) no-repeat right #FFF;background-position-x:calc(100% - 4px);padding-right:30px;width:100%}.document-filter-container .documents-title{height:30%;margin-left:8px;font-weight:700}.document-tree-container{padding:4px;overflow-x:hidden;overflow-y:scroll}.document-tree-container__node{display:block}.document-tree-container__node .document-tree-container__node{padding-left:40px}.document-tree-container .document-tree-invisible{display:none}.document-tree-container::-webkit-scrollbar{width:7px}.document-tree-container::-webkit-scrollbar-thumb{border:4px solid rgba(0,0,0,0);background-clip:padding-box;border-radius:9999px;background-color:#aaa}.document-tree-container::-webkit-scrollbar-button{display:none}.document-tree-container::-webkit-scrollbar-track-piece{background:#EEE}.document-tree-container::-webkit-scrollbar-thumb{background:#CCC}.document-folders-header{display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid #C9C9C9;padding:10px}.document-folders-header__title{font-weight:700}.node{display:flex;align-items:center;width:100%;padding:10px;background:none;border:0;cursor:pointer;white-space:nowrap}.node--selected{background:#fff2cc}.node__icon{position:relative;display:inline-block}.node__count{color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.875rem;padding-top:4px}.node__iconImg{display:block;height:30px;width:30px}.node__name{margin-left:6px;font-size:1rem;overflow:hidden;text-overflow:ellipsis}.node__document-options{margin-left:auto;margin-right:0}.node__document-upload-timestamp{font-size:.8rem;float:left;padding-left:10px}\n"] }]
331
+ args: [{ selector: 'ccd-case-file-view-folder', template: "<div class=\"document-filter-container\">\n <div class=\"form-group document-filter\" [formGroup]=\"documentFilterFormGroup\">\n <input class=\"form-control document-search\"\n type=\"search\"\n id=\"document-search\"\n name=\"documentSearchFormControl\"\n formControlName=\"documentSearchFormControl\"\n placeholder=\"Search by document name\"\n aria-label=\"Search by document name\">\n </div>\n</div>\n\n<div class=\"document-folders-header\">\n <div class=\"document-folders-header__title\">Documents ({{ documentCount }})</div>\n <div>\n <ccd-case-file-view-folder-sort\n (sortAscending)=\"sortDataSourceAscending($event)\"\n (sortDescending)=\"sortDataSourceDescending($event)\"\n ></ccd-case-file-view-folder-sort>\n </div>\n</div>\n\n<div class=\"document-tree-container\" *ngIf=\"documentTreeData\">\n <div *ngIf=\"!nestedDataSource || nestedDataSource.length === 0\">\n No results found\n </div>\n <div>\n <cdk-tree [dataSource]=\"nestedDataSource\" [treeControl]=\"nestedTreeControl\">\n <!-- document -->\n <cdk-nested-tree-node class=\"document-tree-container__node document-tree-container__node--document\" *cdkTreeNodeDef=\"let node\">\n <button class=\"node\" (click)=\"selectedNodeItem = node; clickedDocument.emit(node)\"\n [class.node--selected]=\"selectedNodeItem?.name === node.name\">\n <div class=\"node__icon\" disabled>\n <img src=\"/assets/img/case-file-view/case-file-view-document.svg\" class=\"node__iconImg\" alt=\"Document icon\">\n </div>\n <span class=\"node__name node-name-document\">\n {{node.name}}\n <br>\n <span class=\"node__document-upload-timestamp\">{{node.upload_timestamp | date:\"dd MMM YYYY\"}}</span>\n </span>\n <div class=\"node__document-options\">\n <ccd-case-file-view-folder-document-actions\n (changeFolderAction)=\"triggerDocumentAction('changeFolder', node)\"\n (openInANewTabAction)=\"triggerDocumentAction('openInANewTab', node)\"\n (downloadAction)=\"triggerDocumentAction('download', node)\"\n (printAction)=\"triggerDocumentAction('print', node)\"\n [allowMoving]=\"allowMoving\"\n >\n </ccd-case-file-view-folder-document-actions>\n </div>\n </button>\n </cdk-nested-tree-node>\n <!-- folder-->\n <cdk-nested-tree-node class=\"document-tree-container__node document-tree-container__folder\" *cdkTreeNodeDef=\"let node; when: nestedChildren\">\n <button class=\"node\" cdkTreeNodeToggle>\n <div class=\"node__icon\" [attr.aria-label]=\"'toggle ' + node.name\" >\n <img class=\"node__iconImg\"\n [src]=\"nestedTreeControl.isExpanded(node) ? '/assets/images/folder-open.png' : '/assets/images/folder.png'\" alt=\"Folder icon\">\n <span class=\"node__count\">{{node.childDocumentCount}}</span>\n </div>\n <span class=\"node__name node__name--folder\">{{node.name}}</span>\n </button>\n\n <div [class.document-tree-invisible]=\"!nestedTreeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column}:host .document-tree-container{flex:1 0}.document-filter-container{border-bottom:2px solid #C9C9C9}.document-filter-container .document-filter{padding:10px}.document-filter-container .document-filter .document-search{background:url(/assets/images/icon-search-black.svg) no-repeat right #FFF;background-position-x:calc(100% - 4px);padding-right:30px;width:100%}.document-filter-container .documents-title{height:30%;margin-left:8px;font-weight:700}.document-tree-container{padding:4px;overflow-x:hidden;overflow-y:scroll}.document-tree-container__node{display:block}.document-tree-container__node .document-tree-container__node{padding-left:40px}.document-tree-container .document-tree-invisible{display:none}.document-tree-container::-webkit-scrollbar{width:7px}.document-tree-container::-webkit-scrollbar-thumb{border:4px solid rgba(0,0,0,0);background-clip:padding-box;border-radius:9999px;background-color:#aaa}.document-tree-container::-webkit-scrollbar-button{display:none}.document-tree-container::-webkit-scrollbar-track-piece{background:#EEE}.document-tree-container::-webkit-scrollbar-thumb{background:#CCC}.document-folders-header{display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid #C9C9C9;padding:10px}.document-folders-header__title{font-weight:700}.node{display:flex;align-items:center;width:100%;padding:10px;background:none;border:0;cursor:pointer;white-space:nowrap}.node--selected{background:#fff2cc}.node__icon{position:relative;display:inline-block}.node__count{color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.875rem;padding-top:4px}.node__iconImg{display:block;height:30px;width:30px}.node__name{margin-left:6px;font-size:1rem;overflow:hidden;text-overflow:ellipsis}.node__document-options{margin-left:auto;margin-right:0}.node__document-upload-timestamp{font-size:.8rem;float:left;padding-left:10px}\n"] }]
332
332
  }], function () { return [{ type: i1.WindowService }, { type: i2.Router }, { type: i1.DocumentManagementService }, { type: i3.MatLegacyDialog }, { type: i4.AbstractAppConfig }]; }, { categoriesAndDocuments: [{
333
333
  type: Input
334
334
  }], allowMoving: [{
@@ -338,4 +338,4 @@ CaseFileViewFolderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
338
338
  }], moveDocument: [{
339
339
  type: Output
340
340
  }] }); })();
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZm9sZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmlsZS12aWV3L2NvbXBvbmVudHMvY2FzZS1maWxlLXZpZXctZm9sZGVyL2Nhc2UtZmlsZS12aWV3LWZvbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZpbGUtdmlldy9jb21wb25lbnRzL2Nhc2UtZmlsZS12aWV3LWZvbGRlci9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxJQUFJLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0s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c0JBQXNCO2tCQUFyQyxLQUFLO1lBQ1UsV0FBVztrQkFBMUIsS0FBSztZQUNXLGVBQWU7a0JBQS9CLE1BQU07WUFDVSxZQUFZO2tCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7XG4gIENhc2VGaWxlVmlld0NhdGVnb3J5LFxuICBDYXNlRmlsZVZpZXdEb2N1bWVudCxcbiAgQ2F0ZWdvcmllc0FuZERvY3VtZW50cyxcbiAgRG9jdW1lbnRUcmVlTm9kZSxcbiAgRG9jdW1lbnRUcmVlTm9kZVR5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmlsZS12aWV3JztcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbi9zb3J0LW9yZGVyLmVudW0nO1xuaW1wb3J0IHsgRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSwgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENhc2VGaWxlVmlld0ZvbGRlclNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1maWxlLXZpZXctZm9sZGVyLXNlbGVjdG9yL2Nhc2UtZmlsZS12aWV3LWZvbGRlci1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0IGNvbnN0IE1FRElBX1ZJRVdFUl9MT0NBTFNUT1JBR0VfS0VZID0gJ21lZGlhLXZpZXdlci1pbmZvJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVTkNBVEVHT1JJU0VEX0RPQ1VNRU5UU19USVRMRSA9ICdVbmNhdGVnb3Jpc2VkIGRvY3VtZW50cyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRSA9ICdkb2N1bWVudFNlYXJjaEZvcm1Db250cm9sJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUlOSU1VTV9TRUFSQ0hfQ0hBUkFDVEVSUyA9IDE7XG5cbiAgQElucHV0KCkgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHM6IE9ic2VydmFibGU8Q2F0ZWdvcmllc0FuZERvY3VtZW50cz47XG4gIEBJbnB1dCgpIHB1YmxpYyBhbGxvd01vdmluZzogYm9vbGVhbjtcbiAgQE91dHB1dCgpIHB1YmxpYyBjbGlja2VkRG9jdW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERvY3VtZW50VHJlZU5vZGU+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgbW92ZURvY3VtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5ld0NhdGVnb3J5OiBzdHJpbmcsIGRvY3VtZW50OiBEb2N1bWVudFRyZWVOb2RlIH0+KCk7XG5cbiAgcHVibGljIG5lc3RlZFRyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxEb2N1bWVudFRyZWVOb2RlPjtcbiAgcHVibGljIG5lc3RlZERhdGFTb3VyY2U6IERvY3VtZW50VHJlZU5vZGVbXTtcbiAgcHVibGljIGNhdGVnb3JpZXM6IENhc2VGaWxlVmlld0NhdGVnb3J5W10gPSBbXTtcbiAgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHNlbGVjdGVkTm9kZUl0ZW06IERvY3VtZW50VHJlZU5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGRvY3VtZW50RmlsdGVyRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBkb2N1bWVudFNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGRvY3VtZW50VHJlZURhdGE6IERvY3VtZW50VHJlZU5vZGVbXTtcbiAgcHVibGljIGRvY3VtZW50RmlsdGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWFyY2hUZXJtTGVuZ3RoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBnZXRDaGlsZHJlbiA9IChub2RlOiBEb2N1bWVudFRyZWVOb2RlKSA9PiBvZihub2RlLmNoaWxkcmVuKTtcbiAgcHVibGljIG5lc3RlZENoaWxkcmVuID0gKF86IG51bWJlciwgbm9kZURhdGE6IERvY3VtZW50VHJlZU5vZGUpID0+IG5vZGVEYXRhLmNoaWxkcmVuO1xuICBwdWJsaWMgZ2V0IGRvY3VtZW50Q291bnQoKSB7XG4gICAgaWYgKHRoaXMubmVzdGVkRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWREYXRhU291cmNlLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MgKyBpdGVtLmNoaWxkRG9jdW1lbnRDb3VudDtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50TWFuYWdlbWVudFNlcnZpY2U6IERvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxEb2N1bWVudFRyZWVOb2RlPih0aGlzLmdldENoaWxkcmVuKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RmlsdGVyRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5kb2N1bWVudFNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgICB0aGlzLmRvY3VtZW50RmlsdGVyRm9ybUdyb3VwLmFkZENvbnRyb2woQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50LkRPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRSwgdGhpcy5kb2N1bWVudFNlYXJjaEZvcm1Db250cm9sKTtcblxuICAgIC8vIExpc3RlbiB0byBzZWFyY2ggaW5wdXQgYW5kIGluaXRpYXRlIGZpbHRlciBkb2N1bWVudHMgaWYgYXQgbGVhc3QgdGhyZWUgY2hhcmFjdGVycyBlbnRlcmVkXG4gICAgdGhpcy5kb2N1bWVudEZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZG9jdW1lbnRTZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRhcCgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB0aGlzLnNlYXJjaFRlcm1MZW5ndGggPSBzZWFyY2hUZXJtLmxlbmd0aCksXG4gICAgICBzd2l0Y2hNYXAoKHNlYXJjaFRlcm06IHN0cmluZykgPT4gdGhpcy5maWx0ZXIoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKS5waXBlKCkpXG4gICAgKS5zdWJzY3JpYmUoZG9jdW1lbnRUcmVlRGF0YSA9PiB7XG4gICAgICB0aGlzLm5lc3RlZERhdGFTb3VyY2UgPSBkb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSBkb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtTGVuZ3RoID49IENhc2VGaWxlVmlld0ZvbGRlckNvbXBvbmVudC5NSU5JTVVNX1NFQVJDSF9DSEFSQUNURVJTXG4gICAgICAgID8gdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5leHBhbmRBbGwoKVxuICAgICAgICA6IHRoaXMubmVzdGVkVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFN1YnNjcmliZSB0byB0aGUgaW5wdXQgY2F0ZWdvcmllcyBhbmQgZG9jdW1lbnRzLCBhbmQgZ2VuZXJhdGUgdHJlZSBkYXRhIGFuZCBpbml0aWFsaXNlIGNkayB0cmVlXG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnN1YnNjcmliZShjYXRlZ29yaWVzQW5kRG9jdW1lbnRzID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLmNhdGVnb3JpZXM7XG4gICAgICB0aGlzLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuICAgICAgLy8gR2VuZXJhdGUgZG9jdW1lbnQgdHJlZSBkYXRhIGZyb20gY2F0ZWdvcmllc1xuICAgICAgdGhpcy5kb2N1bWVudFRyZWVEYXRhID0gdGhpcy5nZW5lcmF0ZVRyZWVEYXRhKGNhdGVnb3JpZXMpO1xuICAgICAgLy8gQXBwZW5kIHVuY2F0ZWdvcmlzZWQgZG9jdW1lbnRzXG4gICAgICBpZiAoY2F0ZWdvcmllc0FuZERvY3VtZW50cy51bmNhdGVnb3Jpc2VkX2RvY3VtZW50cyAmJiBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnVuY2F0ZWdvcmlzZWRfZG9jdW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdW5jYXRlZ29yaXNlZERvY3VtZW50cyA9IHRoaXMuZ2V0VW5jYXRlZ29yaXNlZERvY3VtZW50cyhjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnVuY2F0ZWdvcmlzZWRfZG9jdW1lbnRzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFRyZWVEYXRhLnB1c2godW5jYXRlZ29yaXNlZERvY3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYWxpc2UgY2RrIHRyZWUgd2l0aCBnZW5lcmF0ZWQgZGF0YVxuICAgICAgdGhpcy5uZXN0ZWREYXRhU291cmNlID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLmRvY3VtZW50VHJlZURhdGE7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVUcmVlRGF0YShjYXRlZ29yaWVzOiBDYXNlRmlsZVZpZXdDYXRlZ29yeVtdKTogRG9jdW1lbnRUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gY2F0ZWdvcmllcy5yZWR1Y2UoKHRyZWUsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5ld0RvY3VtZW50VHJlZU5vZGUgPSBuZXcgRG9jdW1lbnRUcmVlTm9kZSgpO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS5uYW1lID0gbm9kZS5jYXRlZ29yeV9uYW1lO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS50eXBlID0gRG9jdW1lbnRUcmVlTm9kZVR5cGUuRk9MREVSO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS5jaGlsZHJlbiA9IFsuLi50aGlzLmdlbmVyYXRlVHJlZURhdGEobm9kZS5zdWJfY2F0ZWdvcmllcyksIC4uLnRoaXMuZ2V0RG9jdW1lbnRzKG5vZGUuZG9jdW1lbnRzKV07XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnRyZWUsXG4gICAgICAgIG5ld0RvY3VtZW50VHJlZU5vZGUsXG4gICAgICBdO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudHMoZG9jdW1lbnRzOiBDYXNlRmlsZVZpZXdEb2N1bWVudFtdKTogRG9jdW1lbnRUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBkb2N1bWVudHNUb1JldHVybjogRG9jdW1lbnRUcmVlTm9kZVtdID0gW107XG4gICAgZG9jdW1lbnRzLmZvckVhY2goZG9jdW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBkb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZTtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkRPQ1VNRU5UO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9maWxlbmFtZSA9IGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsID0gZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUuYXR0cmlidXRlX3BhdGggPSBkb2N1bWVudC5hdHRyaWJ1dGVfcGF0aDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudXBsb2FkX3RpbWVzdGFtcCA9IHRoaXMuYXBwQ29uZmlnLmdldEVuYWJsZUNhc2VGaWxlVmlld1ZlcnNpb24xXzEoKVxuICAgICAgICAgICYmIGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgPyBtb21lbnQoZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbTpzcycpIDogJyc7XG5cbiAgICAgIGRvY3VtZW50c1RvUmV0dXJuLnB1c2goZG9jdW1lbnRUcmVlTm9kZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnRzVG9SZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5jYXRlZ29yaXNlZERvY3VtZW50cyh1bmNhdGVnb3Jpc2VkRG9jdW1lbnRzOiBDYXNlRmlsZVZpZXdEb2N1bWVudFtdKTogRG9jdW1lbnRUcmVlTm9kZSB7XG4gICAgY29uc3QgZG9jdW1lbnRzOiBEb2N1bWVudFRyZWVOb2RlW10gPSBbXTtcbiAgICB1bmNhdGVnb3Jpc2VkRG9jdW1lbnRzLmZvckVhY2goZG9jdW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBkb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZTtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkRPQ1VNRU5UO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9maWxlbmFtZSA9IGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsID0gZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUuYXR0cmlidXRlX3BhdGggPSBkb2N1bWVudC5hdHRyaWJ1dGVfcGF0aDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudXBsb2FkX3RpbWVzdGFtcCA9IHRoaXMuYXBwQ29uZmlnLmdldEVuYWJsZUNhc2VGaWxlVmlld1ZlcnNpb24xXzEoKVxuICAgICAgICAgICYmIGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgPyBtb21lbnQoZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbTpzcycpIDogJyc7XG5cbiAgICAgIGRvY3VtZW50cy5wdXNoKGRvY3VtZW50VHJlZU5vZGUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdW5jYXRlZ29yaXNlZE5vZGUgPSBuZXcgRG9jdW1lbnRUcmVlTm9kZSgpO1xuICAgIHVuY2F0ZWdvcmlzZWROb2RlLm5hbWUgPSBDYXNlRmlsZVZpZXdGb2xkZXJDb21wb25lbnQuVU5DQVRFR09SSVNFRF9ET0NVTUVOVFNfVElUTEU7XG4gICAgdW5jYXRlZ29yaXNlZE5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkZPTERFUjtcbiAgICB1bmNhdGVnb3Jpc2VkTm9kZS5jaGlsZHJlbiA9IGRvY3VtZW50cztcblxuICAgIHJldHVybiB1bmNhdGVnb3Jpc2VkTm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXIoc2VhcmNoVGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudFRyZWVOb2RlW10+IHtcbiAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgZGF0YSBzbyB3ZSBkbyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbFxuICAgIGZ1bmN0aW9uIGNvcHkobm9kZTogRG9jdW1lbnRUcmVlTm9kZSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihkb2N1bWVudFRyZWVOb2RlLCBub2RlKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhO1xuICAgIGlmIChzZWFyY2hUZXJtICYmIHNlYXJjaFRlcm0ubGVuZ3RoID49IENhc2VGaWxlVmlld0ZvbGRlckNvbXBvbmVudC5NSU5JTVVNX1NFQVJDSF9DSEFSQUNURVJTICYmIHRoaXMuZG9jdW1lbnRGaWx0ZXJGb3JtR3JvdXAuY29udHJvbHNbQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50LkRPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRV0udmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhLm1hcChjb3B5KS5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyVHJlZURhdGEobm9kZTogRG9jdW1lbnRUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lICYmIG5vZGUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pICYmIG5vZGUudHlwZSA9PT0gRG9jdW1lbnRUcmVlTm9kZVR5cGUuRE9DVU1FTlQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYWxsIHJlY3Vyc2l2ZWx5IGlmIG5vZGUgaGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcmV0dXJuIChub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5tYXAoY29weSkuZmlsdGVyKGZpbHRlclRyZWVEYXRhKSkubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKGZpbHRlcmVkRGF0YSk7XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckRvY3VtZW50QWN0aW9uKFxuICAgIGFjdGlvblR5cGU6ICdjaGFuZ2VGb2xkZXInIHwgJ29wZW5JbkFOZXdUYWInIHwgJ2Rvd25sb2FkJyB8ICdwcmludCcsXG4gICAgZG9jdW1lbnRUcmVlTm9kZTogRG9jdW1lbnRUcmVlTm9kZVxuICApOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGFjdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgKCdjaGFuZ2VGb2xkZXInKTpcbiAgICAgICAgdGhpcy5vcGVuTW92ZURpYWxvZyhkb2N1bWVudFRyZWVOb2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgnb3BlbkluQU5ld1RhYicpOlxuICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKE1FRElBX1ZJRVdFUl9MT0NBTFNUT1JBR0VfS0VZLFxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZS5nZXRNZWRpYVZpZXdlckluZm8oe1xuICAgICAgICAgICAgZG9jdW1lbnRfYmluYXJ5X3VybDogZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsLFxuICAgICAgICAgICAgZG9jdW1lbnRfZmlsZW5hbWU6IGRvY3VtZW50VHJlZU5vZGUuZG9jdW1lbnRfZmlsZW5hbWVcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLm9wZW5Pbk5ld1RhYihcbiAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL21lZGlhLXZpZXdlciddKT8udG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgKCdkb3dubG9hZCcpOlxuICAgICAgICAvLyBDcmVhdGUgYSBVUkwgZnJvbSB0aGUgZG9jdW1lbnRfYmluYXJ5X3VybCBwcm9wZXJ0eSAoYWJzb2x1dGUgVVJMKSBhbmQgdXNlIHRoZSBwYXRoIHBvcnRpb24gKHJlbGF0aXZlIFVSTCkuXG4gICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE1hbmFnZSBDYXNlcyBhcHBsaWNhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwbHkgYSBwcm94eSB0byB0aGUgcmVxdWVzdCwgd2l0aFxuICAgICAgICAvLyB0aGUgY29ycmVjdCByZW1vdGUgZW5kcG9pbnRcbiAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUobmV3IFVSTChkb2N1bWVudFRyZWVOb2RlLmRvY3VtZW50X2JpbmFyeV91cmwpLnBhdGhuYW1lLCBkb2N1bWVudFRyZWVOb2RlLmRvY3VtZW50X2ZpbGVuYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgncHJpbnQnKTpcbiAgICAgICAgdGhpcy5wcmludERvY3VtZW50KG5ldyBVUkwoZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsKS5wYXRobmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0RGF0YVNvdXJjZUFzY2VuZGluZyhjb2x1bW46IG51bWJlcikge1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLm5lc3RlZERhdGFTb3VyY2UubWFwKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5zb3J0Q2hpbGRyZW5Bc2NlbmRpbmcoY29sdW1uLCBTb3J0T3JkZXIuQVNDRU5ESU5HKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVOb2RlRGF0YShzb3J0ZWREYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0RGF0YVNvdXJjZURlc2NlbmRpbmcoY29sdW1uOiBudW1iZXIpIHtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5uZXN0ZWREYXRhU291cmNlLm1hcChpdGVtID0+IHtcbiAgICAgIGl0ZW0uc29ydENoaWxkcmVuRGVzY2VuZGluZyhjb2x1bW4sIFNvcnRPcmRlci5ERVNDRU5ESU5HKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVOb2RlRGF0YShzb3J0ZWREYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVOb2RlRGF0YShkYXRhOiBEb2N1bWVudFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2U2VsZWN0ZWQgPSB0aGlzLm5lc3RlZFRyZWVDb250cm9sLmV4cGFuc2lvbk1vZGVsLnNlbGVjdGVkLm1hcChcbiAgICAgIChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLm5hbWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMubmVzdGVkVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICB0aGlzLm5lc3RlZERhdGFTb3VyY2UgPSBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgbmV3RG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLnR5cGUgPSBpdGVtLnR5cGU7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcblxuICAgICAgcmV0dXJuIG5ld0RvY3VtZW50VHJlZU5vZGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbGF0dGVuZWRBcnJheSA9IHRoaXMubmVzdGVkRGF0YVNvdXJjZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBpdGVtLmZsYXR0ZW5lZEFsbDtcbiAgICB9KS5mbGF0KCk7XG4gICAgY29uc3QgbmV3T2JqZWN0cyA9IGZsYXR0ZW5lZEFycmF5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHByZXZTZWxlY3RlZC5pbmNsdWRlcyhpdGVtLm5hbWUpO1xuICAgIH0pO1xuICAgIG5ld09iamVjdHMuZm9yRWFjaChvYmplY3QgPT4gdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5leHBhbmQob2JqZWN0KSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZG9jdW1lbnRGaWx0ZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb3ZlRGlhbG9nKG5vZGU6IERvY3VtZW50VHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhc2VGaWxlVmlld0ZvbGRlclNlbGVjdG9yQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcywgZG9jdW1lbnQ6IG5vZGUgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKG5ld0NhdElkID0+IHtcbiAgICAgIGlmIChuZXdDYXRJZCkge1xuICAgICAgICB0aGlzLm1vdmVEb2N1bWVudC5lbWl0KHsgbmV3Q2F0ZWdvcnk6IG5ld0NhdElkLCBkb2N1bWVudDogbm9kZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludERvY3VtZW50KHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJpbnRXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwpO1xuICAgIHByaW50V2luZG93LnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nLCBkb3dubG9hZEZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgYS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6IG5vbmUnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IGRvd25sb2FkRmlsZU5hbWU7XG4gICAgYS5jbGljaygpO1xuICAgIGEucmVtb3ZlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkb2N1bWVudC1maWx0ZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRvY3VtZW50LWZpbHRlclwiIFtmb3JtR3JvdXBdPVwiZG9jdW1lbnRGaWx0ZXJGb3JtR3JvdXBcIj5cbiAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZG9jdW1lbnQtc2VhcmNoXCJcbiAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgaWQ9XCJkb2N1bWVudC1zZWFyY2hcIlxuICAgICAgbmFtZT1cImRvY3VtZW50U2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9jdW1lbnRTZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBkb2N1bWVudCBuYW1lXCI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkb2N1bWVudC1mb2xkZXJzLWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnQtZm9sZGVycy1oZWFkZXJfX3RpdGxlXCI+RG9jdW1lbnRzICh7eyBkb2N1bWVudENvdW50IH19KTwvZGl2PlxuICA8ZGl2PlxuICAgIDxjY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyLXNvcnRcbiAgICAgIChzb3J0QXNjZW5kaW5nKT1cInNvcnREYXRhU291cmNlQXNjZW5kaW5nKCRldmVudClcIlxuICAgICAgKHNvcnREZXNjZW5kaW5nKT1cInNvcnREYXRhU291cmNlRGVzY2VuZGluZygkZXZlbnQpXCJcbiAgICA+PC9jY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyLXNvcnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkb2N1bWVudC10cmVlLWNvbnRhaW5lclwiICpuZ0lmPVwiZG9jdW1lbnRUcmVlRGF0YVwiPlxuICA8ZGl2ICpuZ0lmPVwiIW5lc3RlZERhdGFTb3VyY2UgfHwgbmVzdGVkRGF0YVNvdXJjZS5sZW5ndGggPT09IDBcIj5cbiAgICBObyByZXN1bHRzIGZvdW5kXG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxjZGstdHJlZSBbZGF0YVNvdXJjZV09XCJuZXN0ZWREYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cIm5lc3RlZFRyZWVDb250cm9sXCI+XG4gICAgICA8IS0tIGRvY3VtZW50IC0tPlxuICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlIGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJfX25vZGUgZG9jdW1lbnQtdHJlZS1jb250YWluZXJfX25vZGUtLWRvY3VtZW50XCIgKmNka1RyZWVOb2RlRGVmPVwibGV0IG5vZGVcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vZGVcIiAoY2xpY2spPVwic2VsZWN0ZWROb2RlSXRlbSA9IG5vZGU7IGNsaWNrZWREb2N1bWVudC5lbWl0KG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mubm9kZS0tc2VsZWN0ZWRdPVwic2VsZWN0ZWROb2RlSXRlbT8ubmFtZSA9PT0gbm9kZS5uYW1lXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGVfX2ljb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZG9jdW1lbnQuc3ZnXCIgY2xhc3M9XCJub2RlX19pY29uSW1nXCIgYWx0PVwiRG9jdW1lbnQgaWNvblwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm9kZV9fbmFtZSBub2RlLW5hbWUtZG9jdW1lbnRcIj5cbiAgICAgICAgICAgIHt7bm9kZS5uYW1lfX1cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm9kZV9fZG9jdW1lbnQtdXBsb2FkLXRpbWVzdGFtcFwiPnt7bm9kZS51cGxvYWRfdGltZXN0YW1wIHwgZGF0ZTpcImRkIE1NTSBZWVlZXCJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGVfX2RvY3VtZW50LW9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxjY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyLWRvY3VtZW50LWFjdGlvbnNcbiAgICAgICAgICAgICAgKGNoYW5nZUZvbGRlckFjdGlvbik9XCJ0cmlnZ2VyRG9jdW1lbnRBY3Rpb24oJ2NoYW5nZUZvbGRlcicsIG5vZGUpXCJcbiAgICAgICAgICAgICAgKG9wZW5JbkFOZXdUYWJBY3Rpb24pPVwidHJpZ2dlckRvY3VtZW50QWN0aW9uKCdvcGVuSW5BTmV3VGFiJywgbm9kZSlcIlxuICAgICAgICAgICAgICAoZG93bmxvYWRBY3Rpb24pPVwidHJpZ2dlckRvY3VtZW50QWN0aW9uKCdkb3dubG9hZCcsIG5vZGUpXCJcbiAgICAgICAgICAgICAgKHByaW50QWN0aW9uKT1cInRyaWdnZXJEb2N1bWVudEFjdGlvbigncHJpbnQnLCBub2RlKVwiXG4gICAgICAgICAgICAgIFthbGxvd01vdmluZ109XCJhbGxvd01vdmluZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2NjZC1jYXNlLWZpbGUtdmlldy1mb2xkZXItZG9jdW1lbnQtYWN0aW9ucz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgICAgPCEtLSBmb2xkZXItLT5cbiAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSBjbGFzcz1cImRvY3VtZW50LXRyZWUtY29udGFpbmVyX19ub2RlIGRvY3VtZW50LXRyZWUtY29udGFpbmVyX19mb2xkZXJcIiAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogbmVzdGVkQ2hpbGRyZW5cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vZGVcIiBjZGtUcmVlTm9kZVRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZV9faWNvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5uYW1lXCIgPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cIm5vZGVfX2ljb25JbWdcIlxuICAgICAgICAgICAgICAgICBbc3JjXT1cIm5lc3RlZFRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnL2Fzc2V0cy9pbWFnZXMvZm9sZGVyLW9wZW4ucG5nJyA6ICcvYXNzZXRzL2ltYWdlcy9mb2xkZXIucG5nJ1wiIGFsdD1cIkZvbGRlciBpY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGVfX2NvdW50XCI+e3tub2RlLmNoaWxkRG9jdW1lbnRDb3VudH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm9kZV9fbmFtZSBub2RlX19uYW1lLS1mb2xkZXJcIj57e25vZGUubmFtZX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IFtjbGFzcy5kb2N1bWVudC10cmVlLWludmlzaWJsZV09XCIhbmVzdGVkVHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICA8L2Nkay10cmVlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZm9sZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmlsZS12aWV3L2NvbXBvbmVudHMvY2FzZS1maWxlLXZpZXctZm9sZGVyL2Nhc2UtZmlsZS12aWV3LWZvbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZpbGUtdmlldy9jb21wb25lbnRzL2Nhc2UtZmlsZS12aWV3LWZvbGRlci9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxJQUFJLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0s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c0JBQXNCO2tCQUFyQyxLQUFLO1lBQ1UsV0FBVztrQkFBMUIsS0FBSztZQUNXLGVBQWU7a0JBQS9CLE1BQU07WUFDVSxZQUFZO2tCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7XG4gIENhc2VGaWxlVmlld0NhdGVnb3J5LFxuICBDYXNlRmlsZVZpZXdEb2N1bWVudCxcbiAgQ2F0ZWdvcmllc0FuZERvY3VtZW50cyxcbiAgRG9jdW1lbnRUcmVlTm9kZSxcbiAgRG9jdW1lbnRUcmVlTm9kZVR5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmlsZS12aWV3JztcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbi9zb3J0LW9yZGVyLmVudW0nO1xuaW1wb3J0IHsgRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSwgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENhc2VGaWxlVmlld0ZvbGRlclNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1maWxlLXZpZXctZm9sZGVyLXNlbGVjdG9yL2Nhc2UtZmlsZS12aWV3LWZvbGRlci1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0IGNvbnN0IE1FRElBX1ZJRVdFUl9MT0NBTFNUT1JBR0VfS0VZID0gJ21lZGlhLXZpZXdlci1pbmZvJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXNlLWZpbGUtdmlldy1mb2xkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVTkNBVEVHT1JJU0VEX0RPQ1VNRU5UU19USVRMRSA9ICdVbmNhdGVnb3Jpc2VkIGRvY3VtZW50cyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRSA9ICdkb2N1bWVudFNlYXJjaEZvcm1Db250cm9sJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUlOSU1VTV9TRUFSQ0hfQ0hBUkFDVEVSUyA9IDE7XG5cbiAgQElucHV0KCkgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHM6IE9ic2VydmFibGU8Q2F0ZWdvcmllc0FuZERvY3VtZW50cz47XG4gIEBJbnB1dCgpIHB1YmxpYyBhbGxvd01vdmluZzogYm9vbGVhbjtcbiAgQE91dHB1dCgpIHB1YmxpYyBjbGlja2VkRG9jdW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERvY3VtZW50VHJlZU5vZGU+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgbW92ZURvY3VtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5ld0NhdGVnb3J5OiBzdHJpbmcsIGRvY3VtZW50OiBEb2N1bWVudFRyZWVOb2RlIH0+KCk7XG5cbiAgcHVibGljIG5lc3RlZFRyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxEb2N1bWVudFRyZWVOb2RlPjtcbiAgcHVibGljIG5lc3RlZERhdGFTb3VyY2U6IERvY3VtZW50VHJlZU5vZGVbXTtcbiAgcHVibGljIGNhdGVnb3JpZXM6IENhc2VGaWxlVmlld0NhdGVnb3J5W10gPSBbXTtcbiAgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHNlbGVjdGVkTm9kZUl0ZW06IERvY3VtZW50VHJlZU5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGRvY3VtZW50RmlsdGVyRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBkb2N1bWVudFNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGRvY3VtZW50VHJlZURhdGE6IERvY3VtZW50VHJlZU5vZGVbXTtcbiAgcHVibGljIGRvY3VtZW50RmlsdGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWFyY2hUZXJtTGVuZ3RoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBnZXRDaGlsZHJlbiA9IChub2RlOiBEb2N1bWVudFRyZWVOb2RlKSA9PiBvZihub2RlLmNoaWxkcmVuKTtcbiAgcHVibGljIG5lc3RlZENoaWxkcmVuID0gKF86IG51bWJlciwgbm9kZURhdGE6IERvY3VtZW50VHJlZU5vZGUpID0+IG5vZGVEYXRhLmNoaWxkcmVuO1xuICBwdWJsaWMgZ2V0IGRvY3VtZW50Q291bnQoKSB7XG4gICAgaWYgKHRoaXMubmVzdGVkRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWREYXRhU291cmNlLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MgKyBpdGVtLmNoaWxkRG9jdW1lbnRDb3VudDtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50TWFuYWdlbWVudFNlcnZpY2U6IERvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxEb2N1bWVudFRyZWVOb2RlPih0aGlzLmdldENoaWxkcmVuKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RmlsdGVyRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5kb2N1bWVudFNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgICB0aGlzLmRvY3VtZW50RmlsdGVyRm9ybUdyb3VwLmFkZENvbnRyb2woQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50LkRPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRSwgdGhpcy5kb2N1bWVudFNlYXJjaEZvcm1Db250cm9sKTtcblxuICAgIC8vIExpc3RlbiB0byBzZWFyY2ggaW5wdXQgYW5kIGluaXRpYXRlIGZpbHRlciBkb2N1bWVudHMgaWYgYXQgbGVhc3QgdGhyZWUgY2hhcmFjdGVycyBlbnRlcmVkXG4gICAgdGhpcy5kb2N1bWVudEZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZG9jdW1lbnRTZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRhcCgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB0aGlzLnNlYXJjaFRlcm1MZW5ndGggPSBzZWFyY2hUZXJtLmxlbmd0aCksXG4gICAgICBzd2l0Y2hNYXAoKHNlYXJjaFRlcm06IHN0cmluZykgPT4gdGhpcy5maWx0ZXIoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKS5waXBlKCkpXG4gICAgKS5zdWJzY3JpYmUoZG9jdW1lbnRUcmVlRGF0YSA9PiB7XG4gICAgICB0aGlzLm5lc3RlZERhdGFTb3VyY2UgPSBkb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSBkb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtTGVuZ3RoID49IENhc2VGaWxlVmlld0ZvbGRlckNvbXBvbmVudC5NSU5JTVVNX1NFQVJDSF9DSEFSQUNURVJTXG4gICAgICAgID8gdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5leHBhbmRBbGwoKVxuICAgICAgICA6IHRoaXMubmVzdGVkVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFN1YnNjcmliZSB0byB0aGUgaW5wdXQgY2F0ZWdvcmllcyBhbmQgZG9jdW1lbnRzLCBhbmQgZ2VuZXJhdGUgdHJlZSBkYXRhIGFuZCBpbml0aWFsaXNlIGNkayB0cmVlXG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnN1YnNjcmliZShjYXRlZ29yaWVzQW5kRG9jdW1lbnRzID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLmNhdGVnb3JpZXM7XG4gICAgICB0aGlzLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuICAgICAgLy8gR2VuZXJhdGUgZG9jdW1lbnQgdHJlZSBkYXRhIGZyb20gY2F0ZWdvcmllc1xuICAgICAgdGhpcy5kb2N1bWVudFRyZWVEYXRhID0gdGhpcy5nZW5lcmF0ZVRyZWVEYXRhKGNhdGVnb3JpZXMpO1xuICAgICAgLy8gQXBwZW5kIHVuY2F0ZWdvcmlzZWQgZG9jdW1lbnRzXG4gICAgICBpZiAoY2F0ZWdvcmllc0FuZERvY3VtZW50cy51bmNhdGVnb3Jpc2VkX2RvY3VtZW50cyAmJiBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnVuY2F0ZWdvcmlzZWRfZG9jdW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdW5jYXRlZ29yaXNlZERvY3VtZW50cyA9IHRoaXMuZ2V0VW5jYXRlZ29yaXNlZERvY3VtZW50cyhjYXRlZ29yaWVzQW5kRG9jdW1lbnRzLnVuY2F0ZWdvcmlzZWRfZG9jdW1lbnRzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFRyZWVEYXRhLnB1c2godW5jYXRlZ29yaXNlZERvY3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYWxpc2UgY2RrIHRyZWUgd2l0aCBnZW5lcmF0ZWQgZGF0YVxuICAgICAgdGhpcy5uZXN0ZWREYXRhU291cmNlID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhO1xuICAgICAgdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLmRvY3VtZW50VHJlZURhdGE7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVUcmVlRGF0YShjYXRlZ29yaWVzOiBDYXNlRmlsZVZpZXdDYXRlZ29yeVtdKTogRG9jdW1lbnRUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gY2F0ZWdvcmllcy5yZWR1Y2UoKHRyZWUsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5ld0RvY3VtZW50VHJlZU5vZGUgPSBuZXcgRG9jdW1lbnRUcmVlTm9kZSgpO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS5uYW1lID0gbm9kZS5jYXRlZ29yeV9uYW1lO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS50eXBlID0gRG9jdW1lbnRUcmVlTm9kZVR5cGUuRk9MREVSO1xuICAgICAgbmV3RG9jdW1lbnRUcmVlTm9kZS5jaGlsZHJlbiA9IFsuLi50aGlzLmdlbmVyYXRlVHJlZURhdGEobm9kZS5zdWJfY2F0ZWdvcmllcyksIC4uLnRoaXMuZ2V0RG9jdW1lbnRzKG5vZGUuZG9jdW1lbnRzKV07XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnRyZWUsXG4gICAgICAgIG5ld0RvY3VtZW50VHJlZU5vZGUsXG4gICAgICBdO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudHMoZG9jdW1lbnRzOiBDYXNlRmlsZVZpZXdEb2N1bWVudFtdKTogRG9jdW1lbnRUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBkb2N1bWVudHNUb1JldHVybjogRG9jdW1lbnRUcmVlTm9kZVtdID0gW107XG4gICAgZG9jdW1lbnRzLmZvckVhY2goZG9jdW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBkb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZTtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkRPQ1VNRU5UO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9maWxlbmFtZSA9IGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsID0gZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUuYXR0cmlidXRlX3BhdGggPSBkb2N1bWVudC5hdHRyaWJ1dGVfcGF0aDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudXBsb2FkX3RpbWVzdGFtcCA9IHRoaXMuYXBwQ29uZmlnLmdldEVuYWJsZUNhc2VGaWxlVmlld1ZlcnNpb24xXzEoKVxuICAgICAgICAgICYmIGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgPyBtb21lbnQoZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbTpzcycpIDogJyc7XG5cbiAgICAgIGRvY3VtZW50c1RvUmV0dXJuLnB1c2goZG9jdW1lbnRUcmVlTm9kZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnRzVG9SZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5jYXRlZ29yaXNlZERvY3VtZW50cyh1bmNhdGVnb3Jpc2VkRG9jdW1lbnRzOiBDYXNlRmlsZVZpZXdEb2N1bWVudFtdKTogRG9jdW1lbnRUcmVlTm9kZSB7XG4gICAgY29uc3QgZG9jdW1lbnRzOiBEb2N1bWVudFRyZWVOb2RlW10gPSBbXTtcbiAgICB1bmNhdGVnb3Jpc2VkRG9jdW1lbnRzLmZvckVhY2goZG9jdW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBkb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZTtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkRPQ1VNRU5UO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9maWxlbmFtZSA9IGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lO1xuICAgICAgZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsID0gZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUuYXR0cmlidXRlX3BhdGggPSBkb2N1bWVudC5hdHRyaWJ1dGVfcGF0aDtcbiAgICAgIGRvY3VtZW50VHJlZU5vZGUudXBsb2FkX3RpbWVzdGFtcCA9IHRoaXMuYXBwQ29uZmlnLmdldEVuYWJsZUNhc2VGaWxlVmlld1ZlcnNpb24xXzEoKVxuICAgICAgICAgICYmIGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgPyBtb21lbnQoZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbTpzcycpIDogJyc7XG5cbiAgICAgIGRvY3VtZW50cy5wdXNoKGRvY3VtZW50VHJlZU5vZGUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdW5jYXRlZ29yaXNlZE5vZGUgPSBuZXcgRG9jdW1lbnRUcmVlTm9kZSgpO1xuICAgIHVuY2F0ZWdvcmlzZWROb2RlLm5hbWUgPSBDYXNlRmlsZVZpZXdGb2xkZXJDb21wb25lbnQuVU5DQVRFR09SSVNFRF9ET0NVTUVOVFNfVElUTEU7XG4gICAgdW5jYXRlZ29yaXNlZE5vZGUudHlwZSA9IERvY3VtZW50VHJlZU5vZGVUeXBlLkZPTERFUjtcbiAgICB1bmNhdGVnb3Jpc2VkTm9kZS5jaGlsZHJlbiA9IGRvY3VtZW50cztcblxuICAgIHJldHVybiB1bmNhdGVnb3Jpc2VkTm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXIoc2VhcmNoVGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudFRyZWVOb2RlW10+IHtcbiAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgZGF0YSBzbyB3ZSBkbyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbFxuICAgIGZ1bmN0aW9uIGNvcHkobm9kZTogRG9jdW1lbnRUcmVlTm9kZSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihkb2N1bWVudFRyZWVOb2RlLCBub2RlKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhO1xuICAgIGlmIChzZWFyY2hUZXJtICYmIHNlYXJjaFRlcm0ubGVuZ3RoID49IENhc2VGaWxlVmlld0ZvbGRlckNvbXBvbmVudC5NSU5JTVVNX1NFQVJDSF9DSEFSQUNURVJTICYmIHRoaXMuZG9jdW1lbnRGaWx0ZXJGb3JtR3JvdXAuY29udHJvbHNbQ2FzZUZpbGVWaWV3Rm9sZGVyQ29tcG9uZW50LkRPQ1VNRU5UX1NFQVJDSF9GT1JNX0NPTlRST0xfTkFNRV0udmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5kb2N1bWVudFRyZWVEYXRhLm1hcChjb3B5KS5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyVHJlZURhdGEobm9kZTogRG9jdW1lbnRUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lICYmIG5vZGUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pICYmIG5vZGUudHlwZSA9PT0gRG9jdW1lbnRUcmVlTm9kZVR5cGUuRE9DVU1FTlQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYWxsIHJlY3Vyc2l2ZWx5IGlmIG5vZGUgaGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcmV0dXJuIChub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5tYXAoY29weSkuZmlsdGVyKGZpbHRlclRyZWVEYXRhKSkubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKGZpbHRlcmVkRGF0YSk7XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckRvY3VtZW50QWN0aW9uKFxuICAgIGFjdGlvblR5cGU6ICdjaGFuZ2VGb2xkZXInIHwgJ29wZW5JbkFOZXdUYWInIHwgJ2Rvd25sb2FkJyB8ICdwcmludCcsXG4gICAgZG9jdW1lbnRUcmVlTm9kZTogRG9jdW1lbnRUcmVlTm9kZVxuICApOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGFjdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgKCdjaGFuZ2VGb2xkZXInKTpcbiAgICAgICAgdGhpcy5vcGVuTW92ZURpYWxvZyhkb2N1bWVudFRyZWVOb2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgnb3BlbkluQU5ld1RhYicpOlxuICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKE1FRElBX1ZJRVdFUl9MT0NBTFNUT1JBR0VfS0VZLFxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZS5nZXRNZWRpYVZpZXdlckluZm8oe1xuICAgICAgICAgICAgZG9jdW1lbnRfYmluYXJ5X3VybDogZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsLFxuICAgICAgICAgICAgZG9jdW1lbnRfZmlsZW5hbWU6IGRvY3VtZW50VHJlZU5vZGUuZG9jdW1lbnRfZmlsZW5hbWVcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLm9wZW5Pbk5ld1RhYihcbiAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL21lZGlhLXZpZXdlciddKT8udG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgKCdkb3dubG9hZCcpOlxuICAgICAgICAvLyBDcmVhdGUgYSBVUkwgZnJvbSB0aGUgZG9jdW1lbnRfYmluYXJ5X3VybCBwcm9wZXJ0eSAoYWJzb2x1dGUgVVJMKSBhbmQgdXNlIHRoZSBwYXRoIHBvcnRpb24gKHJlbGF0aXZlIFVSTCkuXG4gICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE1hbmFnZSBDYXNlcyBhcHBsaWNhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwbHkgYSBwcm94eSB0byB0aGUgcmVxdWVzdCwgd2l0aFxuICAgICAgICAvLyB0aGUgY29ycmVjdCByZW1vdGUgZW5kcG9pbnRcbiAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUobmV3IFVSTChkb2N1bWVudFRyZWVOb2RlLmRvY3VtZW50X2JpbmFyeV91cmwpLnBhdGhuYW1lLCBkb2N1bWVudFRyZWVOb2RlLmRvY3VtZW50X2ZpbGVuYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICgncHJpbnQnKTpcbiAgICAgICAgdGhpcy5wcmludERvY3VtZW50KG5ldyBVUkwoZG9jdW1lbnRUcmVlTm9kZS5kb2N1bWVudF9iaW5hcnlfdXJsKS5wYXRobmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0RGF0YVNvdXJjZUFzY2VuZGluZyhjb2x1bW46IG51bWJlcikge1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLm5lc3RlZERhdGFTb3VyY2UubWFwKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5zb3J0Q2hpbGRyZW5Bc2NlbmRpbmcoY29sdW1uLCBTb3J0T3JkZXIuQVNDRU5ESU5HKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVOb2RlRGF0YShzb3J0ZWREYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0RGF0YVNvdXJjZURlc2NlbmRpbmcoY29sdW1uOiBudW1iZXIpIHtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5uZXN0ZWREYXRhU291cmNlLm1hcChpdGVtID0+IHtcbiAgICAgIGl0ZW0uc29ydENoaWxkcmVuRGVzY2VuZGluZyhjb2x1bW4sIFNvcnRPcmRlci5ERVNDRU5ESU5HKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVOb2RlRGF0YShzb3J0ZWREYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVOb2RlRGF0YShkYXRhOiBEb2N1bWVudFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2U2VsZWN0ZWQgPSB0aGlzLm5lc3RlZFRyZWVDb250cm9sLmV4cGFuc2lvbk1vZGVsLnNlbGVjdGVkLm1hcChcbiAgICAgIChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLm5hbWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMubmVzdGVkVHJlZUNvbnRyb2wuY29sbGFwc2VBbGwoKTtcbiAgICB0aGlzLm5lc3RlZERhdGFTb3VyY2UgPSBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgbmV3RG9jdW1lbnRUcmVlTm9kZSA9IG5ldyBEb2N1bWVudFRyZWVOb2RlKCk7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLm5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLnR5cGUgPSBpdGVtLnR5cGU7XG4gICAgICBuZXdEb2N1bWVudFRyZWVOb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcblxuICAgICAgcmV0dXJuIG5ld0RvY3VtZW50VHJlZU5vZGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbGF0dGVuZWRBcnJheSA9IHRoaXMubmVzdGVkRGF0YVNvdXJjZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBpdGVtLmZsYXR0ZW5lZEFsbDtcbiAgICB9KS5mbGF0KCk7XG4gICAgY29uc3QgbmV3T2JqZWN0cyA9IGZsYXR0ZW5lZEFycmF5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHByZXZTZWxlY3RlZC5pbmNsdWRlcyhpdGVtLm5hbWUpO1xuICAgIH0pO1xuICAgIG5ld09iamVjdHMuZm9yRWFjaChvYmplY3QgPT4gdGhpcy5uZXN0ZWRUcmVlQ29udHJvbC5leHBhbmQob2JqZWN0KSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZG9jdW1lbnRGaWx0ZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb3ZlRGlhbG9nKG5vZGU6IERvY3VtZW50VHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhc2VGaWxlVmlld0ZvbGRlclNlbGVjdG9yQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcywgZG9jdW1lbnQ6IG5vZGUgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKG5ld0NhdElkID0+IHtcbiAgICAgIGlmIChuZXdDYXRJZCkge1xuICAgICAgICB0aGlzLm1vdmVEb2N1bWVudC5lbWl0KHsgbmV3Q2F0ZWdvcnk6IG5ld0NhdElkLCBkb2N1bWVudDogbm9kZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludERvY3VtZW50KHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJpbnRXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwpO1xuICAgIHByaW50V2luZG93LnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nLCBkb3dubG9hZEZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgYS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6IG5vbmUnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IGRvd25sb2FkRmlsZU5hbWU7XG4gICAgYS5jbGljaygpO1xuICAgIGEucmVtb3ZlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkb2N1bWVudC1maWx0ZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRvY3VtZW50LWZpbHRlclwiIFtmb3JtR3JvdXBdPVwiZG9jdW1lbnRGaWx0ZXJGb3JtR3JvdXBcIj5cbiAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZG9jdW1lbnQtc2VhcmNoXCJcbiAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgaWQ9XCJkb2N1bWVudC1zZWFyY2hcIlxuICAgICAgbmFtZT1cImRvY3VtZW50U2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9jdW1lbnRTZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBkb2N1bWVudCBuYW1lXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggYnkgZG9jdW1lbnQgbmFtZVwiPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZG9jdW1lbnQtZm9sZGVycy1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImRvY3VtZW50LWZvbGRlcnMtaGVhZGVyX190aXRsZVwiPkRvY3VtZW50cyAoe3sgZG9jdW1lbnRDb3VudCB9fSk8L2Rpdj5cbiAgPGRpdj5cbiAgICA8Y2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlci1zb3J0XG4gICAgICAoc29ydEFzY2VuZGluZyk9XCJzb3J0RGF0YVNvdXJjZUFzY2VuZGluZygkZXZlbnQpXCJcbiAgICAgIChzb3J0RGVzY2VuZGluZyk9XCJzb3J0RGF0YVNvdXJjZURlc2NlbmRpbmcoJGV2ZW50KVwiXG4gICAgPjwvY2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlci1zb3J0PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJcIiAqbmdJZj1cImRvY3VtZW50VHJlZURhdGFcIj5cbiAgPGRpdiAqbmdJZj1cIiFuZXN0ZWREYXRhU291cmNlIHx8IG5lc3RlZERhdGFTb3VyY2UubGVuZ3RoID09PSAwXCI+XG4gICAgTm8gcmVzdWx0cyBmb3VuZFxuICA8L2Rpdj5cbiAgPGRpdj5cbiAgICA8Y2RrLXRyZWUgW2RhdGFTb3VyY2VdPVwibmVzdGVkRGF0YVNvdXJjZVwiIFt0cmVlQ29udHJvbF09XCJuZXN0ZWRUcmVlQ29udHJvbFwiPlxuICAgICAgPCEtLSBkb2N1bWVudCAtLT5cbiAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSBjbGFzcz1cImRvY3VtZW50LXRyZWUtY29udGFpbmVyX19ub2RlIGRvY3VtZW50LXRyZWUtY29udGFpbmVyX19ub2RlLS1kb2N1bWVudFwiICpjZGtUcmVlTm9kZURlZj1cImxldCBub2RlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJub2RlXCIgKGNsaWNrKT1cInNlbGVjdGVkTm9kZUl0ZW0gPSBub2RlOyBjbGlja2VkRG9jdW1lbnQuZW1pdChub2RlKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm5vZGUtLXNlbGVjdGVkXT1cInNlbGVjdGVkTm9kZUl0ZW0/Lm5hbWUgPT09IG5vZGUubmFtZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlX19pY29uXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1nL2Nhc2UtZmlsZS12aWV3L2Nhc2UtZmlsZS12aWV3LWRvY3VtZW50LnN2Z1wiIGNsYXNzPVwibm9kZV9faWNvbkltZ1wiIGFsdD1cIkRvY3VtZW50IGljb25cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGVfX25hbWUgbm9kZS1uYW1lLWRvY3VtZW50XCI+XG4gICAgICAgICAgICB7e25vZGUubmFtZX19XG4gICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGVfX2RvY3VtZW50LXVwbG9hZC10aW1lc3RhbXBcIj57e25vZGUudXBsb2FkX3RpbWVzdGFtcCB8IGRhdGU6XCJkZCBNTU0gWVlZWVwifX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlX19kb2N1bWVudC1vcHRpb25zXCI+XG4gICAgICAgICAgICA8Y2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlci1kb2N1bWVudC1hY3Rpb25zXG4gICAgICAgICAgICAgIChjaGFuZ2VGb2xkZXJBY3Rpb24pPVwidHJpZ2dlckRvY3VtZW50QWN0aW9uKCdjaGFuZ2VGb2xkZXInLCBub2RlKVwiXG4gICAgICAgICAgICAgIChvcGVuSW5BTmV3VGFiQWN0aW9uKT1cInRyaWdnZXJEb2N1bWVudEFjdGlvbignb3BlbkluQU5ld1RhYicsIG5vZGUpXCJcbiAgICAgICAgICAgICAgKGRvd25sb2FkQWN0aW9uKT1cInRyaWdnZXJEb2N1bWVudEFjdGlvbignZG93bmxvYWQnLCBub2RlKVwiXG4gICAgICAgICAgICAgIChwcmludEFjdGlvbik9XCJ0cmlnZ2VyRG9jdW1lbnRBY3Rpb24oJ3ByaW50Jywgbm9kZSlcIlxuICAgICAgICAgICAgICBbYWxsb3dNb3ZpbmddPVwiYWxsb3dNb3ZpbmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9jY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyLWRvY3VtZW50LWFjdGlvbnM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgIDwhLS0gZm9sZGVyLS0+XG4gICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgY2xhc3M9XCJkb2N1bWVudC10cmVlLWNvbnRhaW5lcl9fbm9kZSBkb2N1bWVudC10cmVlLWNvbnRhaW5lcl9fZm9sZGVyXCIgKmNka1RyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IG5lc3RlZENoaWxkcmVuXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJub2RlXCIgY2RrVHJlZU5vZGVUb2dnbGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGVfX2ljb25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIid0b2dnbGUgJyArIG5vZGUubmFtZVwiID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJub2RlX19pY29uSW1nXCJcbiAgICAgICAgICAgICAgICAgW3NyY109XCJuZXN0ZWRUcmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJy9hc3NldHMvaW1hZ2VzL2ZvbGRlci1vcGVuLnBuZycgOiAnL2Fzc2V0cy9pbWFnZXMvZm9sZGVyLnBuZydcIiBhbHQ9XCJGb2xkZXIgaWNvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub2RlX19jb3VudFwiPnt7bm9kZS5jaGlsZERvY3VtZW50Q291bnR9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vZGVfX25hbWUgbm9kZV9fbmFtZS0tZm9sZGVyXCI+e3tub2RlLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGRpdiBbY2xhc3MuZG9jdW1lbnQtdHJlZS1pbnZpc2libGVdPVwiIW5lc3RlZFRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGNka1RyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -37,17 +37,19 @@ export class ReadComplexFieldComponent extends AbstractFieldReadComponent {
37
37
  this.context = PaletteContext.DEFAULT;
38
38
  }
39
39
  }
40
- this.caseField?.field_type?.complex_fields?.forEach((field) => {
41
- if (field?.isDynamic()) {
42
- field.list_items = this.caseField.value[field.id]?.list_items;
43
- field.value = {
44
- list_items: field.list_items,
45
- value: this.caseField.value[field.id]?.value && this.caseField.value[field.id].value.code ?
46
- this.caseField.value[field.id].value.code :
47
- this.caseField.value[field.id]?.value
48
- };
49
- }
50
- });
40
+ if (this.caseField?.field_type && this.caseField.field_type.complex_fields) {
41
+ this.caseField?.field_type?.complex_fields?.forEach((field) => {
42
+ if (field?.isDynamic()) {
43
+ field.list_items = this.caseField.value[field.id]?.list_items;
44
+ field.value = {
45
+ list_items: field.list_items,
46
+ value: this.caseField.value[field.id]?.value && this.caseField.value[field.id].value.code ?
47
+ this.caseField.value[field.id].value.code :
48
+ this.caseField.value[field.id]?.value
49
+ };
50
+ }
51
+ });
52
+ }
51
53
  }
52
54
  }
53
55
  ReadComplexFieldComponent.ɵfac = /*@__PURE__*/ function () { let ɵReadComplexFieldComponent_BaseFactory; return function ReadComplexFieldComponent_Factory(t) { return (ɵReadComplexFieldComponent_BaseFactory || (ɵReadComplexFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadComplexFieldComponent)))(t || ReadComplexFieldComponent); }; }();
@@ -70,4 +72,4 @@ ReadComplexFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: R
70
72
  }], null, { caseFields: [{
71
73
  type: Input
72
74
  }] }); })();
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jb21wbGV4LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2NvbXBsZXgvcmVhZC1jb21wbGV4LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2NvbXBsZXgvcmVhZC1jb21wbGV4LWZpZWxkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7SUNGbEUsZ0RBTzhCOzs7SUFMNUIsNENBQXVCLGlDQUFBLDJCQUFBLCtDQUFBLDZCQUFBOzs7SUFNekIsNkRBTTJDOzs7SUFKekMsNENBQXVCLDJCQUFBLCtDQUFBLDZCQUFBOzs7SUFLekIsa0RBT2dDOzs7SUFMOUIsNENBQXVCLGlDQUFBLDJCQUFBLCtDQUFBLDZCQUFBOztBRFQzQixNQUFNLE9BQU8seUJBQTBCLFNBQVEsMEJBQTBCO0lBSnpFOztRQU9TLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRTdCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO0tBd0J4QztJQXRCUSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRTtZQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDMUM7YUFBTTtZQUNMLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkM7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxJQUFJLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDdEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDO2dCQUM5RCxLQUFLLENBQUMsS0FBSyxHQUFHO29CQUNaLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtvQkFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUs7aUJBQ3hDLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cVJBNUJVLHlCQUF5QixTQUF6Qix5QkFBeUI7NEVBQXpCLHlCQUF5QjtRQ1R0QyxnQ0FBbUM7UUFDakMsd0hBTzhCO1FBQzlCLGtKQU0yQztRQUMzQyw0SEFPZ0M7UUFDbEMsMEJBQWU7O1FBeEJELHNDQUFvQjtRQUU3QixlQUE4QztRQUE5QyxtRUFBOEM7UUFROUMsZUFBdUM7UUFBdkMsNERBQXVDOzt1RkREL0IseUJBQXlCO2NBSnJDLFNBQVM7MkJBQ0Usd0JBQXdCO2dCQU0zQixVQUFVO2tCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBBYnN0cmFjdEZpZWxkUmVhZENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtcmVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFsZXR0ZUNvbnRleHQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL3BhbGV0dGUtY29udGV4dC5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXJlYWQtY29tcGxleC1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWFkLWNvbXBsZXgtZmllbGQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRDb21wbGV4RmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkUmVhZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdID0gW107XG5cbiAgcHVibGljIHBhbGV0dGVDb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQ7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgaWYgKHRoaXMuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IFBhbGV0dGVDb250ZXh0LlRBQkxFX1ZJRVc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdG8gZGVmYXVsdCB2aWV3c1xuICAgICAgaWYgKCF0aGlzLmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBQYWxldHRlQ29udGV4dC5ERUZBVUxUO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhc2VGaWVsZD8uZmllbGRfdHlwZT8uY29tcGxleF9maWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQ/LmlzRHluYW1pYygpKSB7XG4gICAgICAgIGZpZWxkLmxpc3RfaXRlbXMgPSB0aGlzLmNhc2VGaWVsZC52YWx1ZVtmaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICAgIGZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgIGxpc3RfaXRlbXM6IGZpZWxkLmxpc3RfaXRlbXMsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY2FzZUZpZWxkLnZhbHVlW2ZpZWxkLmlkXT8udmFsdWUgJiYgdGhpcy5jYXNlRmllbGQudmFsdWVbZmllbGQuaWRdLnZhbHVlLmNvZGUgP1xuICAgICAgICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWVbZmllbGQuaWRdLnZhbHVlLmNvZGUgOlxuICAgICAgICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWVbZmllbGQuaWRdPy52YWx1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250ZXh0XCI+XG4gIDxjY2QtcmVhZC1jb21wbGV4LWZpZWxkLXJhd1xuICAgICpuZ1N3aXRjaENhc2U9XCJwYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUlwiXG4gICAgW2Nhc2VGaWVsZF09XCJjYXNlRmllbGRcIlxuICAgIFtjYXNlRmllbGRzXT1cImNhc2VGaWVsZHNcIlxuICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgIFt0b3BMZXZlbEZvcm1Hcm91cF09XCJ0b3BMZXZlbEZvcm1Hcm91cFwiXG4gICAgW2lkUHJlZml4XT1cImlkUHJlZml4XCJcbiAgPjwvY2NkLXJlYWQtY29tcGxleC1maWVsZC1yYXc+XG4gIDxjY2QtcmVhZC1jb21wbGV4LWZpZWxkLWNvbGxlY3Rpb24tdGFibGVcbiAgICAqbmdTd2l0Y2hDYXNlPVwicGFsZXR0ZUNvbnRleHQuVEFCTEVfVklFV1wiXG4gICAgW2Nhc2VGaWVsZF09XCJjYXNlRmllbGRcIlxuICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgIFt0b3BMZXZlbEZvcm1Hcm91cF09XCJ0b3BMZXZlbEZvcm1Hcm91cFwiXG4gICAgW2lkUHJlZml4XT1cImlkUHJlZml4XCJcbiAgPjwvY2NkLXJlYWQtY29tcGxleC1maWVsZC1jb2xsZWN0aW9uLXRhYmxlPlxuICA8Y2NkLXJlYWQtY29tcGxleC1maWVsZC10YWJsZVxuICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICBbY2FzZUZpZWxkXT1cImNhc2VGaWVsZFwiXG4gICAgW2Nhc2VGaWVsZHNdPVwiY2FzZUZpZWxkc1wiXG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3RvcExldmVsRm9ybUdyb3VwXT1cInRvcExldmVsRm9ybUdyb3VwXCJcbiAgICBbaWRQcmVmaXhdPVwiaWRQcmVmaXhcIlxuICA+PC9jY2QtcmVhZC1jb21wbGV4LWZpZWxkLXRhYmxlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jb21wbGV4LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2NvbXBsZXgvcmVhZC1jb21wbGV4LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2NvbXBsZXgvcmVhZC1jb21wbGV4LWZpZWxkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7SUNGbEUsZ0RBTzhCOzs7SUFMNUIsNENBQXVCLGlDQUFBLDJCQUFBLCtDQUFBLDZCQUFBOzs7SUFNekIsNkRBTTJDOzs7SUFKekMsNENBQXVCLDJCQUFBLCtDQUFBLDZCQUFBOzs7SUFLekIsa0RBT2dDOzs7SUFMOUIsNENBQXVCLGlDQUFBLDJCQUFBLCtDQUFBLDZCQUFBOztBRFQzQixNQUFNLE9BQU8seUJBQTBCLFNBQVEsMEJBQTBCO0lBSnpFOztRQU9TLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRTdCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO0tBMEJ4QztJQXhCUSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRTtZQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDMUM7YUFBTTtZQUNMLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkM7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQzFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7b0JBQ3RCLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztvQkFDOUQsS0FBSyxDQUFDLEtBQUssR0FBRzt3QkFDWixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7d0JBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3pGLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO3FCQUN4QyxDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O3FSQTlCVSx5QkFBeUIsU0FBekIseUJBQXlCOzRFQUF6Qix5QkFBeUI7UUNUdEMsZ0NBQW1DO1FBQ2pDLHdIQU84QjtRQUM5QixrSkFNMkM7UUFDM0MsNEhBT2dDO1FBQ2xDLDBCQUFlOztRQXhCRCxzQ0FBb0I7UUFFN0IsZUFBOEM7UUFBOUMsbUVBQThDO1FBUTlDLGVBQXVDO1FBQXZDLDREQUF1Qzs7dUZERC9CLHlCQUF5QjtjQUpyQyxTQUFTOzJCQUNFLHdCQUF3QjtnQkFNM0IsVUFBVTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2RlZmluaXRpb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL2Fic3RyYWN0LWZpZWxkLXJlYWQuY29tcG9uZW50JztcbmltcG9ydCB7IFBhbGV0dGVDb250ZXh0IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9wYWxldHRlLWNvbnRleHQuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1yZWFkLWNvbXBsZXgtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVhZC1jb21wbGV4LWZpZWxkLmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBSZWFkQ29tcGxleEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSA9IFtdO1xuXG4gIHB1YmxpYyBwYWxldHRlQ29udGV4dCA9IFBhbGV0dGVDb250ZXh0O1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGlmICh0aGlzLmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyKSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBQYWxldHRlQ29udGV4dC5UQUJMRV9WSUVXO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIGRlZmF1bHQgdmlld3NcbiAgICAgIGlmICghdGhpcy5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciAmJiB0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQuREVGQVVMVDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuY2FzZUZpZWxkPy5maWVsZF90eXBlICYmIHRoaXMuY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgIHRoaXMuY2FzZUZpZWxkPy5maWVsZF90eXBlPy5jb21wbGV4X2ZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkPy5pc0R5bmFtaWMoKSkge1xuICAgICAgICAgIGZpZWxkLmxpc3RfaXRlbXMgPSB0aGlzLmNhc2VGaWVsZC52YWx1ZVtmaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICAgICAgZmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICBsaXN0X2l0ZW1zOiBmaWVsZC5saXN0X2l0ZW1zLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FzZUZpZWxkLnZhbHVlW2ZpZWxkLmlkXT8udmFsdWUgJiYgdGhpcy5jYXNlRmllbGQudmFsdWVbZmllbGQuaWRdLnZhbHVlLmNvZGUgP1xuICAgICAgICAgICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZVtmaWVsZC5pZF0udmFsdWUuY29kZSA6XG4gICAgICAgICAgICAgIHRoaXMuY2FzZUZpZWxkLnZhbHVlW2ZpZWxkLmlkXT8udmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRleHRcIj5cbiAgPGNjZC1yZWFkLWNvbXBsZXgtZmllbGQtcmF3XG4gICAgKm5nU3dpdGNoQ2FzZT1cInBhbGV0dGVDb250ZXh0LkNIRUNLX1lPVVJfQU5TV0VSXCJcbiAgICBbY2FzZUZpZWxkXT1cImNhc2VGaWVsZFwiXG4gICAgW2Nhc2VGaWVsZHNdPVwiY2FzZUZpZWxkc1wiXG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3RvcExldmVsRm9ybUdyb3VwXT1cInRvcExldmVsRm9ybUdyb3VwXCJcbiAgICBbaWRQcmVmaXhdPVwiaWRQcmVmaXhcIlxuICA+PC9jY2QtcmVhZC1jb21wbGV4LWZpZWxkLXJhdz5cbiAgPGNjZC1yZWFkLWNvbXBsZXgtZmllbGQtY29sbGVjdGlvbi10YWJsZVxuICAgICpuZ1N3aXRjaENhc2U9XCJwYWxldHRlQ29udGV4dC5UQUJMRV9WSUVXXCJcbiAgICBbY2FzZUZpZWxkXT1cImNhc2VGaWVsZFwiXG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3RvcExldmVsRm9ybUdyb3VwXT1cInRvcExldmVsRm9ybUdyb3VwXCJcbiAgICBbaWRQcmVmaXhdPVwiaWRQcmVmaXhcIlxuICA+PC9jY2QtcmVhZC1jb21wbGV4LWZpZWxkLWNvbGxlY3Rpb24tdGFibGU+XG4gIDxjY2QtcmVhZC1jb21wbGV4LWZpZWxkLXRhYmxlXG4gICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgIFtjYXNlRmllbGRdPVwiY2FzZUZpZWxkXCJcbiAgICBbY2FzZUZpZWxkc109XCJjYXNlRmllbGRzXCJcbiAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICBbdG9wTGV2ZWxGb3JtR3JvdXBdPVwidG9wTGV2ZWxGb3JtR3JvdXBcIlxuICAgIFtpZFByZWZpeF09XCJpZFByZWZpeFwiXG4gID48L2NjZC1yZWFkLWNvbXBsZXgtZmllbGQtdGFibGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -265,23 +265,31 @@ export class WriteDocumentFieldComponent extends AbstractFieldWriteComponent {
265
265
  this.uploadedDocument = this.registerControl(new FormGroup(documentFormGroup), true);
266
266
  }
267
267
  getErrorMessage(error) {
268
- // Document Management unavailable
269
- if (0 === error.status || 502 === error.status) {
270
- return WriteDocumentFieldComponent.UPLOAD_ERROR_NOT_AVAILABLE;
271
- }
272
- let errorMsg = 'Error uploading file';
273
- if (error?.error) {
274
- const fullError = error.error;
275
- const start = fullError.indexOf('{');
276
- if (start >= 0) {
277
- const json = fullError.substring(start, fullError.length - 1).split('<EOL>').join('');
278
- const obj = JSON.parse(json);
279
- if (obj?.error) {
280
- errorMsg = obj.error;
268
+ switch (error.status) {
269
+ case 0:
270
+ case 502:
271
+ return WriteDocumentFieldComponent.UPLOAD_ERROR_NOT_AVAILABLE;
272
+ case 422:
273
+ {
274
+ let errorMsg = WriteDocumentFieldComponent.ERROR_UPLOADING_FILE;
275
+ if (error?.error) {
276
+ const fullError = error.error;
277
+ const start = fullError.indexOf('{');
278
+ if (start >= 0) {
279
+ const json = fullError.substring(start, fullError.length - 1).split('<EOL>').join('');
280
+ const obj = JSON.parse(json);
281
+ if (obj?.error) {
282
+ errorMsg = obj.error;
283
+ }
284
+ }
285
+ }
286
+ return errorMsg;
281
287
  }
282
- }
288
+ case 429:
289
+ return error?.error;
290
+ default:
291
+ return WriteDocumentFieldComponent.ERROR_UPLOADING_FILE;
283
292
  }
284
- return errorMsg;
285
293
  }
286
294
  buildDocumentUploadData(selectedFile) {
287
295
  const documentUpload = new FormData();
@@ -337,6 +345,7 @@ WriteDocumentFieldComponent.UPLOAD_TIMESTAMP = 'upload_timestamp';
337
345
  WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED = 'File required';
338
346
  WriteDocumentFieldComponent.UPLOAD_ERROR_NOT_AVAILABLE = 'Document upload facility is not available at the moment';
339
347
  WriteDocumentFieldComponent.UPLOAD_WAITING_FILE_STATUS = 'Uploading...';
348
+ WriteDocumentFieldComponent.ERROR_UPLOADING_FILE = 'Error Uploading File';
340
349
  WriteDocumentFieldComponent.ɵfac = function WriteDocumentFieldComponent_Factory(t) { return new (t || WriteDocumentFieldComponent)(i0.ɵɵdirectiveInject(i1.AbstractAppConfig), i0.ɵɵdirectiveInject(i2.CaseNotifier), i0.ɵɵdirectiveInject(i3.DocumentManagementService), i0.ɵɵdirectiveInject(i4.MatLegacyDialog), i0.ɵɵdirectiveInject(i5.FileUploadStateService), i0.ɵɵdirectiveInject(i6.JurisdictionService)); };
341
350
  WriteDocumentFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteDocumentFieldComponent, selectors: [["ccd-write-document-field"]], viewQuery: function WriteDocumentFieldComponent_Query(rf, ctx) { if (rf & 1) {
342
351
  i0.ɵɵviewQuery(_c0, 5);
@@ -396,4 +405,4 @@ WriteDocumentFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
396
405
  type: ViewChild,
397
406
  args: ['fileInput', { static: false }]
398
407
  }] }); })();
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtZG9jdW1lbnQtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZG9jdW1lbnQvd3JpdGUtZG9jdW1lbnQtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZG9jdW1lbnQvd3JpdGUtZG9jdW1lbnQtZmllbGQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLElBQUksU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFBO0FBQzdHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0Ys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QUFBO1FBRzVFLGdDQUFrQyxrQkFBQTtRQUNpRCx5R0FBUyxrQkFBYyxJQUFDO1FBQW9DLGFBQWtDOztRQUFBLGlCQUFTLEVBQUE7O1FBcEJsSyxpRUFBa0Q7UUFDakUsZUFBWTtRQUFaLDhCQUFZO1FBQ1EsZUFBK0M7UUFBL0Msa0VBQStDO1FBQUMsZUFBK0I7UUFBL0IsMERBQStCO1FBRWpGLGVBQXlCO1FBQXpCLDhDQUF5QjtRQUNyQixlQUFrQztRQUFsQywyREFBa0M7UUFJbkMsZUFBZTtRQUFmLG9DQUFlO1FBS3BDLGVBQTBDO1FBQTFDLDREQUEwQztRQUV4QyxlQUFvRDtRQUFwRCwrRUFBb0Q7UUFEckIsNkJBQVc7UUFLdUQsZUFBa0M7UUFBbEMsb0RBQWtDO1FBQUMsZUFBa0M7UUFBbEMsNkRBQWtDOzt1RkRFcEssMkJBQTJCO2NBSnZDLFNBQVM7MkJBQ0UsMEJBQTBCOzRPQWFjLFNBQVM7a0JBQTFELFNBQVM7bUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDYXNlVmlldyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS12aWV3Lm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50RGF0YSwgRm9ybURvY3VtZW50IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2RvY3VtZW50L2RvY3VtZW50LWRhdGEubW9kZWwnXG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vaHR0cC9odHRwLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kb2N1bWVudC1tYW5hZ2VtZW50L2RvY3VtZW50LW1hbmFnZW1lbnQuc2VydmljZSdcbmltcG9ydCB7IEp1cmlzZGljdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9qdXJpc2RpY3Rpb24vanVyaXNkaWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZU5vdGlmaWVyIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZS5ub3RpZmllcic7XG5pbXBvcnQgeyBEb2N1bWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvZG9jdW1lbnQtZGlhbG9nL2RvY3VtZW50LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaW5pdERpYWxvZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5pdC1kaWFsb2ctaGVscGVyJztcbmltcG9ydCB7IEFic3RyYWN0RmllbGRXcml0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVVcGxvYWRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2ZpbGUtdXBsb2FkLXN0YXRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd3JpdGUtZG9jdW1lbnQtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JpdGUtZG9jdW1lbnQtZmllbGQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX1VSTCA9ICdkb2N1bWVudF91cmwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX0JJTkFSWV9VUkwgPSAnZG9jdW1lbnRfYmluYXJ5X3VybCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9DVU1FTlRfRklMRU5BTUUgPSAnZG9jdW1lbnRfZmlsZW5hbWUnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX0hBU0ggPSAnZG9jdW1lbnRfaGFzaCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVBMT0FEX1RJTUVTVEFNUCA9ICd1cGxvYWRfdGltZXN0YW1wJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVUExPQURfRVJST1JfRklMRV9SRVFVSVJFRCA9ICdGaWxlIHJlcXVpcmVkJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVUExPQURfRVJST1JfTk9UX0FWQUlMQUJMRSA9ICdEb2N1bWVudCB1cGxvYWQgZmFjaWxpdHkgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVUExPQURfV0FJVElOR19GSUxFX1NUQVRVUyA9ICdVcGxvYWRpbmcuLi4nO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgZmlsZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBzZWxlY3RlZEZpbGU6IEZpbGU7XG4gIHB1YmxpYyB2YWxpZCA9IHRydWU7XG4gIHB1YmxpYyBmaWxlVXBsb2FkTWVzc2FnZXM6IHN0cmluZztcbiAgcHVibGljIGNvbmZpcm1SZXBsYWNlUmVzdWx0OiBzdHJpbmc7XG4gIHB1YmxpYyBjbGlja0luc2lkZVRoZURvY3VtZW50OiBib29sZWFuO1xuXG4gIC8vIHRoZXNlIGFyZSBwdWJsaWMgc28gdGhhdCB0aGV5IGNhbiBiZSBtb2NrZWQgZm9yIHRlc3RzXG4gIHB1YmxpYyBmaWxlVXBsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBkaWFsb2dTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VOb3RpZmllclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMganVyaXNkaWN0aW9uU3ViczogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgdXBsb2FkZWREb2N1bWVudDogRm9ybUdyb3VwO1xuICBwcml2YXRlIGRpYWxvZ0NvbmZpZzogTWF0RGlhbG9nQ29uZmlnO1xuICBwcml2YXRlIHNlY3VyZU1vZGVPbjogYm9vbGVhbjtcblxuICBwdWJsaWMganVyaXNkaWN0aW9uSWQ6IHN0cmluZztcbiAgcHVibGljIGNhc2VUeXBlSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50TWFuYWdlbWVudDogRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlVXBsb2FkU3RhdGVTZXJ2aWNlOiBGaWxlVXBsb2FkU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkganVyaXNkaWN0aW9uU2VydmljZTogSnVyaXNkaWN0aW9uU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlY3VyZU1vZGVPbiA9IHRoaXMuYXBwQ29uZmlnLmdldERvY3VtZW50U2VjdXJlTW9kZSgpO1xuICAgIGlmICh0aGlzLnNlY3VyZU1vZGVPbikge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0Nhc2VEZXRhaWxzKCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nQ29uZmlnID0gaW5pdERpYWxvZygpO1xuICAgIC8vIEVVSS0zNDAzLiBUaGUgZmllbGQgd2FzIG5vdCBiZWluZyByZWdpc3RlcmVkIHdoZW4gdGhlcmUgd2FzIG5vIHZhbHVlIGFuZCB0aGUgZmllbGRcbiAgICAvLyBpdHNlbGYgd2FzIG5vdCBtYW5kYXRvcnksIHdoaWNoIG1lYW50IHRoYXQgc2hvd19jb25kaXRpb25zIHdvdWxkIG5vdCBiZSBldmFsdWF0ZWQuXG4gICAgLy8gSSd2ZSBjbGVhbmVkIHVwIHRoZSBsb2dpYyBhbmQgaXQncyBub3cgYWx3YXlzIHJlZ2lzdGVyZWQuXG4gICAgbGV0IGRvY3VtZW50ID0gdGhpcy5jYXNlRmllbGQudmFsdWUgfHwgeyBkb2N1bWVudF91cmw6IG51bGwsIGRvY3VtZW50X2JpbmFyeV91cmw6IG51bGwsIGRvY3VtZW50X2ZpbGVuYW1lOiBudWxsIH07XG4gICAgZG9jdW1lbnQgPSB0aGlzLnNlY3VyZU1vZGVPbiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRfaGFzaCA/IHsgLi4uZG9jdW1lbnQsIGRvY3VtZW50X2hhc2g6IG51bGwgfSA6IGRvY3VtZW50O1xuICAgIGlmICh0aGlzLmlzQU1hbmRhdG9yeUNvbXBvbmVudCgpKSB7XG4gICAgICB0aGlzLmNyZWF0ZURvY3VtZW50Rm9ybVdpdGhWYWxpZGF0b3IoZG9jdW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZURvY3VtZW50Rm9ybShkb2N1bWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbGVVcGxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaWFsb2dTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGlhbG9nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhc2VOb3RpZmllclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jYXNlTm90aWZpZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuanVyaXNkaWN0aW9uU3Vicykge1xuICAgICAgdGhpcy5qdXJpc2RpY3Rpb25TdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzVXBsb2FkSW5Qcm9ncmVzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWxlVXBsb2FkU3RhdGVTZXJ2aWNlLmlzVXBsb2FkSW5Qcm9ncmVzcygpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFVwbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWxlVXBsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbGVVcGxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGVVcGxvYWRTdGF0ZVNlcnZpY2Uuc2V0VXBsb2FkSW5Qcm9ncmVzcyhmYWxzZSk7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMucmVzZXRVcGxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlVmFsaWRhdGlvbnNPblRhYigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FNYW5kYXRvcnlDb21wb25lbnQoKSkge1xuICAgICAgaWYgKHRoaXMudmFsaWRhdGVGb3JtVXBsb2FkZWREb2N1bWVudCgpKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUZpbGVVcGxvYWRNZXNzYWdlcyhXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX0VSUk9SX0ZJTEVfUkVRVUlSRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlQ2hhbmdlRXZlbnQoZmlsZUlucHV0OiBhbnkpOiB2b2lkIHtcblxuICAgIGlmIChmaWxlSW5wdXQudGFyZ2V0LmZpbGVzWzBdKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGVJbnB1dC50YXJnZXQuZmlsZXNbMF07XG4gICAgICB0aGlzLmRpc3BsYXlGaWxlVXBsb2FkTWVzc2FnZXMoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9XQUlUSU5HX0ZJTEVfU1RBVFVTKTtcbiAgICAgIGNvbnN0IGRvY3VtZW50VXBsb2FkOiBGb3JtRGF0YSA9IHRoaXMuYnVpbGREb2N1bWVudFVwbG9hZERhdGEodGhpcy5zZWxlY3RlZEZpbGUpO1xuICAgICAgdGhpcy5maWxlVXBsb2FkU3RhdGVTZXJ2aWNlLnNldFVwbG9hZEluUHJvZ3Jlc3ModHJ1ZSk7XG5cbiAgICAgIHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuZG9jdW1lbnRNYW5hZ2VtZW50LnVwbG9hZEZpbGUoZG9jdW1lbnRVcGxvYWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXN1bHREb2N1bWVudDogRG9jdW1lbnREYXRhKSA9PiB0aGlzLmhhbmRsZURvY3VtZW50VXBsb2FkUmVzdWx0KHJlc3VsdERvY3VtZW50KSxcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yKSA9PiB0aGlzLmhhbmRsZURvY3VtZW50VXBsb2FkRXJyb3IoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldFVwbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRmlsZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZmlsZVNlbGVjdEV2ZW50KCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5jYXNlRmllbGQudmFsdWUgJiYgdGhpcy5jYXNlRmllbGQudmFsdWUuZG9jdW1lbnRfZmlsZW5hbWUpIHx8XG4gICAgICAodGhpcy5zZWxlY3RlZEZpbGUgJiYgdGhpcy5zZWxlY3RlZEZpbGUubmFtZSkpIHtcbiAgICAgIHRoaXMub3BlbkRpYWxvZyh0aGlzLmRpYWxvZ0NvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkZpbGVEaWFsb2coKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlclJlcGxhY2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29uZmlybVJlcGxhY2VSZXN1bHQgPT09ICdSZXBsYWNlJykge1xuICAgICAgdGhpcy5vcGVuRmlsZURpYWxvZygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRlZEZpbGVOYW1lKCk6IGFueSB7XG4gICAgaWYgKHRoaXMudXBsb2FkZWREb2N1bWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWREb2N1bWVudC5nZXQoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkRPQ1VNRU5UX0ZJTEVOQU1FKS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VXBsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICBpZiAodGhpcy5pc0FNYW5kYXRvcnlDb21wb25lbnQoKSkge1xuICAgICAgdGhpcy51cGRhdGVEb2N1bWVudEZvcm0obnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICB0aGlzLmRpc3BsYXlGaWxlVXBsb2FkTWVzc2FnZXMoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9FUlJPUl9GSUxFX1JFUVVJUkVEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWxlVmFsaWRhdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBTWFuZGF0b3J5Q29tcG9uZW50KCkpIHtcbiAgICAgIGlmICh0aGlzLmNsaWNrSW5zaWRlVGhlRG9jdW1lbnQgJiYgdGhpcy52YWxpZGF0ZUZvcm1VcGxvYWRlZERvY3VtZW50KCkgJiYgIXRoaXMuaXNVcExvYWRpbmdBRmlsZSgpKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUZpbGVVcGxvYWRNZXNzYWdlcyhXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX0VSUk9SX0ZJTEVfUkVRVUlSRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRpYWxvZyhkaWFsb2dDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERvY3VtZW50RGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgIHRoaXMuZGlhbG9nU3Vic2NyaXB0aW9uID0gZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5jb25maXJtUmVwbGFjZVJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMudHJpZ2dlclJlcGxhY2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgd2UgY2FuIGdldCB0aGUgY2FzZSB0eXBlIGFuZCBqdXJpc2RpY3Rpb24gZnJvbSBkaWZmZXJlbnQgc291cmNlc1xuICAvLyBJZiB3ZSBhcmUgcnVubmluZyBhbiBldmVudCwgdGhlIGNhc2VOb3RpZmllciB3aWxsIGhhdmUgdGhlIGN1cnJlbnQgY2FzZVxuICAvLyBJZiB3ZSBhcmUgY3JlYXRpbmcgYSBjYXNlLCB0aGUgY2FzZSBkb2Vzbid0IGV4aXN0IHlldCwgc28gdGhlIGNhc2VOb3RpZmllciBjYW4ndCBoZWxwXG4gIC8vIEluc3RlYWQgd2UgY2FuIHVzZSB0aGUgZXZlbnRUcmlnZ2VyIHRvIGdldCB0aGUgY2FzZSB0eXBlLCBhbmQgdGhlIGp1cmlzZGljdGlvbiBzZXJ2aWNlIHRvXG4gIC8vIGdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGp1cmlzZGljdGlvblxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2FzZURldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlTm90aWZpZXJTdWJzY3JpcHRpb24gPSB0aGlzLmNhc2VOb3RpZmllci5jYXNlVmlldy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNhc2VEZXRhaWxzOiBDYXNlVmlldykgPT4ge1xuICAgICAgICB0aGlzLmNhc2VUeXBlSWQgPSBjYXNlRGV0YWlscz8uY2FzZV90eXBlLmlkO1xuICAgICAgICB0aGlzLmp1cmlzZGljdGlvbklkID0gY2FzZURldGFpbHM/LmNhc2VfdHlwZT8uanVyaXNkaWN0aW9uPy5pZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmp1cmlzZGljdGlvblN1YnMgPSB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2Uuc2VsZWN0ZWRKdXJpc2RpY3Rpb25CUy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGp1cmlzZGljdGlvbikgPT4ge1xuICAgICAgICBpZiAoanVyaXNkaWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5qdXJpc2RpY3Rpb25JZCA9IGp1cmlzZGljdGlvbi5pZDtcbiAgICAgICAgICBpZiAoanVyaXNkaWN0aW9uLmN1cnJlbnRDYXNlVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNlVHlwZUlkID0ganVyaXNkaWN0aW9uLmN1cnJlbnRDYXNlVHlwZS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FNYW5kYXRvcnlDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dCAmJiB0aGlzLmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09IENvbnN0YW50cy5NQU5EQVRPUlk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlGaWxlVXBsb2FkTWVzc2FnZXMoZmlsZVVwbG9hZE1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVVcGxvYWRNZXNzYWdlcyA9IGZpbGVVcGxvYWRNZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VwTG9hZGluZ0FGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRNZXNzYWdlcyA9PT0gV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9XQUlUSU5HX0ZJTEVfU1RBVFVTO1xuICB9XG4gIHByaXZhdGUgdmFsaWRhdGVGb3JtVXBsb2FkZWREb2N1bWVudCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudXBsb2FkZWREb2N1bWVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRpb24gPSAhdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfVVJMKS52YWxpZCAmJlxuICAgICAgIXRoaXMudXBsb2FkZWREb2N1bWVudC5nZXQoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkRPQ1VNRU5UX0JJTkFSWV9VUkwpLnZhbGlkICYmXG4gICAgICAhdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfRklMRU5BTUUpLnZhbGlkO1xuXG4gICAgaWYgKHRoaXMuc2VjdXJlTW9kZU9uKSB7XG4gICAgICB2YWxpZGF0aW9uID0gdmFsaWRhdGlvbiAmJiAhdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfSEFTSCkudmFsaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb247XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURvY3VtZW50Rm9ybSh1cmw6IHN0cmluZywgYmluYXJ5VXJsOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGRvY3VtZW50SGFzaD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkZWREb2N1bWVudC5nZXQoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkRPQ1VNRU5UX1VSTCkuc2V0VmFsdWUodXJsKTtcbiAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5ET0NVTUVOVF9CSU5BUllfVVJMKS5zZXRWYWx1ZShiaW5hcnlVcmwpO1xuICAgIHRoaXMudXBsb2FkZWREb2N1bWVudC5nZXQoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkRPQ1VNRU5UX0ZJTEVOQU1FKS5zZXRWYWx1ZShmaWxlbmFtZSk7XG4gICAgaWYgKGRvY3VtZW50SGFzaCkge1xuICAgICAgdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfSEFTSCkuc2V0VmFsdWUoZG9jdW1lbnRIYXNoKTtcbiAgICB9XG4gICAgaWYodGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX1RJTUVTVEFNUCkpe1xuICAgICAgdGhpcy51cGxvYWRlZERvY3VtZW50LnJlbW92ZUNvbnRyb2woV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9USU1FU1RBTVApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRG9jdW1lbnRGb3JtV2l0aFZhbGlkYXRvcihkb2N1bWVudDogRm9ybURvY3VtZW50KTogdm9pZCB7XG4gICAgbGV0IGRvY3VtZW50Rm9ybUdyb3VwID0ge1xuICAgICAgZG9jdW1lbnRfdXJsOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfdXJsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGRvY3VtZW50X2JpbmFyeV91cmw6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC5kb2N1bWVudF9iaW5hcnlfdXJsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGRvY3VtZW50X2ZpbGVuYW1lOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfZmlsZW5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgfTtcblxuICAgIGlmKGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgJiYgKHR5cGVvZiBkb2N1bWVudC51cGxvYWRfdGltZXN0YW1wID09PSAnc3RyaW5nJyApKXtcbiAgICAgIGRvY3VtZW50Rm9ybUdyb3VwID0ge1xuICAgICAgICAuLi5kb2N1bWVudEZvcm1Hcm91cCxcbiAgICAgICAgLi4ueyB1cGxvYWRfdGltZXN0YW1wOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50Rm9ybUdyb3VwID0gdGhpcy5zZWN1cmVNb2RlT24gPyB7XG4gICAgICAuLi5kb2N1bWVudEZvcm1Hcm91cCxcbiAgICAgIC4uLnsgZG9jdW1lbnRfaGFzaDogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LmRvY3VtZW50X2hhc2gpIH1cbiAgICB9IDogZG9jdW1lbnRGb3JtR3JvdXA7XG5cbiAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnQgPSB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUdyb3VwKGRvY3VtZW50Rm9ybUdyb3VwKSwgdHJ1ZSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb2N1bWVudEZvcm0oZG9jdW1lbnQ6IEZvcm1Eb2N1bWVudCk6IHZvaWQge1xuICAgIGxldCBkb2N1bWVudEZvcm1Hcm91cCA9IHtcbiAgICAgIGRvY3VtZW50X3VybDogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LmRvY3VtZW50X3VybCksXG4gICAgICBkb2N1bWVudF9iaW5hcnlfdXJsOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybCksXG4gICAgICBkb2N1bWVudF9maWxlbmFtZTogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lKVxuICAgIH07XG5cbiAgICBpZihkb2N1bWVudC51cGxvYWRfdGltZXN0YW1wICYmICh0eXBlb2YgZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCA9PT0gJ3N0cmluZycgKSl7XG4gICAgICBkb2N1bWVudEZvcm1Hcm91cCA9IHtcbiAgICAgICAgLi4uZG9jdW1lbnRGb3JtR3JvdXAsXG4gICAgICAgIC4uLnsgdXBsb2FkX3RpbWVzdGFtcDogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXApIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudEZvcm1Hcm91cCA9IHRoaXMuc2VjdXJlTW9kZU9uID8ge1xuICAgICAgLi4uZG9jdW1lbnRGb3JtR3JvdXAsXG4gICAgICAuLi57IGRvY3VtZW50X2hhc2g6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC5kb2N1bWVudF9oYXNoKSB9XG4gICAgfSA6IGRvY3VtZW50Rm9ybUdyb3VwO1xuXG4gICAgdGhpcy51cGxvYWRlZERvY3VtZW50ID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cChkb2N1bWVudEZvcm1Hcm91cCksIHRydWUpIGFzIEZvcm1Hcm91cDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiBIdHRwRXJyb3IpOiBzdHJpbmcge1xuICAgIC8vIERvY3VtZW50IE1hbmFnZW1lbnQgdW5hdmFpbGFibGVcbiAgICBpZiAoMCA9PT0gZXJyb3Iuc3RhdHVzIHx8IDUwMiA9PT0gZXJyb3Iuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9FUlJPUl9OT1RfQVZBSUxBQkxFO1xuICAgIH1cblxuICAgIGxldCBlcnJvck1zZyA9ICdFcnJvciB1cGxvYWRpbmcgZmlsZSc7XG4gICAgaWYgKGVycm9yPy5lcnJvcikge1xuICAgICAgY29uc3QgZnVsbEVycm9yID0gZXJyb3IuZXJyb3I7XG4gICAgICBjb25zdCBzdGFydCA9IGZ1bGxFcnJvci5pbmRleE9mKCd7Jyk7XG4gICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICBjb25zdCBqc29uID0gZnVsbEVycm9yLnN1YnN0cmluZyhzdGFydCwgZnVsbEVycm9yLmxlbmd0aCAtIDEpLnNwbGl0KCc8RU9MPicpLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgICBpZiAob2JqPy5lcnJvcikge1xuICAgICAgICAgIGVycm9yTXNnID0gb2JqLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9yTXNnO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERvY3VtZW50VXBsb2FkRGF0YShzZWxlY3RlZEZpbGU6IEZpbGUpOiBGb3JtRGF0YSB7XG4gICAgY29uc3QgZG9jdW1lbnRVcGxvYWQ6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZG9jdW1lbnRVcGxvYWQuYXBwZW5kKCdmaWxlcycsIHNlbGVjdGVkRmlsZSwgc2VsZWN0ZWRGaWxlLm5hbWUpO1xuICAgIGRvY3VtZW50VXBsb2FkLmFwcGVuZCgnY2xhc3NpZmljYXRpb24nLCAnUFVCTElDJyk7XG5cbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0RG9jdW1lbnRTZWN1cmVNb2RlKCkpIHtcbiAgICAgIGNvbnN0IGNhc2VUeXBlSWQgPSB0aGlzLmNhc2VUeXBlSWQgPyB0aGlzLmNhc2VUeXBlSWQgOiBudWxsO1xuICAgICAgY29uc3QgY2FzZVR5cGVKdXJpc2RpY3Rpb25JZCA9IHRoaXMuanVyaXNkaWN0aW9uSWQgPyB0aGlzLmp1cmlzZGljdGlvbklkIDogbnVsbDtcbiAgICAgIGRvY3VtZW50VXBsb2FkLmFwcGVuZCgnY2FzZVR5cGVJZCcsIGNhc2VUeXBlSWQpO1xuICAgICAgZG9jdW1lbnRVcGxvYWQuYXBwZW5kKCdqdXJpc2RpY3Rpb25JZCcsIGNhc2VUeXBlSnVyaXNkaWN0aW9uSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb2N1bWVudFVwbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRG9jdW1lbnRVcGxvYWRSZXN1bHQocmVzdWx0OiBEb2N1bWVudERhdGEpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudXBsb2FkZWREb2N1bWVudCkge1xuICAgICAgaWYgKHRoaXMuc2VjdXJlTW9kZU9uKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnRGb3JtKHsgZG9jdW1lbnRfdXJsOiBudWxsLCBkb2N1bWVudF9iaW5hcnlfdXJsOiBudWxsLCBkb2N1bWVudF9maWxlbmFtZTogbnVsbCwgZG9jdW1lbnRfaGFzaDogbnVsbCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnRGb3JtKHsgZG9jdW1lbnRfdXJsOiBudWxsLCBkb2N1bWVudF9iaW5hcnlfdXJsOiBudWxsLCBkb2N1bWVudF9maWxlbmFtZTogbnVsbCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMuc2VjdXJlTW9kZU9uID8gcmVzdWx0LmRvY3VtZW50c1swXSA6IHJlc3VsdC5fZW1iZWRkZWQuZG9jdW1lbnRzWzBdO1xuXG4gICAgaWYgKHRoaXMuc2VjdXJlTW9kZU9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZURvY3VtZW50Rm9ybShcbiAgICAgICAgZG9jdW1lbnQuX2xpbmtzLnNlbGYuaHJlZixcbiAgICAgICAgZG9jdW1lbnQuX2xpbmtzLmJpbmFyeS5ocmVmLFxuICAgICAgICBkb2N1bWVudC5vcmlnaW5hbERvY3VtZW50TmFtZSxcbiAgICAgICAgZG9jdW1lbnQuaGFzaFRva2VuXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZURvY3VtZW50Rm9ybShcbiAgICAgICAgZG9jdW1lbnQuX2xpbmtzLnNlbGYuaHJlZixcbiAgICAgICAgZG9jdW1lbnQuX2xpbmtzLmJpbmFyeS5ocmVmLFxuICAgICAgICBkb2N1bWVudC5vcmlnaW5hbERvY3VtZW50TmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgdGhpcy5maWxlVXBsb2FkU3RhdGVTZXJ2aWNlLnNldFVwbG9hZEluUHJvZ3Jlc3MoZmFsc2UpO1xuXG4gICAgLy8gcmVmcmVzaCByZXBsYWNlZCBkb2N1bWVudCBpbmZvXG4gICAgaWYgKHRoaXMuY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZS5kb2N1bWVudF9iaW5hcnlfdXJsID0gZG9jdW1lbnQuX2xpbmtzLmJpbmFyeS5ocmVmO1xuICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWUuZG9jdW1lbnRfZmlsZW5hbWUgPSBkb2N1bWVudC5vcmlnaW5hbERvY3VtZW50TmFtZTtcbiAgICAgIHRoaXMuY2FzZUZpZWxkLnZhbHVlLmRvY3VtZW50X3VybCA9IGRvY3VtZW50Ll9saW5rcy5zZWxmLmhyZWY7XG5cbiAgICAgIGlmICh0aGlzLnNlY3VyZU1vZGVPbikge1xuICAgICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZS5kb2N1bWVudF9oYXNoID0gZG9jdW1lbnQuaGFzaFRva2VuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRG9jdW1lbnRVcGxvYWRFcnJvcihlcnJvcjogSHR0cEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5maWxlVXBsb2FkTWVzc2FnZXMgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZVVwbG9hZFN0YXRlU2VydmljZS5zZXRVcGxvYWRJblByb2dyZXNzKGZhbHNlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3IgYm90dG9tLTMwJzogIXZhbGlkfVwiPlxuICA8bGFiZWwgW2Zvcl09XCJpZCgpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCIgYXR0ci5hcmlhLWxhYmVsPVwie3tjYXNlRmllbGQgfCBjY2RGaWVsZExhYmVsfX1cIj57eyhjYXNlRmllbGQgfCBjY2RGaWVsZExhYmVsKX19PC9zcGFuPlxuICA8L2xhYmVsPlxuICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiICpuZ0lmPVwiY2FzZUZpZWxkLmhpbnRfdGV4dFwiPnt7Y2FzZUZpZWxkLmhpbnRfdGV4dCB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZpbGVVcGxvYWRNZXNzYWdlcyAmJiAhdmFsaWRcIj57e2ZpbGVVcGxvYWRNZXNzYWdlcyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPlxuXG4gIDxkaXY+XG4gICAgPCEtLTxzcGFuICpuZ0lmPVwiZ2V0VXBsb2FkZWRGaWxlTmFtZSgpXCIgY2xhc3M9XCJ0ZXh0LTE2XCI+RmlsZSBuYW1lOiB7e2dldFVwbG9hZGVkRmlsZU5hbWUoKX19PC9zcGFuPi0tPlxuICAgIDxjY2QtcmVhZC1kb2N1bWVudC1maWVsZCAqbmdJZj1cImNhc2VGaWVsZFwiIFtjYXNlRmllbGRdPVwiY2FzZUZpZWxkXCI+PC9jY2QtcmVhZC1kb2N1bWVudC1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmUnPlxuXG4gICAgPGRpdiBbaWRdPVwiY3JlYXRlRWxlbWVudElkKCdmaWxlSW5wdXRXcmFwcGVyJylcIiAoY2xpY2spPVwiZmlsZVNlbGVjdEV2ZW50KClcIj48L2Rpdj5cbiAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwXCIgW2lkXT1cImlkKClcIiB0eXBlPVwiZmlsZVwiIChrZXlkb3duLlRhYik9XCJmaWxlVmFsaWRhdGlvbnNPblRhYigpXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgIGFjY2VwdD1cInt7Y2FzZUZpZWxkLmZpZWxkX3R5cGUucmVndWxhcl9leHByZXNzaW9ufX1cIiAjZmlsZUlucHV0Lz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJvdHRvbS0zMFwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNhbmNlbCB1cGxvYWRcIiAoY2xpY2spPVwiY2FuY2VsVXBsb2FkKClcIiBbZGlzYWJsZWRdPVwiIWlzVXBsb2FkSW5Qcm9ncmVzcygpXCI+e3snQ2FuY2VsIHVwbG9hZCcgfCBycHhUcmFuc2xhdGV9fTwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtZG9jdW1lbnQtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZG9jdW1lbnQvd3JpdGUtZG9jdW1lbnQtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZG9jdW1lbnQvd3JpdGUtZG9jdW1lbnQtZmllbGQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLElBQUksU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFBO0FBQzdHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0Ys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RUgsb0hBQTZGO1FBQy9GLGlCQUFNO1FBRU4sK0JBQStCLGNBQUE7UUFFbUIsc0dBQVMscUJBQWlCLElBQUM7UUFBQyxpQkFBTTtRQUNsRixvQ0FDd0U7UUFEVixvSEFBZSwwQkFBc0IsSUFBQyxtR0FBVywyQkFBdUIsSUFBbEM7UUFBcEcsaUJBQ3dFLEVBQUEsRUFBQTtRQUc1RSxnQ0FBa0Msa0JBQUE7UUFDaUQseUdBQVMsa0JBQWMsSUFBQztRQUFvQyxhQUFrQzs7UUFBQSxpQkFBUyxFQUFBOztRQXBCbEssaUVBQWtEO1FBQ2pFLGVBQVk7UUFBWiw4QkFBWTtRQUNRLGVBQStDO1FBQS9DLGtFQUErQztRQUFDLGVBQStCO1FBQS9CLDBEQUErQjtRQUVqRixlQUF5QjtRQUF6Qiw4Q0FBeUI7UUFDckIsZUFBa0M7UUFBbEMsMkRBQWtDO1FBSW5DLGVBQWU7UUFBZixvQ0FBZTtRQUtwQyxlQUEwQztRQUExQyw0REFBMEM7UUFFeEMsZUFBb0Q7UUFBcEQsK0VBQW9EO1FBRHJCLDZCQUFXO1FBS3VELGVBQWtDO1FBQWxDLG9EQUFrQztRQUFDLGVBQWtDO1FBQWxDLDZEQUFrQzs7dUZERXBLLDJCQUEyQjtjQUp2QyxTQUFTOzJCQUNFLDBCQUEwQjs0T0FjYyxTQUFTO2tCQUExRCxTQUFTO21CQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ2FzZVZpZXcgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS12aWV3L2Nhc2Utdmlldy5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudERhdGEsIEZvcm1Eb2N1bWVudCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kb2N1bWVudC9kb2N1bWVudC1kYXRhLm1vZGVsJ1xuaW1wb3J0IHsgSHR0cEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2h0dHAvaHR0cC1lcnJvci5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZG9jdW1lbnQtbWFuYWdlbWVudC9kb2N1bWVudC1tYW5hZ2VtZW50LnNlcnZpY2UnXG5pbXBvcnQgeyBKdXJpc2RpY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvanVyaXNkaWN0aW9uL2p1cmlzZGljdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzL2Nhc2Uubm90aWZpZXInO1xuaW1wb3J0IHsgRG9jdW1lbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2RvY3VtZW50LWRpYWxvZy9kb2N1bWVudC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IGluaXREaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2luaXQtZGlhbG9nLWhlbHBlcic7XG5pbXBvcnQgeyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL2Fic3RyYWN0LWZpZWxkLXdyaXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9maWxlLXVwbG9hZC1zdGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWRvY3VtZW50LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dyaXRlLWRvY3VtZW50LWZpZWxkLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRXcml0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET0NVTUVOVF9VUkwgPSAnZG9jdW1lbnRfdXJsJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET0NVTUVOVF9CSU5BUllfVVJMID0gJ2RvY3VtZW50X2JpbmFyeV91cmwnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPQ1VNRU5UX0ZJTEVOQU1FID0gJ2RvY3VtZW50X2ZpbGVuYW1lJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET0NVTUVOVF9IQVNIID0gJ2RvY3VtZW50X2hhc2gnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVQTE9BRF9USU1FU1RBTVAgPSAndXBsb2FkX3RpbWVzdGFtcCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVBMT0FEX0VSUk9SX0ZJTEVfUkVRVUlSRUQgPSAnRmlsZSByZXF1aXJlZCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVBMT0FEX0VSUk9SX05PVF9BVkFJTEFCTEUgPSAnRG9jdW1lbnQgdXBsb2FkIGZhY2lsaXR5IGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVBMT0FEX1dBSVRJTkdfRklMRV9TVEFUVVMgPSAnVXBsb2FkaW5nLi4uJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFUlJPUl9VUExPQURJTkdfRklMRSA9ICdFcnJvciBVcGxvYWRpbmcgRmlsZSc7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgcHVibGljIHNlbGVjdGVkRmlsZTogRmlsZTtcbiAgcHVibGljIHZhbGlkID0gdHJ1ZTtcbiAgcHVibGljIGZpbGVVcGxvYWRNZXNzYWdlczogc3RyaW5nO1xuICBwdWJsaWMgY29uZmlybVJlcGxhY2VSZXN1bHQ6IHN0cmluZztcbiAgcHVibGljIGNsaWNrSW5zaWRlVGhlRG9jdW1lbnQ6IGJvb2xlYW47XG5cbiAgLy8gdGhlc2UgYXJlIHB1YmxpYyBzbyB0aGF0IHRoZXkgY2FuIGJlIG1vY2tlZCBmb3IgdGVzdHNcbiAgcHVibGljIGZpbGVVcGxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGRpYWxvZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2FzZU5vdGlmaWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBqdXJpc2RpY3Rpb25TdWJzOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSB1cGxvYWRlZERvY3VtZW50OiBGb3JtR3JvdXA7XG4gIHByaXZhdGUgZGlhbG9nQ29uZmlnOiBNYXREaWFsb2dDb25maWc7XG4gIHByaXZhdGUgc2VjdXJlTW9kZU9uOiBib29sZWFuO1xuXG4gIHB1YmxpYyBqdXJpc2RpY3Rpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VOb3RpZmllcjogQ2FzZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRNYW5hZ2VtZW50OiBEb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVVcGxvYWRTdGF0ZVNlcnZpY2U6IEZpbGVVcGxvYWRTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBqdXJpc2RpY3Rpb25TZXJ2aWNlOiBKdXJpc2RpY3Rpb25TZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VjdXJlTW9kZU9uID0gdGhpcy5hcHBDb25maWcuZ2V0RG9jdW1lbnRTZWN1cmVNb2RlKCk7XG4gICAgaWYgKHRoaXMuc2VjdXJlTW9kZU9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvQ2FzZURldGFpbHMoKTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dDb25maWcgPSBpbml0RGlhbG9nKCk7XG4gICAgLy8gRVVJLTM0MDMuIFRoZSBmaWVsZCB3YXMgbm90IGJlaW5nIHJlZ2lzdGVyZWQgd2hlbiB0aGVyZSB3YXMgbm8gdmFsdWUgYW5kIHRoZSBmaWVsZFxuICAgIC8vIGl0c2VsZiB3YXMgbm90IG1hbmRhdG9yeSwgd2hpY2ggbWVhbnQgdGhhdCBzaG93X2NvbmRpdGlvbnMgd291bGQgbm90IGJlIGV2YWx1YXRlZC5cbiAgICAvLyBJJ3ZlIGNsZWFuZWQgdXAgdGhlIGxvZ2ljIGFuZCBpdCdzIG5vdyBhbHdheXMgcmVnaXN0ZXJlZC5cbiAgICBsZXQgZG9jdW1lbnQgPSB0aGlzLmNhc2VGaWVsZC52YWx1ZSB8fCB7IGRvY3VtZW50X3VybDogbnVsbCwgZG9jdW1lbnRfYmluYXJ5X3VybDogbnVsbCwgZG9jdW1lbnRfZmlsZW5hbWU6IG51bGwgfTtcbiAgICBkb2N1bWVudCA9IHRoaXMuc2VjdXJlTW9kZU9uICYmICFkb2N1bWVudC5kb2N1bWVudF9oYXNoID8geyAuLi5kb2N1bWVudCwgZG9jdW1lbnRfaGFzaDogbnVsbCB9IDogZG9jdW1lbnQ7XG4gICAgaWYgKHRoaXMuaXNBTWFuZGF0b3J5Q29tcG9uZW50KCkpIHtcbiAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnRGb3JtV2l0aFZhbGlkYXRvcihkb2N1bWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnRGb3JtKGRvY3VtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWxlVXBsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpYWxvZ1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kaWFsb2dTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2FzZU5vdGlmaWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNhc2VOb3RpZmllclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5qdXJpc2RpY3Rpb25TdWJzKSB7XG4gICAgICB0aGlzLmp1cmlzZGljdGlvblN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNVcGxvYWRJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRTdGF0ZVNlcnZpY2UuaXNVcGxvYWRJblByb2dyZXNzKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsVXBsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbGVVcGxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZVVwbG9hZFN0YXRlU2VydmljZS5zZXRVcGxvYWRJblByb2dyZXNzKGZhbHNlKTtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5yZXNldFVwbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGZpbGVWYWxpZGF0aW9uc09uVGFiKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQU1hbmRhdG9yeUNvbXBvbmVudCgpKSB7XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm1VcGxvYWRlZERvY3VtZW50KCkpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5RmlsZVVwbG9hZE1lc3NhZ2VzKFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5VUExPQURfRVJST1JfRklMRV9SRVFVSVJFRCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVDaGFuZ2VFdmVudChmaWxlSW5wdXQ6IGFueSk6IHZvaWQge1xuXG4gICAgaWYgKGZpbGVJbnB1dC50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZUlucHV0LnRhcmdldC5maWxlc1swXTtcbiAgICAgIHRoaXMuZGlzcGxheUZpbGVVcGxvYWRNZXNzYWdlcyhXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX1dBSVRJTkdfRklMRV9TVEFUVVMpO1xuICAgICAgY29uc3QgZG9jdW1lbnRVcGxvYWQ6IEZvcm1EYXRhID0gdGhpcy5idWlsZERvY3VtZW50VXBsb2FkRGF0YSh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgICB0aGlzLmZpbGVVcGxvYWRTdGF0ZVNlcnZpY2Uuc2V0VXBsb2FkSW5Qcm9ncmVzcyh0cnVlKTtcblxuICAgICAgdGhpcy5maWxlVXBsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudE1hbmFnZW1lbnQudXBsb2FkRmlsZShkb2N1bWVudFVwbG9hZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3VsdERvY3VtZW50OiBEb2N1bWVudERhdGEpID0+IHRoaXMuaGFuZGxlRG9jdW1lbnRVcGxvYWRSZXN1bHQocmVzdWx0RG9jdW1lbnQpLFxuICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3IpID0+IHRoaXMuaGFuZGxlRG9jdW1lbnRVcGxvYWRFcnJvcihlcnJvcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0VXBsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5GaWxlRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlU2VsZWN0RXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLmNhc2VGaWVsZC52YWx1ZSAmJiB0aGlzLmNhc2VGaWVsZC52YWx1ZS5kb2N1bWVudF9maWxlbmFtZSkgfHxcbiAgICAgICh0aGlzLnNlbGVjdGVkRmlsZSAmJiB0aGlzLnNlbGVjdGVkRmlsZS5uYW1lKSkge1xuICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuZGlhbG9nQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRmlsZURpYWxvZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyUmVwbGFjZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jb25maXJtUmVwbGFjZVJlc3VsdCA9PT0gJ1JlcGxhY2UnKSB7XG4gICAgICB0aGlzLm9wZW5GaWxlRGlhbG9nKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFVwbG9hZGVkRmlsZU5hbWUoKTogYW55IHtcbiAgICBpZiAodGhpcy51cGxvYWRlZERvY3VtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfRklMRU5BTUUpLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRVcGxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xuICAgIGlmICh0aGlzLmlzQU1hbmRhdG9yeUNvbXBvbmVudCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZURvY3VtZW50Rm9ybShudWxsLCBudWxsLCBudWxsKTtcbiAgICAgIHRoaXMuZGlzcGxheUZpbGVVcGxvYWRNZXNzYWdlcyhXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX0VSUk9SX0ZJTEVfUkVRVUlSRUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGVWYWxpZGF0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FNYW5kYXRvcnlDb21wb25lbnQoKSkge1xuICAgICAgaWYgKHRoaXMuY2xpY2tJbnNpZGVUaGVEb2N1bWVudCAmJiB0aGlzLnZhbGlkYXRlRm9ybVVwbG9hZGVkRG9jdW1lbnQoKSAmJiAhdGhpcy5pc1VwTG9hZGluZ0FGaWxlKCkpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5RmlsZVVwbG9hZE1lc3NhZ2VzKFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5VUExPQURfRVJST1JfRklMRV9SRVFVSVJFRCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKGRpYWxvZ0NvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRG9jdW1lbnREaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgdGhpcy5kaWFsb2dTdWJzY3JpcHRpb24gPSBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLmNvbmZpcm1SZXBsYWNlUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy50cmlnZ2VyUmVwbGFjZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB3ZSBjYW4gZ2V0IHRoZSBjYXNlIHR5cGUgYW5kIGp1cmlzZGljdGlvbiBmcm9tIGRpZmZlcmVudCBzb3VyY2VzXG4gIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuIGV2ZW50LCB0aGUgY2FzZU5vdGlmaWVyIHdpbGwgaGF2ZSB0aGUgY3VycmVudCBjYXNlXG4gIC8vIElmIHdlIGFyZSBjcmVhdGluZyBhIGNhc2UsIHRoZSBjYXNlIGRvZXNuJ3QgZXhpc3QgeWV0LCBzbyB0aGUgY2FzZU5vdGlmaWVyIGNhbid0IGhlbHBcbiAgLy8gSW5zdGVhZCB3ZSBjYW4gdXNlIHRoZSBldmVudFRyaWdnZXIgdG8gZ2V0IHRoZSBjYXNlIHR5cGUsIGFuZCB0aGUganVyaXNkaWN0aW9uIHNlcnZpY2UgdG9cbiAgLy8gZ2V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQganVyaXNkaWN0aW9uXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DYXNlRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VOb3RpZmllclN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZU5vdGlmaWVyLmNhc2VWaWV3LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoY2FzZURldGFpbHM6IENhc2VWaWV3KSA9PiB7XG4gICAgICAgIHRoaXMuY2FzZVR5cGVJZCA9IGNhc2VEZXRhaWxzPy5jYXNlX3R5cGUuaWQ7XG4gICAgICAgIHRoaXMuanVyaXNkaWN0aW9uSWQgPSBjYXNlRGV0YWlscz8uY2FzZV90eXBlPy5qdXJpc2RpY3Rpb24/LmlkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuanVyaXNkaWN0aW9uU3VicyA9IHRoaXMuanVyaXNkaWN0aW9uU2VydmljZS5zZWxlY3RlZEp1cmlzZGljdGlvbkJTLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoanVyaXNkaWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChqdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmp1cmlzZGljdGlvbklkID0ganVyaXNkaWN0aW9uLmlkO1xuICAgICAgICAgIGlmIChqdXJpc2RpY3Rpb24uY3VycmVudENhc2VUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUeXBlSWQgPSBqdXJpc2RpY3Rpb24uY3VycmVudENhc2VUeXBlLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzQU1hbmRhdG9yeUNvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0ICYmIHRoaXMuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dCA9PT0gQ29uc3RhbnRzLk1BTkRBVE9SWTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUZpbGVVcGxvYWRNZXNzYWdlcyhmaWxlVXBsb2FkTWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZVVwbG9hZE1lc3NhZ2VzID0gZmlsZVVwbG9hZE1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIGlzVXBMb2FkaW5nQUZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVVwbG9hZE1lc3NhZ2VzID09PSBXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX1dBSVRJTkdfRklMRV9TVEFUVVM7XG4gIH1cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZvcm1VcGxvYWRlZERvY3VtZW50KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy51cGxvYWRlZERvY3VtZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGlvbiA9ICF0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5ET0NVTUVOVF9VUkwpLnZhbGlkICYmXG4gICAgICAhdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfQklOQVJZX1VSTCkudmFsaWQgJiZcbiAgICAgICF0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5ET0NVTUVOVF9GSUxFTkFNRSkudmFsaWQ7XG5cbiAgICBpZiAodGhpcy5zZWN1cmVNb2RlT24pIHtcbiAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uICYmICF0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5ET0NVTUVOVF9IQVNIKS52YWxpZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRG9jdW1lbnRGb3JtKHVybDogc3RyaW5nLCBiaW5hcnlVcmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgZG9jdW1lbnRIYXNoPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfVVJMKS5zZXRWYWx1ZSh1cmwpO1xuICAgIHRoaXMudXBsb2FkZWREb2N1bWVudC5nZXQoV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkRPQ1VNRU5UX0JJTkFSWV9VUkwpLnNldFZhbHVlKGJpbmFyeVVybCk7XG4gICAgdGhpcy51cGxvYWRlZERvY3VtZW50LmdldChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRE9DVU1FTlRfRklMRU5BTUUpLnNldFZhbHVlKGZpbGVuYW1lKTtcbiAgICBpZiAoZG9jdW1lbnRIYXNoKSB7XG4gICAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5ET0NVTUVOVF9IQVNIKS5zZXRWYWx1ZShkb2N1bWVudEhhc2gpO1xuICAgIH1cbiAgICBpZih0aGlzLnVwbG9hZGVkRG9jdW1lbnQuZ2V0KFdyaXRlRG9jdW1lbnRGaWVsZENvbXBvbmVudC5VUExPQURfVElNRVNUQU1QKSl7XG4gICAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnQucmVtb3ZlQ29udHJvbChXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuVVBMT0FEX1RJTUVTVEFNUCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb2N1bWVudEZvcm1XaXRoVmFsaWRhdG9yKGRvY3VtZW50OiBGb3JtRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBsZXQgZG9jdW1lbnRGb3JtR3JvdXAgPSB7XG4gICAgICBkb2N1bWVudF91cmw6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC5kb2N1bWVudF91cmwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgZG9jdW1lbnRfYmluYXJ5X3VybDogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LmRvY3VtZW50X2JpbmFyeV91cmwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgZG9jdW1lbnRfZmlsZW5hbWU6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICB9O1xuXG4gICAgaWYoZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCAmJiAodHlwZW9mIGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgPT09ICdzdHJpbmcnICkpe1xuICAgICAgZG9jdW1lbnRGb3JtR3JvdXAgPSB7XG4gICAgICAgIC4uLmRvY3VtZW50Rm9ybUdyb3VwLFxuICAgICAgICAuLi57IHVwbG9hZF90aW1lc3RhbXA6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC51cGxvYWRfdGltZXN0YW1wKSB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnRGb3JtR3JvdXAgPSB0aGlzLnNlY3VyZU1vZGVPbiA/IHtcbiAgICAgIC4uLmRvY3VtZW50Rm9ybUdyb3VwLFxuICAgICAgLi4ueyBkb2N1bWVudF9oYXNoOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfaGFzaCkgfVxuICAgIH0gOiBkb2N1bWVudEZvcm1Hcm91cDtcblxuICAgIHRoaXMudXBsb2FkZWREb2N1bWVudCA9IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtR3JvdXAoZG9jdW1lbnRGb3JtR3JvdXApLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURvY3VtZW50Rm9ybShkb2N1bWVudDogRm9ybURvY3VtZW50KTogdm9pZCB7XG4gICAgbGV0IGRvY3VtZW50Rm9ybUdyb3VwID0ge1xuICAgICAgZG9jdW1lbnRfdXJsOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfdXJsKSxcbiAgICAgIGRvY3VtZW50X2JpbmFyeV91cmw6IG5ldyBGb3JtQ29udHJvbChkb2N1bWVudC5kb2N1bWVudF9iaW5hcnlfdXJsKSxcbiAgICAgIGRvY3VtZW50X2ZpbGVuYW1lOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQuZG9jdW1lbnRfZmlsZW5hbWUpXG4gICAgfTtcblxuICAgIGlmKGRvY3VtZW50LnVwbG9hZF90aW1lc3RhbXAgJiYgKHR5cGVvZiBkb2N1bWVudC51cGxvYWRfdGltZXN0YW1wID09PSAnc3RyaW5nJyApKXtcbiAgICAgIGRvY3VtZW50Rm9ybUdyb3VwID0ge1xuICAgICAgICAuLi5kb2N1bWVudEZvcm1Hcm91cCxcbiAgICAgICAgLi4ueyB1cGxvYWRfdGltZXN0YW1wOiBuZXcgRm9ybUNvbnRyb2woZG9jdW1lbnQudXBsb2FkX3RpbWVzdGFtcCkgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50Rm9ybUdyb3VwID0gdGhpcy5zZWN1cmVNb2RlT24gPyB7XG4gICAgICAuLi5kb2N1bWVudEZvcm1Hcm91cCxcbiAgICAgIC4uLnsgZG9jdW1lbnRfaGFzaDogbmV3IEZvcm1Db250cm9sKGRvY3VtZW50LmRvY3VtZW50X2hhc2gpIH1cbiAgICB9IDogZG9jdW1lbnRGb3JtR3JvdXA7XG5cbiAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnQgPSB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUdyb3VwKGRvY3VtZW50Rm9ybUdyb3VwKSwgdHJ1ZSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IEh0dHBFcnJvcik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgNTAyOlxuICAgICAgICByZXR1cm4gV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LlVQTE9BRF9FUlJPUl9OT1RfQVZBSUxBQkxFO1xuICAgICAgY2FzZSA0MjI6XG4gICAgICAgIHtcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBXcml0ZURvY3VtZW50RmllbGRDb21wb25lbnQuRVJST1JfVVBMT0FESU5HX0ZJTEU7XG4gICAgICAgICAgaWYgKGVycm9yPy5lcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZnVsbEVycm9yID0gZXJyb3IuZXJyb3I7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGZ1bGxFcnJvci5pbmRleE9mKCd7Jyk7XG4gICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBqc29uID0gZnVsbEVycm9yLnN1YnN0cmluZyhzdGFydCwgZnVsbEVycm9yLmxlbmd0aCAtIDEpLnNwbGl0KCc8RU9MPicpLmpvaW4oJycpO1xuICAgICAgICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgICAgICAgICBpZiAob2JqPy5lcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yTXNnID0gb2JqLmVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlcnJvck1zZztcbiAgICAgICAgfVxuICAgICAgY2FzZSA0Mjk6XG4gICAgICAgIHJldHVybiBlcnJvcj8uZXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gV3JpdGVEb2N1bWVudEZpZWxkQ29tcG9uZW50LkVSUk9SX1VQTE9BRElOR19GSUxFO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREb2N1bWVudFVwbG9hZERhdGEoc2VsZWN0ZWRGaWxlOiBGaWxlKTogRm9ybURhdGEge1xuICAgIGNvbnN0IGRvY3VtZW50VXBsb2FkOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGRvY3VtZW50VXBsb2FkLmFwcGVuZCgnZmlsZXMnLCBzZWxlY3RlZEZpbGUsIHNlbGVjdGVkRmlsZS5uYW1lKTtcbiAgICBkb2N1bWVudFVwbG9hZC5hcHBlbmQoJ2NsYXNzaWZpY2F0aW9uJywgJ1BVQkxJQycpO1xuXG4gICAgaWYgKHRoaXMuYXBwQ29uZmlnLmdldERvY3VtZW50U2VjdXJlTW9kZSgpKSB7XG4gICAgICBjb25zdCBjYXNlVHlwZUlkID0gdGhpcy5jYXNlVHlwZUlkID8gdGhpcy5jYXNlVHlwZUlkIDogbnVsbDtcbiAgICAgIGNvbnN0IGNhc2VUeXBlSnVyaXNkaWN0aW9uSWQgPSB0aGlzLmp1cmlzZGljdGlvbklkID8gdGhpcy5qdXJpc2RpY3Rpb25JZCA6IG51bGw7XG4gICAgICBkb2N1bWVudFVwbG9hZC5hcHBlbmQoJ2Nhc2VUeXBlSWQnLCBjYXNlVHlwZUlkKTtcbiAgICAgIGRvY3VtZW50VXBsb2FkLmFwcGVuZCgnanVyaXNkaWN0aW9uSWQnLCBjYXNlVHlwZUp1cmlzZGljdGlvbklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9jdW1lbnRVcGxvYWQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURvY3VtZW50VXBsb2FkUmVzdWx0KHJlc3VsdDogRG9jdW1lbnREYXRhKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGVkRG9jdW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnNlY3VyZU1vZGVPbikge1xuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50Rm9ybSh7IGRvY3VtZW50X3VybDogbnVsbCwgZG9jdW1lbnRfYmluYXJ5X3VybDogbnVsbCwgZG9jdW1lbnRfZmlsZW5hbWU6IG51bGwsIGRvY3VtZW50X2hhc2g6IG51bGwgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50Rm9ybSh7IGRvY3VtZW50X3VybDogbnVsbCwgZG9jdW1lbnRfYmluYXJ5X3VybDogbnVsbCwgZG9jdW1lbnRfZmlsZW5hbWU6IG51bGwgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLnNlY3VyZU1vZGVPbiA/IHJlc3VsdC5kb2N1bWVudHNbMF0gOiByZXN1bHQuX2VtYmVkZGVkLmRvY3VtZW50c1swXTtcblxuICAgIGlmICh0aGlzLnNlY3VyZU1vZGVPbikge1xuICAgICAgdGhpcy51cGRhdGVEb2N1bWVudEZvcm0oXG4gICAgICAgIGRvY3VtZW50Ll9saW5rcy5zZWxmLmhyZWYsXG4gICAgICAgIGRvY3VtZW50Ll9saW5rcy5iaW5hcnkuaHJlZixcbiAgICAgICAgZG9jdW1lbnQub3JpZ2luYWxEb2N1bWVudE5hbWUsXG4gICAgICAgIGRvY3VtZW50Lmhhc2hUb2tlblxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVEb2N1bWVudEZvcm0oXG4gICAgICAgIGRvY3VtZW50Ll9saW5rcy5zZWxmLmhyZWYsXG4gICAgICAgIGRvY3VtZW50Ll9saW5rcy5iaW5hcnkuaHJlZixcbiAgICAgICAgZG9jdW1lbnQub3JpZ2luYWxEb2N1bWVudE5hbWUsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuZmlsZVVwbG9hZFN0YXRlU2VydmljZS5zZXRVcGxvYWRJblByb2dyZXNzKGZhbHNlKTtcblxuICAgIC8vIHJlZnJlc2ggcmVwbGFjZWQgZG9jdW1lbnQgaW5mb1xuICAgIGlmICh0aGlzLmNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWUuZG9jdW1lbnRfYmluYXJ5X3VybCA9IGRvY3VtZW50Ll9saW5rcy5iaW5hcnkuaHJlZjtcbiAgICAgIHRoaXMuY2FzZUZpZWxkLnZhbHVlLmRvY3VtZW50X2ZpbGVuYW1lID0gZG9jdW1lbnQub3JpZ2luYWxEb2N1bWVudE5hbWU7XG4gICAgICB0aGlzLmNhc2VGaWVsZC52YWx1ZS5kb2N1bWVudF91cmwgPSBkb2N1bWVudC5fbGlua3Muc2VsZi5ocmVmO1xuXG4gICAgICBpZiAodGhpcy5zZWN1cmVNb2RlT24pIHtcbiAgICAgICAgdGhpcy5jYXNlRmllbGQudmFsdWUuZG9jdW1lbnRfaGFzaCA9IGRvY3VtZW50Lmhhc2hUb2tlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURvY3VtZW50VXBsb2FkRXJyb3IoZXJyb3I6IEh0dHBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuZmlsZVVwbG9hZE1lc3NhZ2VzID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVVcGxvYWRTdGF0ZVNlcnZpY2Uuc2V0VXBsb2FkSW5Qcm9ncmVzcyhmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yIGJvdHRvbS0zMCc6ICF2YWxpZH1cIj5cbiAgPGxhYmVsIFtmb3JdPVwiaWQoKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGF0dHIuYXJpYS1sYWJlbD1cInt7Y2FzZUZpZWxkIHwgY2NkRmllbGRMYWJlbH19XCI+e3soY2FzZUZpZWxkIHwgY2NkRmllbGRMYWJlbCl9fTwvc3Bhbj5cbiAgPC9sYWJlbD5cbiAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIiAqbmdJZj1cImNhc2VGaWVsZC5oaW50X3RleHRcIj57e2Nhc2VGaWVsZC5oaW50X3RleHQgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJmaWxlVXBsb2FkTWVzc2FnZXMgJiYgIXZhbGlkXCI+e3tmaWxlVXBsb2FkTWVzc2FnZXMgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cblxuICA8ZGl2PlxuICAgIDwhLS08c3BhbiAqbmdJZj1cImdldFVwbG9hZGVkRmlsZU5hbWUoKVwiIGNsYXNzPVwidGV4dC0xNlwiPkZpbGUgbmFtZToge3tnZXRVcGxvYWRlZEZpbGVOYW1lKCl9fTwvc3Bhbj4tLT5cbiAgICA8Y2NkLXJlYWQtZG9jdW1lbnQtZmllbGQgKm5nSWY9XCJjYXNlRmllbGRcIiBbY2FzZUZpZWxkXT1cImNhc2VGaWVsZFwiPjwvY2NkLXJlYWQtZG9jdW1lbnQtZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9J3Bvc2l0aW9uOnJlbGF0aXZlJz5cblxuICAgIDxkaXYgW2lkXT1cImNyZWF0ZUVsZW1lbnRJZCgnZmlsZUlucHV0V3JhcHBlcicpXCIgKGNsaWNrKT1cImZpbGVTZWxlY3RFdmVudCgpXCI+PC9kaXY+XG4gICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGJvdHRvbS0zMFwiIFtpZF09XCJpZCgpXCIgdHlwZT1cImZpbGVcIiAoa2V5ZG93bi5UYWIpPVwiZmlsZVZhbGlkYXRpb25zT25UYWIoKVwiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudClcIlxuICAgICAgICAgICBhY2NlcHQ9XCJ7e2Nhc2VGaWVsZC5maWVsZF90eXBlLnJlZ3VsYXJfZXhwcmVzc2lvbn19XCIgI2ZpbGVJbnB1dC8+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBib3R0b20tMzBcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDYW5jZWwgdXBsb2FkXCIgKGNsaWNrKT1cImNhbmNlbFVwbG9hZCgpXCIgW2Rpc2FibGVkXT1cIiFpc1VwbG9hZEluUHJvZ3Jlc3MoKVwiPnt7J0NhbmNlbCB1cGxvYWQnIHwgcnB4VHJhbnNsYXRlfX08L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -2,7 +2,7 @@ import { Pipe } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class DynamicListPipe {
4
4
  transform(value, items) {
5
- const item = items.find(i => i.code === value);
5
+ const item = items?.find(i => i.code === value);
6
6
  return item ? item.label : DynamicListPipe.EMPTY;
7
7
  }
8
8
  }
@@ -15,4 +15,4 @@ DynamicListPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "ccdDynamicList
15
15
  name: 'ccdDynamicList'
16
16
  }]
17
17
  }], null, null); })();
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1saXN0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9keW5hbWljLWxpc3QvZHluYW1pYy1saXN0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxlQUFlO0lBSW5CLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBc0I7UUFDcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsQ0FBQzs7QUFMdUIscUJBQUssR0FBRyxFQUFFLENBQUM7OEVBRnhCLGVBQWU7c0ZBQWYsZUFBZTt1RkFBZixlQUFlO2NBSDNCLElBQUk7ZUFBQztnQkFDSixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml4ZWRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpeGVkLWxpc3QtaXRlbS5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NjZER5bmFtaWNMaXN0J1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljTGlzdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWSA9ICcnO1xuXG4gIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgaXRlbXM6IEZpeGVkTGlzdEl0ZW1bXSk6IGFueSB7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zLmZpbmQoaSA9PiBpLmNvZGUgPT09IHZhbHVlKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubGFiZWwgOiBEeW5hbWljTGlzdFBpcGUuRU1QVFk7XG4gIH1cblxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1saXN0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9keW5hbWljLWxpc3QvZHluYW1pYy1saXN0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxlQUFlO0lBSW5CLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBc0I7UUFDcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDbkQsQ0FBQzs7QUFMdUIscUJBQUssR0FBRyxFQUFFLENBQUM7OEVBRnhCLGVBQWU7c0ZBQWYsZUFBZTt1RkFBZixlQUFlO2NBSDNCLElBQUk7ZUFBQztnQkFDSixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml4ZWRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpeGVkLWxpc3QtaXRlbS5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NjZER5bmFtaWNMaXN0J1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljTGlzdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWSA9ICcnO1xuXG4gIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgaXRlbXM6IEZpeGVkTGlzdEl0ZW1bXSk6IGFueSB7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zPy5maW5kKGkgPT4gaS5jb2RlID09PSB2YWx1ZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmxhYmVsIDogRHluYW1pY0xpc3RQaXBlLkVNUFRZO1xuICB9XG5cbn1cbiJdfQ==
@@ -12,6 +12,11 @@ export class HttpError {
12
12
  }
13
13
  static from(response) {
14
14
  const error = new HttpError();
15
+ if (response?.status === 429) {
16
+ error.error = HttpError.MESSAGE_ERROR_429;
17
+ error.status = response.status;
18
+ error.message = response.message;
19
+ }
15
20
  // Check that the HttpErrorResponse contains an "error" object before mapping the error properties
16
21
  if (!!(response && response.error)) {
17
22
  Object.keys(error).forEach((key) => {
@@ -31,4 +36,5 @@ export class HttpError {
31
36
  HttpError.DEFAULT_ERROR = 'Unknown error';
32
37
  HttpError.DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';
33
38
  HttpError.DEFAULT_STATUS = 500;
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvZG9tYWluL2h0dHAvaHR0cC1lcnJvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztJQUVwQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFlTSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQTJCO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFFOUIsa0dBQWtHO1FBQ2xHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVHLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxpRUFBaUU7UUFDakUsb0RBQW9EO1FBQ3BELElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMvQixLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDbEM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O0FBakN1Qix1QkFBYSxHQUFHLGVBQWUsQ0FBQztBQUNoQyx5QkFBZSxHQUFHLHFGQUFxRixDQUFDO0FBQ3hHLHdCQUFjLEdBQUcsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3Ige1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIHRoaXMuZXJyb3IgPSBIdHRwRXJyb3IuREVGQVVMVF9FUlJPUjtcbiAgICB0aGlzLm1lc3NhZ2UgPSBIdHRwRXJyb3IuREVGQVVMVF9NRVNTQUdFO1xuICAgIHRoaXMuc3RhdHVzID0gSHR0cEVycm9yLkRFRkFVTFRfU1RBVFVTO1xuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLnBhdGggPSBudWxsO1xuICAgIHRoaXMuZGV0YWlscyA9IG51bGw7XG4gICAgdGhpcy5jYWxsYmFja0Vycm9ycyA9IG51bGw7XG4gICAgdGhpcy5jYWxsYmFja1dhcm5pbmdzID0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0VSUk9SID0gJ1Vua25vd24gZXJyb3InO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01FU1NBR0UgPSAnU29tZXRoaW5nIHVuZXhwZWN0ZWQgaGFwcGVuZWQsIG91ciB0ZWNobmljYWwgc3RhZmYgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgbm90aWZpZWQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1NUQVRVUyA9IDUwMDtcblxuICBwdWJsaWMgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHB1YmxpYyBzdGF0dXM6IG51bWJlcjtcbiAgcHVibGljIGVycm9yOiBzdHJpbmc7XG4gIHB1YmxpYyBleGNlcHRpb246IHN0cmluZztcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIHBhdGg6IHN0cmluZztcbiAgcHVibGljIGRldGFpbHM/OiBhbnk7XG4gIHB1YmxpYyBjYWxsYmFja0Vycm9ycz86IGFueTtcbiAgcHVibGljIGNhbGxiYWNrV2FybmluZ3M/OiBhbnk7XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IEh0dHBFcnJvciB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSHR0cEVycm9yKCk7XG5cbiAgICAvLyBDaGVjayB0aGF0IHRoZSBIdHRwRXJyb3JSZXNwb25zZSBjb250YWlucyBhbiBcImVycm9yXCIgb2JqZWN0IGJlZm9yZSBtYXBwaW5nIHRoZSBlcnJvciBwcm9wZXJ0aWVzXG4gICAgaWYgKCEhKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yKSkge1xuICAgICAgT2JqZWN0LmtleXMoZXJyb3IpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBlcnJvcltrZXldID0gcmVzcG9uc2UuZXJyb3IuaGFzT3duUHJvcGVydHkoa2V5KSAmJiByZXNwb25zZS5lcnJvcltrZXldID8gcmVzcG9uc2UuZXJyb3Jba2V5XSA6IGVycm9yW2tleV07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBFcnJvciBvYmplY3QgaW4gSHR0cEVycm9yUmVzcG9uc2Ugd2lsbCBiZSBlbXB0eSBmb3IgNDAzIGVycm9yc1xuICAgIC8vIFNldCB0aGUgZXJyb3IgcHJvcGVydGllcyBvZiBIdHRwRXJyb3IgYWNjb3JkaW5nbHlcbiAgICBpZiAocmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICBlcnJvci5lcnJvciA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG4gICAgICBlcnJvci5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICBlcnJvci5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbn1cbiJdfQ==
39
+ HttpError.MESSAGE_ERROR_429 = 'Your request was rate limited. Please wait a few seconds before retrying your document upload';
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvZG9tYWluL2h0dHAvaHR0cC1lcnJvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztJQUVwQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFpQk0sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUEyQjtRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRTlCLElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUNsQztRQUVELGtHQUFrRztRQUNsRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsaUVBQWlFO1FBQ2pFLG9EQUFvRDtRQUNwRCxJQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztBQXpDdUIsdUJBQWEsR0FBRyxlQUFlLENBQUM7QUFDaEMseUJBQWUsR0FBRyxxRkFBcUYsQ0FBQztBQUN4Ryx3QkFBYyxHQUFHLEdBQUcsQ0FBQztBQUVyQiwyQkFBaUIsR0FBRSwrRkFBK0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5leHBvcnQgY2xhc3MgSHR0cEVycm9yIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICB0aGlzLmVycm9yID0gSHR0cEVycm9yLkRFRkFVTFRfRVJST1I7XG4gICAgdGhpcy5tZXNzYWdlID0gSHR0cEVycm9yLkRFRkFVTFRfTUVTU0FHRTtcbiAgICB0aGlzLnN0YXR1cyA9IEh0dHBFcnJvci5ERUZBVUxUX1NUQVRVUztcbiAgICB0aGlzLmV4Y2VwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5wYXRoID0gbnVsbDtcbiAgICB0aGlzLmRldGFpbHMgPSBudWxsO1xuICAgIHRoaXMuY2FsbGJhY2tFcnJvcnMgPSBudWxsO1xuICAgIHRoaXMuY2FsbGJhY2tXYXJuaW5ncyA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9FUlJPUiA9ICdVbmtub3duIGVycm9yJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NRVNTQUdFID0gJ1NvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbmVkLCBvdXIgdGVjaG5pY2FsIHN0YWZmIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IG5vdGlmaWVkJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TVEFUVVMgPSA1MDA7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUVTU0FHRV9FUlJPUl80MjkgPSdZb3VyIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZC4gUGxlYXNlIHdhaXQgYSBmZXcgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcgeW91ciBkb2N1bWVudCB1cGxvYWQnO1xuXG4gIHB1YmxpYyB0aW1lc3RhbXA6IHN0cmluZztcbiAgcHVibGljIHN0YXR1czogbnVtYmVyO1xuICBwdWJsaWMgZXJyb3I6IHN0cmluZztcbiAgcHVibGljIGV4Y2VwdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICBwdWJsaWMgZGV0YWlscz86IGFueTtcbiAgcHVibGljIGNhbGxiYWNrRXJyb3JzPzogYW55O1xuICBwdWJsaWMgY2FsbGJhY2tXYXJuaW5ncz86IGFueTtcblxuICBwdWJsaWMgc3RhdGljIGZyb20ocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogSHR0cEVycm9yIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBIdHRwRXJyb3IoKTtcblxuICAgIGlmIChyZXNwb25zZT8uc3RhdHVzID09PSA0MjkpIHtcbiAgICAgIGVycm9yLmVycm9yID0gSHR0cEVycm9yLk1FU1NBR0VfRVJST1JfNDI5O1xuICAgICAgZXJyb3Iuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgZXJyb3IubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgSHR0cEVycm9yUmVzcG9uc2UgY29udGFpbnMgYW4gXCJlcnJvclwiIG9iamVjdCBiZWZvcmUgbWFwcGluZyB0aGUgZXJyb3IgcHJvcGVydGllc1xuICAgIGlmICghIShyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcikpIHtcbiAgICAgIE9iamVjdC5rZXlzKGVycm9yKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZXJyb3Jba2V5XSA9IHJlc3BvbnNlLmVycm9yLmhhc093blByb3BlcnR5KGtleSkgJiYgcmVzcG9uc2UuZXJyb3Jba2V5XSA/IHJlc3BvbnNlLmVycm9yW2tleV0gOiBlcnJvcltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXJyb3Igb2JqZWN0IGluIEh0dHBFcnJvclJlc3BvbnNlIHdpbGwgYmUgZW1wdHkgZm9yIDQwMyBlcnJvcnNcbiAgICAvLyBTZXQgdGhlIGVycm9yIHByb3BlcnRpZXMgb2YgSHR0cEVycm9yIGFjY29yZGluZ2x5XG4gICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgZXJyb3IuZXJyb3IgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xuICAgICAgZXJyb3Iuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgZXJyb3IubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG59XG4iXX0=