@eo-sdk/client 8.0.0-rc.1 → 8.0.0-rc.4

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 (56) hide show
  1. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +5 -0
  2. package/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.d.ts +10 -2
  3. package/app/eo-framework/form-elements/organization/organization.component.d.ts +2 -0
  4. package/app/eo-framework/grid/grid.component.d.ts +0 -1
  5. package/app/eo-framework/media/media.component.d.ts +6 -0
  6. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +1 -0
  7. package/app/eo-framework/object-state-details/object-state-details.component.d.ts +1 -1
  8. package/app/eo-framework/result-list/result-list.component.d.ts +1 -0
  9. package/app/eo-framework/ui/loading-spinner/loading-spinner.component.d.ts +1 -0
  10. package/app/eo-framework/upload-overlay/upload-overlay.component.d.ts +8 -0
  11. package/app/eo-framework-core/api/grid.service.d.ts +2 -1
  12. package/assets/_default/api/pdf/web/viewer.js +1 -1
  13. package/assets/_default/config/main.json +1 -1
  14. package/assets/_default/i18n/de.json +9 -4
  15. package/assets/_default/i18n/en.json +14 -9
  16. package/assets/_default/img/yuuvis-agent.png +0 -0
  17. package/assets/_default/svg/ic_book.svg +1 -0
  18. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js +5 -4
  19. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js.map +1 -1
  20. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js +2 -2
  21. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js.map +1 -1
  22. package/bundles/eo-sdk-client.umd.js +202 -98
  23. package/bundles/eo-sdk-client.umd.js.map +1 -1
  24. package/bundles/eo-sdk-client.umd.min.js +1 -1
  25. package/bundles/eo-sdk-client.umd.min.js.map +1 -1
  26. package/eo-sdk-client.metadata.json +1 -1
  27. package/esm2015/app/eo-client/about-state/about-state.component.js +3 -3
  28. package/esm2015/app/eo-framework/app-shell/app-bar/app-bar.component.js +45 -1
  29. package/esm2015/app/eo-framework/app-shell/app-bar/app-search/app-search.component.js +3 -3
  30. package/esm2015/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.js +20 -6
  31. package/esm2015/app/eo-framework/form-elements/id-reference/id-reference.component.js +4 -11
  32. package/esm2015/app/eo-framework/form-elements/organization/organization.component.js +5 -11
  33. package/esm2015/app/eo-framework/grid/filters/organization-filter.component.js +3 -3
  34. package/esm2015/app/eo-framework/grid/grid.component.js +3 -29
  35. package/esm2015/app/eo-framework/media/media.component.js +7 -4
  36. package/esm2015/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.js +13 -6
  37. package/esm2015/app/eo-framework/object-form/object-form/object-form.component.js +2 -2
  38. package/esm2015/app/eo-framework/object-form/object-form-edit/object-form-edit.component.js +2 -2
  39. package/esm2015/app/eo-framework/object-state-details/object-state-details.component.js +9 -5
  40. package/esm2015/app/eo-framework/process/history/process-history.component.js +2 -2
  41. package/esm2015/app/eo-framework/process/process-file/process-file.component.js +3 -3
  42. package/esm2015/app/eo-framework/result-list/result-list.component.js +7 -3
  43. package/esm2015/app/eo-framework/ui/eo-dialog/eo-dialog.component.js +1 -1
  44. package/esm2015/app/eo-framework/ui/loading-spinner/loading-spinner.component.js +5 -4
  45. package/esm2015/app/eo-framework/upload-overlay/upload-overlay.component.js +40 -4
  46. package/esm2015/app/eo-framework-core/api/grid.service.js +39 -1
  47. package/esm2015/projects/eo-sdk/core/lib/service/bpm/bpm.service.js +2 -2
  48. package/esm2015/projects/eo-sdk/core/lib/service/dms/dms.service.js +4 -3
  49. package/esm2015/projects/eo-sdk/core/lib/util/utils.js +2 -2
  50. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js +5 -4
  51. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js.map +1 -1
  52. package/fesm2015/eo-sdk-client.js +195 -83
  53. package/fesm2015/eo-sdk-client.js.map +1 -1
  54. package/package.json +2 -2
  55. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +2 -1
  56. package/projects/eo-sdk/core/package.json +1 -1
@@ -65,6 +65,44 @@ export class GridService {
65
65
  static qnameMatch(qname, qname2) {
66
66
  return GridService.qnameFormatter(qname) === GridService.qnameFormatter(qname2);
67
67
  }
68
+ // copy content of either row or table cell to clipboard
69
+ copyToClipboard(event, gridOptions) {
70
+ event.preventDefault();
71
+ event.stopPropagation();
72
+ const viewport = gridOptions.api['gridPanel'].eCenterViewport;
73
+ const scrollLeft = viewport.scrollLeft;
74
+ const focusedCell = gridOptions.api.getFocusedCell();
75
+ const rows = event.shiftKey ? gridOptions.api.getSelectedNodes() : [gridOptions.api.getDisplayedRowAtIndex(focusedCell.rowIndex)];
76
+ const cols = event.shiftKey ? gridOptions.columnApi.getAllDisplayedColumns().filter((c) => c.colId !== '__selectionField') : [focusedCell.column];
77
+ const getCell = (col, row) => gridOptions.api['gridPanel'].eGui.querySelector(`div[row-index="${row.rowIndex}"] [col-id="${col.colId}"]`);
78
+ const value = (col, row) => {
79
+ gridOptions.api.ensureColumnVisible(col);
80
+ const cell = getCell(col, row);
81
+ if (!cell)
82
+ return '';
83
+ const chips = cell.querySelectorAll('.chip') || [];
84
+ const val = Array.from(chips.length ? chips : [cell]).map((c) => (c && c.textContent && c.textContent.trim()) || '');
85
+ const value = val.toString() || gridOptions.api.getValue(col, row);
86
+ return !UtilitiesService.isEmpty(value) ? value.toString().replace(new RegExp('\n', 'g'), ' ') : '';
87
+ };
88
+ let content = '';
89
+ if (event.altKey)
90
+ content += cols.map((col) => col.getColDef().headerName).join(' ') + '\n';
91
+ content += rows.map((row) => cols.map((col) => value(col, row)).join(' ')).join('\n');
92
+ viewport.scrollLeft = scrollLeft;
93
+ setTimeout(() => rows.map((row) => cols.map((col) => {
94
+ const cell = getCell(col, row);
95
+ cell && cell.classList.add('copy-cell');
96
+ cell && setTimeout(() => cell && cell.classList.remove('copy-cell'), 4000);
97
+ })), 100);
98
+ // navigator.clipboard.writeText(content); // only if client runs https
99
+ const textArea = document.createElement('textarea');
100
+ textArea.value = content;
101
+ document.body.appendChild(textArea);
102
+ textArea.select();
103
+ const copySuccess = document.execCommand('copy');
104
+ document.body.removeChild(textArea);
105
+ }
68
106
  openLink(uri, newTab = false) {
69
107
  if (newTab) {
70
108
  window.open(CellRenderer.windowURI(uri));
@@ -675,4 +713,4 @@ export class CellRenderer {
675
713
  return text || param.value;
676
714
  }
677
715
  }
678
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9hcGkvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFlBQVksRUFBVSxLQUFLLElBQUksT0FBTyxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsV0FBVyxFQUVYLEtBQUssRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUViLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixNQUFNLE9BQU8sV0FBVztJQW9DdEIsWUFDUyxTQUEyQixFQUMxQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ3ZCLFdBQXdCO1FBTHpCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdC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J0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NpbXBsZUZpbHRlciwgQ29sRGVmLCBVdGlscyBhcyBBZ1V0aWxzLCBDc3ZFeHBvcnRQYXJhbXN9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudEVuYWlvLCBTZWFyY2hRdWVyeX0gZnJvbSAnQGVvLXNkay9jb3JlJztcclxuaW1wb3J0IHtGaWxlU2l6ZVBpcGV9IGZyb20gJy4uL3BpcGVzL2ZpbGVzaXplLnBpcGUnO1xyXG5pbXBvcnQge0xvY2FsZU51bWJlclBpcGV9IGZyb20gJy4uL3BpcGVzL2xvY2FsZS1udW1iZXIucGlwZSc7XHJcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTeXN0ZW1TZXJ2aWNlLFxyXG4gIEJhY2tlbmRTZXJ2aWNlLFxyXG4gIFVzZXJTZXJ2aWNlLFxyXG4gIEVvVXNlcixcclxuICBVdGlscyxcclxuICBSYW5nZVZhbHVlLFxyXG4gIFNlYXJjaEZpbHRlcixcclxuICBTZWFyY2hTdGF0ZVxyXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XHJcbmltcG9ydCB7VXRpbGl0aWVzU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrL3V0aWwnO1xyXG5pbXBvcnQge0ZpbGVzaXplRmlsdGVyfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmsvZ3JpZC9maWx0ZXJzL2ZpbGVzaXplLWZpbHRlci5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xyXG4gIGNvbnRleHQ6IGFueTtcclxuXHJcbiAgZ2V0IGNzdkV4cG9ydFBhcmFtcygpOiBDc3ZFeHBvcnRQYXJhbXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZmlsZU5hbWU6ICdleHBvcnQnLFxyXG4gICAgICBjb2x1bW5TZXBhcmF0b3I6IHRoaXMuY29udGV4dD8ubnVtYmVyUGlwZS5kZWNpbWFsU2VwYXJhdG9yID09PSAnLCcgPyAnOycgOiAnLCcsXHJcbiAgICAgIHByb2Nlc3NDZWxsQ2FsbGJhY2s6IChwYXJhbXMpID0+IHtcclxuICAgICAgICByZXR1cm4gKHBhcmFtcy5jb2x1bW4uZ2V0Q29sRGVmKCkuY2VsbENsYXNzIGFzIGFueSB8fCAnJykuaW5jbHVkZXMoJ2NvbC1udW1iZXInKVxyXG4gICAgICAgICAgPyAocGFyYW1zLmNvbHVtbi5nZXRDb2xEZWYoKS5jZWxsUmVuZGVyZXIgYXMgYW55KShwYXJhbXMpLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXGAgKyB0aGlzLmNvbnRleHQ/Lm51bWJlclBpcGUuc2VwYXJhdG9yLCAnZycpLCAnJykgLy8gcmVtb3ZlZCBncm91cGluZ1xyXG4gICAgICAgICAgOiBwYXJhbXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXNjYXBlSHRtbChzdHIpIHtcclxuICAgIHN0ciA9IHN0ciA/IHN0ciA6ICcnO1xyXG4gICAgY29uc3QgZW50aXR5TWFwID0ge1xyXG4gICAgICAnJic6ICcmYW1wOycsXHJcbiAgICAgICc8JzogJyZsdDsnLFxyXG4gICAgICAnPic6ICcmZ3Q7JyxcclxuICAgICAgJ1wiJzogJyZxdW90OycsXHJcbiAgICAgICdcXCcnOiAnJiMzOTsnLFxyXG4gICAgICAnLyc6ICcmI3gyRjsnXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIHMgPT4gZW50aXR5TWFwW3NdKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBxbmFtZUZvcm1hdHRlcihxbmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHFuYW1lIHx8ICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJ3N5c29iamVjdC58c3lzZG9jdW1lbnQuJyksICcnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBxbmFtZU1hdGNoKHFuYW1lOiBzdHJpbmcsIHFuYW1lMjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gR3JpZFNlcnZpY2UucW5hbWVGb3JtYXR0ZXIocW5hbWUpID09PSBHcmlkU2VydmljZS5xbmFtZUZvcm1hdHRlcihxbmFtZTIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYXBwU2VhcmNoU2VydmljZTogQXBwU2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB7XHJcbiAgICAgIHRyYW5zbGF0ZSxcclxuICAgICAgc3lzdGVtLFxyXG4gICAgICBiYWNrZW5kLFxyXG4gICAgICByb3V0ZXIsXHJcbiAgICAgIGZpbGVTaXplUGlwZTogbmV3IEZpbGVTaXplUGlwZSh0cmFuc2xhdGUpLFxyXG4gICAgICBudW1iZXJQaXBlOiBuZXcgTG9jYWxlTnVtYmVyUGlwZSh0cmFuc2xhdGUpLFxyXG4gICAgICBkYXRlUGlwZTogbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSksXHJcbiAgICAgIGNyOiBDZWxsUmVuZGVyZXIsXHJcbiAgICAgIGJhc2VIcmVmOiBFbnZpcm9ubWVudEVuYWlvLmlzV2ViRW52aXJvbm1lbnQoKSA/IHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgOiAnLi8nLFxyXG4gICAgICBtaW1ldHlwZWdyb3VwT3B0czogT2JqZWN0LmtleXMoU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTKS5tYXAoayA9PiBrLnRvTG93ZXJDYXNlKCkpLFxyXG4gICAgICB0eXBlT3B0czogW11cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyJC5zdWJzY3JpYmUoXHJcbiAgICAgICh1c2VyOiBFb1VzZXIpID0+XHJcbiAgICAgICAgKHRoaXMuY29udGV4dC5kZWZhdWx0UG9zaXRpb24gPVxyXG4gICAgICAgICAgdXNlci51aURpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnlTdGF0ZSQuc3Vic2NyaWJlKChzdGF0ZTogU2VhcmNoU3RhdGUpID0+IHRoaXMudXBkYXRlQ29udGV4dChBcnJheS5mcm9tKHN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmtleXMoKSkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuTGluayh1cmk6IHN0cmluZywgbmV3VGFiID0gZmFsc2UpIHtcclxuICAgIGlmIChuZXdUYWIpIHtcclxuICAgICAgd2luZG93Lm9wZW4oQ2VsbFJlbmRlcmVyLndpbmRvd1VSSSh1cmkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZvcmNlIHJlbG9hZCBpbiBjYXNlIG9mIHNhbWUgVVJMXHJcbiAgICAgIGNvbnN0IGV4dHJhcyA9IENlbGxSZW5kZXJlci53aW5kb3dVUkkodGhpcy5yb3V0ZXIudXJsKSA9PT0gQ2VsbFJlbmRlcmVyLndpbmRvd1VSSSh1cmkpID8gYCR7dXJpLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9cmVsb2FkPXRydWVgIDogJyc7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJpICsgZXh0cmFzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSb3dJbmRleChlbCwgcGFyZW50Q2xhc3M6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGVsICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMocGFyZW50Q2xhc3MpXHJcbiAgICAgID8gZWwuZ2V0QXR0cmlidXRlKCdyb3ctaW5kZXgnKVxyXG4gICAgICAgID8gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCdyb3ctaW5kZXgnKSwgMTApXHJcbiAgICAgICAgOiB0aGlzLmdldFJvd0luZGV4KGVsLnBhcmVudEVsZW1lbnQsIHBhcmVudENsYXNzKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um91dGVyTGluayhlbCwgcGFyZW50Q2xhc3MpIHtcclxuICAgIHJldHVybiBlbCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKHBhcmVudENsYXNzKVxyXG4gICAgICA/IGVsLmxvY2FsTmFtZSA9PT0gJ2EnICYmIGVsLmNsYXNzTGlzdC5jb250YWlucygncm91dGVyLWxpbmsnKVxyXG4gICAgICAgID8gZWxcclxuICAgICAgICA6IHRoaXMuZ2V0Um91dGVyTGluayhlbC5wYXJlbnRFbGVtZW50LCBwYXJlbnRDbGFzcylcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5Sb3V0ZXJMaW5rKGV2ZW50OiBNb3VzZUV2ZW50LCBwYXJlbnRDbGFzczogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRSb3V0ZXJMaW5rKFxyXG4gICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgIHBhcmVudENsYXNzXHJcbiAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50O1xyXG4gICAgaWYgKGxpbmsgJiYgbGluay5ocmVmKSB7XHJcbiAgICAgIHRoaXMub3BlbkxpbmsobGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSwgZXZlbnQuY3RybEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29udGV4dCgpIHtcclxuICAgIHJldHVybiB7Li4udGhpcy5jb250ZXh0LCBjb3VudDogMCwgcm93Q291bnQ6IDB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNvbnRleHQodHlwZU9wdHM6IHN0cmluZ1tdLCBvcHRpb25zID0ge30pIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7dHlwZU9wdHM6ICh0eXBlT3B0cyAmJiB0eXBlT3B0cy5sZW5ndGggPyB0eXBlT3B0cyA6IHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGVzKCkubWFwKG8gPT4gby5xbmFtZSkpfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29sdW1uRGVmcyhcclxuICAgIGVsZW1lbnRzOiBhbnlbXSxcclxuICAgIHNvcnRvcmRlcjogYW55W10gPSBbXSxcclxuICAgIGdyb3Vwb3JkZXI6IGFueVtdID0gW10sXHJcbiAgICBwaW5uZWQ6IGFueVtdID0gW10sXHJcbiAgICBlbmFibGVSb3dHcm91cCA9IHRydWUsXHJcbiAgICBjYWNoZWRDb2x1bW5zID0gW10sXHJcbiAgICBtb2RlP1xyXG4gICk6IENvbERlZltdIHtcclxuICAgIHJldHVybiBlbGVtZW50cy5tYXAoZiA9PlxyXG4gICAgICB0aGlzLmdldENvbHVtbkRlZmluaXRpb24oXHJcbiAgICAgICAgZixcclxuICAgICAgICBzb3J0b3JkZXIsXHJcbiAgICAgICAgZ3JvdXBvcmRlcixcclxuICAgICAgICBwaW5uZWQsXHJcbiAgICAgICAgZW5hYmxlUm93R3JvdXAsXHJcbiAgICAgICAgY2FjaGVkQ29sdW1ucyxcclxuICAgICAgICBtb2RlXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJzIHRoZSB2aXN1YWwgb3V0cHV0IG9mIGZvcm0gZWxlbWVudHMgYmFzZWQgb24gaXRzIHR5cGUgZXRjLiAoc2VlIEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQgZm9yIHVzYWdlIGRldGFpbHMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRzIC0gVGhlIGZvcm0gZWxlbWVudHMgdG8gYmUgcmVuZGVyZWRcclxuICAgKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgSFRNTCBmb3IgdGhlIGdpdmVuIGVsZW1lbnRzXHJcbiAgICovXHJcbiAgcHVibGljIGdldFJlc29sdmVkRGVmcyhlbGVtZW50czogYW55W10pIHtcclxuICAgIHJldHVybiBlbGVtZW50cy5tYXAoZWwgPT4ge1xyXG4gICAgICBsZXQgY29sRGVmOiBDb2xEZWYgPSB0aGlzLmdldENvbHVtbkRlZmluaXRpb24oZWwpO1xyXG4gICAgICBsZXQgdmFsdWUgPSBlbC52YWx1ZTtcclxuICAgICAgbGV0IGRhdGEgPSB7fTtcclxuICAgICAgZGF0YVtjb2xEZWYuZmllbGRdID0gdmFsdWU7XHJcbiAgICAgIGlmIChlbC5tZXRhKSB7XHJcbiAgICAgICAgZGF0YVtjb2xEZWYuZmllbGQgKyAnX21ldGEnXSA9IGVsLm1ldGE7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaW52b2tlIHZhbHVlR2V0dGVyIGlmIHByb3ZpZGVkXHJcbiAgICAgIGlmIChjb2xEZWYudmFsdWVHZXR0ZXIpIHtcclxuICAgICAgICB2YWx1ZSA9IChjb2xEZWYudmFsdWVHZXR0ZXIgYXMgRnVuY3Rpb24pLmNhbGwodGhpcywge1xyXG4gICAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxyXG4gICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgIG5vZGU6IHt9LFxyXG4gICAgICAgICAgY29sRGVmOiBjb2xEZWZcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBydW4gdGhlIGNlbGwgcmVuZGVyZXIgd2l0aCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgdmFsdWVHZXR0ZXJcclxuICAgICAgaWYgKGNvbERlZi5jZWxsUmVuZGVyZXIpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxyXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgbm9kZToge30sXHJcbiAgICAgICAgICBjb2xEZWY6IGNvbERlZixcclxuICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVsLl92YWx1ZSA9IChjb2xEZWYuY2VsbFJlbmRlcmVyIGFzIEZ1bmN0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWwuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjcmVhdGVzIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBmb3IgYSBnaXZlbiByZXN1bHQgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzdWx0RmllbGQgLSB0aGUgcmVzdWx0IGZpZWxkIChhcyByZXRyaWV2ZWQgZnJvbSAuLi91c2VyL2NvbmZpZy9yZXN1bHQvKikgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGNvbHVtbiBkZWZpbml0aW9uIG9iamVjdCBmb3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRzIC0gQXJyYXkgb2YgZmllbGRzIHRvIGJlIHNvcnRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb2x1bW5EZWZpbml0aW9uKFxyXG4gICAgcmVzdWx0RmllbGQsXHJcbiAgICBzb3J0RmllbGRzOiBhbnlbXSA9IFtdLFxyXG4gICAgZ3JvdXBGaWVsZHM6IGFueVtdID0gW10sXHJcbiAgICBwaW5uZWRGaWVsZHM6IGFueVtdID0gW10sXHJcbiAgICBlbmFibGVSb3dHcm91cCA9IGZhbHNlLFxyXG4gICAgY2FjaGVkQ29sdW1ucyA9IFtdLFxyXG4gICAgbW9kZT9cclxuICApIHtcclxuICAgIGxldCBjb2xEZWYgPSA8Q29sRGVmPnt9O1xyXG4gICAgY29sRGVmLmhlYWRlck5hbWUgPSByZXN1bHRGaWVsZC5sYWJlbDtcclxuICAgIGNvbERlZi5maWVsZCA9IHJlc3VsdEZpZWxkLmhpdG5hbWUgfHwgcmVzdWx0RmllbGQubmFtZTtcclxuICAgIGNvbERlZi5zb3J0YWJsZSA9IHRydWU7XHJcbiAgICBjb2xEZWYucmVzaXphYmxlID0gdHJ1ZTtcclxuICAgIGNvbERlZi5maWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcclxuICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBwYXJhbXMgPT4gR3JpZFNlcnZpY2UuZXNjYXBlSHRtbChwYXJhbXMudmFsdWUpO1xyXG4gICAgY29sRGVmLnZhbHVlR2V0dGVyID0gcGFyYW1zID0+IHtcclxuICAgICAgcmV0dXJuIHBhcmFtcy5ub2RlLmdyb3VwIHx8ICFwYXJhbXMuZGF0YSA/ICcnIDogcGFyYW1zLmRhdGFbY29sRGVmLmZpZWxkXTtcclxuICAgIH07XHJcbiAgICBjb2xEZWYucmVmRGF0YSA9IHtxbmFtZTogcmVzdWx0RmllbGQucW5hbWUgfHwgJyd9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaGVhZGVyQ2xhc3NcclxuICAgICAqIGFkZCBzcGVjaWFsIGhlYWRlciBjbGFzcyBmb3IgZmllbGRzIGZyb20gdGhlIGNvbnRleHRmb2xkZXJcclxuICAgICAqL1xyXG4gICAgaWYgKHJlc3VsdEZpZWxkLnNlbGVjdGVkZm9yZW5yaWNobWVudCAmJiBtb2RlICE9PSAnQ09NTU9OJykge1xyXG4gICAgICBjb2xEZWYuaGVhZGVyQ2xhc3MgPSAnY29udGV4dGZvbGRlcic7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbERlZkF0dHJzQnlUeXBlKGNvbERlZiwgcmVzdWx0RmllbGQpO1xyXG4gICAgdGhpcy5hZGRDb2xEZWZBdHRyc0J5RmllbGQoY29sRGVmLCBjb2xEZWYuZmllbGQpO1xyXG5cclxuICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSB7XHJcbiAgICAgIC4uLmNvbERlZi5maWx0ZXJQYXJhbXMsXHJcbiAgICAgIGRlYm91bmNlTXM6IDgwMCxcclxuICAgICAgY2xlYXJCdXR0b246IGZhbHNlLFxyXG4gICAgICBuZXdSb3dzQWN0aW9uOiAna2VlcCcsXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb2xEZWYuZmlsdGVyID09PSAnYWdUZXh0Q29sdW1uRmlsdGVyJykge1xyXG4gICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBjb2xEZWYucmVmRGF0YS5xbmFtZS5tYXRjaCgvKF5zeXNvYmplY3RcXC58XnN5c2RvY3VtZW50XFwuKSh0aXRsZSR8ZGVzY3JpcHRpb24kKS8pID8gWydlcXVhbHMnXSA6IFtcclxuICAgICAgICAnY29udGFpbnMnLFxyXG4gICAgICAgICdlcXVhbHMnLFxyXG4gICAgICAgICdzdGFydHNXaXRoJyxcclxuICAgICAgICAnZW5kc1dpdGgnXHJcbiAgICAgIF07XHJcblxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29sRGVmLmZpbHRlciA9PT0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJyB8fFxyXG4gICAgICBjb2xEZWYuZmlsdGVyID09PSAnYWdEYXRlQ29sdW1uRmlsdGVyJ1xyXG4gICAgKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcclxuICAgICAgICAnZXF1YWxzJyxcclxuICAgICAgICAnbGVzc1RoYW5PckVxdWFsJyxcclxuICAgICAgICAnZ3JlYXRlclRoYW4nLFxyXG4gICAgICAgICdncmVhdGVyVGhhbk9yRXF1YWwnLFxyXG4gICAgICAgICdpblJhbmdlJ1xyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG1pbWV0eXBlIGZpbHRlciBzdXBwb3J0cyBvbmx5IGVxdWFscyBvcHRpb25cclxuICAgIGlmIChjb2xEZWYuZmllbGQgPT09ICdtaW1ldHlwZScpIHtcclxuICAgICAgY29sRGVmLmZpbHRlclBhcmFtcy5kZWZhdWx0T3B0aW9uID0gJ2VxdWFscyc7XHJcbiAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFsnZXF1YWxzJ107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlsZXNpemUgZmlsdGVyIHN1cHBvcnRzIG9ubHkgaW50ZXJ2YWwgb3B0aW9uc1xyXG4gICAgaWYgKGNvbERlZi5maWVsZCA9PT0gJ2ZpbGVzaXplJykge1xyXG4gICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zLmRlZmF1bHRPcHRpb24gPSAnbGVzc1RoYW5PckVxdWFsJztcclxuICAgICAgY29sRGVmLmZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xyXG4gICAgICAgICdsZXNzVGhhbk9yRXF1YWwnLFxyXG4gICAgICAgICdncmVhdGVyVGhhbk9yRXF1YWwnLFxyXG4gICAgICAgICdpblJhbmdlJ1xyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVzdWx0RmllbGQuc29ydGFibGUpIHtcclxuICAgICAgY29sRGVmLnNvcnRhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlc3VsdEZpZWxkLnNlYXJjaGFibGUpIHtcclxuICAgICAgY29sRGVmLnN1cHByZXNzTWVudSA9IHRydWU7XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc29ydEZpZWxkID0gc29ydEZpZWxkcy5maW5kKGYgPT4gZi5xbmFtZSA9PT0gcmVzdWx0RmllbGQucW5hbWUpO1xyXG4gICAgaWYgKHNvcnRGaWVsZCkge1xyXG4gICAgICBjb2xEZWYuc29ydCA9IHNvcnRGaWVsZC5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW5hYmxlUm93R3JvdXApIHtcclxuICAgICAgbGV0IGdyb3VwRmllbGRJbmRleCA9IGdyb3VwRmllbGRzLmZpbmRJbmRleChcclxuICAgICAgICBmID0+IGYucW5hbWUgPT09IHJlc3VsdEZpZWxkLnFuYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh+Z3JvdXBGaWVsZEluZGV4KSB7XHJcbiAgICAgICAgY29sRGVmLnJvd0dyb3VwSW5kZXggPSBncm91cEZpZWxkSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGlubmVkRmllbGQgPSBwaW5uZWRGaWVsZHMuZmluZChmID0+IGYucW5hbWUgPT09IHJlc3VsdEZpZWxkLnFuYW1lKTtcclxuICAgIGlmIChwaW5uZWRGaWVsZCkge1xyXG4gICAgICBjb2xEZWYucGlubmVkID0gcGlubmVkRmllbGQucG9zaXRpb24gfHwgdGhpcy5jb250ZXh0LmRlZmF1bHRQb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2FjaGVkQ29sdW1uID0gY2FjaGVkQ29sdW1ucy5maW5kKGYgPT4gZi5xbmFtZSA9PT0gcmVzdWx0RmllbGQucW5hbWUpO1xyXG4gICAgaWYgKGNhY2hlZENvbHVtbikge1xyXG4gICAgICBjb2xEZWYud2lkdGggPSBjYWNoZWRDb2x1bW4ud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbERlZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFkZCB0eXBlIHNwZWNpZmljIGNvbHVtbiBkZWZpbml0aW9uIGF0dHJpYnV0ZXNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb2xEZWYgLSB0aGUgY29sdW1uIGRlZmluaXRpb24gb2JqZWN0IHRvIGJlIGV4dGVuZGVkIGJ5IHR5cGUgc3BlY2lmaWMgYXR0cmlidXRlc1xyXG4gICAqIEBwYXJhbSByZXN1bHRGaWVsZCAtIG9iamVjdCBkZWZpbmluZyB0aGUgcmVzdWx0IGZpZWxkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBlbnJpY2hlZCBjb2x1bW4gZGVmaW5pdGlvbiBvYmplY3RcclxuICAgKi9cclxuICBwdWJsaWMgYWRkQ29sRGVmQXR0cnNCeVR5cGUoY29sRGVmOiBDb2xEZWYsIHJlc3VsdEZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKHJlc3VsdEZpZWxkLnR5cGUpIHtcclxuICAgICAgY2FzZSAnUkVGRVJFTkNFJzoge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcclxuICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ3JvdXRlci1saW5rLWNlbGwnO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIucmVmZXJlbmNlQ2VsbFJlbmRlcmVyLFxyXG4gICAgICAgICAge3JlZmVyZW5jZTogcmVzdWx0RmllbGQucmVmZXJlbmNlIHx8IHt9LCBjb2xEZWY6IGNvbERlZn1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbERlZi52YWx1ZUdldHRlciA9IHBhcmFtID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID1cclxuICAgICAgICAgICAgcGFyYW0ubm9kZS5ncm91cCB8fCAhcGFyYW0uZGF0YSA/ICcnIDogcGFyYW0uZGF0YVtjb2xEZWYuZmllbGRdO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlZk1ldGEgPSBwYXJhbSAmJiBwYXJhbS5kYXRhICYmIHBhcmFtLmRhdGEuX3JlZmVyZW5jZXM7XHJcbiAgICAgICAgICAvLyB1c2Ugb2JqZWN0IHR5cGUgbGFiZWwgd2hlbiBtZXRhIGlzIG1pc3NpbmcgKHNlYXJjaCBzdmMgZG9lcyBub3Qgc3VwcG9ydCBtZXRhKVxyXG4gICAgICAgICAgcmV0dXJuIFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWx1ZSlcclxuICAgICAgICAgICAgPyAnJyA6IHJlZk1ldGFcclxuICAgICAgICAgICAgICA/IHJlZk1ldGFbY29sRGVmLmZpZWxkXVxyXG4gICAgICAgICAgICAgIDogdGhpcy5tZXRhVmFsdWVHZXR0ZXIodiA9PiB2LnRpdGxlKShwYXJhbSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdTVFJJTkcnOiB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuc3RyaW5nQ2VsbHJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZXN1bHRGaWVsZC5tdWx0aXNlbGVjdCkge1xyXG4gICAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5tdWx0aVNlbGVjdENlbGxSZW5kZXJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0XHJcbiAgICAgICAgICA/ICdtdWx0aUNlbGwgc3RyaW5nJ1xyXG4gICAgICAgICAgOiAnc3RyaW5nJztcclxuICAgICAgICB0aGlzLmFkZENvbERlZkF0dHJzQnlDbGFzc2lmaWNhdGlvbihjb2xEZWYsIHJlc3VsdEZpZWxkLmNsYXNzaWZpY2F0aW9uKTtcclxuICAgICAgICBpZiAocmVzdWx0RmllbGQucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ3JvdXRlci1saW5rLWNlbGwnO1xyXG4gICAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgICAgQ2VsbFJlbmRlcmVyLmxpbmtDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICAgIHtyZWZlcmVuY2U6IHJlc3VsdEZpZWxkLnJlZmVyZW5jZX1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbERlZi5jb21wYXJhdG9yID0gKGEsIGIpID0+IEFnVXRpbHMuZGVmYXVsdENvbXBhcmF0b3IoYSwgYiwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREFURVRJTUUnOiB7XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gMTUwO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnYWdEYXRlQ29sdW1uRmlsdGVyJztcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gdGhpcy5jdXN0b21Db250ZXh0KFxyXG4gICAgICAgICAgQ2VsbFJlbmRlcmVyLmRhdGVUaW1lQ2VsbFJlbmRlcmVyLFxyXG4gICAgICAgICAge3BhdHRlcm46IHJlc3VsdEZpZWxkLndpdGh0aW1lID8gJ2VvU2hvcnQnIDogJ2VvU2hvcnREYXRlJ31cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbERlZi5nZXRRdWlja0ZpbHRlclRleHQgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIuZGF0ZVRpbWVDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICB7cGF0dGVybjogcmVzdWx0RmllbGQud2l0aHRpbWUgPyAnZW9TaG9ydCcgOiAnZW9TaG9ydERhdGUnfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHtcclxuICAgICAgICAgIGNvbXBhcmF0b3I6IHRoaXMuZGF0ZUNvbXBhcmF0b3IodGhpcy5jb250ZXh0LmRhdGVQaXBlKSxcclxuICAgICAgICAgIHZhbHVlR2V0dGVyOiB0aGlzLmRhdGVGaWx0ZXJWYWx1ZUdldHRlcihjb2xEZWYuZmllbGQpLFxyXG4gICAgICAgICAgd2l0aFRpbWU6IHJlc3VsdEZpZWxkLndpdGh0aW1lLFxyXG4gICAgICAgICAgaW5SYW5nZUluY2x1c2l2ZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQ09ERVNZU1RFTSc6IHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gJ0NvZGVzeXN0ZW1GaWx0ZXJDb21wb25lbnQnO1xyXG4gICAgICAgIGNvbERlZi5jb2xJZCA9IHJlc3VsdEZpZWxkLmZpZWxkO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSB7bXVsdGk6IHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0fTtcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLnN0cmluZ0NlbGxyZW5kZXJlcjtcclxuICAgICAgICBpZiAocmVzdWx0RmllbGQubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIubXVsdGlTZWxlY3RDZWxsUmVuZGVyZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbERlZi52YWx1ZUdldHRlciA9IHRoaXMubWV0YVZhbHVlR2V0dGVyKHYgPT4gdi5kZWZhdWx0cmVwcmVzZW50YXRpb24pO1xyXG4gICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSByZXN1bHRGaWVsZC5tdWx0aXNlbGVjdFxyXG4gICAgICAgICAgPyAnbXVsdGlDZWxsIGNvZGVzeXN0ZW0nXHJcbiAgICAgICAgICA6ICdjb2Rlc3lzdGVtJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdOVU1CRVInOiB7XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9ICdjb2wtbnVtYmVyJztcclxuICAgICAgICBjb2xEZWYuaGVhZGVyQ2xhc3MgPSAnY29sLWhlYWRlci1udW1iZXInO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xyXG4gICAgICAgIGNvbERlZi53aWR0aCA9IDE1MDtcclxuICAgICAgICBjb25zdCB7c2NhbGUsIGdyb3VwaW5nLCBwYXR0ZXJufSA9IHJlc3VsdEZpZWxkO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIubnVtYmVyQ2VsbFJlbmRlcmVyLFxyXG4gICAgICAgICAge3NjYWxlLCBncm91cGluZywgcGF0dGVybn1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbERlZi5nZXRRdWlja0ZpbHRlclRleHQgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIubnVtYmVyQ2VsbFJlbmRlcmVyLFxyXG4gICAgICAgICAge3NjYWxlLCBncm91cGluZywgcGF0dGVybn1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSB7aW5SYW5nZUluY2x1c2l2ZSA6IHRydWV9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09SR0FOSVpBVElPTic6IHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gJ09yZ2FuaXphdGlvbkZpbHRlckNvbXBvbmVudCc7XHJcbiAgICAgICAgY29sRGVmLmNvbElkID0gcmVzdWx0RmllbGQucW5hbWU7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHttdWx0aTogcmVzdWx0RmllbGQubXVsdGlzZWxlY3R9O1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuc3RyaW5nQ2VsbHJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZXN1bHRGaWVsZC5tdWx0aXNlbGVjdCkge1xyXG4gICAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5tdWx0aVNlbGVjdENlbGxSZW5kZXJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sRGVmLnZhbHVlR2V0dGVyID0gdGhpcy5tZXRhVmFsdWVHZXR0ZXIodiA9PlxyXG4gICAgICAgICAgdi50aXRsZSAmJiB2Lm5hbWUgPyBgJHt2LnRpdGxlfSAoJHt2Lm5hbWV9KWAgOiBgJHt2LmlkfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSByZXN1bHRGaWVsZC5tdWx0aXNlbGVjdFxyXG4gICAgICAgICAgPyAnbXVsdGlDZWxsIG9yZ2FuaXphdGlvbidcclxuICAgICAgICAgIDogJ29yZ2FuaXphdGlvbic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQk9PTEVBTic6IHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gJ0xpc3RGaWx0ZXJDb21wb25lbnQnO1xyXG4gICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAnY29sLWJvb2xlYW4nO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuYm9vbGVhbkNlbGxSZW5kZXJlcjtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLmN1c3RvbUNvbnRleHQoQ2VsbFJlbmRlcmVyLmJvb2xlYW5DZWxsUmVuZGVyZXIpLFxyXG4gICAgICAgICAgY2VsbEhlaWdodDogMzAsXHJcbiAgICAgICAgICB2YWx1ZXM6IFtmYWxzZSwgdHJ1ZV0sXHJcbiAgICAgICAgICBzdXBwcmVzc01pbmlGaWx0ZXI6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbERlZi53aWR0aCA9IDEwMDtcclxuICAgICAgICBjb2xEZWYuZ2V0UXVpY2tGaWx0ZXJUZXh0ID0gKCkgPT4gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb2xEZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZGQgY2xhc3NpZmljYXRpb24gc3BlY2lmaWMgY29sdW1uIGRlZmluaXRpb24gYXR0cmlidXRlc1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbERlZiAtIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcclxuICAgKiBAcGFyYW0gY2xhc3NpZmljYXRpb24gLSB0aGUgY2xhc3NpZmljYXRpb24gdG8gZXZhbHVhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIGVucmljaGVkIGNvbHVtbiBkZWZpbml0aW9uIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkQ29sRGVmQXR0cnNCeUNsYXNzaWZpY2F0aW9uKGNvbERlZjogQ29sRGVmLCBjbGFzc2lmaWNhdGlvbikge1xyXG4gICAgc3dpdGNoIChjbGFzc2lmaWNhdGlvbikge1xyXG4gICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLmVtYWlsQ2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3VybCc6IHtcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLnVybENlbGxSZW5kZXJlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbERlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ29sRGVmQXR0cnNCeUZpZWxkKGNvbERlZjogQ29sRGVmLCByZXN1bHRGaWVsZE5hbWUpIHtcclxuICAgIHN3aXRjaCAocmVzdWx0RmllbGROYW1lKSB7XHJcbiAgICAgIGNhc2UgJ3R5cGUnOiB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdMaXN0RmlsdGVyQ29tcG9uZW50JztcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLnR5cGVDZWxsUmVuZGVyZXI7XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gODA7XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9ICdyZXMtaWNvJztcclxuICAgICAgICBjb2xEZWYuZ2V0UXVpY2tGaWx0ZXJUZXh0ID0gKCkgPT4gJyc7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHtcclxuICAgICAgICAgIGNlbGxSZW5kZXJlcjogdGhpcy5jdXN0b21Db250ZXh0KENlbGxSZW5kZXJlci50eXBlQ2VsbFJlbmRlcmVyKSxcclxuICAgICAgICAgIHZhbHVlczogdGhpcy5jb250ZXh0LnR5cGVPcHRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtaW1ldHlwZWdyb3VwJzoge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnTGlzdEZpbHRlckNvbXBvbmVudCc7XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gMTAxO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSB7XHJcbiAgICAgICAgICB2YWx1ZXM6IHRoaXMuY29udGV4dC5taW1ldHlwZWdyb3VwT3B0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndmVyc2lvbic6IHtcclxuICAgICAgICBjb2xEZWYud2lkdGggPSA4MDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdmaWxlc2l6ZSc6IHtcclxuICAgICAgICBjb2xEZWYuaGVhZGVyQ2xhc3MgPSAnY29sLWhlYWRlci1maWxlc2l6ZSc7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IEZpbGVzaXplRmlsdGVyO1xyXG4gICAgICAgIGNvbERlZi53aWR0aCA9IDEwMDtcclxuICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLmZpbGVzaXplQ2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIGNvbERlZi5nZXRRdWlja0ZpbHRlclRleHQgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIuZmlsZXNpemVDZWxsUmVuZGVyZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sRGVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjdXN0b21Db250ZXh0KGZuYywgbWl4aW4/KSB7XHJcbiAgICByZXR1cm4gcGFyYW0gPT4ge1xyXG4gICAgICByZXR1cm4gZm5jKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtLCB7Y29udGV4dDogdGhpcy5jb250ZXh0fSwgbWl4aW4pKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWV0YVZhbHVlR2V0dGVyKHRpdGxlRm5jOiBGdW5jdGlvbiwgbWFwRm5jOiBGdW5jdGlvbiA9IHYgPT4gdikge1xyXG4gICAgcmV0dXJuIHBhcmFtcyA9PiB7XHJcbiAgICAgIC8vIGRhdGEgY291bGQgYmUgZW1wdHkgb24gZmlyc3QgcmVuZGVyaW5nIGEgY2VsbCB3aGlsZSBpbmZpbml0ZSBzY3JvbGxpbmdcclxuICAgICAgaWYgKHBhcmFtcy5ub2RlLmdyb3VwIHx8ICFwYXJhbXMuZGF0YSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdG9kbzogc3VwZXIgaG90Zml4IC0gQ09PTC04OTg5IC0gc29sdmVzIHByb2JsZW0gd2l0aCByZXNvbHZpbmcgb2YgT1JHQU5JWkFUSU9OIHZhbHVlICh2aWEgcW5hbWUpXHJcbiAgICAgIGNvbnN0IGZpZWxkTWV0YSA9IHBhcmFtcy5jb2xEZWYuZmllbGQgKyAnX21ldGEnO1xyXG4gICAgICBjb25zdCB2YWx1ZSA9ICFwYXJhbXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShmaWVsZE1ldGEpXHJcbiAgICAgICAgPyBtYXBGbmMoXHJcbiAgICAgICAgICAocGFyYW1zLmRhdGFbcGFyYW1zLmNvbERlZi5maWVsZF0gIT09IHVuZGVmaW5lZCkgPyBwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLmZpZWxkXSA6XHJcbiAgICAgICAgICBwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLnJlZkRhdGEucW5hbWVdXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShwYXJhbXMuZGF0YVtmaWVsZE1ldGFdKVxyXG4gICAgICAgICAgPyBwYXJhbXMuZGF0YVtmaWVsZE1ldGFdLm1hcCh2ID0+IHRpdGxlRm5jKHYgfHwge30pKVxyXG4gICAgICAgICAgOiB0aXRsZUZuYyhwYXJhbXMuZGF0YVtmaWVsZE1ldGFdIHx8IHt9KTtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRlQ29tcGFyYXRvcihkYXRlUGlwZSkge1xyXG4gICAgcmV0dXJuIChhOiBEYXRlLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYiB8fCAhYi52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYi5maWx0ZXIpIHtcclxuICAgICAgICBjb25zdCBfZGF0ZSA9ICFiLmFjdGl2ZVJhbmdlID8gYi5maWx0ZXIuZGF0ZUZyb20gOiBiLmZpbHRlci5kYXRlVG87XHJcbiAgICAgICAgYi5hY3RpdmVSYW5nZSA9IGIuZmlsdGVyLnR5cGUgPT09IFNpbXBsZUZpbHRlci5JTl9SQU5HRTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSBiLmZpbHRlci53aXRoVGltZSA/IDE2IDogMTA7XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBBZ1V0aWxzLmRlZmF1bHRDb21wYXJhdG9yKFxyXG4gICAgICAgICAgICBfZGF0ZSAmJiBfZGF0ZS5zbGljZSgwLCBsZW5ndGgpLFxyXG4gICAgICAgICAgICBiLnZhbHVlLnNsaWNlKDAsIGxlbmd0aClcclxuICAgICAgICAgICkgKiAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRlID0gYi5sZW5ndGggPT09IDEwID8gYiA6IGRhdGVQaXBlLnRyYW5zZm9ybShiLCAneXl5eS1NTS1kZCcpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIEFnVXRpbHMuZGVmYXVsdENvbXBhcmF0b3IoZGF0ZVBpcGUudHJhbnNmb3JtKGEsICd5eXl5LU1NLWRkJyksIGRhdGUpICpcclxuICAgICAgICAtMVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRlRmlsdGVyVmFsdWVHZXR0ZXIoZmllbGQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5vZGUgPT4ge1xyXG4gICAgICBsZXQgX2ZpbHRlciA9IG5vZGUuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmFwaS5nZXRGaWx0ZXJJbnN0YW5jZShcclxuICAgICAgICBmaWVsZFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgdmFsdWUgPSBub2RlLmRhdGFbZmllbGRdO1xyXG4gICAgICByZXR1cm4ge2ZpbHRlcjogX2ZpbHRlclsnX2ZpbHRlck1vZGVsJ10sIHZhbHVlfTtcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlcmVyIHtcclxuXHJcbiAgc3RhdGljIHdpbmRvd1VSSSh1cmk6IGFueSkge1xyXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXlxcL3xeXFxcXFxcXFwnKSwgJycpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlbmRlcih0eXBlOiBzdHJpbmcsIHBhcmFtOiBhbnksIG5ld1BhcmFtPzogYW55KSB7XHJcbiAgICByZXR1cm4gQ2VsbFJlbmRlcmVyW3R5cGUgKyAnQ2VsbFJlbmRlcmVyJ10oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHBhcmFtLCBuZXdQYXJhbSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZmlsZXNpemVDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW0udmFsdWUgPyBwYXJhbS5jb250ZXh0LmZpbGVTaXplUGlwZS50cmFuc2Zvcm0ocGFyYW0udmFsdWUpIDogJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbnVtYmVyQ2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtLnZhbHVlIHx8IHBhcmFtLnZhbHVlID09PSAwKSB7XHJcbiAgICAgIGlmIChwYXJhbS52YWx1ZS5vcGVyYXRvcikge1xyXG4gICAgICAgIC8vIHJhbmdlIHZhbHVlIGZyb20gc2VhcmNoIGZvcm0gdGFibGVcclxuICAgICAgICByZXR1cm4gcGFyYW0udmFsdWUub3BlcmF0b3IgPT09XHJcbiAgICAgICAgICBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIXHJcbiAgICAgICAgICA/IENlbGxSZW5kZXJlci5udW1iZXJDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgICAgcGFyYW0udmFsdWUuZmlyc3RWYWx1ZSxcclxuICAgICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgICAgcGFyYW0uZ3JvdXBpbmcsXHJcbiAgICAgICAgICAgIHBhcmFtLnBhdHRlcm4sXHJcbiAgICAgICAgICAgIHBhcmFtLnNjYWxlXHJcbiAgICAgICAgICApICtcclxuICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICBSYW5nZVZhbHVlLmdldE9wZXJhdG9yTGFiZWwocGFyYW0udmFsdWUub3BlcmF0b3IpICtcclxuICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIubnVtYmVyQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICAgICAgICAgIHBhcmFtLnZhbHVlLnNlY29uZFZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgICBwYXJhbS5ncm91cGluZyxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVybixcclxuICAgICAgICAgICAgcGFyYW0uc2NhbGVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIDogUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKHBhcmFtLnZhbHVlLm9wZXJhdG9yKSArXHJcbiAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgQ2VsbFJlbmRlcmVyLm51bWJlckNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgICAgICAgICBwYXJhbS52YWx1ZS5maXJzdFZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgICBwYXJhbS5ncm91cGluZyxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVybixcclxuICAgICAgICAgICAgcGFyYW0uc2NhbGVcclxuICAgICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIENlbGxSZW5kZXJlci5udW1iZXJDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgIHBhcmFtLnZhbHVlLFxyXG4gICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgIHBhcmFtLmdyb3VwaW5nLFxyXG4gICAgICAgICAgcGFyYW0ucGF0dGVybixcclxuICAgICAgICAgIHBhcmFtLnNjYWxlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG51bWJlckNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgdmFsdWUsXHJcbiAgICBjb250ZXh0LFxyXG4gICAgZ3JvdXBpbmc/LFxyXG4gICAgcGF0dGVybj8sXHJcbiAgICBzY2FsZT9cclxuICApIHtcclxuICAgIHJldHVybiBjb250ZXh0Lm51bWJlclBpcGUudHJhbnNmb3JtKFxyXG4gICAgICB2YWx1ZSxcclxuICAgICAgZ3JvdXBpbmcsXHJcbiAgICAgIHBhdHRlcm4sXHJcbiAgICAgIHNjYWxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN0cmluZ0NlbGxyZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBHcmlkU2VydmljZS5lc2NhcGVIdG1sKHBhcmFtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0eXBlQ2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbCA9ICcnO1xyXG4gICAgaWYgKHBhcmFtLnZhbHVlKSB7XHJcbiAgICAgIGxldCBvYmplY3RUeXBlID0gcGFyYW0uY29udGV4dC5zeXN0ZW0uZ2V0T2JqZWN0VHlwZShwYXJhbS52YWx1ZSk7XHJcbiAgICAgIGlmICghb2JqZWN0VHlwZSkge1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIENlbGxSZW5kZXJlci5pY29uQ2VsbFJlbmRlcmVyKFxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHBhcmFtLCB7dmFsdWU6IG9iamVjdFR5cGV9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpY29uQ2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbCA9ICcnO1xyXG4gICAgaWYgKHBhcmFtLnZhbHVlICYmIChwYXJhbS52YWx1ZS51cmwgfHwgcGFyYW0udmFsdWUuaWNvbklkKSkge1xyXG4gICAgICBsZXQgaWNvblVybCA9IHBhcmFtLnZhbHVlLnVybFxyXG4gICAgICAgID8gcGFyYW0uY29udGV4dC5iYXNlSHJlZiArIHBhcmFtLnZhbHVlLnVybFxyXG4gICAgICAgIDogcGFyYW0uY29udGV4dC5iYWNrZW5kLmdldFNlcnZpY2VCYXNlKCkgK1xyXG4gICAgICAgICcvdWkvaWNvbi8nICtcclxuICAgICAgICBwYXJhbS52YWx1ZS5pY29uSWQgK1xyXG4gICAgICAgICcuc3ZnJztcclxuICAgICAgbGV0IGxhYmVsID0gcGFyYW0udmFsdWUubGFiZWw7XHJcbiAgICAgIHZhbCA9IGA8aW1nIGNsYXNzPVwib2JqZWN0LXR5cGVcIiBzcmM9XCIke2ljb25Vcmx9XCIgdGl0bGU9XCIke2xhYmVsfVwiPjxzcGFuIGNsYXNzPVwib2JqZWN0LXR5cGUtbGFiZWxcIj4ke2xhYmVsfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbWFpbENlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbS52YWx1ZVxyXG4gICAgICA/IGA8YSBocmVmPVwibWFpbHRvOiR7cGFyYW0udmFsdWV9XCI+JHtHcmlkU2VydmljZS5lc2NhcGVIdG1sKFxyXG4gICAgICAgIHBhcmFtLnZhbHVlXHJcbiAgICAgICl9PC9hPmBcclxuICAgICAgOiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyB1cmxDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW0udmFsdWVcclxuICAgICAgPyBgPGEgdGFyZ2V0PVwiX2JsYW5rIFwiIGhyZWY9XCIke3BhcmFtLnZhbHVlfVwiPiR7R3JpZFNlcnZpY2UuZXNjYXBlSHRtbChcclxuICAgICAgICBwYXJhbS52YWx1ZVxyXG4gICAgICApfTwvYT5gXHJcbiAgICAgIDogJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGF0ZVRpbWVDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW0udmFsdWUpIHtcclxuICAgICAgaWYgKHBhcmFtLnZhbHVlLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgLy8gcmFuZ2UgdmFsdWUgZnJvbSBzZWFyY2ggZm9ybSB0YWJsZVxyXG4gICAgICAgIHJldHVybiBwYXJhbS52YWx1ZS5vcGVyYXRvciA9PT1cclxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEhcclxuICAgICAgICAgID8gQ2VsbFJlbmRlcmVyLmRhdGVUaW1lQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICAgICAgICAgIHBhcmFtLnZhbHVlLmZpcnN0VmFsdWUsXHJcbiAgICAgICAgICAgIHBhcmFtLmNvbnRleHQsXHJcbiAgICAgICAgICAgIHBhcmFtLnBhdHRlcm5cclxuICAgICAgICAgICkgK1xyXG4gICAgICAgICAgJyAnICtcclxuICAgICAgICAgIFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChwYXJhbS52YWx1ZS5vcGVyYXRvcikgK1xyXG4gICAgICAgICAgJyAnICtcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5kYXRlVGltZUNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgICAgICAgICBwYXJhbS52YWx1ZS5zZWNvbmRWYWx1ZSxcclxuICAgICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVyblxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgOiBSYW5nZVZhbHVlLmdldE9wZXJhdG9yTGFiZWwocGFyYW0udmFsdWUub3BlcmF0b3IpICtcclxuICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIuZGF0ZVRpbWVDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgICAgcGFyYW0udmFsdWUuZmlyc3RWYWx1ZSxcclxuICAgICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVyblxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gQ2VsbFJlbmRlcmVyLmRhdGVUaW1lQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICAgICAgICBwYXJhbS52YWx1ZSxcclxuICAgICAgICAgIHBhcmFtLmNvbnRleHQsXHJcbiAgICAgICAgICBwYXJhbS5wYXR0ZXJuXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGVUaW1lQ2VsbFJlbmRlcmVyVGVtcGxhdGUodmFsdWUsIGNvbnRleHQsIHBhdHRlcm4pIHtcclxuICAgIGlmKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7Y29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYDxzcGFuIGRhdGU9XCIke3ZhbHVlfVwiPiR7Y29udGV4dC5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICBwYXR0ZXJuXHJcbiAgICApfTwvc3Bhbj5gO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGJvb2xlYW5DZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsID0gYDxwYXRoIGNsYXNzPVwiYmFja2dyb3VuZFwiIGQ9XCJNMTksM0g1QzMuOSwzLDMsMy45LDMsNXYxNGMwLDEuMSwwLjksMiwyLDJoMTRjMS4xLDAsMi0wLjksMi0yVjVDMjEsMy45LDIwLjEsMywxOSwzelwiLz5gO1xyXG5cclxuICAgIGlmIChwYXJhbS52YWx1ZSA9PT0gdHJ1ZSB8fCBwYXJhbS52YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgIHZhbCA9IGA8cGF0aCBjbGFzcz1cIm91dGxpbmVcIiBkPVwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHpcIi8+XHJcbiAgICAgICAgICAgICA8cG9seWxpbmUgY2xhc3M9XCJjaGVja21hcmtcIiBwb2ludHM9XCI2LjMsMTEuOCA3LjgsMTAuMyAxMC44LDEzLjMgMTYuMyw3LjggMTcuOCw5LjMgMTAuOCwxNi4zIDYuMywxMS44XCIvPmA7XHJcbiAgICB9IGVsc2UgaWYgKHBhcmFtLnZhbHVlID09PSBmYWxzZSB8fCBwYXJhbS52YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICB2YWwgPSBgPHBhdGggY2xhc3M9XCJvdXRsaW5lXCIgZD1cIk0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6XCIvPmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYDxzdmcgY2xhc3M9XCJjaGVja2JveFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+JHt2YWx9PC9zdmc+YDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtdWx0aVNlbGVjdENlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSAnJztcclxuICAgIGlmIChwYXJhbS52YWx1ZSkge1xyXG4gICAgICAoQXJyYXkuaXNBcnJheShwYXJhbS52YWx1ZSkgPyBwYXJhbS52YWx1ZSA6IFtwYXJhbS52YWx1ZV0pLmZvckVhY2goXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgdmFsICs9IGA8ZGl2IGNsYXNzPVwiY2hpcFwiPiR7R3JpZFNlcnZpY2UuZXNjYXBlSHRtbCh2YWx1ZSl9PC9kaXY+YDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxpbmtDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsID0gJyc7XHJcbiAgICBpZiAocGFyYW0udmFsdWUpIHtcclxuICAgICAgKEFycmF5LmlzQXJyYXkocGFyYW0udmFsdWUpID8gcGFyYW0udmFsdWUgOiBbcGFyYW0udmFsdWVdKS5mb3JFYWNoKFxyXG4gICAgICAgIHZhbHVlID0+IHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xyXG4gICAgICAgICAgICB0eXBlczogW3BhcmFtLnJlZmVyZW5jZS50eXBlXSxcclxuICAgICAgICAgICAgZmlsdGVyczoge31cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBxdWVyeS5maWx0ZXJzW3BhcmFtLnJlZmVyZW5jZS5lbGVtZW50XSA9IHtcclxuICAgICAgICAgICAgbzogJ2VxJyxcclxuICAgICAgICAgICAgdjE6IHZhbHVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgbGluayA9IFV0aWxzLmJ1aWxkVXJpKCdyZXN1bHQnLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5OiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocXVlcnkpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB2YWwgKz0gYDxkaXYgY2xhc3M9XCJjaGlwXCI+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cImxpbmsgcm91dGVyLWxpbmtcIiBocmVmPVwiJHtsaW5rfVwiIHRhcmdldD1cIl9ibGFua1wiIG9uY2xpY2s9XCJyZXR1cm4gZmFsc2U7XCI+XHJcbiAgICAgICAgICA8c3ZnIGZvY3VzYWJsZT1cImZhbHNlXCIgY2xhc3M9XCJyZWYtaWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TThcclxuICAgICAgICAgIDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXpcIj48L3BhdGg+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvYT48c3Bhbj4ke0dyaWRTZXJ2aWNlLmVzY2FwZUh0bWwodmFsdWUpfTwvc3Bhbj48L2Rpdj5gO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVmZXJlbmNlQ2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgbGV0IHRleHQgPSAnJztcclxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW0uZGF0YSA/IHBhcmFtLmRhdGFbcGFyYW0uY29sRGVmLmZpZWxkXSA6ICcnO1xyXG4gICAgY29uc3QgdHlwZSA9IHBhcmFtLmNvbnRleHQuc3lzdGVtLmdldE9iamVjdFR5cGUocGFyYW0ucmVmZXJlbmNlLnR5cGUpO1xyXG4gICAgaWYgKCFVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsdWUpICYmIHR5cGUpIHtcclxuICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKS5mb3JFYWNoKCh2YWwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGluayA9ICdvYmplY3QvJyArIHZhbCArICc/dHlwZT0nICsgcGFyYW0ucmVmZXJlbmNlLnR5cGU7XHJcbiAgICAgICAgY29uc3QgaWNvblVybCA9XHJcbiAgICAgICAgICBwYXJhbS5jb250ZXh0LmJhY2tlbmQuZ2V0U2VydmljZUJhc2UoKSArXHJcbiAgICAgICAgICAnL3VpL2ljb24vJyArXHJcbiAgICAgICAgICB0eXBlLmljb25JZCArXHJcbiAgICAgICAgICAnLnN2Zyc7XHJcbiAgICAgICAgbGV0IHRpdGxlID0gQXJyYXkuaXNBcnJheShwYXJhbS52YWx1ZSlcclxuICAgICAgICAgID8gcGFyYW0udmFsdWVbaW5kZXhdXHJcbiAgICAgICAgICA6IHBhcmFtLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBub3QgYWxsb3dlZCB0byBzZWUgdGhlIHJlZmVyZW5jZSBvYmplY3Qgb3IgdGhlIG9iamVjdCB3YXMgZGVsZXRlZCwgd2UgZG9uJ3Qgc2hvdyB0aGUgbGluay5cclxuICAgICAgICB0ZXh0ICs9IGA8ZGl2IGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICR7XHJcbiAgICAgICAgICAhdGl0bGVcclxuICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICA6IGA8YSBjbGFzcz1cImxpbmsgcm91dGVyLWxpbmtcIiBocmVmPVwiJHtsaW5rfVwiIHRhcmdldD1cIl9ibGFua1wiIG9uY2xpY2s9XCJyZXR1cm4gZmFsc2U7XCI+XHJcbiAgICAgICAgICA8c3ZnIGZvY3VzYWJsZT1cImZhbHNlXCIgY2xhc3M9XCJyZWYtaWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TThcclxuICAgICAgICAgIDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXpcIj48L3BhdGg+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvYT5gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPGltZyBjbGFzcz1cInR5cGUtaWNvblwiIHNyYz1cIiR7aWNvblVybH1cIiB0aXRsZT1cIiR7dHlwZS5sYWJlbH1cIj5cclxuICAgICAgICA8c3Bhbj4ke0dyaWRTZXJ2aWNlLmVzY2FwZUh0bWwodGl0bGUgfHwgdHlwZS5sYWJlbCl9PC9zcGFuPjwvZGl2PmA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZXh0IHx8IHBhcmFtLnZhbHVlO1xyXG4gIH1cclxufVxyXG4iXX0=
716
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9hcGkvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFlBQVksRUFBVSxLQUFLLElBQUksT0FBTyxFQUFnRCxNQUFNLHlCQUF5QixDQUFDO0FBQzlILE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsV0FBVyxFQUVYLEtBQUssRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUViLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixNQUFNLE9BQU8sV0FBVztJQW9DdEIsWUFDUyxTQUEyQixFQUMxQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ3ZCLFdBQXdCO1FBTHpCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdC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cnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NpbXBsZUZpbHRlciwgQ29sRGVmLCBVdGlscyBhcyBBZ1V0aWxzLCBDc3ZFeHBvcnRQYXJhbXMsIFJvd05vZGUsIENvbHVtbiwgR3JpZE9wdGlvbnN9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudEVuYWlvLCBTZWFyY2hRdWVyeX0gZnJvbSAnQGVvLXNkay9jb3JlJztcclxuaW1wb3J0IHtGaWxlU2l6ZVBpcGV9IGZyb20gJy4uL3BpcGVzL2ZpbGVzaXplLnBpcGUnO1xyXG5pbXBvcnQge0xvY2FsZU51bWJlclBpcGV9IGZyb20gJy4uL3BpcGVzL2xvY2FsZS1udW1iZXIucGlwZSc7XHJcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTeXN0ZW1TZXJ2aWNlLFxyXG4gIEJhY2tlbmRTZXJ2aWNlLFxyXG4gIFVzZXJTZXJ2aWNlLFxyXG4gIEVvVXNlcixcclxuICBVdGlscyxcclxuICBSYW5nZVZhbHVlLFxyXG4gIFNlYXJjaEZpbHRlcixcclxuICBTZWFyY2hTdGF0ZVxyXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XHJcbmltcG9ydCB7VXRpbGl0aWVzU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrL3V0aWwnO1xyXG5pbXBvcnQge0ZpbGVzaXplRmlsdGVyfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmsvZ3JpZC9maWx0ZXJzL2ZpbGVzaXplLWZpbHRlci5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xyXG4gIGNvbnRleHQ6IGFueTtcclxuXHJcbiAgZ2V0IGNzdkV4cG9ydFBhcmFtcygpOiBDc3ZFeHBvcnRQYXJhbXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZmlsZU5hbWU6ICdleHBvcnQnLFxyXG4gICAgICBjb2x1bW5TZXBhcmF0b3I6IHRoaXMuY29udGV4dD8ubnVtYmVyUGlwZS5kZWNpbWFsU2VwYXJhdG9yID09PSAnLCcgPyAnOycgOiAnLCcsXHJcbiAgICAgIHByb2Nlc3NDZWxsQ2FsbGJhY2s6IChwYXJhbXMpID0+IHtcclxuICAgICAgICByZXR1cm4gKHBhcmFtcy5jb2x1bW4uZ2V0Q29sRGVmKCkuY2VsbENsYXNzIGFzIGFueSB8fCAnJykuaW5jbHVkZXMoJ2NvbC1udW1iZXInKVxyXG4gICAgICAgICAgPyAocGFyYW1zLmNvbHVtbi5nZXRDb2xEZWYoKS5jZWxsUmVuZGVyZXIgYXMgYW55KShwYXJhbXMpLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXGAgKyB0aGlzLmNvbnRleHQ/Lm51bWJlclBpcGUuc2VwYXJhdG9yLCAnZycpLCAnJykgLy8gcmVtb3ZlZCBncm91cGluZ1xyXG4gICAgICAgICAgOiBwYXJhbXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXNjYXBlSHRtbChzdHIpIHtcclxuICAgIHN0ciA9IHN0ciA/IHN0ciA6ICcnO1xyXG4gICAgY29uc3QgZW50aXR5TWFwID0ge1xyXG4gICAgICAnJic6ICcmYW1wOycsXHJcbiAgICAgICc8JzogJyZsdDsnLFxyXG4gICAgICAnPic6ICcmZ3Q7JyxcclxuICAgICAgJ1wiJzogJyZxdW90OycsXHJcbiAgICAgICdcXCcnOiAnJiMzOTsnLFxyXG4gICAgICAnLyc6ICcmI3gyRjsnXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIHMgPT4gZW50aXR5TWFwW3NdKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBxbmFtZUZvcm1hdHRlcihxbmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHFuYW1lIHx8ICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJ3N5c29iamVjdC58c3lzZG9jdW1lbnQuJyksICcnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBxbmFtZU1hdGNoKHFuYW1lOiBzdHJpbmcsIHFuYW1lMjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gR3JpZFNlcnZpY2UucW5hbWVGb3JtYXR0ZXIocW5hbWUpID09PSBHcmlkU2VydmljZS5xbmFtZUZvcm1hdHRlcihxbmFtZTIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYXBwU2VhcmNoU2VydmljZTogQXBwU2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB7XHJcbiAgICAgIHRyYW5zbGF0ZSxcclxuICAgICAgc3lzdGVtLFxyXG4gICAgICBiYWNrZW5kLFxyXG4gICAgICByb3V0ZXIsXHJcbiAgICAgIGZpbGVTaXplUGlwZTogbmV3IEZpbGVTaXplUGlwZSh0cmFuc2xhdGUpLFxyXG4gICAgICBudW1iZXJQaXBlOiBuZXcgTG9jYWxlTnVtYmVyUGlwZSh0cmFuc2xhdGUpLFxyXG4gICAgICBkYXRlUGlwZTogbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSksXHJcbiAgICAgIGNyOiBDZWxsUmVuZGVyZXIsXHJcbiAgICAgIGJhc2VIcmVmOiBFbnZpcm9ubWVudEVuYWlvLmlzV2ViRW52aXJvbm1lbnQoKSA/IHRoaXMuYmFja2VuZC5nZXRIb3N0KCkgOiAnLi8nLFxyXG4gICAgICBtaW1ldHlwZWdyb3VwT3B0czogT2JqZWN0LmtleXMoU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTKS5tYXAoayA9PiBrLnRvTG93ZXJDYXNlKCkpLFxyXG4gICAgICB0eXBlT3B0czogW11cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyJC5zdWJzY3JpYmUoXHJcbiAgICAgICh1c2VyOiBFb1VzZXIpID0+XHJcbiAgICAgICAgKHRoaXMuY29udGV4dC5kZWZhdWx0UG9zaXRpb24gPVxyXG4gICAgICAgICAgdXNlci51aURpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnlTdGF0ZSQuc3Vic2NyaWJlKChzdGF0ZTogU2VhcmNoU3RhdGUpID0+IHRoaXMudXBkYXRlQ29udGV4dChBcnJheS5mcm9tKHN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmtleXMoKSkpKTtcclxuICB9XHJcblxyXG4gIC8vIGNvcHkgY29udGVudCBvZiBlaXRoZXIgcm93IG9yIHRhYmxlIGNlbGwgdG8gY2xpcGJvYXJkXHJcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCwgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3Qgdmlld3BvcnQgPSBncmlkT3B0aW9ucy5hcGlbJ2dyaWRQYW5lbCddLmVDZW50ZXJWaWV3cG9ydDtcclxuICAgIGNvbnN0IHNjcm9sbExlZnQgPSB2aWV3cG9ydC5zY3JvbGxMZWZ0O1xyXG5cclxuICAgIGNvbnN0IGZvY3VzZWRDZWxsID0gZ3JpZE9wdGlvbnMuYXBpLmdldEZvY3VzZWRDZWxsKCk7XHJcbiAgICBjb25zdCByb3dzOiBSb3dOb2RlW10gPSBldmVudC5zaGlmdEtleSA/IGdyaWRPcHRpb25zLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCkgOiBbZ3JpZE9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoZm9jdXNlZENlbGwucm93SW5kZXgpXTtcclxuICAgIGNvbnN0IGNvbHM6IENvbHVtbltdID0gZXZlbnQuc2hpZnRLZXkgPyBncmlkT3B0aW9ucy5jb2x1bW5BcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpLmZpbHRlcigoYzogYW55KSA9PiBjLmNvbElkICE9PSAnX19zZWxlY3Rpb25GaWVsZCcpIDogW2ZvY3VzZWRDZWxsLmNvbHVtbl07XHJcbiAgICBjb25zdCBnZXRDZWxsID0gKGNvbCwgcm93KSA9PiBncmlkT3B0aW9ucy5hcGlbJ2dyaWRQYW5lbCddLmVHdWkucXVlcnlTZWxlY3RvcihgZGl2W3Jvdy1pbmRleD1cIiR7cm93LnJvd0luZGV4fVwiXSBbY29sLWlkPVwiJHtjb2wuY29sSWR9XCJdYCk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IChjb2wsIHJvdykgPT4ge1xyXG4gICAgICBncmlkT3B0aW9ucy5hcGkuZW5zdXJlQ29sdW1uVmlzaWJsZShjb2wpO1xyXG4gICAgICBjb25zdCBjZWxsID0gZ2V0Q2VsbChjb2wsIHJvdyk7XHJcbiAgICAgIGlmICghY2VsbCkgcmV0dXJuICcnO1xyXG4gICAgICBjb25zdCBjaGlwcyA9IGNlbGwucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAnKSB8fCBbXTtcclxuICAgICAgY29uc3QgdmFsID0gQXJyYXkuZnJvbShjaGlwcy5sZW5ndGggPyBjaGlwcyA6IFtjZWxsXSkubWFwKChjOiBhbnkpID0+IChjICYmIGMudGV4dENvbnRlbnQgJiYgYy50ZXh0Q29udGVudC50cmltKCkpIHx8ICcnKTtcclxuICAgICAgY29uc3QgdmFsdWUgPSB2YWwudG9TdHJpbmcoKSB8fCBncmlkT3B0aW9ucy5hcGkuZ2V0VmFsdWUoY29sLCByb3cpO1xyXG4gICAgICByZXR1cm4gIVV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWx1ZSkgPyB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxuJywgJ2cnKSwgJyAnKSA6ICcnO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgY29udGVudCA9ICcnO1xyXG4gICAgaWYgKGV2ZW50LmFsdEtleSkgY29udGVudCArPSBjb2xzLm1hcCgoY29sOiBDb2x1bW4pID0+IGNvbC5nZXRDb2xEZWYoKS5oZWFkZXJOYW1lKS5qb2luKCdcdCcpICsgJ1xcbic7XHJcbiAgICBjb250ZW50ICs9IHJvd3MubWFwKChyb3cpID0+IGNvbHMubWFwKChjb2w6IENvbHVtbikgPT4gdmFsdWUoY29sLCByb3cpKS5qb2luKCdcdCcpKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICB2aWV3cG9ydC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+XHJcbiAgICAgICAgcm93cy5tYXAoKHJvdykgPT5cclxuICAgICAgICAgIGNvbHMubWFwKChjb2w6IENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZ2V0Q2VsbChjb2wsIHJvdyk7XHJcbiAgICAgICAgICAgIGNlbGwgJiYgY2VsbC5jbGFzc0xpc3QuYWRkKCdjb3B5LWNlbGwnKTtcclxuICAgICAgICAgICAgY2VsbCAmJiBzZXRUaW1lb3V0KCgpID0+IGNlbGwgJiYgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjb3B5LWNlbGwnKSwgNDAwMCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICksXHJcbiAgICAgIDEwMFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50KTsgLy8gb25seSBpZiBjbGllbnQgcnVucyBodHRwc1xyXG4gICAgY29uc3QgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgdGV4dEFyZWEudmFsdWUgPSBjb250ZW50O1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XHJcbiAgICB0ZXh0QXJlYS5zZWxlY3QoKTtcclxuICAgIGNvbnN0IGNvcHlTdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5MaW5rKHVyaTogc3RyaW5nLCBuZXdUYWIgPSBmYWxzZSkge1xyXG4gICAgaWYgKG5ld1RhYikge1xyXG4gICAgICB3aW5kb3cub3BlbihDZWxsUmVuZGVyZXIud2luZG93VVJJKHVyaSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZm9yY2UgcmVsb2FkIGluIGNhc2Ugb2Ygc2FtZSBVUkxcclxuICAgICAgY29uc3QgZXh0cmFzID0gQ2VsbFJlbmRlcmVyLndpbmRvd1VSSSh0aGlzLnJvdXRlci51cmwpID09PSBDZWxsUmVuZGVyZXIud2luZG93VVJJKHVyaSkgPyBgJHt1cmkuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31yZWxvYWQ9dHJ1ZWAgOiAnJztcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmkgKyBleHRyYXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJvd0luZGV4KGVsLCBwYXJlbnRDbGFzczogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZWwgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhwYXJlbnRDbGFzcylcclxuICAgICAgPyBlbC5nZXRBdHRyaWJ1dGUoJ3Jvdy1pbmRleCcpXHJcbiAgICAgICAgPyBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ3Jvdy1pbmRleCcpLCAxMClcclxuICAgICAgICA6IHRoaXMuZ2V0Um93SW5kZXgoZWwucGFyZW50RWxlbWVudCwgcGFyZW50Q2xhc3MpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSb3V0ZXJMaW5rKGVsLCBwYXJlbnRDbGFzcykge1xyXG4gICAgcmV0dXJuIGVsICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMocGFyZW50Q2xhc3MpXHJcbiAgICAgID8gZWwubG9jYWxOYW1lID09PSAnYScgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdyb3V0ZXItbGluaycpXHJcbiAgICAgICAgPyBlbFxyXG4gICAgICAgIDogdGhpcy5nZXRSb3V0ZXJMaW5rKGVsLnBhcmVudEVsZW1lbnQsIHBhcmVudENsYXNzKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblJvdXRlckxpbmsoZXZlbnQ6IE1vdXNlRXZlbnQsIHBhcmVudENsYXNzOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldFJvdXRlckxpbmsoXHJcbiAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgcGFyZW50Q2xhc3NcclxuICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XHJcbiAgICBpZiAobGluayAmJiBsaW5rLmhyZWYpIHtcclxuICAgICAgdGhpcy5vcGVuTGluayhsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLCBldmVudC5jdHJsS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb250ZXh0KCkge1xyXG4gICAgcmV0dXJuIHsuLi50aGlzLmNvbnRleHQsIGNvdW50OiAwLCByb3dDb3VudDogMH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ29udGV4dCh0eXBlT3B0czogc3RyaW5nW10sIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHt0eXBlT3B0czogKHR5cGVPcHRzICYmIHR5cGVPcHRzLmxlbmd0aCA/IHR5cGVPcHRzIDogdGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZXMoKS5tYXAobyA9PiBvLnFuYW1lKSl9LCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb2x1bW5EZWZzKFxyXG4gICAgZWxlbWVudHM6IGFueVtdLFxyXG4gICAgc29ydG9yZGVyOiBhbnlbXSA9IFtdLFxyXG4gICAgZ3JvdXBvcmRlcjogYW55W10gPSBbXSxcclxuICAgIHBpbm5lZDogYW55W10gPSBbXSxcclxuICAgIGVuYWJsZVJvd0dyb3VwID0gdHJ1ZSxcclxuICAgIGNhY2hlZENvbHVtbnMgPSBbXSxcclxuICAgIG1vZGU/XHJcbiAgKTogQ29sRGVmW10ge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRzLm1hcChmID0+XHJcbiAgICAgIHRoaXMuZ2V0Q29sdW1uRGVmaW5pdGlvbihcclxuICAgICAgICBmLFxyXG4gICAgICAgIHNvcnRvcmRlcixcclxuICAgICAgICBncm91cG9yZGVyLFxyXG4gICAgICAgIHBpbm5lZCxcclxuICAgICAgICBlbmFibGVSb3dHcm91cCxcclxuICAgICAgICBjYWNoZWRDb2x1bW5zLFxyXG4gICAgICAgIG1vZGVcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmRlcnMgdGhlIHZpc3VhbCBvdXRwdXQgb2YgZm9ybSBlbGVtZW50cyBiYXNlZCBvbiBpdHMgdHlwZSBldGMuIChzZWUgSW5kZXhkYXRhU3VtbWFyeUNvbXBvbmVudCBmb3IgdXNhZ2UgZGV0YWlscylcclxuICAgKiBAcGFyYW0gZWxlbWVudHMgLSBUaGUgZm9ybSBlbGVtZW50cyB0byBiZSByZW5kZXJlZFxyXG4gICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBIVE1MIGZvciB0aGUgZ2l2ZW4gZWxlbWVudHNcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0UmVzb2x2ZWREZWZzKGVsZW1lbnRzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRzLm1hcChlbCA9PiB7XHJcbiAgICAgIGxldCBjb2xEZWY6IENvbERlZiA9IHRoaXMuZ2V0Q29sdW1uRGVmaW5pdGlvbihlbCk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGVsLnZhbHVlO1xyXG4gICAgICBsZXQgZGF0YSA9IHt9O1xyXG4gICAgICBkYXRhW2NvbERlZi5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgaWYgKGVsLm1ldGEpIHtcclxuICAgICAgICBkYXRhW2NvbERlZi5maWVsZCArICdfbWV0YSddID0gZWwubWV0YTtcclxuICAgICAgfVxyXG4gICAgICAvLyBpbnZva2UgdmFsdWVHZXR0ZXIgaWYgcHJvdmlkZWRcclxuICAgICAgaWYgKGNvbERlZi52YWx1ZUdldHRlcikge1xyXG4gICAgICAgIHZhbHVlID0gKGNvbERlZi52YWx1ZUdldHRlciBhcyBGdW5jdGlvbikuY2FsbCh0aGlzLCB7XHJcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXHJcbiAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgbm9kZToge30sXHJcbiAgICAgICAgICBjb2xEZWY6IGNvbERlZlxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJ1biB0aGUgY2VsbCByZW5kZXJlciB3aXRoIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSB2YWx1ZUdldHRlclxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxSZW5kZXJlcikge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXHJcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICBub2RlOiB7fSxcclxuICAgICAgICAgIGNvbERlZjogY29sRGVmLFxyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZWwuX3ZhbHVlID0gKGNvbERlZi5jZWxsUmVuZGVyZXIgYXMgRnVuY3Rpb24pLmNhbGwodGhpcywgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbC5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNyZWF0ZXMgdGhlIGNvbHVtbiBkZWZpbml0aW9uIGZvciBhIGdpdmVuIHJlc3VsdCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByZXN1bHRGaWVsZCAtIHRoZSByZXN1bHQgZmllbGQgKGFzIHJldHJpZXZlZCBmcm9tIC4uL3VzZXIvY29uZmlnL3Jlc3VsdC8qKSB0byBjcmVhdGUgdGhlXHJcbiAgICogY29sdW1uIGRlZmluaXRpb24gb2JqZWN0IGZvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZHMgLSBBcnJheSBvZiBmaWVsZHMgdG8gYmUgc29ydGVkXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbkRlZmluaXRpb24oXHJcbiAgICByZXN1bHRGaWVsZCxcclxuICAgIHNvcnRGaWVsZHM6IGFueVtdID0gW10sXHJcbiAgICBncm91cEZpZWxkczogYW55W10gPSBbXSxcclxuICAgIHBpbm5lZEZpZWxkczogYW55W10gPSBbXSxcclxuICAgIGVuYWJsZVJvd0dyb3VwID0gZmFsc2UsXHJcbiAgICBjYWNoZWRDb2x1bW5zID0gW10sXHJcbiAgICBtb2RlP1xyXG4gICkge1xyXG4gICAgbGV0IGNvbERlZiA9IDxDb2xEZWY+e307XHJcbiAgICBjb2xEZWYuaGVhZGVyTmFtZSA9IHJlc3VsdEZpZWxkLmxhYmVsO1xyXG4gICAgY29sRGVmLmZpZWxkID0gcmVzdWx0RmllbGQuaGl0bmFtZSB8fCByZXN1bHRGaWVsZC5uYW1lO1xyXG4gICAgY29sRGVmLnNvcnRhYmxlID0gdHJ1ZTtcclxuICAgIGNvbERlZi5yZXNpemFibGUgPSB0cnVlO1xyXG4gICAgY29sRGVmLmZpbHRlciA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xyXG4gICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IHBhcmFtcyA9PiBHcmlkU2VydmljZS5lc2NhcGVIdG1sKHBhcmFtcy52YWx1ZSk7XHJcbiAgICBjb2xEZWYudmFsdWVHZXR0ZXIgPSBwYXJhbXMgPT4ge1xyXG4gICAgICByZXR1cm4gcGFyYW1zLm5vZGUuZ3JvdXAgfHwgIXBhcmFtcy5kYXRhID8gJycgOiBwYXJhbXMuZGF0YVtjb2xEZWYuZmllbGRdO1xyXG4gICAgfTtcclxuICAgIGNvbERlZi5yZWZEYXRhID0ge3FuYW1lOiByZXN1bHRGaWVsZC5xbmFtZSB8fCAnJ307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWFkZXJDbGFzc1xyXG4gICAgICogYWRkIHNwZWNpYWwgaGVhZGVyIGNsYXNzIGZvciBmaWVsZHMgZnJvbSB0aGUgY29udGV4dGZvbGRlclxyXG4gICAgICovXHJcbiAgICBpZiAocmVzdWx0RmllbGQuc2VsZWN0ZWRmb3JlbnJpY2htZW50ICYmIG1vZGUgIT09ICdDT01NT04nKSB7XHJcbiAgICAgIGNvbERlZi5oZWFkZXJDbGFzcyA9ICdjb250ZXh0Zm9sZGVyJztcclxuICAgIH1cclxuICAgIHRoaXMuYWRkQ29sRGVmQXR0cnNCeVR5cGUoY29sRGVmLCByZXN1bHRGaWVsZCk7XHJcbiAgICB0aGlzLmFkZENvbERlZkF0dHJzQnlGaWVsZChjb2xEZWYsIGNvbERlZi5maWVsZCk7XHJcblxyXG4gICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHtcclxuICAgICAgLi4uY29sRGVmLmZpbHRlclBhcmFtcyxcclxuICAgICAgZGVib3VuY2VNczogODAwLFxyXG4gICAgICBjbGVhckJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIG5ld1Jvd3NBY3Rpb246ICdrZWVwJyxcclxuICAgICAgZmlsdGVyT3B0aW9uczogW11cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvbERlZi5maWx0ZXIgPT09ICdhZ1RleHRDb2x1bW5GaWx0ZXInKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IGNvbERlZi5yZWZEYXRhLnFuYW1lLm1hdGNoKC8oXnN5c29iamVjdFxcLnxec3lzZG9jdW1lbnRcXC4pKHRpdGxlJHxkZXNjcmlwdGlvbiQpLykgPyBbJ2VxdWFscyddIDogW1xyXG4gICAgICAgICdjb250YWlucycsXHJcbiAgICAgICAgJ2VxdWFscycsXHJcbiAgICAgICAgJ3N0YXJ0c1dpdGgnLFxyXG4gICAgICAgICdlbmRzV2l0aCdcclxuICAgICAgXTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjb2xEZWYuZmlsdGVyID09PSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInIHx8XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPT09ICdhZ0RhdGVDb2x1bW5GaWx0ZXInXHJcbiAgICApIHtcclxuICAgICAgY29sRGVmLmZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xyXG4gICAgICAgICdlcXVhbHMnLFxyXG4gICAgICAgICdsZXNzVGhhbk9yRXF1YWwnLFxyXG4gICAgICAgICdncmVhdGVyVGhhbicsXHJcbiAgICAgICAgJ2dyZWF0ZXJUaGFuT3JFcXVhbCcsXHJcbiAgICAgICAgJ2luUmFuZ2UnXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbWltZXR5cGUgZmlsdGVyIHN1cHBvcnRzIG9ubHkgZXF1YWxzIG9wdGlvblxyXG4gICAgaWYgKGNvbERlZi5maWVsZCA9PT0gJ21pbWV0eXBlJykge1xyXG4gICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zLmRlZmF1bHRPcHRpb24gPSAnZXF1YWxzJztcclxuICAgICAgY29sRGVmLmZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gWydlcXVhbHMnXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaWxlc2l6ZSBmaWx0ZXIgc3VwcG9ydHMgb25seSBpbnRlcnZhbCBvcHRpb25zXHJcbiAgICBpZiAoY29sRGVmLmZpZWxkID09PSAnZmlsZXNpemUnKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMuZGVmYXVsdE9wdGlvbiA9ICdsZXNzVGhhbk9yRXF1YWwnO1xyXG4gICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXHJcbiAgICAgICAgJ2xlc3NUaGFuT3JFcXVhbCcsXHJcbiAgICAgICAgJ2dyZWF0ZXJUaGFuT3JFcXVhbCcsXHJcbiAgICAgICAgJ2luUmFuZ2UnXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyZXN1bHRGaWVsZC5zb3J0YWJsZSkge1xyXG4gICAgICBjb2xEZWYuc29ydGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghcmVzdWx0RmllbGQuc2VhcmNoYWJsZSkge1xyXG4gICAgICBjb2xEZWYuc3VwcHJlc3NNZW51ID0gdHJ1ZTtcclxuICAgICAgY29sRGVmLmZpbHRlciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzb3J0RmllbGQgPSBzb3J0RmllbGRzLmZpbmQoZiA9PiBmLnFuYW1lID09PSByZXN1bHRGaWVsZC5xbmFtZSk7XHJcbiAgICBpZiAoc29ydEZpZWxkKSB7XHJcbiAgICAgIGNvbERlZi5zb3J0ID0gc29ydEZpZWxkLmRpcmVjdGlvbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbmFibGVSb3dHcm91cCkge1xyXG4gICAgICBsZXQgZ3JvdXBGaWVsZEluZGV4ID0gZ3JvdXBGaWVsZHMuZmluZEluZGV4KFxyXG4gICAgICAgIGYgPT4gZi5xbmFtZSA9PT0gcmVzdWx0RmllbGQucW5hbWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKH5ncm91cEZpZWxkSW5kZXgpIHtcclxuICAgICAgICBjb2xEZWYucm93R3JvdXBJbmRleCA9IGdyb3VwRmllbGRJbmRleDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwaW5uZWRGaWVsZCA9IHBpbm5lZEZpZWxkcy5maW5kKGYgPT4gZi5xbmFtZSA9PT0gcmVzdWx0RmllbGQucW5hbWUpO1xyXG4gICAgaWYgKHBpbm5lZEZpZWxkKSB7XHJcbiAgICAgIGNvbERlZi5waW5uZWQgPSBwaW5uZWRGaWVsZC5wb3NpdGlvbiB8fCB0aGlzLmNvbnRleHQuZGVmYXVsdFBvc2l0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjYWNoZWRDb2x1bW4gPSBjYWNoZWRDb2x1bW5zLmZpbmQoZiA9PiBmLnFuYW1lID09PSByZXN1bHRGaWVsZC5xbmFtZSk7XHJcbiAgICBpZiAoY2FjaGVkQ29sdW1uKSB7XHJcbiAgICAgIGNvbERlZi53aWR0aCA9IGNhY2hlZENvbHVtbi53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sRGVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYWRkIHR5cGUgc3BlY2lmaWMgY29sdW1uIGRlZmluaXRpb24gYXR0cmlidXRlc1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbERlZiAtIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBvYmplY3QgdG8gYmUgZXh0ZW5kZWQgYnkgdHlwZSBzcGVjaWZpYyBhdHRyaWJ1dGVzXHJcbiAgICogQHBhcmFtIHJlc3VsdEZpZWxkIC0gb2JqZWN0IGRlZmluaW5nIHRoZSByZXN1bHQgZmllbGRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIGVucmljaGVkIGNvbHVtbiBkZWZpbml0aW9uIG9iamVjdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRDb2xEZWZBdHRyc0J5VHlwZShjb2xEZWY6IENvbERlZiwgcmVzdWx0RmllbGQpIHtcclxuICAgIHN3aXRjaCAocmVzdWx0RmllbGQudHlwZSkge1xyXG4gICAgICBjYXNlICdSRUZFUkVOQ0UnOiB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xyXG4gICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAncm91dGVyLWxpbmstY2VsbCc7XHJcbiAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5yZWZlcmVuY2VDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICB7cmVmZXJlbmNlOiByZXN1bHRGaWVsZC5yZWZlcmVuY2UgfHwge30sIGNvbERlZjogY29sRGVmfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLnZhbHVlR2V0dGVyID0gcGFyYW0gPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPVxyXG4gICAgICAgICAgICBwYXJhbS5ub2RlLmdyb3VwIHx8ICFwYXJhbS5kYXRhID8gJycgOiBwYXJhbS5kYXRhW2NvbERlZi5maWVsZF07XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVmTWV0YSA9IHBhcmFtICYmIHBhcmFtLmRhdGEgJiYgcGFyYW0uZGF0YS5fcmVmZXJlbmNlcztcclxuICAgICAgICAgIC8vIHVzZSBvYmplY3QgdHlwZSBsYWJlbCB3aGVuIG1ldGEgaXMgbWlzc2luZyAoc2VhcmNoIHN2YyBkb2VzIG5vdCBzdXBwb3J0IG1ldGEpXHJcbiAgICAgICAgICByZXR1cm4gVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHZhbHVlKVxyXG4gICAgICAgICAgICA/ICcnIDogcmVmTWV0YVxyXG4gICAgICAgICAgICAgID8gcmVmTWV0YVtjb2xEZWYuZmllbGRdXHJcbiAgICAgICAgICAgICAgOiB0aGlzLm1ldGFWYWx1ZUdldHRlcih2ID0+IHYudGl0bGUpKHBhcmFtKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NUUklORyc6IHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XHJcbiAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5zdHJpbmdDZWxscmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLm11bHRpU2VsZWN0Q2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gcmVzdWx0RmllbGQubXVsdGlzZWxlY3RcclxuICAgICAgICAgID8gJ211bHRpQ2VsbCBzdHJpbmcnXHJcbiAgICAgICAgICA6ICdzdHJpbmcnO1xyXG4gICAgICAgIHRoaXMuYWRkQ29sRGVmQXR0cnNCeUNsYXNzaWZpY2F0aW9uKGNvbERlZiwgcmVzdWx0RmllbGQuY2xhc3NpZmljYXRpb24pO1xyXG4gICAgICAgIGlmIChyZXN1bHRGaWVsZC5yZWZlcmVuY2UpIHtcclxuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAncm91dGVyLWxpbmstY2VsbCc7XHJcbiAgICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gdGhpcy5jdXN0b21Db250ZXh0KFxyXG4gICAgICAgICAgICBDZWxsUmVuZGVyZXIubGlua0NlbGxSZW5kZXJlcixcclxuICAgICAgICAgICAge3JlZmVyZW5jZTogcmVzdWx0RmllbGQucmVmZXJlbmNlfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sRGVmLmNvbXBhcmF0b3IgPSAoYSwgYikgPT4gQWdVdGlscy5kZWZhdWx0Q29tcGFyYXRvcihhLCBiLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdEQVRFVElNRSc6IHtcclxuICAgICAgICBjb2xEZWYud2lkdGggPSAxNTA7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdhZ0RhdGVDb2x1bW5GaWx0ZXInO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSB0aGlzLmN1c3RvbUNvbnRleHQoXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIuZGF0ZVRpbWVDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICB7cGF0dGVybjogcmVzdWx0RmllbGQud2l0aHRpbWUgPyAnZW9TaG9ydCcgOiAnZW9TaG9ydERhdGUnfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLmdldFF1aWNrRmlsdGVyVGV4dCA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5kYXRlVGltZUNlbGxSZW5kZXJlcixcclxuICAgICAgICAgIHtwYXR0ZXJuOiByZXN1bHRGaWVsZC53aXRodGltZSA/ICdlb1Nob3J0JyA6ICdlb1Nob3J0RGF0ZSd9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgY29tcGFyYXRvcjogdGhpcy5kYXRlQ29tcGFyYXRvcih0aGlzLmNvbnRleHQuZGF0ZVBpcGUpLFxyXG4gICAgICAgICAgdmFsdWVHZXR0ZXI6IHRoaXMuZGF0ZUZpbHRlclZhbHVlR2V0dGVyKGNvbERlZi5maWVsZCksXHJcbiAgICAgICAgICB3aXRoVGltZTogcmVzdWx0RmllbGQud2l0aHRpbWUsXHJcbiAgICAgICAgICBpblJhbmdlSW5jbHVzaXZlOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdDT0RFU1lTVEVNJzoge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnQ29kZXN5c3RlbUZpbHRlckNvbXBvbmVudCc7XHJcbiAgICAgICAgY29sRGVmLmNvbElkID0gcmVzdWx0RmllbGQuZmllbGQ7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHttdWx0aTogcmVzdWx0RmllbGQubXVsdGlzZWxlY3R9O1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuc3RyaW5nQ2VsbHJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZXN1bHRGaWVsZC5tdWx0aXNlbGVjdCkge1xyXG4gICAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5tdWx0aVNlbGVjdENlbGxSZW5kZXJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sRGVmLnZhbHVlR2V0dGVyID0gdGhpcy5tZXRhVmFsdWVHZXR0ZXIodiA9PiB2LmRlZmF1bHRyZXByZXNlbnRhdGlvbik7XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0XHJcbiAgICAgICAgICA/ICdtdWx0aUNlbGwgY29kZXN5c3RlbSdcclxuICAgICAgICAgIDogJ2NvZGVzeXN0ZW0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ05VTUJFUic6IHtcclxuICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ2NvbC1udW1iZXInO1xyXG4gICAgICAgIGNvbERlZi5oZWFkZXJDbGFzcyA9ICdjb2wtaGVhZGVyLW51bWJlcic7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdhZ051bWJlckNvbHVtbkZpbHRlcic7XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gMTUwO1xyXG4gICAgICAgIGNvbnN0IHtzY2FsZSwgZ3JvdXBpbmcsIHBhdHRlcm59ID0gcmVzdWx0RmllbGQ7XHJcbiAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5udW1iZXJDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICB7c2NhbGUsIGdyb3VwaW5nLCBwYXR0ZXJufVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLmdldFF1aWNrRmlsdGVyVGV4dCA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5udW1iZXJDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICB7c2NhbGUsIGdyb3VwaW5nLCBwYXR0ZXJufVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHtpblJhbmdlSW5jbHVzaXZlIDogdHJ1ZX07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnT3JnYW5pemF0aW9uRmlsdGVyQ29tcG9uZW50JztcclxuICAgICAgICBjb2xEZWYuY29sSWQgPSByZXN1bHRGaWVsZC5xbmFtZTtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zID0ge211bHRpOiByZXN1bHRGaWVsZC5tdWx0aXNlbGVjdH07XHJcbiAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5zdHJpbmdDZWxscmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gQ2VsbFJlbmRlcmVyLm11bHRpU2VsZWN0Q2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2xEZWYudmFsdWVHZXR0ZXIgPSB0aGlzLm1ldGFWYWx1ZUdldHRlcih2ID0+XHJcbiAgICAgICAgICB2LnRpdGxlICYmIHYubmFtZSA/IGAke3YudGl0bGV9ICgke3YubmFtZX0pYCA6IGAke3YuaWR9YFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHJlc3VsdEZpZWxkLm11bHRpc2VsZWN0XHJcbiAgICAgICAgICA/ICdtdWx0aUNlbGwgb3JnYW5pemF0aW9uJ1xyXG4gICAgICAgICAgOiAnb3JnYW5pemF0aW9uJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdCT09MRUFOJzoge1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSAnTGlzdEZpbHRlckNvbXBvbmVudCc7XHJcbiAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9ICdjb2wtYm9vbGVhbic7XHJcbiAgICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IENlbGxSZW5kZXJlci5ib29sZWFuQ2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSB7XHJcbiAgICAgICAgICBjZWxsUmVuZGVyZXI6IHRoaXMuY3VzdG9tQ29udGV4dChDZWxsUmVuZGVyZXIuYm9vbGVhbkNlbGxSZW5kZXJlciksXHJcbiAgICAgICAgICBjZWxsSGVpZ2h0OiAzMCxcclxuICAgICAgICAgIHZhbHVlczogW2ZhbHNlLCB0cnVlXSxcclxuICAgICAgICAgIHN1cHByZXNzTWluaUZpbHRlcjogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gMTAwO1xyXG4gICAgICAgIGNvbERlZi5nZXRRdWlja0ZpbHRlclRleHQgPSAoKSA9PiAnJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbERlZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFkZCBjbGFzc2lmaWNhdGlvbiBzcGVjaWZpYyBjb2x1bW4gZGVmaW5pdGlvbiBhdHRyaWJ1dGVzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29sRGVmIC0gdGhlIGNvbHVtbiBkZWZpbml0aW9uIG9iamVjdCB0byBiZSBleHRlbmRlZFxyXG4gICAqIEBwYXJhbSBjbGFzc2lmaWNhdGlvbiAtIHRoZSBjbGFzc2lmaWNhdGlvbiB0byBldmFsdWF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMgZW5yaWNoZWQgY29sdW1uIGRlZmluaXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRDb2xEZWZBdHRyc0J5Q2xhc3NpZmljYXRpb24oY29sRGVmOiBDb2xEZWYsIGNsYXNzaWZpY2F0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKGNsYXNzaWZpY2F0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2VtYWlsJzoge1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuZW1haWxDZWxsUmVuZGVyZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndXJsJzoge1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIudXJsQ2VsbFJlbmRlcmVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sRGVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRDb2xEZWZBdHRyc0J5RmllbGQoY29sRGVmOiBDb2xEZWYsIHJlc3VsdEZpZWxkTmFtZSkge1xyXG4gICAgc3dpdGNoIChyZXN1bHRGaWVsZE5hbWUpIHtcclxuICAgICAgY2FzZSAndHlwZSc6IHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gJ0xpc3RGaWx0ZXJDb21wb25lbnQnO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIudHlwZUNlbGxSZW5kZXJlcjtcclxuICAgICAgICBjb2xEZWYud2lkdGggPSA4MDtcclxuICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ3Jlcy1pY28nO1xyXG4gICAgICAgIGNvbERlZi5nZXRRdWlja0ZpbHRlclRleHQgPSAoKSA9PiAnJztcclxuICAgICAgICBjb2xEZWYuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLmN1c3RvbUNvbnRleHQoQ2VsbFJlbmRlcmVyLnR5cGVDZWxsUmVuZGVyZXIpLFxyXG4gICAgICAgICAgdmFsdWVzOiB0aGlzLmNvbnRleHQudHlwZU9wdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21pbWV0eXBlZ3JvdXAnOiB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9ICdMaXN0RmlsdGVyQ29tcG9uZW50JztcclxuICAgICAgICBjb2xEZWYud2lkdGggPSAxMDE7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IHtcclxuICAgICAgICAgIHZhbHVlczogdGhpcy5jb250ZXh0Lm1pbWV0eXBlZ3JvdXBPcHRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd2ZXJzaW9uJzoge1xyXG4gICAgICAgIGNvbERlZi53aWR0aCA9IDgwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ZpbGVzaXplJzoge1xyXG4gICAgICAgIGNvbERlZi5oZWFkZXJDbGFzcyA9ICdjb2wtaGVhZGVyLWZpbGVzaXplJztcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gRmlsZXNpemVGaWx0ZXI7XHJcbiAgICAgICAgY29sRGVmLndpZHRoID0gMTAwO1xyXG4gICAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBDZWxsUmVuZGVyZXIuZmlsZXNpemVDZWxsUmVuZGVyZXI7XHJcbiAgICAgICAgY29sRGVmLmdldFF1aWNrRmlsdGVyVGV4dCA9IHRoaXMuY3VzdG9tQ29udGV4dChcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5maWxlc2l6ZUNlbGxSZW5kZXJlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb2xEZWY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGN1c3RvbUNvbnRleHQoZm5jLCBtaXhpbj8pIHtcclxuICAgIHJldHVybiBwYXJhbSA9PiB7XHJcbiAgICAgIHJldHVybiBmbmMoT2JqZWN0LmFzc2lnbih7fSwgcGFyYW0sIHtjb250ZXh0OiB0aGlzLmNvbnRleHR9LCBtaXhpbikpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtZXRhVmFsdWVHZXR0ZXIodGl0bGVGbmM6IEZ1bmN0aW9uLCBtYXBGbmM6IEZ1bmN0aW9uID0gdiA9PiB2KSB7XHJcbiAgICByZXR1cm4gcGFyYW1zID0+IHtcclxuICAgICAgLy8gZGF0YSBjb3VsZCBiZSBlbXB0eSBvbiBmaXJzdCByZW5kZXJpbmcgYSBjZWxsIHdoaWxlIGluZmluaXRlIHNjcm9sbGluZ1xyXG4gICAgICBpZiAocGFyYW1zLm5vZGUuZ3JvdXAgfHwgIXBhcmFtcy5kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB0b2RvOiBzdXBlciBob3RmaXggLSBDT09MLTg5ODkgLSBzb2x2ZXMgcHJvYmxlbSB3aXRoIHJlc29sdmluZyBvZiBPUkdBTklaQVRJT04gdmFsdWUgKHZpYSBxbmFtZSlcclxuICAgICAgY29uc3QgZmllbGRNZXRhID0gcGFyYW1zLmNvbERlZi5maWVsZCArICdfbWV0YSc7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gIXBhcmFtcy5kYXRhLmhhc093blByb3BlcnR5KGZpZWxkTWV0YSlcclxuICAgICAgICA/IG1hcEZuYyhcclxuICAgICAgICAgIChwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLmZpZWxkXSAhPT0gdW5kZWZpbmVkKSA/IHBhcmFtcy5kYXRhW3BhcmFtcy5jb2xEZWYuZmllbGRdIDpcclxuICAgICAgICAgIHBhcmFtcy5kYXRhW3BhcmFtcy5jb2xEZWYucmVmRGF0YS5xbmFtZV1cclxuICAgICAgICApXHJcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KHBhcmFtcy5kYXRhW2ZpZWxkTWV0YV0pXHJcbiAgICAgICAgICA/IHBhcmFtcy5kYXRhW2ZpZWxkTWV0YV0ubWFwKHYgPT4gdGl0bGVGbmModiB8fCB7fSkpXHJcbiAgICAgICAgICA6IHRpdGxlRm5jKHBhcmFtcy5kYXRhW2ZpZWxkTWV0YV0gfHwge30pO1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGVDb21wYXJhdG9yKGRhdGVQaXBlKSB7XHJcbiAgICByZXR1cm4gKGE6IERhdGUsIGIpID0+IHtcclxuICAgICAgaWYgKCFiIHx8ICFiLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChiLmZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IF9kYXRlID0gIWIuYWN0aXZlUmFuZ2UgPyBiLmZpbHRlci5kYXRlRnJvbSA6IGIuZmlsdGVyLmRhdGVUbztcclxuICAgICAgICBiLmFjdGl2ZVJhbmdlID0gYi5maWx0ZXIudHlwZSA9PT0gU2ltcGxlRmlsdGVyLklOX1JBTkdFO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGIuZmlsdGVyLndpdGhUaW1lID8gMTYgOiAxMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIEFnVXRpbHMuZGVmYXVsdENvbXBhcmF0b3IoXHJcbiAgICAgICAgICAgIF9kYXRlICYmIF9kYXRlLnNsaWNlKDAsIGxlbmd0aCksXHJcbiAgICAgICAgICAgIGIudmFsdWUuc2xpY2UoMCwgbGVuZ3RoKVxyXG4gICAgICAgICAgKSAqIC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRhdGUgPSBiLmxlbmd0aCA9PT0gMTAgPyBiIDogZGF0ZVBpcGUudHJhbnNmb3JtKGIsICd5eXl5LU1NLWRkJyk7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgQWdVdGlscy5kZWZhdWx0Q29tcGFyYXRvcihkYXRlUGlwZS50cmFuc2Zvcm0oYSwgJ3l5eXktTU0tZGQnKSwgZGF0ZSkgKlxyXG4gICAgICAgIC0xXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGVGaWx0ZXJWYWx1ZUdldHRlcihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbm9kZSA9PiB7XHJcbiAgICAgIGxldCBfZmlsdGVyID0gbm9kZS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuYXBpLmdldEZpbHRlckluc3RhbmNlKFxyXG4gICAgICAgIGZpZWxkXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IG5vZGUuZGF0YVtmaWVsZF07XHJcbiAgICAgIHJldHVybiB7ZmlsdGVyOiBfZmlsdGVyWydfZmlsdGVyTW9kZWwnXSwgdmFsdWV9O1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDZWxsUmVuZGVyZXIge1xyXG5cclxuICBzdGF0aWMgd2luZG93VVJJKHVyaTogYW55KSB7XHJcbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKCdeXFwvfF5cXFxcXFxcXCcpLCAnJyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVuZGVyKHR5cGU6IHN0cmluZywgcGFyYW06IGFueSwgbmV3UGFyYW0/OiBhbnkpIHtcclxuICAgIHJldHVybiBDZWxsUmVuZGVyZXJbdHlwZSArICdDZWxsUmVuZGVyZXInXShcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW0sIG5ld1BhcmFtKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaWxlc2l6ZUNlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbS52YWx1ZSA/IHBhcmFtLmNvbnRleHQuZmlsZVNpemVQaXBlLnRyYW5zZm9ybShwYXJhbS52YWx1ZSkgOiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBudW1iZXJDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW0udmFsdWUgfHwgcGFyYW0udmFsdWUgPT09IDApIHtcclxuICAgICAgaWYgKHBhcmFtLnZhbHVlLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgLy8gcmFuZ2UgdmFsdWUgZnJvbSBzZWFyY2ggZm9ybSB0YWJsZVxyXG4gICAgICAgIHJldHVybiBwYXJhbS52YWx1ZS5vcGVyYXRvciA9PT1cclxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEhcclxuICAgICAgICAgID8gQ2VsbFJlbmRlcmVyLm51bWJlckNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgICAgICAgICBwYXJhbS52YWx1ZS5maXJzdFZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgICBwYXJhbS5ncm91cGluZyxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVybixcclxuICAgICAgICAgICAgcGFyYW0uc2NhbGVcclxuICAgICAgICAgICkgK1xyXG4gICAgICAgICAgJyAnICtcclxuICAgICAgICAgIFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChwYXJhbS52YWx1ZS5vcGVyYXRvcikgK1xyXG4gICAgICAgICAgJyAnICtcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5udW1iZXJDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgICAgcGFyYW0udmFsdWUuc2Vjb25kVmFsdWUsXHJcbiAgICAgICAgICAgIHBhcmFtLmNvbnRleHQsXHJcbiAgICAgICAgICAgIHBhcmFtLmdyb3VwaW5nLFxyXG4gICAgICAgICAgICBwYXJhbS5wYXR0ZXJuLFxyXG4gICAgICAgICAgICBwYXJhbS5zY2FsZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgOiBSYW5nZVZhbHVlLmdldE9wZXJhdG9yTGFiZWwocGFyYW0udmFsdWUub3BlcmF0b3IpICtcclxuICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICBDZWxsUmVuZGVyZXIubnVtYmVyQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICAgICAgICAgIHBhcmFtLnZhbHVlLmZpcnN0VmFsdWUsXHJcbiAgICAgICAgICAgIHBhcmFtLmNvbnRleHQsXHJcbiAgICAgICAgICAgIHBhcmFtLmdyb3VwaW5nLFxyXG4gICAgICAgICAgICBwYXJhbS5wYXR0ZXJuLFxyXG4gICAgICAgICAgICBwYXJhbS5zY2FsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gQ2VsbFJlbmRlcmVyLm51bWJlckNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgICAgICAgcGFyYW0udmFsdWUsXHJcbiAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgcGFyYW0uZ3JvdXBpbmcsXHJcbiAgICAgICAgICBwYXJhbS5wYXR0ZXJuLFxyXG4gICAgICAgICAgcGFyYW0uc2NhbGVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbnVtYmVyQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICB2YWx1ZSxcclxuICAgIGNvbnRleHQsXHJcbiAgICBncm91cGluZz8sXHJcbiAgICBwYXR0ZXJuPyxcclxuICAgIHNjYWxlP1xyXG4gICkge1xyXG4gICAgcmV0dXJuIGNvbnRleHQubnVtYmVyUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICBncm91cGluZyxcclxuICAgICAgcGF0dGVybixcclxuICAgICAgc2NhbGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3RyaW5nQ2VsbHJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEdyaWRTZXJ2aWNlLmVzY2FwZUh0bWwocGFyYW0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHR5cGVDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsID0gJyc7XHJcbiAgICBpZiAocGFyYW0udmFsdWUpIHtcclxuICAgICAgbGV0IG9iamVjdFR5cGUgPSBwYXJhbS5jb250ZXh0LnN5c3RlbS5nZXRPYmplY3RUeXBlKHBhcmFtLnZhbHVlKTtcclxuICAgICAgaWYgKCFvYmplY3RUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gQ2VsbFJlbmRlcmVyLmljb25DZWxsUmVuZGVyZXIoXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW0sIHt2YWx1ZTogb2JqZWN0VHlwZX0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGljb25DZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsID0gJyc7XHJcbiAgICBpZiAocGFyYW0udmFsdWUgJiYgKHBhcmFtLnZhbHVlLnVybCB8fCBwYXJhbS52YWx1ZS5pY29uSWQpKSB7XHJcbiAgICAgIGxldCBpY29uVXJsID0gcGFyYW0udmFsdWUudXJsXHJcbiAgICAgICAgPyBwYXJhbS5jb250ZXh0LmJhc2VIcmVmICsgcGFyYW0udmFsdWUudXJsXHJcbiAgICAgICAgOiBwYXJhbS5jb250ZXh0LmJhY2tlbmQuZ2V0U2VydmljZUJhc2UoKSArXHJcbiAgICAgICAgJy91aS9pY29uLycgK1xyXG4gICAgICAgIHBhcmFtLnZhbHVlLmljb25JZCArXHJcbiAgICAgICAgJy5zdmcnO1xyXG4gICAgICBsZXQgbGFiZWwgPSBwYXJhbS52YWx1ZS5sYWJlbDtcclxuICAgICAgdmFsID0gYDxpbWcgY2xhc3M9XCJvYmplY3QtdHlwZVwiIHNyYz1cIiR7aWNvblVybH1cIiB0aXRsZT1cIiR7bGFiZWx9XCI+PHNwYW4gY2xhc3M9XCJvYmplY3QtdHlwZS1sYWJlbFwiPiR7bGFiZWx9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVtYWlsQ2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmFtLnZhbHVlXHJcbiAgICAgID8gYDxhIGhyZWY9XCJtYWlsdG86JHtwYXJhbS52YWx1ZX1cIj4ke0dyaWRTZXJ2aWNlLmVzY2FwZUh0bWwoXHJcbiAgICAgICAgcGFyYW0udmFsdWVcclxuICAgICAgKX08L2E+YFxyXG4gICAgICA6ICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHVybENlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbS52YWx1ZVxyXG4gICAgICA/IGA8YSB0YXJnZXQ9XCJfYmxhbmsgXCIgaHJlZj1cIiR7cGFyYW0udmFsdWV9XCI+JHtHcmlkU2VydmljZS5lc2NhcGVIdG1sKFxyXG4gICAgICAgIHBhcmFtLnZhbHVlXHJcbiAgICAgICl9PC9hPmBcclxuICAgICAgOiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRlVGltZUNlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbS52YWx1ZSkge1xyXG4gICAgICBpZiAocGFyYW0udmFsdWUub3BlcmF0b3IpIHtcclxuICAgICAgICAvLyByYW5nZSB2YWx1ZSBmcm9tIHNlYXJjaCBmb3JtIHRhYmxlXHJcbiAgICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlLm9wZXJhdG9yID09PVxyXG4gICAgICAgICAgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USFxyXG4gICAgICAgICAgPyBDZWxsUmVuZGVyZXIuZGF0ZVRpbWVDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgICAgcGFyYW0udmFsdWUuZmlyc3RWYWx1ZSxcclxuICAgICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgICAgcGFyYW0ucGF0dGVyblxyXG4gICAgICAgICAgKSArXHJcbiAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKHBhcmFtLnZhbHVlLm9wZXJhdG9yKSArXHJcbiAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgQ2VsbFJlbmRlcmVyLmRhdGVUaW1lQ2VsbFJlbmRlcmVyVGVtcGxhdGUoXHJcbiAgICAgICAgICAgIHBhcmFtLnZhbHVlLnNlY29uZFZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgICBwYXJhbS5wYXR0ZXJuXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICA6IFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChwYXJhbS52YWx1ZS5vcGVyYXRvcikgK1xyXG4gICAgICAgICAgJyAnICtcclxuICAgICAgICAgIENlbGxSZW5kZXJlci5kYXRlVGltZUNlbGxSZW5kZXJlclRlbXBsYXRlKFxyXG4gICAgICAgICAgICBwYXJhbS52YWx1ZS5maXJzdFZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbS5jb250ZXh0LFxyXG4gICAgICAgICAgICBwYXJhbS5wYXR0ZXJuXHJcbiAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBDZWxsUmVuZGVyZXIuZGF0ZVRpbWVDZWxsUmVuZGVyZXJUZW1wbGF0ZShcclxuICAgICAgICAgIHBhcmFtLnZhbHVlLFxyXG4gICAgICAgICAgcGFyYW0uY29udGV4dCxcclxuICAgICAgICAgIHBhcmFtLnBhdHRlcm5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGF0ZVRpbWVDZWxsUmVuZGVyZXJUZW1wbGF0ZSh2YWx1ZSwgY29udGV4dCwgcGF0dGVybikge1xyXG4gICAgaWYodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtjb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgPHNwYW4gZGF0ZT1cIiR7dmFsdWV9XCI+JHtjb250ZXh0LmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIHBhdHRlcm5cclxuICAgICl9PC9zcGFuPmA7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYm9vbGVhbkNlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSBgPHBhdGggY2xhc3M9XCJiYWNrZ3JvdW5kXCIgZD1cIk0xOSwzSDVDMy45LDMsMywzLjksMyw1djE0YzAsMS4xLDAuOSwyLDIsMmgxNGMxLjEsMCwyLTAuOSwyLTJWNUMyMSwzLjksMjAuMSwzLDE5LDN6XCIvPmA7XHJcblxyXG4gICAgaWYgKHBhcmFtLnZhbHVlID09PSB0cnVlIHx8IHBhcmFtLnZhbHVlID09PSAndHJ1ZScpIHtcclxuICAgICAgdmFsID0gYDxwYXRoIGNsYXNzPVwib3V0bGluZVwiIGQ9XCJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0elwiLz5cclxuICAgICAgICAgICAgIDxwb2x5bGluZSBjbGFzcz1cImNoZWNrbWFya1wiIHBvaW50cz1cIjYuMywxMS44IDcuOCwxMC4zIDEwLjgsMTMuMyAxNi4zLDcuOCAxNy44LDkuMyAxMC44LDE2LjMgNi4zLDExLjhcIi8+YDtcclxuICAgIH0gZWxzZSBpZiAocGFyYW0udmFsdWUgPT09IGZhbHNlIHx8IHBhcmFtLnZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgIHZhbCA9IGA8cGF0aCBjbGFzcz1cIm91dGxpbmVcIiBkPVwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHpcIi8+YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgPHN2ZyBjbGFzcz1cImNoZWNrYm94XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj4ke3ZhbH08L3N2Zz5gO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG11bHRpU2VsZWN0Q2VsbFJlbmRlcmVyKHBhcmFtKSB7XHJcbiAgICBpZihwYXJhbS52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibm8tdmFsdWVcIj4ke3BhcmFtLmNvbnRleHQudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0uaW5wdXQubnVsbCcpfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbCA9ICcnO1xyXG4gICAgaWYgKHBhcmFtLnZhbHVlKSB7XHJcbiAgICAgIChBcnJheS5pc0FycmF5KHBhcmFtLnZhbHVlKSA/IHBhcmFtLnZhbHVlIDogW3BhcmFtLnZhbHVlXSkuZm9yRWFjaChcclxuICAgICAgICB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICB2YWwgKz0gYDxkaXYgY2xhc3M9XCJjaGlwXCI+JHtHcmlkU2VydmljZS5lc2NhcGVIdG1sKHZhbHVlKX08L2Rpdj5gO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbGlua0NlbGxSZW5kZXJlcihwYXJhbSkge1xyXG4gICAgaWYocGFyYW0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm5vLXZhbHVlXCI+JHtwYXJhbS5jb250ZXh0LnRyYW5zbGF0ZS5pbnN0YW50KCdlby5mb3JtLmlucHV0Lm51bGwnKX08L3NwYW4+YDtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSAnJztcclxuICAgIGlmIChwYXJhbS52YWx1ZSkge1xyXG4gICAgICAoQXJyYXkuaXNBcnJheShwYXJhbS52YWx1ZSkgPyBwYXJhbS52YWx1ZSA6IFtwYXJhbS52YWx1ZV0pLmZvckVhY2goXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnkgPSB7XHJcbiAgICAgICAgICAgIHR5cGVzOiBbcGFyYW0ucmVmZXJlbmNlLnR5cGVdLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB7fVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHF1ZXJ5LmZpbHRlcnNbcGFyYW0ucmVmZXJlbmNlLmVsZW1lbnRdID0ge1xyXG4gICAgICAgICAgICBvOiAnZXEnLFxyXG4gICAgICAgICAgICB2MTogdmFsdWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBsaW5rID0gVXRpbHMuYnVpbGRVcmkoJ3Jlc3VsdCcsIHtcclxuICAgICAgICAgICAgcXVlcnk6IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShxdWVyeSkpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHZhbCArPSBgPGRpdiBjbGFzcz1cImNoaXBcIj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwibGluayByb3V0ZXItbGlua1wiIGhyZWY9XCIke2xpbmt9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgb25jbGljaz1cInJldHVybiBmYWxzZTtcIj5cclxuICAgICAgICAgIDxzdmcgZm9jdXNhYmxlPVwiZmFsc2VcIiBjbGFzcz1cInJlZi1pY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOFxyXG4gICAgICAgICAgMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01elwiPjwvcGF0aD5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9hPjxzcGFuPiR7R3JpZFNlcnZpY2UuZXNjYXBlSHRtbCh2YWx1ZSl9PC9zcGFuPjwvZGl2PmA7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWZlcmVuY2VDZWxsUmVuZGVyZXIocGFyYW0pIHtcclxuICAgIGlmKHBhcmFtLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJuby12YWx1ZVwiPiR7cGFyYW0uY29udGV4dC50cmFuc2xhdGUuaW5zdGFudCgnZW8uZm9ybS5pbnB1dC5udWxsJyl9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBsZXQgdGV4dCA9ICcnO1xyXG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbS5kYXRhID8gcGFyYW0uZGF0YVtwYXJhbS5jb2xEZWYuZmllbGRdIDogJyc7XHJcbiAgICBjb25zdCB0eXBlID0gcGFyYW0uY29udGV4dC5zeXN0ZW0uZ2V0T2JqZWN0VHlwZShwYXJhbS5yZWZlcmVuY2UudHlwZSk7XHJcbiAgICBpZiAoIVV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWx1ZSkgJiYgdHlwZSkge1xyXG4gICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pLmZvckVhY2goKHZhbCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBsaW5rID0gJ29iamVjdC8nICsgdmFsICsgJz90eXBlPScgKyBwYXJhbS5yZWZlcmVuY2UudHlwZTtcclxuICAgICAgICBjb25zdCBpY29uVXJsID1cclxuICAgICAgICAgIHBhcmFtLmNvbnRleHQuYmFja2VuZC5nZXRTZXJ2aWNlQmFzZSgpICtcclxuICAgICAgICAgICcvdWkvaWNvbi8nICtcclxuICAgICAgICAgIHR5cGUuaWNvbklkICtcclxuICAgICAgICAgICcuc3ZnJztcclxuICAgICAgICBsZXQgdGl0bGUgPSBBcnJheS5pc0FycmF5KHBhcmFtLnZhbHVlKVxyXG4gICAgICAgICAgPyBwYXJhbS52YWx1ZVtpbmRleF1cclxuICAgICAgICAgIDogcGFyYW0udmFsdWU7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIHNlZSB0aGUgcmVmZXJlbmNlIG9iamVjdCBvciB0aGUgb2JqZWN0IHdhcyBkZWxldGVkLCB3ZSBkb24ndCBzaG93IHRoZSBsaW5rLlxyXG4gICAgICAgIHRleHQgKz0gYDxkaXYgY2xhc3M9XCJjaGlwXCI+XHJcbiAgICAgICAgJHtcclxuICAgICAgICAgICF0aXRsZVxyXG4gICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgIDogYDxhIGNsYXNzPVwibGluayByb3V0ZXItbGlua1wiIGhyZWY9XCIke2xpbmt9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgb25jbGljaz1cInJldHVybiBmYWxzZTtcIj5cclxuICAgICAgICAgIDxzdmcgZm9jdXNhYmxlPVwiZmFsc2VcIiBjbGFzcz1cInJlZi1pY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOFxyXG4gICAgICAgICAgMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01elwiPjwvcGF0aD5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9hPmBcclxuICAgICAgICAgIH1cclxuICAgICAgICA8aW1nIGNsYXNzPVwidHlwZS1pY29uXCIgc3JjPVwiJHtpY29uVXJsfVwiIHRpdGxlPVwiJHt0eXBlLmxhYmVsfVwiPlxyXG4gICAgICAgIDxzcGFuPiR7R3JpZFNlcnZpY2UuZXNjYXBlSHRtbCh0aXRsZSB8fCB0eXBlLmxhYmVsKX08L3NwYW4+PC9kaXY+YDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHQgfHwgcGFyYW0udmFsdWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -90,7 +90,7 @@ export class BpmService {
90
90
  .getJson(`/process/${processId}/file`, this.backend.getBpmBase()).pipe(map(res => res.content.map(i => {
91
91
  return {
92
92
  id: i.elementid,
93
- title: i.title ? i.title : '???',
93
+ title: i.title,
94
94
  description: i.description ? i.description : '',
95
95
  iconid: i.iconid,
96
96
  creator: i.creator,
@@ -247,4 +247,4 @@ BpmService.ctorParameters = () => [
247
247
  { type: EventService },
248
248
  { type: InboxService }
249
249
  ];
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2UvYnBtL2JwbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBYyxhQUFhLEVBQUUsVUFBVSxJQUFJLG9CQUFvQixFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZJLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsT0FBTyxFQUFFLFFBQVEsRUFBaUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkU7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLFVBQVU7SUFTckIsWUFBb0IsWUFBaUMsRUFDakMsT0FBdUIsRUFDdkIsWUFBMEIsRUFDMUIsWUFBMEI7UUFIMUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGlC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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvRTtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQzthQUMvQjtZQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNMLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDOzs7WUE3UEYsVUFBVTs7O1lBZkgsbUJBQW1CO1lBTG5CLGNBQWM7WUFJZCxZQUFZO1lBRFosWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLCBvZiBhcyBvYnNlcnZhYmxlT2YsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIHRocm93RXJyb3IgYXMgb2JzZXJ2YWJsZVRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge21lcmdlTWFwLCB0YXAsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcclxuaW1wb3J0IHtCYWNrZW5kU2VydmljZX0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLnNlcnZpY2UnO1xyXG5pbXBvcnQge1dvcmtJdGVtSGlzdG9yeUVudHJ5fSBmcm9tICcuLi8uLi9tb2RlbC93b3JrLWl0ZW0taGlzdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7RG1zT2JqZWN0fSBmcm9tICcuLi8uLi9tb2RlbC9kbXMtb2JqZWN0Lm1vZGVsJztcclxuaW1wb3J0IHtJbmJveFNlcnZpY2V9IGZyb20gJy4uL2luYm94L2luYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQge0V2ZW50U2VydmljZX0gZnJvbSAnLi4vZXZlbnRzL2V2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhcGFiaWxpdGllc1NlcnZpY2V9IGZyb20gJy4uL2NhcGFiaWxpdGllcy9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7RXhlY3V0YWJsZVByb2Nlc3MsIEZpbGVFbnRyeSwgUHJvY2VzcywgV29ya0l0ZW0sIFdvcmtJdGVtQWN0aW9ufSBmcm9tICcuLi8uLi9tb2RlbC9icG0ubW9kZWwnO1xyXG5pbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnLi4vY2xpcGJvYXJkL2NsaXBib2FyZC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NsaXBib2FyZEFjdGlvbn0gZnJvbSAnLi4vY2xpcGJvYXJkL2NsaXBib2FyZC1hY3Rpb24uZW51bSc7XHJcblxyXG4vKipcclxuICogYEJwbVNlcnZpY2VgIGhhbmRsZXMgaW50ZXJhY3Rpb24gcmVsYXRlZCB0byBCUE0gdGFza3MuXHJcbiAqXHJcbiAqIFRoZSBtYWluIHBhcnRzIHByb3ZpZGVkIGFuZCB1c2VkIGJ5IHRoaXMgc2VydmljZSBhcmUgUHJvY2Vzc2VzIGFuZCBXb3JrSXRlbXMuXHJcbiAqIFByb2Nlc3NlcyBhcmUgZGVmaW5lZCBvbiB0aGUgYmFja2VuZCBzaWRlLiBUaGV5IGRlc2NyaWJlIGEgc2V0IG9mIHRhc2tzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgcHJvY2Vzcy5cclxuICogVGFza3MgdGhhdCByZXF1aXJlIHVzZXIgaW50ZXJhY3Rpb24gYXJlIHJlZmVycmVkIHRvIGFzIFdvcmtJdGVtcy5cclxuICpcclxuICogUHJvY2Vzc2VzIGNhbiBiZSByZWxhdGVkIHRvIGEgc3BlY2lhbCBvYmplY3QgdHlwZSwgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0by4gSW4gYWRkaXRpb24gdG8gdGhhdCB0aGV5IGNhbiByZWZlclxyXG4gKiB0byBkbXMgb2JqZWN0cy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJwbVNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHByb2Nlc3NJdGVtczogUHJvY2Vzc1tdO1xyXG4gIHByaXZhdGUgcHJvY2Vzc0l0ZW1zU291cmNlID0gbmV3IFJlcGxheVN1YmplY3Q8UHJvY2Vzc1tdPigxKTtcclxuICAvKipcclxuICAgKiBMb25nIHRlcm0gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3VycmVudCBwcm9jZXNzZXNcclxuICAgKi9cclxuICBwcm9jZXNzSXRlbXMkOiBPYnNlcnZhYmxlPFByb2Nlc3NbXT4gPSB0aGlzLnByb2Nlc3NJdGVtc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaW5ib3hTZXJ2aWNlOiBJbmJveFNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGFsbCBwcm9jZXNzZXMgb2YgdGhlIGN1cnJlbnQgdXNlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzaXplIE1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NlcyB0byBiZSBmZXRjaGVkXHJcbiAgICogQHJldHVybnMgTGlzdCBvZiBQcm9jZXNzZXNcclxuICAgKi9cclxuICBnZXRQcm9jZXNzZXMoc2l6ZTogbnVtYmVyID0gMTAwMCk6IE9ic2VydmFibGU8UHJvY2Vzc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXHJcbiAgICAgIC5nZXRKc29uKGAvcHJvY2Vzcy91c2VyP3NpemU9JHtzaXplfWAsIHRoaXMuYmFja2VuZC5nZXRCcG1CYXNlKCkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5jb250ZW50Lm1hcChpdGVtID0+IG5ldyBQcm9jZXNzKGl0ZW0pKSksXHJcbiAgICAgICAgdGFwKChwcm9jZXNzZXM6IFByb2Nlc3NbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzSXRlbXMgPSBwcm9jZXNzZXM7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NJdGVtc1NvdXJjZS5uZXh0KHRoaXMucHJvY2Vzc0l0ZW1zKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZm9yIHRoZSBleGVjdXRhYmxlIFByb2Nlc3Nlcy4gSWYgdHlwZXMgYXJlIHByb3ZpZGVkLCB5b3UnbGwgZ2V0XHJcbiAgICogb25seSB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGV4ZWN1dGFibGUgZm9yIGFsbCBvZiB0aGVtXHJcbiAgICogQHBhcmFtIHR5cGVzIExpc3Qgb2YgZG1zIG9iamVjdCB0eXBlcyB0byBmZXRjaCBleGVjdXRhYmxlIHByb2Nlc3NlcyBmb3JcclxuICAgKiBAcmV0dXJucyBMaXN0IG9mIGV4ZWN1dGFibGUgcHJvY2Vzc2VzXHJcbiAgICovXHJcbiAgZ2V0RXhlY3V0YWJsZVByb2Nlc3Nlcyh0eXBlcz86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxFeGVjdXRhYmxlUHJvY2Vzc1tdPiB7XHJcbiAgICBpZiAodGhpcy5jYXBhYmlsaXRpZXMuaGFzQ2FwYWJpbGl0eSgnYnBtJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hFeGVjdXRhYmxlUHJvY2Vzc2VzKHR5cGVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBleGVjdXRhYmxlIFByb2Nlc3NlcyBmb3IgYSBnaXZlbiBzZXQgb2YgZG1zIG9iamVjdC5Zb3UnbGwgZ2V0XHJcbiAgICogb25seSB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGV4ZWN1dGFibGUgZm9yIGFsbCBvZiB0aGVtLlxyXG4gICAqIEBwYXJhbSBkbXNPYmplY3RzIExpc3Qgb2YgZG1zIG9iamVjdHMgdG8gZmV0Y2ggZXhlY3V0YWJsZSBwcm9jZXNzZXMgZm9yXHJcbiAgICogQHJldHVybnMgTGlzdCBvZiBleGVjdXRhYmxlIHByb2Nlc3Nlc1xyXG4gICAqL1xyXG4gIGdldEV4ZWN1dGFibGVQcm9jZXNzZXNGb3JEbXNPYmplY3RzKGRtc09iamVjdHM6IERtc09iamVjdFtdKTogT2JzZXJ2YWJsZTxFeGVjdXRhYmxlUHJvY2Vzc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFeGVjdXRhYmxlUHJvY2Vzc2VzKGRtc09iamVjdHMubWFwKG8gPT4gby50eXBlTmFtZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBleGVjdXRhYmxlIFByb2Nlc3NlcyBmcm9tIHRoZSBiYWNrZW5kLlxyXG4gICAqIEBwYXJhbSB0eXBlcyBMaXN0IG9mIGRtcyBvYmplY3QgdHlwZXMgdG8gZmV0Y2ggZXhlY3V0YWJsZSBwcm9jZXNzZXMgZm9yXHJcbiAgICogQHJldHVybnMgTGlzdCBvZiBleGVjdXRhYmxlIHByb2Nlc3Nlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZmV0Y2hFeGVjdXRhYmxlUHJvY2Vzc2VzKHR5cGVzPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEV4ZWN1dGFibGVQcm9jZXNzW10+IHtcclxuICAgIGxldCB1cmkgPSAnL2JwbS9wcm9jZXNzL2V4ZWN1dGFibGU/Zm9ybT10cnVlJmZpZWxkcz10cnVlJztcclxuICAgIGlmICh0eXBlcykge1xyXG4gICAgICB1cmkgKz0gYCZ0eXBlPSR7dHlwZXMuam9pbignLCcpfWBcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0KHVyaSkucGlwZShtYXAocmVzID0+IHJlcyBhcyBFeGVjdXRhYmxlUHJvY2Vzc1tdKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZm9yIGEgcHJvY2Vzc2VzIGZpbGUuIFRoZSBmaWxlIG9mIGEgcHJvY2VzcyBjb250YWluc1xyXG4gICAqIGRtcyBvYmplY3RzIGF0dGFjaGVkIHRvIHRoZSBwcm9jZXNzLlxyXG4gICAqIEBwYXJhbSBwcm9jZXNzSWQgSUQgb2YgdGhlIHByb2Nlc3MgdG8gZmV0Y2ggYXR0YWNoZWQgb2JqZWN0cyBmb3JcclxuICAgKi9cclxuICBnZXRQcm9jZXNzRmlsZShwcm9jZXNzSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcclxuICAgICAgLmdldEpzb24oYC9wcm9jZXNzLyR7cHJvY2Vzc0lkfS9maWxlYCwgdGhpcy5iYWNrZW5kLmdldEJwbUJhc2UoKSkucGlwZShcclxuICAgICAgICBtYXAocmVzID0+IHJlcy5jb250ZW50Lm1hcChpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBpLmVsZW1lbnRpZCxcclxuICAgICAgICAgICAgdGl0bGU6IGkudGl0bGUgPyBpLnRpdGxlIDogJz8/PycsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpLmRlc2NyaXB0aW9uID8gaS5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICBpY29uaWQ6IGkuaWNvbmlkLFxyXG4gICAgICAgICAgICBjcmVhdG9yOiBpLmNyZWF0b3IsXHJcbiAgICAgICAgICAgIGFkZHRpbWU6IGkuYWRkdGltZSxcclxuICAgICAgICAgICAgdHlwZTogaS50eXBlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSB3b3JrIGl0ZW0uXHJcbiAgICogQHBhcmFtIHByb2Nlc3NJZCBJRCBvZiB0aGUgcGFyZW50IHByb2Nlc3NcclxuICAgKiBAcGFyYW0gaXRlbUlkIElEIG9mIHRoZSB3b3JrIGl0ZW0gaXRzZWxmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBiZSBhZGRlZCB0byB0aGUgYmFja2VuZCBjYWxsXHJcbiAgICogQHJldHVybnMgYSBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIGdldFdvcmtJdGVtKHByb2Nlc3NJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZywgb3B0aW9ucyA/OiBhbnkpOiBPYnNlcnZhYmxlPFdvcmtJdGVtPiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zID8gb3B0aW9ucyA6IHtmb3JtOiB0cnVlLCBmaWVsZHM6IHRydWV9O1xyXG4gICAgY29uc3QgdGFza3MgPSBbXHJcbiAgICAgIHRoaXMuYmFja2VuZC5nZXRKc29uKFV0aWxzLmJ1aWxkVXJpKGAvYnBtL3Byb2Nlc3MvJHtwcm9jZXNzSWR9LyR7aXRlbUlkfWAsIHBhcmFtcykpLFxyXG4gICAgICB0aGlzLmdldFByb2Nlc3NGaWxlKHByb2Nlc3NJZClcclxuICAgIF07XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUZvcmtKb2luKHRhc2tzKS5waXBlKFxyXG4gICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICBjb25zdCB3aSA9IG5ldyBXb3JrSXRlbShyZXNbMF0pO1xyXG4gICAgICAgIHdpLnNldEZpbGUocmVzWzFdKTtcclxuICAgICAgICByZXR1cm4gd2k7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmVzIGEgd29yayBpdGVtLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB3b3JrIGl0ZW0gdG8gYmUgc2F2ZWRcclxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIHNhdmVXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIGNvbnN0IHtpZCwgcHJvY2Vzc0lkLCBmaWxlLCBkYXRhfSA9IGl0ZW07XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge2NvbnRlbnRzOiBmaWxlLCBkYXRhfTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtrZWVwbG9jazogdHJ1ZSwgaXNhdXRvbG9jazogZmFsc2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcclxuICAgICAgLnBvc3QoVXRpbHMuYnVpbGRVcmkoYC9icG0vcHJvY2Vzcy8ke3Byb2Nlc3NJZH0vJHtpZH0vc2F2ZWAsIHBhcmFtcyksIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuZ2V0V29ya0l0ZW0ocHJvY2Vzc0lkLCBpZCkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3J3YXJkcyBhIHdvcmsgaXRlbS4gSWYgYSBXb3JrSXRlbSBwcm92aWRlcyBkaWZmZXJlbnQgYWN0aW9ucyAoQGxpbmsgV29ya0l0ZW1BY3Rpb24pXHJcbiAgICogeW91IGNhbiBwcm92aWRlIHRoZSBzZWxlY3RlZCBhY3Rpb24gdG9vLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB3b3JrIGl0ZW0gdG8gYmUgZm9yd2FyZGVkXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdXNlZCBmb3IgZm9yd2FyZGluZ1xyXG4gICAqL1xyXG4gIGZvcndhcmRXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSwgYWN0aW9uPzogV29ya0l0ZW1BY3Rpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge2tlZXBsb2NrOiBmYWxzZSwgaXNhdXRvbG9jazogZmFsc2V9O1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgYWN0aW9uOiBhY3Rpb24sXHJcbiAgICAgIGNvbnRlbnRzOiBpdGVtLmZpbGUsXHJcbiAgICAgIGRhdGE6IGl0ZW0uZGF0YVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcclxuICAgICAgLnBvc3QoVXRpbHMuYnVpbGRVcmkoYC9icG0vcHJvY2Vzcy8ke2l0ZW0ucHJvY2Vzc0lkfS8ke2l0ZW0uaWR9L3NhdmVgLCBwYXJhbXMpLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pbmJveFNlcnZpY2UudXBkYXRlSW5ib3hJdGVtcyhpdGVtLmlkKSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvY2tzIGEgV29ya0l0ZW0gZm9yIHRoZSBjdXJyZW50IHVzZXIgKHBlcnNvbmFsaXphdGlvbiksIG1lYW5pbmcgdGhhdCB0aGVcclxuICAgKiBjdXJyZW50IHVzZXIgaXMgbm93IGluIGNoYXJnZSBvZiBmdWxmaWxsaW5nIHRoZSBXb3JrSXRlbSB0YXNrLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBXb3JrSXRlbSB0byBiZSBsb2NrZWRcclxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIGxvY2tXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KGAvYnBtL3Byb2Nlc3MvJHtpdGVtLnByb2Nlc3NJZH0vJHtpdGVtLmlkfS9sb2NrYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShpdGVtLnByb2Nlc3NJZCwgaXRlbS5pZCkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWxlYXNlcyB0aGUgbG9jayBmb3IgYSBXb3JrSXRlbS5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgd29yayBpdGVtIHRvIGJlIHVubG9ja2VkXHJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgV29ya0l0ZW1cclxuICAgKi9cclxuICB1bmxvY2tXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKGAvYnBtL3Byb2Nlc3MvJHtpdGVtLnByb2Nlc3NJZH0vJHtpdGVtLmlkfS9sb2NrYCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShpdGVtLnByb2Nlc3NJZCwgaXRlbS5pZCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnRzIGFuIGV4ZWN1dGFibGUgcHJvY2Vzcy5cclxuICAgKiBAcGFyYW0gZXhlY3V0YWJsZVByb2Nlc3NJZCBJRCBvZiB0aGUgZXhlY3V0YWJsZSBQcm9jZXNzIHRvIGJlIHN0YXJ0ZWRcclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgcHJvY2VzcyAoc2ltcGxlIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMpXHJcbiAgICogQHBhcmFtIGNvbnRlbnRzIE9iamVjdHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3MgKHByb2Nlc3MuZmlsZSkuXHJcbiAgICovXHJcbiAgc3RhcnRQcm9jZXNzKGV4ZWN1dGFibGVQcm9jZXNzSWQ6IHN0cmluZywgZGF0YTogYW55LCBjb250ZW50czogeyBpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcgfVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdChgL2JwbS9wcm9jZXNzLz9tb2RlbGlkPSR7ZXhlY3V0YWJsZVByb2Nlc3NJZH1gLCB7XHJcbiAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgIGNvbnRlbnRzOiBjb250ZW50c1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBoaXN0b3J5IGZvciBhIHByb2Nlc3MuIFdoaWNoIGVudHJpZXMgYXJlIHJldHVybmVkIGRlcGVuZHMgb24gdGhlXHJcbiAgICogcGVybWlzc2lvbnMgb2YgdGhlIGN1cnJlbnQgdXNlci5cclxuICAgKiBAcGFyYW0gcHJvY2Vzc0lkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyB0byBmZXRjaCBoaXN0b3J5IGZvclxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8V29ya0l0ZW1IaXN0b3J5RW50cnlbXT5cclxuICAgKi9cclxuICBnZXRQcm9jZXNzSGlzdG9yeShwcm9jZXNzSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8V29ya0l0ZW1IaXN0b3J5RW50cnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxyXG4gICAgICAuZ2V0SnNvbihgL2JwbS9wcm9jZXNzLyR7cHJvY2Vzc0lkfS9oaXN0b3J5YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlcyA9PiByZXMgJiYgcmVzLmxlbmd0aCA/IHJlcy5tYXAoaXRlbSA9PiBuZXcgV29ya0l0ZW1IaXN0b3J5RW50cnkoaXRlbSkpIDogW10pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGEgY29udGVudCBmcm9tIHRoZSB3b3JrIGl0ZW1zIGZpbGUuXHJcbiAgICogQHBhcmFtIHByb2Nlc3NJZCBUaGUgSUQgb2YgdGhlIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb21cclxuICAgKiBAcGFyYW0gd29ya0l0ZW1JZCBUaGUgSUQgb2YgdGhlIHdvcmsgaXRlbSBjb250YWluaW5nIHRoZSBmaWxlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqIEBwYXJhbSB3b3JrSXRlbUNvbnRlbnRJZCBUaGUgdGhlIElEIG9mIHRoZSBmaWxlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIHJlbW92ZUZpbGVFbGVtZW50KHByb2Nlc3NJZDogc3RyaW5nLCB3b3JrSXRlbUlkOiBzdHJpbmcsIHdvcmtJdGVtQ29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxyXG4gICAgICAuZGVsKGAvcHJvY2Vzcy8ke3Byb2Nlc3NJZH0vZmlsZS8ke3dvcmtJdGVtQ29udGVudElkfT9hY3Rpdml0eWlkPSR7d29ya0l0ZW1JZH1gLCB0aGlzLmJhY2tlbmQuZ2V0QnBtQmFzZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBjb250ZW50cyB0byBhIHdvcmsgaXRlbXMgZmlsZS5cclxuICAgKiBAcGFyYW0gcHJvY2Vzc0lkIFRoZSBJRCBvZiB0aGUgcHJvY2Vzc1xyXG4gICAqIEBwYXJhbSB3b3JrSXRlbUlkIFRoZSBJRCBvZiB0aGUgYWN0aXZpdHlcclxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIEVsZW1lbnRzIHRvIGJlIGFkZGVkXHJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgV29ya0l0ZW1cclxuICAgKi9cclxuICBhZGRGaWxlRWxlbWVudHMocHJvY2Vzc0lkOiBzdHJpbmcsIHdvcmtJdGVtSWQ6IHN0cmluZywgZWxlbWVudHM6IERtc09iamVjdFtdKTogT2JzZXJ2YWJsZTxXb3JrSXRlbT4ge1xyXG4gICAgY29uc3QgdGFza3MgPSBbXTtcclxuICAgIGVsZW1lbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgdGFza3MucHVzaCh0aGlzLmJhY2tlbmQucG9zdChcclxuICAgICAgICBgL3Byb2Nlc3MvJHtwcm9jZXNzSWR9L2ZpbGUvJHtlLmlkfT90eXBlPSR7ZS50eXBlLm5hbWV9JmFjdGl2aXR5aWQ9JHt3b3JrSXRlbUlkfWAsXHJcbiAgICAgICAge30sIHRoaXMuYmFja2VuZC5nZXRCcG1CYXNlKCkpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9ic2VydmFibGVGb3JrSm9pbih0YXNrcylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShwcm9jZXNzSWQsIHdvcmtJdGVtSWQpKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgb2JqZWN0cyBmcm9tIHRoZSBjbGlwYm9hcmQgdG8gYSBXb3JrSXRlbS5cclxuICAgKiBAcGFyYW0gd29ya0l0ZW0gVGhlIHdvcmtJdGVtIHRvIGFkZCB0aGUgb2JqZWN0cyB0b1xyXG4gICAqIEBwYXJhbSBjbGlwYm9hcmQgQ2xpcGJvYXJkIG9iamVjdCBob2xkaW5nIHVzZXIgc2VsZWN0ZWQgb2JqZWN0c1xyXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIFdvcmtJdGVtXHJcbiAgICovXHJcbiAgYWRkRmlsZUVsZW1lbnRzRnJvbUNsaXBib2FyZCh3b3JrSXRlbTogV29ya0l0ZW0sIGNsaXBib2FyZDogQ2xpcGJvYXJkKTogT2JzZXJ2YWJsZTxXb3JrSXRlbT4ge1xyXG4gICAgaWYgKCh3b3JrSXRlbSAmJiB3b3JrSXRlbS5maWxlRW50cnlQZXJtaXNzaW9ucy5hZGQpICYmIGNsaXBib2FyZCAmJiBjbGlwYm9hcmQuZWxlbWVudHMubGVuZ3RoICYmIGNsaXBib2FyZC5hY3Rpb24gPT09IENsaXBib2FyZEFjdGlvbi5DT1BZKSB7XHJcbiAgICAgIGxldCBjb250ZW50czogRG1zT2JqZWN0W107XHJcbiAgICAgIGlmICh3b3JrSXRlbS5maWxlLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIG9ubHkgYWRkIGl0ZW1zIHRoYXQgYXJlIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudElkcyA9IHdvcmtJdGVtLmZpbGUubWFwKGUgPT4gZS5pZCk7XHJcbiAgICAgICAgY29udGVudHMgPSBjbGlwYm9hcmQuZWxlbWVudHMuZmlsdGVyKGUgPT4gYXR0YWNobWVudElkcy5pbmRleE9mKGUuaWQpID09PSAtMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udGVudHMgPSBjbGlwYm9hcmQuZWxlbWVudHM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsZUVsZW1lbnRzKHdvcmtJdGVtLnByb2Nlc3NJZCwgd29ya0l0ZW0uaWQsIGNvbnRlbnRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcignZXJyb3InKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2UvYnBtL2JwbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBYyxhQUFhLEVBQUUsVUFBVSxJQUFJLG9CQUFvQixFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZJLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsT0FBTyxFQUFFLFFBQVEsRUFBaUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkU7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLFVBQVU7SUFTckIsWUFBb0IsWUFBaUMsRUFDakMsT0FBdUIsRUFDdkIsWUFBMEIsRUFDMUIsWUFBMEI7UUFIMUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGlC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QUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvRTtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQzthQUMvQjtZQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNMLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDOzs7WUE3UEYsVUFBVTs7O1lBZkgsbUJBQW1CO1lBTG5CLGNBQWM7WUFJZCxZQUFZO1lBRFosWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLCBvZiBhcyBvYnNlcnZhYmxlT2YsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIHRocm93RXJyb3IgYXMgb2JzZXJ2YWJsZVRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge21lcmdlTWFwLCB0YXAsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcclxuaW1wb3J0IHtCYWNrZW5kU2VydmljZX0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLnNlcnZpY2UnO1xyXG5pbXBvcnQge1dvcmtJdGVtSGlzdG9yeUVudHJ5fSBmcm9tICcuLi8uLi9tb2RlbC93b3JrLWl0ZW0taGlzdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7RG1zT2JqZWN0fSBmcm9tICcuLi8uLi9tb2RlbC9kbXMtb2JqZWN0Lm1vZGVsJztcclxuaW1wb3J0IHtJbmJveFNlcnZpY2V9IGZyb20gJy4uL2luYm94L2luYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQge0V2ZW50U2VydmljZX0gZnJvbSAnLi4vZXZlbnRzL2V2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhcGFiaWxpdGllc1NlcnZpY2V9IGZyb20gJy4uL2NhcGFiaWxpdGllcy9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7RXhlY3V0YWJsZVByb2Nlc3MsIEZpbGVFbnRyeSwgUHJvY2VzcywgV29ya0l0ZW0sIFdvcmtJdGVtQWN0aW9ufSBmcm9tICcuLi8uLi9tb2RlbC9icG0ubW9kZWwnO1xyXG5pbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnLi4vY2xpcGJvYXJkL2NsaXBib2FyZC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NsaXBib2FyZEFjdGlvbn0gZnJvbSAnLi4vY2xpcGJvYXJkL2NsaXBib2FyZC1hY3Rpb24uZW51bSc7XHJcblxyXG4vKipcclxuICogYEJwbVNlcnZpY2VgIGhhbmRsZXMgaW50ZXJhY3Rpb24gcmVsYXRlZCB0byBCUE0gdGFza3MuXHJcbiAqXHJcbiAqIFRoZSBtYWluIHBhcnRzIHByb3ZpZGVkIGFuZCB1c2VkIGJ5IHRoaXMgc2VydmljZSBhcmUgUHJvY2Vzc2VzIGFuZCBXb3JrSXRlbXMuXHJcbiAqIFByb2Nlc3NlcyBhcmUgZGVmaW5lZCBvbiB0aGUgYmFja2VuZCBzaWRlLiBUaGV5IGRlc2NyaWJlIGEgc2V0IG9mIHRhc2tzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgcHJvY2Vzcy5cclxuICogVGFza3MgdGhhdCByZXF1aXJlIHVzZXIgaW50ZXJhY3Rpb24gYXJlIHJlZmVycmVkIHRvIGFzIFdvcmtJdGVtcy5cclxuICpcclxuICogUHJvY2Vzc2VzIGNhbiBiZSByZWxhdGVkIHRvIGEgc3BlY2lhbCBvYmplY3QgdHlwZSwgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0by4gSW4gYWRkaXRpb24gdG8gdGhhdCB0aGV5IGNhbiByZWZlclxyXG4gKiB0byBkbXMgb2JqZWN0cy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJwbVNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHByb2Nlc3NJdGVtczogUHJvY2Vzc1tdO1xyXG4gIHByaXZhdGUgcHJvY2Vzc0l0ZW1zU291cmNlID0gbmV3IFJlcGxheVN1YmplY3Q8UHJvY2Vzc1tdPigxKTtcclxuICAvKipcclxuICAgKiBMb25nIHRlcm0gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3VycmVudCBwcm9jZXNzZXNcclxuICAgKi9cclxuICBwcm9jZXNzSXRlbXMkOiBPYnNlcnZhYmxlPFByb2Nlc3NbXT4gPSB0aGlzLnByb2Nlc3NJdGVtc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaW5ib3hTZXJ2aWNlOiBJbmJveFNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGFsbCBwcm9jZXNzZXMgb2YgdGhlIGN1cnJlbnQgdXNlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzaXplIE1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NlcyB0byBiZSBmZXRjaGVkXHJcbiAgICogQHJldHVybnMgTGlzdCBvZiBQcm9jZXNzZXNcclxuICAgKi9cclxuICBnZXRQcm9jZXNzZXMoc2l6ZTogbnVtYmVyID0gMTAwMCk6IE9ic2VydmFibGU8UHJvY2Vzc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXHJcbiAgICAgIC5nZXRKc29uKGAvcHJvY2Vzcy91c2VyP3NpemU9JHtzaXplfWAsIHRoaXMuYmFja2VuZC5nZXRCcG1CYXNlKCkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5jb250ZW50Lm1hcChpdGVtID0+IG5ldyBQcm9jZXNzKGl0ZW0pKSksXHJcbiAgICAgICAgdGFwKChwcm9jZXNzZXM6IFByb2Nlc3NbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzSXRlbXMgPSBwcm9jZXNzZXM7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NJdGVtc1NvdXJjZS5uZXh0KHRoaXMucHJvY2Vzc0l0ZW1zKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciB0aGUgZXhlY3V0YWJsZSBQcm9jZXNzZXMuIElmIHR5cGVzIGFyZSBwcm92aWRlZCwgeW91J2xsIGdldFxyXG4gICAqIG9ubHkgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBleGVjdXRhYmxlIGZvciBhbGwgb2YgdGhlbVxyXG4gICAqIEBwYXJhbSB0eXBlcyBMaXN0IG9mIGRtcyBvYmplY3QgdHlwZXMgdG8gZmV0Y2ggZXhlY3V0YWJsZSBwcm9jZXNzZXMgZm9yXHJcbiAgICogQHJldHVybnMgTGlzdCBvZiBleGVjdXRhYmxlIHByb2Nlc3Nlc1xyXG4gICAqL1xyXG4gIGdldEV4ZWN1dGFibGVQcm9jZXNzZXModHlwZXM/OiBzdHJpbmdbXSk6IE9ic2VydmFibGU8RXhlY3V0YWJsZVByb2Nlc3NbXT4ge1xyXG4gICAgaWYgKHRoaXMuY2FwYWJpbGl0aWVzLmhhc0NhcGFiaWxpdHkoJ2JwbScpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoRXhlY3V0YWJsZVByb2Nlc3Nlcyh0eXBlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgZXhlY3V0YWJsZSBQcm9jZXNzZXMgZm9yIGEgZ2l2ZW4gc2V0IG9mIGRtcyBvYmplY3QuWW91J2xsIGdldFxyXG4gICAqIG9ubHkgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBleGVjdXRhYmxlIGZvciBhbGwgb2YgdGhlbS5cclxuICAgKiBAcGFyYW0gZG1zT2JqZWN0cyBMaXN0IG9mIGRtcyBvYmplY3RzIHRvIGZldGNoIGV4ZWN1dGFibGUgcHJvY2Vzc2VzIGZvclxyXG4gICAqIEByZXR1cm5zIExpc3Qgb2YgZXhlY3V0YWJsZSBwcm9jZXNzZXNcclxuICAgKi9cclxuICBnZXRFeGVjdXRhYmxlUHJvY2Vzc2VzRm9yRG1zT2JqZWN0cyhkbXNPYmplY3RzOiBEbXNPYmplY3RbXSk6IE9ic2VydmFibGU8RXhlY3V0YWJsZVByb2Nlc3NbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RXhlY3V0YWJsZVByb2Nlc3NlcyhkbXNPYmplY3RzLm1hcChvID0+IG8udHlwZU5hbWUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgZXhlY3V0YWJsZSBQcm9jZXNzZXMgZnJvbSB0aGUgYmFja2VuZC5cclxuICAgKiBAcGFyYW0gdHlwZXMgTGlzdCBvZiBkbXMgb2JqZWN0IHR5cGVzIHRvIGZldGNoIGV4ZWN1dGFibGUgcHJvY2Vzc2VzIGZvclxyXG4gICAqIEByZXR1cm5zIExpc3Qgb2YgZXhlY3V0YWJsZSBwcm9jZXNzZXNcclxuICAgKi9cclxuICBwcml2YXRlIGZldGNoRXhlY3V0YWJsZVByb2Nlc3Nlcyh0eXBlcz86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxFeGVjdXRhYmxlUHJvY2Vzc1tdPiB7XHJcbiAgICBsZXQgdXJpID0gJy9icG0vcHJvY2Vzcy9leGVjdXRhYmxlP2Zvcm09dHJ1ZSZmaWVsZHM9dHJ1ZSc7XHJcbiAgICBpZiAodHlwZXMpIHtcclxuICAgICAgdXJpICs9IGAmdHlwZT0ke3R5cGVzLmpvaW4oJywnKX1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXQodXJpKS5waXBlKG1hcChyZXMgPT4gcmVzIGFzIEV4ZWN1dGFibGVQcm9jZXNzW10pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgYSBwcm9jZXNzZXMgZmlsZS4gVGhlIGZpbGUgb2YgYSBwcm9jZXNzIGNvbnRhaW5zXHJcbiAgICogZG1zIG9iamVjdHMgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3MuXHJcbiAgICogQHBhcmFtIHByb2Nlc3NJZCBJRCBvZiB0aGUgcHJvY2VzcyB0byBmZXRjaCBhdHRhY2hlZCBvYmplY3RzIGZvclxyXG4gICAqL1xyXG4gIGdldFByb2Nlc3NGaWxlKHByb2Nlc3NJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxyXG4gICAgICAuZ2V0SnNvbihgL3Byb2Nlc3MvJHtwcm9jZXNzSWR9L2ZpbGVgLCB0aGlzLmJhY2tlbmQuZ2V0QnBtQmFzZSgpKS5waXBlKFxyXG4gICAgICAgIG1hcChyZXMgPT4gcmVzLmNvbnRlbnQubWFwKGkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGkuZWxlbWVudGlkLFxyXG4gICAgICAgICAgICB0aXRsZTogaS50aXRsZSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGkuZGVzY3JpcHRpb24gPyBpLmRlc2NyaXB0aW9uIDogJycsXHJcbiAgICAgICAgICAgIGljb25pZDogaS5pY29uaWQsXHJcbiAgICAgICAgICAgIGNyZWF0b3I6IGkuY3JlYXRvcixcclxuICAgICAgICAgICAgYWRkdGltZTogaS5hZGR0aW1lLFxyXG4gICAgICAgICAgICB0eXBlOiBpLnR5cGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSB3b3JrIGl0ZW0uXHJcbiAgICogQHBhcmFtIHByb2Nlc3NJZCBJRCBvZiB0aGUgcGFyZW50IHByb2Nlc3NcclxuICAgKiBAcGFyYW0gaXRlbUlkIElEIG9mIHRoZSB3b3JrIGl0ZW0gaXRzZWxmXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBiZSBhZGRlZCB0byB0aGUgYmFja2VuZCBjYWxsXHJcbiAgICogQHJldHVybnMgYSBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIGdldFdvcmtJdGVtKHByb2Nlc3NJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZywgb3B0aW9ucyA/OiBhbnkpOiBPYnNlcnZhYmxlPFdvcmtJdGVtPiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zID8gb3B0aW9ucyA6IHtmb3JtOiB0cnVlLCBmaWVsZHM6IHRydWV9O1xyXG4gICAgY29uc3QgdGFza3MgPSBbXHJcbiAgICAgIHRoaXMuYmFja2VuZC5nZXRKc29uKFV0aWxzLmJ1aWxkVXJpKGAvYnBtL3Byb2Nlc3MvJHtwcm9jZXNzSWR9LyR7aXRlbUlkfWAsIHBhcmFtcykpLFxyXG4gICAgICB0aGlzLmdldFByb2Nlc3NGaWxlKHByb2Nlc3NJZClcclxuICAgIF07XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUZvcmtKb2luKHRhc2tzKS5waXBlKFxyXG4gICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICBjb25zdCB3aSA9IG5ldyBXb3JrSXRlbShyZXNbMF0pO1xyXG4gICAgICAgIHdpLnNldEZpbGUocmVzWzFdKTtcclxuICAgICAgICByZXR1cm4gd2k7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmVzIGEgd29yayBpdGVtLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB3b3JrIGl0ZW0gdG8gYmUgc2F2ZWRcclxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIHNhdmVXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIGNvbnN0IHtpZCwgcHJvY2Vzc0lkLCBmaWxlLCBkYXRhfSA9IGl0ZW07XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge2NvbnRlbnRzOiBmaWxlLCBkYXRhfTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtrZWVwbG9jazogdHJ1ZSwgaXNhdXRvbG9jazogZmFsc2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcclxuICAgICAgLnBvc3QoVXRpbHMuYnVpbGRVcmkoYC9icG0vcHJvY2Vzcy8ke3Byb2Nlc3NJZH0vJHtpZH0vc2F2ZWAsIHBhcmFtcyksIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuZ2V0V29ya0l0ZW0ocHJvY2Vzc0lkLCBpZCkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3J3YXJkcyBhIHdvcmsgaXRlbS4gSWYgYSBXb3JrSXRlbSBwcm92aWRlcyBkaWZmZXJlbnQgYWN0aW9ucyAoQGxpbmsgV29ya0l0ZW1BY3Rpb24pXHJcbiAgICogeW91IGNhbiBwcm92aWRlIHRoZSBzZWxlY3RlZCBhY3Rpb24gdG9vLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB3b3JrIGl0ZW0gdG8gYmUgZm9yd2FyZGVkXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdXNlZCBmb3IgZm9yd2FyZGluZ1xyXG4gICAqL1xyXG4gIGZvcndhcmRXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSwgYWN0aW9uPzogV29ya0l0ZW1BY3Rpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge2tlZXBsb2NrOiBmYWxzZSwgaXNhdXRvbG9jazogZmFsc2V9O1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgYWN0aW9uOiBhY3Rpb24sXHJcbiAgICAgIGNvbnRlbnRzOiBpdGVtLmZpbGUsXHJcbiAgICAgIGRhdGE6IGl0ZW0uZGF0YVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcclxuICAgICAgLnBvc3QoVXRpbHMuYnVpbGRVcmkoYC9icG0vcHJvY2Vzcy8ke2l0ZW0ucHJvY2Vzc0lkfS8ke2l0ZW0uaWR9L3NhdmVgLCBwYXJhbXMpLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pbmJveFNlcnZpY2UudXBkYXRlSW5ib3hJdGVtcyhpdGVtLmlkKSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvY2tzIGEgV29ya0l0ZW0gZm9yIHRoZSBjdXJyZW50IHVzZXIgKHBlcnNvbmFsaXphdGlvbiksIG1lYW5pbmcgdGhhdCB0aGVcclxuICAgKiBjdXJyZW50IHVzZXIgaXMgbm93IGluIGNoYXJnZSBvZiBmdWxmaWxsaW5nIHRoZSBXb3JrSXRlbSB0YXNrLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBXb3JrSXRlbSB0byBiZSBsb2NrZWRcclxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBXb3JrSXRlbVxyXG4gICAqL1xyXG4gIGxvY2tXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KGAvYnBtL3Byb2Nlc3MvJHtpdGVtLnByb2Nlc3NJZH0vJHtpdGVtLmlkfS9sb2NrYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShpdGVtLnByb2Nlc3NJZCwgaXRlbS5pZCkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWxlYXNlcyB0aGUgbG9jayBmb3IgYSBXb3JrSXRlbS5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgd29yayBpdGVtIHRvIGJlIHVubG9ja2VkXHJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgV29ya0l0ZW1cclxuICAgKi9cclxuICB1bmxvY2tXb3JrSXRlbShpdGVtOiBXb3JrSXRlbSk6IE9ic2VydmFibGU8V29ya0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKGAvYnBtL3Byb2Nlc3MvJHtpdGVtLnByb2Nlc3NJZH0vJHtpdGVtLmlkfS9sb2NrYCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShpdGVtLnByb2Nlc3NJZCwgaXRlbS5pZCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnRzIGFuIGV4ZWN1dGFibGUgcHJvY2Vzcy5cclxuICAgKiBAcGFyYW0gZXhlY3V0YWJsZVByb2Nlc3NJZCBJRCBvZiB0aGUgZXhlY3V0YWJsZSBQcm9jZXNzIHRvIGJlIHN0YXJ0ZWRcclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgcHJvY2VzcyAoc2ltcGxlIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMpXHJcbiAgICogQHBhcmFtIGNvbnRlbnRzIE9iamVjdHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3MgKHByb2Nlc3MuZmlsZSkuXHJcbiAgICovXHJcbiAgc3RhcnRQcm9jZXNzKGV4ZWN1dGFibGVQcm9jZXNzSWQ6IHN0cmluZywgZGF0YTogYW55LCBjb250ZW50czogeyBpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcgfVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdChgL2JwbS9wcm9jZXNzLz9tb2RlbGlkPSR7ZXhlY3V0YWJsZVByb2Nlc3NJZH1gLCB7XHJcbiAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgIGNvbnRlbnRzOiBjb250ZW50c1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBoaXN0b3J5IGZvciBhIHByb2Nlc3MuIFdoaWNoIGVudHJpZXMgYXJlIHJldHVybmVkIGRlcGVuZHMgb24gdGhlXHJcbiAgICogcGVybWlzc2lvbnMgb2YgdGhlIGN1cnJlbnQgdXNlci5cclxuICAgKiBAcGFyYW0gcHJvY2Vzc0lkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyB0byBmZXRjaCBoaXN0b3J5IGZvclxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8V29ya0l0ZW1IaXN0b3J5RW50cnlbXT5cclxuICAgKi9cclxuICBnZXRQcm9jZXNzSGlzdG9yeShwcm9jZXNzSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8V29ya0l0ZW1IaXN0b3J5RW50cnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxyXG4gICAgICAuZ2V0SnNvbihgL2JwbS9wcm9jZXNzLyR7cHJvY2Vzc0lkfS9oaXN0b3J5YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlcyA9PiByZXMgJiYgcmVzLmxlbmd0aCA/IHJlcy5tYXAoaXRlbSA9PiBuZXcgV29ya0l0ZW1IaXN0b3J5RW50cnkoaXRlbSkpIDogW10pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGEgY29udGVudCBmcm9tIHRoZSB3b3JrIGl0ZW1zIGZpbGUuXHJcbiAgICogQHBhcmFtIHByb2Nlc3NJZCBUaGUgSUQgb2YgdGhlIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb21cclxuICAgKiBAcGFyYW0gd29ya0l0ZW1JZCBUaGUgSUQgb2YgdGhlIHdvcmsgaXRlbSBjb250YWluaW5nIHRoZSBmaWxlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqIEBwYXJhbSB3b3JrSXRlbUNvbnRlbnRJZCBUaGUgdGhlIElEIG9mIHRoZSBmaWxlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIHJlbW92ZUZpbGVFbGVtZW50KHByb2Nlc3NJZDogc3RyaW5nLCB3b3JrSXRlbUlkOiBzdHJpbmcsIHdvcmtJdGVtQ29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxyXG4gICAgICAuZGVsKGAvcHJvY2Vzcy8ke3Byb2Nlc3NJZH0vZmlsZS8ke3dvcmtJdGVtQ29udGVudElkfT9hY3Rpdml0eWlkPSR7d29ya0l0ZW1JZH1gLCB0aGlzLmJhY2tlbmQuZ2V0QnBtQmFzZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBjb250ZW50cyB0byBhIHdvcmsgaXRlbXMgZmlsZS5cclxuICAgKiBAcGFyYW0gcHJvY2Vzc0lkIFRoZSBJRCBvZiB0aGUgcHJvY2Vzc1xyXG4gICAqIEBwYXJhbSB3b3JrSXRlbUlkIFRoZSBJRCBvZiB0aGUgYWN0aXZpdHlcclxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIEVsZW1lbnRzIHRvIGJlIGFkZGVkXHJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgV29ya0l0ZW1cclxuICAgKi9cclxuICBhZGRGaWxlRWxlbWVudHMocHJvY2Vzc0lkOiBzdHJpbmcsIHdvcmtJdGVtSWQ6IHN0cmluZywgZWxlbWVudHM6IERtc09iamVjdFtdKTogT2JzZXJ2YWJsZTxXb3JrSXRlbT4ge1xyXG4gICAgY29uc3QgdGFza3MgPSBbXTtcclxuICAgIGVsZW1lbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgdGFza3MucHVzaCh0aGlzLmJhY2tlbmQucG9zdChcclxuICAgICAgICBgL3Byb2Nlc3MvJHtwcm9jZXNzSWR9L2ZpbGUvJHtlLmlkfT90eXBlPSR7ZS50eXBlLm5hbWV9JmFjdGl2aXR5aWQ9JHt3b3JrSXRlbUlkfWAsXHJcbiAgICAgICAge30sIHRoaXMuYmFja2VuZC5nZXRCcG1CYXNlKCkpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9ic2VydmFibGVGb3JrSm9pbih0YXNrcylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRXb3JrSXRlbShwcm9jZXNzSWQsIHdvcmtJdGVtSWQpKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgb2JqZWN0cyBmcm9tIHRoZSBjbGlwYm9hcmQgdG8gYSBXb3JrSXRlbS5cclxuICAgKiBAcGFyYW0gd29ya0l0ZW0gVGhlIHdvcmtJdGVtIHRvIGFkZCB0aGUgb2JqZWN0cyB0b1xyXG4gICAqIEBwYXJhbSBjbGlwYm9hcmQgQ2xpcGJvYXJkIG9iamVjdCBob2xkaW5nIHVzZXIgc2VsZWN0ZWQgb2JqZWN0c1xyXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIFdvcmtJdGVtXHJcbiAgICovXHJcbiAgYWRkRmlsZUVsZW1lbnRzRnJvbUNsaXBib2FyZCh3b3JrSXRlbTogV29ya0l0ZW0sIGNsaXBib2FyZDogQ2xpcGJvYXJkKTogT2JzZXJ2YWJsZTxXb3JrSXRlbT4ge1xyXG4gICAgaWYgKCh3b3JrSXRlbSAmJiB3b3JrSXRlbS5maWxlRW50cnlQZXJtaXNzaW9ucy5hZGQpICYmIGNsaXBib2FyZCAmJiBjbGlwYm9hcmQuZWxlbWVudHMubGVuZ3RoICYmIGNsaXBib2FyZC5hY3Rpb24gPT09IENsaXBib2FyZEFjdGlvbi5DT1BZKSB7XHJcbiAgICAgIGxldCBjb250ZW50czogRG1zT2JqZWN0W107XHJcbiAgICAgIGlmICh3b3JrSXRlbS5maWxlLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIG9ubHkgYWRkIGl0ZW1zIHRoYXQgYXJlIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudElkcyA9IHdvcmtJdGVtLmZpbGUubWFwKGUgPT4gZS5pZCk7XHJcbiAgICAgICAgY29udGVudHMgPSBjbGlwYm9hcmQuZWxlbWVudHMuZmlsdGVyKGUgPT4gYXR0YWNobWVudElkcy5pbmRleE9mKGUuaWQpID09PSAtMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udGVudHMgPSBjbGlwYm9hcmQuZWxlbWVudHM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsZUVsZW1lbnRzKHdvcmtJdGVtLnByb2Nlc3NJZCwgd29ya0l0ZW0uaWQsIGNvbnRlbnRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcignZXJyb3InKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19