@netgrif/components-core 6.2.0-rc.8 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/commons/schema.d.ts +2 -0
  2. package/esm2020/assets/i18n/de.json +12 -0
  3. package/esm2020/assets/i18n/en.json +12 -0
  4. package/esm2020/assets/i18n/sk.json +13 -1
  5. package/esm2020/commons/schema.mjs +1 -1
  6. package/esm2020/commons/view-class-info.mjs +9 -1
  7. package/esm2020/lib/admin/public-api.mjs +2 -2
  8. package/esm2020/lib/admin/role-assignment-ldap-group/abstract-ldap-group-role-assignment.component.mjs +88 -0
  9. package/esm2020/lib/authentication/services/methods/basic-authentication/basic-authentication.service.mjs +10 -2
  10. package/esm2020/lib/data-fields/button-field/abstract-button-field.component.mjs +2 -12
  11. package/esm2020/lib/data-fields/button-field/models/button-field.mjs +2 -18
  12. package/esm2020/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.mjs +4 -5
  13. package/esm2020/lib/data-fields/enumeration-field/models/enumeration-field.mjs +2 -22
  14. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +30 -13
  15. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +35 -15
  16. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-field.component.mjs +1 -4
  17. package/esm2020/lib/data-fields/models/abstract-data-field.mjs +9 -1
  18. package/esm2020/lib/data-fields/multichoice-field/models/multichoice-field.mjs +2 -17
  19. package/esm2020/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.mjs +79 -0
  20. package/esm2020/lib/data-fields/public-api.mjs +4 -1
  21. package/esm2020/lib/data-fields/text-field/models/text-area-field.mjs +4 -5
  22. package/esm2020/lib/data-fields/text-field/models/text-field.mjs +2 -14
  23. package/esm2020/lib/data-fields/user-list-field/abstract-user-list-field.component.mjs +75 -0
  24. package/esm2020/lib/data-fields/user-list-field/models/user-list-field.mjs +11 -0
  25. package/esm2020/lib/data-fields/user-list-field/models/user-list-value.mjs +36 -0
  26. package/esm2020/lib/dialog/components/alert-dialog/alert-dialog.component.mjs +4 -4
  27. package/esm2020/lib/dialog/components/confirm-dialog/confirm-dialog.component.mjs +4 -4
  28. package/esm2020/lib/dialog/components/prompt-dialog/prompt-dialog.component.mjs +4 -4
  29. package/esm2020/lib/dialog/models/abstract-dialog.component.mjs +29 -0
  30. package/esm2020/lib/header/abstract-header-service.mjs +25 -9
  31. package/esm2020/lib/header/abstract-header.component.mjs +7 -5
  32. package/esm2020/lib/header/case-header/case-header.service.mjs +2 -2
  33. package/esm2020/lib/header/services/overflow.service.mjs +2 -2
  34. package/esm2020/lib/header/task-header/task-header.service.mjs +7 -4
  35. package/esm2020/lib/header/workflow-header/workflow-header.service.mjs +11 -8
  36. package/esm2020/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.mjs +69 -0
  37. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +7 -6
  38. package/esm2020/lib/navigation/public-api.mjs +2 -1
  39. package/esm2020/lib/navigation/service/uri.service.mjs +5 -1
  40. package/esm2020/lib/panel/abstract/panel-with-header-binding.mjs +17 -5
  41. package/esm2020/lib/panel/abstract/panel-with-immediate-data.mjs +52 -22
  42. package/esm2020/lib/panel/abstract-panel.component.mjs +23 -5
  43. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +13 -11
  44. package/esm2020/lib/panel/configuration/config-params.mjs +5 -0
  45. package/esm2020/lib/panel/public-api.mjs +5 -1
  46. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +48 -13
  47. package/esm2020/lib/panel/task-panel/models/task-panel-context.mjs +2 -0
  48. package/esm2020/lib/panel/task-panel-list/abstract-task-list.component.mjs +3 -3
  49. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +94 -0
  50. package/esm2020/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.mjs +3 -3
  51. package/esm2020/lib/panel/task-panel-single/abstract-single-task.component.mjs +81 -0
  52. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +40 -6
  53. package/esm2020/lib/public/factories/public-factory-resolver.mjs +8 -3
  54. package/esm2020/lib/resources/engine-endpoint/petri-net-resource.service.mjs +12 -4
  55. package/esm2020/lib/resources/engine-endpoint/public/public-task-resource.service.mjs +1 -40
  56. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +4 -1
  57. package/esm2020/lib/resources/interface/fields.mjs +1 -1
  58. package/esm2020/lib/routing/redirect-service/redirect.service.mjs +2 -1
  59. package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
  60. package/esm2020/lib/side-menu/content-components/save-filter/abstract-save-filter.component.mjs +8 -7
  61. package/esm2020/lib/side-menu/content-components/user-assign/abstract-user-assign.component.mjs +1 -1
  62. package/esm2020/lib/side-menu/content-components/user-assign/model/user-list-injected-data.mjs +1 -1
  63. package/esm2020/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.mjs +3 -3
  64. package/esm2020/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.mjs +3 -3
  65. package/esm2020/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.mjs +3 -3
  66. package/esm2020/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.mjs +3 -3
  67. package/esm2020/lib/snack-bar/models/abstract-snack-bar.component.mjs +26 -0
  68. package/esm2020/lib/snack-bar/public-api.mjs +2 -2
  69. package/esm2020/lib/tabs/classes/opened-tab.mjs +19 -1
  70. package/esm2020/lib/tabs/classes/tab-label-stream.mjs +15 -0
  71. package/esm2020/lib/tabs/classes/tab-view.mjs +11 -3
  72. package/esm2020/lib/tabs/interfaces.mjs +1 -1
  73. package/esm2020/lib/tabs/public-api.mjs +3 -1
  74. package/esm2020/lib/task/services/assign-task.service.mjs +7 -6
  75. package/esm2020/lib/task/services/cancel-task.service.mjs +7 -6
  76. package/esm2020/lib/task/services/delegate-task.service.mjs +9 -8
  77. package/esm2020/lib/task/services/finish-policy.service.mjs +2 -2
  78. package/esm2020/lib/task/services/finish-task.service.mjs +7 -6
  79. package/esm2020/lib/task/services/task-data.service.mjs +51 -13
  80. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +3 -2
  81. package/esm2020/lib/task-content/model/field-type-resource.mjs +2 -1
  82. package/esm2020/lib/task-content/model/resource-interface.mjs +1 -1
  83. package/esm2020/lib/task-content/model/task-event-notification.mjs +5 -3
  84. package/esm2020/lib/task-content/services/field-converter.service.mjs +28 -90
  85. package/esm2020/lib/task-content/services/task-content.service.mjs +5 -2
  86. package/esm2020/lib/view/abstract/view-with-headers.mjs +13 -4
  87. package/esm2020/lib/view/case-view/abstract-case-view.mjs +9 -12
  88. package/esm2020/lib/view/case-view/components/case-list/abstract-case-list.component.mjs +3 -3
  89. package/esm2020/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.mjs +3 -3
  90. package/esm2020/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.mjs +81 -0
  91. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +7 -14
  92. package/esm2020/lib/view/public-api.mjs +2 -1
  93. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +55 -0
  94. package/esm2020/lib/view/task-view/abstract-task-view.mjs +6 -5
  95. package/esm2020/lib/view/task-view/tabbed-task-view.mjs +6 -5
  96. package/esm2020/lib/view/tree-case-view/tree-component/case-tree.service.mjs +6 -4
  97. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +6 -5
  98. package/fesm2015/netgrif-components-core.mjs +1127 -559
  99. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  100. package/fesm2020/netgrif-components-core.mjs +1105 -560
  101. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  102. package/lib/admin/public-api.d.ts +1 -1
  103. package/lib/admin/role-assignment-ldap-group/{abstract-ldap-group-role-assignment.d.ts → abstract-ldap-group-role-assignment.component.d.ts} +3 -3
  104. package/lib/authentication/services/methods/basic-authentication/basic-authentication.service.d.ts +2 -0
  105. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +0 -5
  106. package/lib/data-fields/button-field/models/button-field.d.ts +1 -12
  107. package/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.d.ts +2 -3
  108. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +1 -11
  109. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +0 -1
  110. package/lib/data-fields/models/abstract-data-field.d.ts +5 -0
  111. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +1 -8
  112. package/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.d.ts +24 -0
  113. package/lib/data-fields/public-api.d.ts +3 -0
  114. package/lib/data-fields/text-field/models/text-area-field.d.ts +2 -3
  115. package/lib/data-fields/text-field/models/text-field.d.ts +1 -9
  116. package/lib/data-fields/user-list-field/abstract-user-list-field.component.d.ts +38 -0
  117. package/lib/data-fields/user-list-field/models/user-list-field.d.ts +10 -0
  118. package/lib/data-fields/user-list-field/models/user-list-value.d.ts +16 -0
  119. package/lib/dialog/components/alert-dialog/alert-dialog.component.d.ts +3 -3
  120. package/lib/dialog/components/confirm-dialog/confirm-dialog.component.d.ts +3 -3
  121. package/lib/dialog/components/prompt-dialog/prompt-dialog.component.d.ts +3 -3
  122. package/lib/dialog/models/{abstract-dialog.d.ts → abstract-dialog.component.d.ts} +3 -3
  123. package/lib/header/abstract-header-service.d.ts +6 -3
  124. package/lib/header/abstract-header.component.d.ts +2 -2
  125. package/lib/header/services/overflow.service.d.ts +1 -1
  126. package/lib/header/task-header/task-header.service.d.ts +3 -2
  127. package/lib/header/workflow-header/workflow-header.service.d.ts +3 -2
  128. package/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.d.ts +18 -0
  129. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +2 -2
  130. package/lib/navigation/public-api.d.ts +1 -0
  131. package/lib/navigation/service/uri.service.d.ts +2 -0
  132. package/lib/panel/abstract/panel-with-header-binding.d.ts +5 -2
  133. package/lib/panel/abstract/panel-with-immediate-data.d.ts +4 -2
  134. package/lib/panel/abstract-panel.component.d.ts +8 -2
  135. package/lib/panel/case-panel/abstract-case-panel.component.d.ts +3 -3
  136. package/lib/panel/configuration/config-params.d.ts +3 -0
  137. package/lib/panel/public-api.d.ts +3 -0
  138. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +13 -4
  139. package/lib/panel/task-panel/models/task-panel-context.d.ts +19 -0
  140. package/lib/panel/task-panel-list/abstract-task-list.component.d.ts +2 -2
  141. package/lib/panel/task-panel-list/default-task-panel-list/{abstract-default-task-list.d.ts → abstract-default-task-list.component.d.ts} +3 -3
  142. package/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.d.ts +2 -2
  143. package/lib/panel/task-panel-single/abstract-single-task.component.d.ts +42 -0
  144. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +13 -2
  145. package/lib/public/factories/public-factory-resolver.d.ts +2 -1
  146. package/lib/resources/engine-endpoint/petri-net-resource.service.d.ts +1 -1
  147. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +0 -12
  148. package/lib/resources/interface/fields.d.ts +0 -5
  149. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +5 -0
  150. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +2 -1
  151. package/lib/side-menu/content-components/user-assign/model/user-list-injected-data.d.ts +2 -1
  152. package/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.d.ts +2 -2
  153. package/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.d.ts +2 -2
  154. package/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.d.ts +2 -2
  155. package/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.d.ts +2 -2
  156. package/lib/snack-bar/models/{abstract-snack-bar.d.ts → abstract-snack-bar.component.d.ts} +3 -3
  157. package/lib/snack-bar/public-api.d.ts +1 -1
  158. package/lib/tabs/classes/opened-tab.d.ts +8 -1
  159. package/lib/tabs/classes/tab-label-stream.d.ts +7 -0
  160. package/lib/tabs/interfaces.d.ts +12 -1
  161. package/lib/tabs/public-api.d.ts +2 -0
  162. package/lib/task/services/assign-task.service.d.ts +4 -2
  163. package/lib/task/services/cancel-task.service.d.ts +4 -2
  164. package/lib/task/services/delegate-task.service.d.ts +5 -3
  165. package/lib/task/services/finish-task.service.d.ts +4 -2
  166. package/lib/task/services/task-data.service.d.ts +12 -3
  167. package/lib/task-content/model/field-type-resource.d.ts +1 -0
  168. package/lib/task-content/model/resource-interface.d.ts +0 -3
  169. package/lib/task-content/model/task-event-notification.d.ts +7 -1
  170. package/lib/task-content/services/field-converter.service.d.ts +3 -16
  171. package/lib/task-content/services/task-content.service.d.ts +1 -0
  172. package/lib/view/abstract/view-with-headers.d.ts +5 -1
  173. package/lib/view/case-view/abstract-case-view.d.ts +5 -3
  174. package/lib/view/case-view/components/case-list/abstract-case-list.component.d.ts +2 -2
  175. package/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.d.ts +2 -2
  176. package/lib/view/case-view/components/default-case-list/{abstract-default-case-list.d.ts → abstract-default-case-list.component.d.ts} +3 -3
  177. package/lib/view/case-view/tabbed-case-view.d.ts +4 -4
  178. package/lib/view/public-api.d.ts +1 -0
  179. package/lib/view/task-view/abstract-single-task-view.component.d.ts +25 -0
  180. package/lib/view/task-view/abstract-task-view.d.ts +2 -1
  181. package/lib/view/task-view/tabbed-task-view.d.ts +2 -1
  182. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +2 -1
  183. package/package.json +1 -2
  184. package/schematics/_commons/view-class-info.js +8 -0
  185. package/schematics/_commons/view-class-info.js.map +1 -1
  186. package/src/assets/i18n/de.json +12 -0
  187. package/src/assets/i18n/en.json +12 -0
  188. package/src/assets/i18n/sk.json +13 -1
  189. package/src/schema/nae-schema.json +6 -0
  190. package/esm2020/lib/admin/role-assignment-ldap-group/abstract-ldap-group-role-assignment.mjs +0 -88
  191. package/esm2020/lib/dialog/models/abstract-dialog.mjs +0 -29
  192. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.mjs +0 -94
  193. package/esm2020/lib/snack-bar/models/abstract-snack-bar.mjs +0 -26
  194. package/esm2020/lib/view/case-view/components/default-case-list/abstract-default-case-list.mjs +0 -81
@@ -1,20 +1,25 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, Optional } from '@angular/core';
2
2
  import { AbstractPanelWithHeaderBindingComponent } from '../abstract/panel-with-header-binding';
3
3
  import { toMoment } from '../../resources/types/nae-date-type';
4
4
  import { DATE_TIME_FORMAT_STRING } from '../../moment/time-formats';
5
5
  import { TextField } from '../../data-fields/text-field/models/text-field';
6
6
  import { DateTimeField } from '../../data-fields/date-time-field/models/date-time-field';
7
7
  import { WorkflowMetaField } from '../../header/workflow-header/workflow-meta-enum';
8
+ import { ProgressType } from '../../resources/resource-provider.service';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "../../logger/services/logger.service";
10
11
  import * as i2 from "@ngx-translate/core";
11
12
  import * as i3 from "../../view/workflow-view/workflow-view.service";
13
+ import * as i4 from "../../resources/engine-endpoint/petri-net-resource.service";
14
+ import * as i5 from "../../header/services/overflow.service";
12
15
  export class AbstractWorkflowPanelComponent extends AbstractPanelWithHeaderBindingComponent {
13
- constructor(_log, _translate, _workflowService) {
14
- super();
16
+ constructor(_log, _translate, _workflowService, _petriNetResource, _overflowService) {
17
+ super(_overflowService);
15
18
  this._log = _log;
16
19
  this._translate = _translate;
17
20
  this._workflowService = _workflowService;
21
+ this._petriNetResource = _petriNetResource;
22
+ this._overflowService = _overflowService;
18
23
  this.responsiveBody = true;
19
24
  this.showDeleteMenu = false;
20
25
  this.TRANSLATION_NET = 'panel.workflow.net';
@@ -56,6 +61,33 @@ export class AbstractWorkflowPanelComponent extends AbstractPanelWithHeaderBindi
56
61
  deleteWorkflow() {
57
62
  this._workflowService.deleteWorkflow(this.workflow);
58
63
  }
64
+ /**
65
+ * Handles the logic that should be executed when the "download workflow" button is clicked.
66
+ *
67
+ * Calls the appropriate method in the {@link WorkflowViewService}.
68
+ */
69
+ downloadNetFile() {
70
+ this._petriNetResource.getNetFile(this.workflow.stringId).subscribe(response => {
71
+ if (!response.type || response.type !== ProgressType.DOWNLOAD) {
72
+ this._log.debug(`File ${this.workflow.identifier} was successfully downloaded`);
73
+ this.downloadViaAnchor(response);
74
+ }
75
+ }, error => {
76
+ this._log.error(`Downloading file ${this.workflow.identifier} has failed!`, error);
77
+ });
78
+ }
79
+ downloadViaAnchor(blob) {
80
+ const a = document.createElement('a');
81
+ document.body.appendChild(a);
82
+ a.setAttribute('style', 'display: none');
83
+ blob = new Blob([blob], { type: blob.type });
84
+ const url = window.URL.createObjectURL(blob);
85
+ a.href = url;
86
+ a.download = this.workflow.identifier;
87
+ a.click();
88
+ window.URL.revokeObjectURL(url);
89
+ document.body.removeChild(a);
90
+ }
59
91
  /**
60
92
  * Populate data fields group for every petri net model
61
93
  */
@@ -98,7 +130,7 @@ export class AbstractWorkflowPanelComponent extends AbstractPanelWithHeaderBindi
98
130
  return { value: '', icon: '', type: '' };
99
131
  }
100
132
  }
101
- AbstractWorkflowPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractWorkflowPanelComponent, deps: [{ token: i1.LoggerService }, { token: i2.TranslateService }, { token: i3.WorkflowViewService }], target: i0.ɵɵFactoryTarget.Component });
133
+ AbstractWorkflowPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractWorkflowPanelComponent, deps: [{ token: i1.LoggerService }, { token: i2.TranslateService }, { token: i3.WorkflowViewService }, { token: i4.PetriNetResourceService }, { token: i5.OverflowService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
102
134
  AbstractWorkflowPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AbstractWorkflowPanelComponent, selector: "ncc-abstract-workflow-panel", inputs: { workflow: "workflow", selectedHeaders$: "selectedHeaders$", responsiveBody: "responsiveBody", showDeleteMenu: "showDeleteMenu" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
103
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractWorkflowPanelComponent, decorators: [{
104
136
  type: Component,
@@ -106,7 +138,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
106
138
  selector: 'ncc-abstract-workflow-panel',
107
139
  template: ''
108
140
  }]
109
- }], ctorParameters: function () { return [{ type: i1.LoggerService }, { type: i2.TranslateService }, { type: i3.WorkflowViewService }]; }, propDecorators: { workflow: [{
141
+ }], ctorParameters: function () { return [{ type: i1.LoggerService }, { type: i2.TranslateService }, { type: i3.WorkflowViewService }, { type: i4.PetriNetResourceService }, { type: i5.OverflowService, decorators: [{
142
+ type: Optional
143
+ }] }]; }, propDecorators: { workflow: [{
110
144
  type: Input
111
145
  }], selectedHeaders$: [{
112
146
  type: Input
@@ -115,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
115
149
  }], showDeleteMenu: [{
116
150
  type: Input
117
151
  }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtd29ya2Zsb3ctcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9wYW5lbC93b3JrZmxvdy1wYW5lbC9hYnN0cmFjdC13b3JrZmxvdy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBQyx1Q0FBdUMsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBSTlGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBSXZGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlEQUFpRCxDQUFDOzs7OztBQWlCbEYsTUFBTSxPQUFnQiw4QkFBK0IsU0FBUSx1Q0FBdUM7SUFpQmhHLFlBQWdDLElBQW1CLEVBQ25CLFVBQTRCLEVBQzVCLGdCQUFxQztRQUNqRSxLQUFLLEVBQUUsQ0FBQztRQUhvQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFmNUQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFJZixvQkFBZSxHQUFHLG9CQUFvQixDQUFDO1FBQ3ZDLHNCQUFpQixHQUFHLHNCQUFzQixDQUFDO1FBQzNDLHdCQUFtQixHQUFHLHdCQUF3QixDQUFDO1FBQy9DLHVCQUFrQixHQUFHLHVCQUF1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S0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEV4cGFuc2lvblBhbmVsfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHtBYnN0cmFjdFBhbmVsV2l0aEhlYWRlckJpbmRpbmdDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0L3BhbmVsLXdpdGgtaGVhZGVyLWJpbmRpbmcnO1xuaW1wb3J0IHtIZWFkZXJDb2x1bW59IGZyb20gJy4uLy4uL2hlYWRlci9tb2RlbHMvaGVhZGVyLWNvbHVtbic7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge3RvTW9tZW50fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHlwZXMvbmFlLWRhdGUtdHlwZSc7XG5pbXBvcnQge0RBVEVfVElNRV9GT1JNQVRfU1RSSU5HfSBmcm9tICcuLi8uLi9tb21lbnQvdGltZS1mb3JtYXRzJztcbmltcG9ydCB7VGV4dEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWZpZWxkJztcbmltcG9ydCB7RGF0ZVRpbWVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkL21vZGVscy9kYXRlLXRpbWUtZmllbGQnO1xuaW1wb3J0IHtCZWhhdmlvcn0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2JlaGF2aW9yJztcbmltcG9ydCB7TmV0fSBmcm9tICcuLi8uLi9wcm9jZXNzL25ldCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uQ2hhbmdlRXZlbnR9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtXb3JrZmxvd01ldGFGaWVsZH0gZnJvbSAnLi4vLi4vaGVhZGVyL3dvcmtmbG93LWhlYWRlci93b3JrZmxvdy1tZXRhLWVudW0nO1xuaW1wb3J0IHtXb3JrZmxvd1ZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi92aWV3L3dvcmtmbG93LXZpZXcvd29ya2Zsb3ctdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7RmVhdHVyZWRWYWx1ZX0gZnJvbSAnLi4vYWJzdHJhY3QvZmVhdHVyZWQtdmFsdWUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dQYW5lbENvbnRlbnQge1xuICAgIG5ldElkZW50aWZpZXI6IFRleHRGaWVsZDtcbiAgICB0aXRsZTogVGV4dEZpZWxkO1xuICAgIHZlcnNpb246IFRleHRGaWVsZDtcbiAgICBhdXRob3I6IFRleHRGaWVsZDtcbiAgICB1cGxvYWRlZDogRGF0ZVRpbWVGaWVsZDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3Qtd29ya2Zsb3ctcGFuZWwnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdvcmtmbG93UGFuZWxDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFBhbmVsV2l0aEhlYWRlckJpbmRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgd29ya2Zsb3c6IE5ldDtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRIZWFkZXJzJDogT2JzZXJ2YWJsZTxBcnJheTxIZWFkZXJDb2x1bW4+PjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlQm9keSA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0RlbGV0ZU1lbnUgPSBmYWxzZTtcbiAgICBwdWJsaWMgcGFuZWxSZWY6IE1hdEV4cGFuc2lvblBhbmVsO1xuICAgIHB1YmxpYyBwYW5lbENvbnRlbnQ6IFdvcmtmbG93UGFuZWxDb250ZW50O1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fTkVUID0gJ3BhbmVsLndvcmtmbG93Lm5ldCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUUkFOU0xBVElPTl9USVRMRSA9ICdwYW5lbC53b3JrZmxvdy50aXRsZSc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUUkFOU0xBVElPTl9WRVJTSU9OID0gJ3BhbmVsLndvcmtmbG93LnZlcnNpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fQVVUSE9SID0gJ3BhbmVsLndvcmtmbG93LmF1dGhvcic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUUkFOU0xBVElPTl9VUExPQUQgPSAncGFuZWwud29ya2Zsb3cudXBsb2FkJztcblxuICAgIHByb3RlY3RlZCBkYXRhRmllbGRzQmVoYXZpb3VyOiBCZWhhdmlvciA9IHt2aXNpYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF93b3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93Vmlld1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBfdHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBUcmFuc2xhdGlvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC5uZXRJZGVudGlmaWVyLnRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9ORVQpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbENvbnRlbnQudGl0bGUudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1RJVExFKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxDb250ZW50LnZlcnNpb24udGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1ZFUlNJT04pO1xuICAgICAgICAgICAgdGhpcy5wYW5lbENvbnRlbnQuYXV0aG9yLnRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9BVVRIT1IpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbENvbnRlbnQudXBsb2FkZWQudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1VQTE9BRCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnBhbmVsQ29udGVudCA9IHRoaXMuY3JlYXRlUGFuZWxDb250ZW50KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93KGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQYW5lbFJlZihwYW5lbFJlZjogTWF0RXhwYW5zaW9uUGFuZWwpIHtcbiAgICAgICAgdGhpcy5wYW5lbFJlZiA9IHBhbmVsUmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIFwiZGVsZXRlIHdvcmtmbG93XCIgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBDYWxscyB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGluIHRoZSB7QGxpbmsgV29ya2Zsb3dWaWV3U2VydmljZX0uXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVdvcmtmbG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93b3JrZmxvd1NlcnZpY2UuZGVsZXRlV29ya2Zsb3codGhpcy53b3JrZmxvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9wdWxhdGUgZGF0YSBmaWVsZHMgZ3JvdXAgZm9yIGV2ZXJ5IHBldHJpIG5ldCBtb2RlbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVQYW5lbENvbnRlbnQoKTogV29ya2Zsb3dQYW5lbENvbnRlbnQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV0SWRlbnRpZmllcjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9ORVQpLFxuICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3cuaWRlbnRpZmllciwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHRpdGxlOiBuZXcgVGV4dEZpZWxkKCcnLCB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1RJVExFKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnRpdGxlLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpLFxuICAgICAgICAgICAgdmVyc2lvbjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9WRVJTSU9OKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnZlcnNpb24sIHRoaXMuZGF0YUZpZWxkc0JlaGF2aW91ciksXG4gICAgICAgICAgICBhdXRob3I6IG5ldyBUZXh0RmllbGQoJycsIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fQVVUSE9SKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LmF1dGhvci5mdWxsTmFtZSwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHVwbG9hZGVkOiBuZXcgRGF0ZVRpbWVGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9VUExPQUQpLFxuICAgICAgICAgICAgICAgIHRvTW9tZW50KHRoaXMud29ya2Zsb3cuY3JlYXRlZERhdGUpLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVGZWF0dXJlZEZpZWxkc1ZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0U2VsZWN0ZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLnNwbGljZSgwLCB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZEhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlZEZpZWxkc1ZhbHVlcy5wdXNoKHRoaXMuZ2V0RmVhdHVyZWRWYWx1ZShoZWFkZXIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEZlYXR1cmVkTWV0YVZhbHVlKHNlbGVjdGVkSGVhZGVyOiBIZWFkZXJDb2x1bW4pOiBGZWF0dXJlZFZhbHVlIHtcbiAgICAgICAgc3dpdGNoIChzZWxlY3RlZEhlYWRlci5maWVsZElkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuSU5JVElBTFM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy5pbml0aWFscywgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLlRJVExFOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cudGl0bGUsIGljb246ICcnLCB0eXBlOiAnbWV0YSd9O1xuICAgICAgICAgICAgY2FzZSBXb3JrZmxvd01ldGFGaWVsZC5ORVRfSUQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy5zdHJpbmdJZCwgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLlZFUlNJT046XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy52ZXJzaW9uLCBpY29uOiAnJywgdHlwZTogJ21ldGEnfTtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuQVVUSE9SOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cuYXV0aG9yLmZ1bGxOYW1lLCBpY29uOiAnYWNjb3VudF9jaXJjbGUnLCB0eXBlOiAnbWV0YSd9O1xuICAgICAgICAgICAgY2FzZSBXb3JrZmxvd01ldGFGaWVsZC5DUkVBVElPTl9EQVRFOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRvTW9tZW50KHRoaXMud29ya2Zsb3cuY3JlYXRlZERhdGUpLmZvcm1hdChEQVRFX1RJTUVfRk9STUFUX1NUUklORyksIGljb246ICdldmVudCcsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RmVhdHVyZWRJbW1lZGlhdGVWYWx1ZShzZWxlY3RlZEhlYWRlcjogSGVhZGVyQ29sdW1uKTogRmVhdHVyZWRWYWx1ZSB7XG4gICAgICAgIHRoaXMuX2xvZy53YXJuKCdJbW1lZGlhdGUgZGF0YSBpbiB3b3JrZmxvdyBwYW5lbCBoZWFkZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiAnJywgaWNvbjogJycsIHR5cGU6ICcnfTtcbiAgICB9XG5cbn1cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtd29ya2Zsb3ctcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9wYW5lbC93b3JrZmxvdy1wYW5lbC9hYnN0cmFjdC13b3JrZmxvdy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUMsdUNBQXVDLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUk5RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUl2RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUlsRixPQUFPLEVBQUMsWUFBWSxFQUFtQixNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7O0FBZ0J6RixNQUFNLE9BQWdCLDhCQUErQixTQUFRLHVDQUF1QztJQWlCaEcsWUFBZ0MsSUFBbUIsRUFDbkIsVUFBNEIsRUFDNUIsZ0JBQXFDLEVBQ3JDLGlCQUEwQyxFQUM5QixnQkFBaUM7UUFDekUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFMSSxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFDckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBakJwRSxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUlmLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7UUFDdkMsc0JBQWlCLEdBQUcsc0JBQXNCLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsd0JBQXdCLENBQUM7UUFDL0MsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUM7UUFDN0MsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUM7UUFFcEQsd0JBQW1CLEdBQWEsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQztRQVN2RSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBNkIsRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxJQUFJLENBQUMsS0FBaUI7UUFDekIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxRQUFRO0lBQ2YsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0UsSUFBSSxDQUFFLFFBQTZCLENBQUMsSUFBSSxJQUFLLFFBQTZCLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLDhCQUE4QixDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFnQixDQUFDLENBQUM7YUFDNUM7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFVO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7UUFFM0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNPLGtCQUFrQjtRQUN4QixPQUFPO1lBQ0gsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3BELE1BQU0sRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsUUFBUSxFQUFFLElBQUksYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDNUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ3JFLENBQUM7SUFDTixDQUFDO0lBRVMsMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxjQUE0QjtRQUN2RCxRQUFRLGNBQWMsQ0FBQyxlQUFlLEVBQUU7WUFDcEMsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRO2dCQUMzQixPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDO1lBQ25FLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsT0FBTyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQztZQUNoRSxLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7WUFDbkUsS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO2dCQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDO1lBQ2xFLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsT0FBTyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQztZQUN4RixLQUFLLGlCQUFpQixDQUFDLGFBQWE7Z0JBQ2hDLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7U0FDeEg7SUFDTCxDQUFDO0lBRVMseUJBQXlCLENBQUMsY0FBNEI7UUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUN2RixPQUFPLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUMzQyxDQUFDOzs0SEEvSWlCLDhCQUE4QjtnSEFBOUIsOEJBQThCLHNPQUZ0QyxFQUFFOzRGQUVNLDhCQUE4QjtrQkFKbkQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBc0IwQixRQUFROzRDQW5CZixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEV4cGFuc2lvblBhbmVsfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHtBYnN0cmFjdFBhbmVsV2l0aEhlYWRlckJpbmRpbmdDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0L3BhbmVsLXdpdGgtaGVhZGVyLWJpbmRpbmcnO1xuaW1wb3J0IHtIZWFkZXJDb2x1bW59IGZyb20gJy4uLy4uL2hlYWRlci9tb2RlbHMvaGVhZGVyLWNvbHVtbic7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge3RvTW9tZW50fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHlwZXMvbmFlLWRhdGUtdHlwZSc7XG5pbXBvcnQge0RBVEVfVElNRV9GT1JNQVRfU1RSSU5HfSBmcm9tICcuLi8uLi9tb21lbnQvdGltZS1mb3JtYXRzJztcbmltcG9ydCB7VGV4dEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWZpZWxkJztcbmltcG9ydCB7RGF0ZVRpbWVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkL21vZGVscy9kYXRlLXRpbWUtZmllbGQnO1xuaW1wb3J0IHtCZWhhdmlvcn0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2JlaGF2aW9yJztcbmltcG9ydCB7TmV0fSBmcm9tICcuLi8uLi9wcm9jZXNzL25ldCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uQ2hhbmdlRXZlbnR9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtXb3JrZmxvd01ldGFGaWVsZH0gZnJvbSAnLi4vLi4vaGVhZGVyL3dvcmtmbG93LWhlYWRlci93b3JrZmxvdy1tZXRhLWVudW0nO1xuaW1wb3J0IHtXb3JrZmxvd1ZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi92aWV3L3dvcmtmbG93LXZpZXcvd29ya2Zsb3ctdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7RmVhdHVyZWRWYWx1ZX0gZnJvbSAnLi4vYWJzdHJhY3QvZmVhdHVyZWQtdmFsdWUnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1Byb2dyZXNzVHlwZSwgUHJvdmlkZXJQcm9ncmVzc30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtPdmVyZmxvd1NlcnZpY2V9IGZyb20gJy4uLy4uL2hlYWRlci9zZXJ2aWNlcy9vdmVyZmxvdy5zZXJ2aWNlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UGFuZWxDb250ZW50IHtcbiAgICBuZXRJZGVudGlmaWVyOiBUZXh0RmllbGQ7XG4gICAgdGl0bGU6IFRleHRGaWVsZDtcbiAgICB2ZXJzaW9uOiBUZXh0RmllbGQ7XG4gICAgYXV0aG9yOiBUZXh0RmllbGQ7XG4gICAgdXBsb2FkZWQ6IERhdGVUaW1lRmllbGQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LXdvcmtmbG93LXBhbmVsJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RXb3JrZmxvd1BhbmVsQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RQYW5lbFdpdGhIZWFkZXJCaW5kaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIHdvcmtmbG93OiBOZXQ7XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkSGVhZGVycyQ6IE9ic2VydmFibGU8QXJyYXk8SGVhZGVyQ29sdW1uPj47XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZUJvZHkgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEZWxldGVNZW51ID0gZmFsc2U7XG4gICAgcHVibGljIHBhbmVsUmVmOiBNYXRFeHBhbnNpb25QYW5lbDtcbiAgICBwdWJsaWMgcGFuZWxDb250ZW50OiBXb3JrZmxvd1BhbmVsQ29udGVudDtcbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRSQU5TTEFUSU9OX05FVCA9ICdwYW5lbC53b3JrZmxvdy5uZXQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVElUTEUgPSAncGFuZWwud29ya2Zsb3cudGl0bGUnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVkVSU0lPTiA9ICdwYW5lbC53b3JrZmxvdy52ZXJzaW9uJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRSQU5TTEFUSU9OX0FVVEhPUiA9ICdwYW5lbC53b3JrZmxvdy5hdXRob3InO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVVBMT0FEID0gJ3BhbmVsLndvcmtmbG93LnVwbG9hZCc7XG5cbiAgICBwcm90ZWN0ZWQgZGF0YUZpZWxkc0JlaGF2aW91cjogQmVoYXZpb3IgPSB7dmlzaWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXJ2aWNlOiBXb3JrZmxvd1ZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX292ZXJmbG93U2VydmljZTogT3ZlcmZsb3dTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF9vdmVyZmxvd1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IF90cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IFRyYW5zbGF0aW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxDb250ZW50Lm5ldElkZW50aWZpZXIudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX05FVCk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC50aXRsZS50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVElUTEUpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbENvbnRlbnQudmVyc2lvbi50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVkVSU0lPTik7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC5hdXRob3IudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX0FVVEhPUik7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC51cGxvYWRlZC50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVVBMT0FEKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMucGFuZWxDb250ZW50ID0gdGhpcy5jcmVhdGVQYW5lbENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3coZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhbmVsUmVmKHBhbmVsUmVmOiBNYXRFeHBhbnNpb25QYW5lbCkge1xuICAgICAgICB0aGlzLnBhbmVsUmVmID0gcGFuZWxSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB0aGUgbG9naWMgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgXCJkZWxldGUgd29ya2Zsb3dcIiBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKlxuICAgICAqIENhbGxzIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgaW4gdGhlIHtAbGluayBXb3JrZmxvd1ZpZXdTZXJ2aWNlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlV29ya2Zsb3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2VydmljZS5kZWxldGVXb3JrZmxvdyh0aGlzLndvcmtmbG93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSBsb2dpYyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIHRoZSBcImRvd25sb2FkIHdvcmtmbG93XCIgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBDYWxscyB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGluIHRoZSB7QGxpbmsgV29ya2Zsb3dWaWV3U2VydmljZX0uXG4gICAgICovXG4gICAgcHVibGljIGRvd25sb2FkTmV0RmlsZSgpIHtcbiAgICAgICAgdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5nZXROZXRGaWxlKHRoaXMud29ya2Zsb3cuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAoIShyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlIHx8IChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlICE9PSBQcm9ncmVzc1R5cGUuRE9XTkxPQUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpbGUgJHt0aGlzLndvcmtmbG93LmlkZW50aWZpZXJ9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRWaWFBbmNob3IocmVzcG9uc2UgYXMgQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgRG93bmxvYWRpbmcgZmlsZSAke3RoaXMud29ya2Zsb3cuaWRlbnRpZmllcn0gaGFzIGZhaWxlZCFgLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb3dubG9hZFZpYUFuY2hvcihibG9iOiBCbG9iKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICAgIGJsb2IgPSBuZXcgQmxvYihbYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblxuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gdGhpcy53b3JrZmxvdy5pZGVudGlmaWVyO1xuICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9wdWxhdGUgZGF0YSBmaWVsZHMgZ3JvdXAgZm9yIGV2ZXJ5IHBldHJpIG5ldCBtb2RlbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVQYW5lbENvbnRlbnQoKTogV29ya2Zsb3dQYW5lbENvbnRlbnQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV0SWRlbnRpZmllcjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9ORVQpLFxuICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3cuaWRlbnRpZmllciwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHRpdGxlOiBuZXcgVGV4dEZpZWxkKCcnLCB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1RJVExFKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnRpdGxlLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpLFxuICAgICAgICAgICAgdmVyc2lvbjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9WRVJTSU9OKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnZlcnNpb24sIHRoaXMuZGF0YUZpZWxkc0JlaGF2aW91ciksXG4gICAgICAgICAgICBhdXRob3I6IG5ldyBUZXh0RmllbGQoJycsIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fQVVUSE9SKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LmF1dGhvci5mdWxsTmFtZSwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHVwbG9hZGVkOiBuZXcgRGF0ZVRpbWVGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9VUExPQUQpLFxuICAgICAgICAgICAgICAgIHRvTW9tZW50KHRoaXMud29ya2Zsb3cuY3JlYXRlZERhdGUpLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVGZWF0dXJlZEZpZWxkc1ZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0U2VsZWN0ZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLnNwbGljZSgwLCB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZEhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlZEZpZWxkc1ZhbHVlcy5wdXNoKHRoaXMuZ2V0RmVhdHVyZWRWYWx1ZShoZWFkZXIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEZlYXR1cmVkTWV0YVZhbHVlKHNlbGVjdGVkSGVhZGVyOiBIZWFkZXJDb2x1bW4pOiBGZWF0dXJlZFZhbHVlIHtcbiAgICAgICAgc3dpdGNoIChzZWxlY3RlZEhlYWRlci5maWVsZElkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuSU5JVElBTFM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy5pbml0aWFscywgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLlRJVExFOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cudGl0bGUsIGljb246ICcnLCB0eXBlOiAnbWV0YSd9O1xuICAgICAgICAgICAgY2FzZSBXb3JrZmxvd01ldGFGaWVsZC5ORVRfSUQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy5zdHJpbmdJZCwgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLlZFUlNJT046XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy52ZXJzaW9uLCBpY29uOiAnJywgdHlwZTogJ21ldGEnfTtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuQVVUSE9SOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cuYXV0aG9yLmZ1bGxOYW1lLCBpY29uOiAnYWNjb3VudF9jaXJjbGUnLCB0eXBlOiAnbWV0YSd9O1xuICAgICAgICAgICAgY2FzZSBXb3JrZmxvd01ldGFGaWVsZC5DUkVBVElPTl9EQVRFOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRvTW9tZW50KHRoaXMud29ya2Zsb3cuY3JlYXRlZERhdGUpLmZvcm1hdChEQVRFX1RJTUVfRk9STUFUX1NUUklORyksIGljb246ICdldmVudCcsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RmVhdHVyZWRJbW1lZGlhdGVWYWx1ZShzZWxlY3RlZEhlYWRlcjogSGVhZGVyQ29sdW1uKTogRmVhdHVyZWRWYWx1ZSB7XG4gICAgICAgIHRoaXMuX2xvZy53YXJuKCdJbW1lZGlhdGUgZGF0YSBpbiB3b3JrZmxvdyBwYW5lbCBoZWFkZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiAnJywgaWNvbjogJycsIHR5cGU6ICcnfTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -1,7 +1,12 @@
1
- export const publicFactoryResolver = (userService, sessionService, authService, router, publicResolverService, privateService, publicService) => {
1
+ export const publicFactoryResolver = (userService, sessionService, authService, router, publicResolverService, privateService, publicService, redirectService, url) => {
2
2
  if (!sessionService.isInitialized) {
3
3
  publicResolverService.url = router.url;
4
- router.navigate(['/public-resolver']);
4
+ if (url === undefined) {
5
+ router.navigate(['/public-resolver'], { queryParams: redirectService.queryParams });
6
+ }
7
+ else {
8
+ router.navigate([url], { queryParams: redirectService.queryParams });
9
+ }
5
10
  }
6
11
  else if (authService.isAuthenticated && userService.user.id !== '' && userService.user.email !== 'anonymous@netgrif.com') {
7
12
  return privateService;
@@ -10,4 +15,4 @@ export const publicFactoryResolver = (userService, sessionService, authService,
10
15
  return publicService;
11
16
  }
12
17
  };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZhY3RvcnktcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3B1YmxpYy9mYWN0b3JpZXMvcHVibGljLWZhY3RvcnktcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLGNBQThCLEVBQUUsV0FBa0MsRUFDNUYsTUFBYyxFQUFFLHFCQUErQyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRTtJQUNwSSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRTtRQUMvQixxQkFBcUIsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN2QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0tBQ3pDO1NBQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyx1QkFBdUIsRUFBRTtRQUN4SCxPQUFPLGNBQWMsQ0FBQztLQUN6QjtTQUFNO1FBQ0gsT0FBTyxhQUFhLENBQUM7S0FDeEI7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhlbnRpY2F0aW9uL3Nlc3Npb24vc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aGVudGljYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoZW50aWNhdGlvbi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7UHVibGljVXJsUmVzb2x2ZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWMtdXJsLXJlc29sdmVyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgcHVibGljRmFjdG9yeVJlc29sdmVyID0gKHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgc2Vzc2lvblNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlLCBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IFJvdXRlciwgcHVibGljUmVzb2x2ZXJTZXJ2aWNlOiBQdWJsaWNVcmxSZXNvbHZlclNlcnZpY2UsIHByaXZhdGVTZXJ2aWNlLCBwdWJsaWNTZXJ2aWNlKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uU2VydmljZS5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHB1YmxpY1Jlc29sdmVyU2VydmljZS51cmwgPSByb3V0ZXIudXJsO1xuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvcHVibGljLXJlc29sdmVyJ10pO1xuICAgIH0gZWxzZSBpZiAoYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkICYmIHVzZXJTZXJ2aWNlLnVzZXIuaWQgIT09ICcnICYmIHVzZXJTZXJ2aWNlLnVzZXIuZW1haWwgIT09ICdhbm9ueW1vdXNAbmV0Z3JpZi5jb20nKSB7XG4gICAgICAgIHJldHVybiBwcml2YXRlU2VydmljZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHVibGljU2VydmljZTtcbiAgICB9XG59O1xuXG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZhY3RvcnktcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3B1YmxpYy9mYWN0b3JpZXMvcHVibGljLWZhY3RvcnktcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLGNBQThCLEVBQUUsV0FBa0MsRUFDNUYsTUFBYyxFQUFFLHFCQUErQyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQzlGLGVBQWdDLEVBQUUsR0FBWSxFQUFFLEVBQUU7SUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDL0IscUJBQXFCLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7U0FDdEU7S0FDSjtTQUFNLElBQUksV0FBVyxDQUFDLGVBQWUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssdUJBQXVCLEVBQUU7UUFDeEgsT0FBTyxjQUFjLENBQUM7S0FDekI7U0FBTTtRQUNILE9BQU8sYUFBYSxDQUFDO0tBQ3hCO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoZW50aWNhdGlvbi9zZXNzaW9uL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQge0F1dGhlbnRpY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aGVudGljYXRpb24vc2VydmljZXMvYXV0aGVudGljYXRpb24vYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1B1YmxpY1VybFJlc29sdmVyU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljLXVybC1yZXNvbHZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZGlyZWN0U2VydmljZSB9IGZyb20gJy4uLy4uL3JvdXRpbmcvcmVkaXJlY3Qtc2VydmljZS9yZWRpcmVjdC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHB1YmxpY0ZhY3RvcnlSZXNvbHZlciA9ICh1c2VyU2VydmljZTogVXNlclNlcnZpY2UsIHNlc3Npb25TZXJ2aWNlOiBTZXNzaW9uU2VydmljZSwgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiBSb3V0ZXIsIHB1YmxpY1Jlc29sdmVyU2VydmljZTogUHVibGljVXJsUmVzb2x2ZXJTZXJ2aWNlLCBwcml2YXRlU2VydmljZSwgcHVibGljU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RTZXJ2aWNlOiBSZWRpcmVjdFNlcnZpY2UsIHVybD86IHN0cmluZykgPT4ge1xuICAgIGlmICghc2Vzc2lvblNlcnZpY2UuaXNJbml0aWFsaXplZCkge1xuICAgICAgICBwdWJsaWNSZXNvbHZlclNlcnZpY2UudXJsID0gcm91dGVyLnVybDtcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvcHVibGljLXJlc29sdmVyJ10sIHtxdWVyeVBhcmFtczogcmVkaXJlY3RTZXJ2aWNlLnF1ZXJ5UGFyYW1zfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtxdWVyeVBhcmFtczogcmVkaXJlY3RTZXJ2aWNlLnF1ZXJ5UGFyYW1zfSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCAmJiB1c2VyU2VydmljZS51c2VyLmlkICE9PSAnJyAmJiB1c2VyU2VydmljZS51c2VyLmVtYWlsICE9PSAnYW5vbnltb3VzQG5ldGdyaWYuY29tJykge1xuICAgICAgICByZXR1cm4gcHJpdmF0ZVNlcnZpY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHB1YmxpY1NlcnZpY2U7XG4gICAgfVxufTtcblxuIl19
@@ -73,9 +73,17 @@ export class PetriNetResourceService extends AbstractResourceService {
73
73
  *
74
74
  * **Request URL:** {{baseUrl}}/api/petrinet/{netId}/file
75
75
  */
76
- getNetFile(netId, params) {
77
- return this._resourceProvider.get$('petrinet/' + netId + '/file', this.SERVER_URL, params)
78
- .pipe(map(r => this.changeType(r, undefined)));
76
+ getNetFile(netId) {
77
+ return this._resourceProvider.getBlob$('petrinet/' + netId + '/file', this.SERVER_URL).pipe(map(event => {
78
+ switch (event.type) {
79
+ case HttpEventType.DownloadProgress:
80
+ return ResourceProvider.getProgress(event);
81
+ case HttpEventType.Response:
82
+ return event.body;
83
+ default:
84
+ return undefined;
85
+ }
86
+ }), filter(value => !!value));
79
87
  }
80
88
  /**
81
89
  * get One Net
@@ -151,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
151
159
  providedIn: 'root'
152
160
  }]
153
161
  }], ctorParameters: function () { return [{ type: i1.ResourceProvider }, { type: i2.ConfigurationService }]; } });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvcGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQTJCLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHeEYsT0FBTyxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQU0vRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQU12RixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsdUJBQXVCO0lBRWhFLFlBQVksUUFBMEIsRUFBRSxhQUFtQztRQUN2RSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWUsQ0FB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QUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O3FIQXZKUSx1QkFBdUI7eUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzRGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQZXRyaU5ldH0gZnJvbSAnLi4vaW50ZXJmYWNlL3BldHJpLW5ldCc7XG5pbXBvcnQge1BhcmFtcywgUHJvdmlkZXJQcm9ncmVzcywgUmVzb3VyY2VQcm92aWRlcn0gZnJvbSAnLi4vcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuLi8uLi9wcm9jZXNzL3RyYW5zaXRpb24nO1xuaW1wb3J0IHtIdHRwRXZlbnRUeXBlLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgVHJhbnNhY3Rpb24gZnJvbSAnLi4vLi4vcHJvY2Vzcy90cmFuc2FjdGlvbic7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSwgTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi9pbnRlcmZhY2UvbWVzc2FnZS1yZXNvdXJjZSc7XG5pbXBvcnQge1BldHJpTmV0UmVmZXJlbmNlfSBmcm9tICcuLi9pbnRlcmZhY2UvcGV0cmktbmV0LXJlZmVyZW5jZSc7XG5pbXBvcnQge1BldHJpTmV0UmVxdWVzdEJvZHl9IGZyb20gJy4uL2ludGVyZmFjZS9wZXRyaS1uZXQtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtwcm9jZXNzTWVzc2FnZVJlc3BvbnNlfSBmcm9tICcuLi8uLi91dGlsaXR5L3Byb2Nlc3MtbWVzc2FnZS1yZXNwb25zZSc7XG5pbXBvcnQge0Fic3RyYWN0UmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi9hYnN0cmFjdC1lbmRwb2ludC9hYnN0cmFjdC1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCBSb2xlc0FuZFBlcm1pc3Npb25zIGZyb20gJy4uLy4uL3Byb2Nlc3Mvcm9sZXNBbmRQZXJtaXNzaW9ucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGV0cmlOZXRSZXNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBBYnN0cmFjdFJlc291cmNlU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogUmVzb3VyY2VQcm92aWRlciwgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoJ3BldHJpbmV0JywgcHJvdmlkZXIsIGNvbmZpZ1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBBbGwgVXNpbmcgUGV0cmkgTmV0XG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0XG4gICAgICovXG4gICAgcHVibGljIGdldEFsbChwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPEFycmF5PFBldHJpTmV0UmVmZXJlbmNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCdwZXRyaW5ldCcsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICdwZXRyaU5ldFJlZmVyZW5jZXMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBEYXRhIEZpZWxkIFJlZmVyZW5jZXMgVXNpbmdcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIFBPU1RcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L2RhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YVBldHJpTmV0KGJvZHk6IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7ICAvLyBUT0RPOiByZXNwb25zZVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgncGV0cmluZXQvZGF0YScsIHRoaXMuU0VSVkVSX1VSTCwgYm9keSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFRyYW5zaXRpb24gUmVmZXJlbmNlcyBVc2luZ1xuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogR0VUXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVVJMOioqIHt7YmFzZVVybH19L2FwaS9wZXRyaW5ldC90cmFuc2l0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQZXRyaU5ldFRyYW5zaXRpb25zKG5ldElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PFRyYW5zaXRpb24+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJy9wZXRyaW5ldC90cmFuc2l0aW9ucycsIHRoaXMuU0VSVkVSX1VSTCwgbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lkcycsIG5ldElkKSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAndHJhbnNpdGlvblJlZmVyZW5jZXMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBUcmFuc2FjdGlvbiBSZWZlcmVuY2VzIFVzaW5nXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tpZH0vdHJhbnNhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIGdldFBldHJpTmV0VHJhbnNhY3Rpb25zKG5ldElkOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8QXJyYXk8VHJhbnNhY3Rpb24+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJy9wZXRyaW5ldC8nICsgbmV0SWQgKyAnL3RyYW5zYWN0aW9ucycsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICd0cmFuc2FjdGlvbnMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBSb2xlcyBSZWZlcmVuY2VzIFVzaW5nXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tpZH0vcm9sZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGV0cmlOZXRSb2xlcyhuZXRJZDogc3RyaW5nLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFJvbGVzQW5kUGVybWlzc2lvbnM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgnL3BldHJpbmV0LycgKyBuZXRJZCArICcvcm9sZXMnLCB0aGlzLlNFUlZFUl9VUkwsIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IE5ldCBGaWxlXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tuZXRJZH0vZmlsZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXRGaWxlKG5ldElkOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7ICAvLyBUT0RPOiByZXNwb25zZVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCdwZXRyaW5ldC8nICsgbmV0SWQgKyAnL2ZpbGUnLCB0aGlzLlNFUlZFUl9VUkwsIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IE9uZSBOZXRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIEdFVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQve2lkZW50aWZpZXJ9L3t2ZXJzaW9ufVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPbmUoaWRlbnRpZmllcjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8UGV0cmlOZXRSZWZlcmVuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgncGV0cmluZXQvJyArIGJ0b2EoaWRlbnRpZmllcikgKyAnLycgKyB2ZXJzaW9uLCB0aGlzLlNFUlZFUl9VUkwsIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAncGV0cmlOZXRSZWZlcmVuY2VzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgT25lIE5ldCBieSBJRFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogR0VUXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVVJMOioqIHt7YmFzZVVybH19L2FwaS9wZXRyaW5ldC97aWR9XG4gICAgICovXG4gICAgcHVibGljIGdldE9uZUJ5SWQobmV0SWQ6IHN0cmluZywgcGFyYW1zPzogUGFyYW1zKTogT2JzZXJ2YWJsZTxQZXRyaU5ldD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCdwZXRyaW5ldC8nICsgbmV0SWQsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIGltcG9ydCBQZXRyaU5ldFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogUE9TVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQvaW1wb3J0XG4gICAgICovXG4gICAgcHVibGljIGltcG9ydFBldHJpTmV0KGJvZHk6IEZvcm1EYXRhLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdFdpdGhFdmVudCQ8TWVzc2FnZVJlc291cmNlPigncGV0cmluZXQvaW1wb3J0JywgdGhpcy5TRVJWRVJfVVJMLCBib2R5LCBwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVByb3ZpZGVyLnByb2Nlc3NNZXNzYWdlUmVzb3VyY2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogc2VhcmNoIFBldHJpTmV0c1xuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogUE9TVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQvc2VhcmNoXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFBldHJpTmV0cyhib2R5OiBQZXRyaU5ldFJlcXVlc3RCb2R5LCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2U8UGV0cmlOZXRSZWZlcmVuY2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCdwZXRyaW5ldC9zZWFyY2gnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHksIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuZ2V0UmVzb3VyY2VQYWdlPFBldHJpTmV0UmVmZXJlbmNlPihyLCAncGV0cmlOZXRSZWZlcmVuY2VzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWxldGUgUGV0cmlOZXRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIERFTEVURVxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQve2lkfVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ldElkIHN0cmluZ0lkIG9mIHRoZSBkZWxldGVkIFBldHJpIE5ldFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVQZXRyaU5ldChuZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZGVsZXRlJDxNZXNzYWdlUmVzb3VyY2U+KCdwZXRyaW5ldC8nICsgbmV0SWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcChwcm9jZXNzTWVzc2FnZVJlc3BvbnNlKSk7XG4gICAgfVxufVxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvcGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQTJCLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHeEYsT0FBTyxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQU0vRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQU12RixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsdUJBQXVCO0lBRWhFLFlBQVksUUFBMEIsRUFBRSxhQUFtQztRQUN2RSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWUsQ0FB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QUFDLGVBQWUsQ0FBb0IsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGNBQWMsQ0FBQyxLQUFhO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBa0IsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3ZGLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O3FIQWxLUSx1QkFBdUI7eUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzRGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQZXRyaU5ldH0gZnJvbSAnLi4vaW50ZXJmYWNlL3BldHJpLW5ldCc7XG5pbXBvcnQge1BhcmFtcywgUHJvdmlkZXJQcm9ncmVzcywgUmVzb3VyY2VQcm92aWRlcn0gZnJvbSAnLi4vcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuLi8uLi9wcm9jZXNzL3RyYW5zaXRpb24nO1xuaW1wb3J0IHtIdHRwRXZlbnRUeXBlLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgVHJhbnNhY3Rpb24gZnJvbSAnLi4vLi4vcHJvY2Vzcy90cmFuc2FjdGlvbic7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSwgTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi9pbnRlcmZhY2UvbWVzc2FnZS1yZXNvdXJjZSc7XG5pbXBvcnQge1BldHJpTmV0UmVmZXJlbmNlfSBmcm9tICcuLi9pbnRlcmZhY2UvcGV0cmktbmV0LXJlZmVyZW5jZSc7XG5pbXBvcnQge1BldHJpTmV0UmVxdWVzdEJvZHl9IGZyb20gJy4uL2ludGVyZmFjZS9wZXRyaS1uZXQtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtwcm9jZXNzTWVzc2FnZVJlc3BvbnNlfSBmcm9tICcuLi8uLi91dGlsaXR5L3Byb2Nlc3MtbWVzc2FnZS1yZXNwb25zZSc7XG5pbXBvcnQge0Fic3RyYWN0UmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi9hYnN0cmFjdC1lbmRwb2ludC9hYnN0cmFjdC1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCBSb2xlc0FuZFBlcm1pc3Npb25zIGZyb20gJy4uLy4uL3Byb2Nlc3Mvcm9sZXNBbmRQZXJtaXNzaW9ucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGV0cmlOZXRSZXNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBBYnN0cmFjdFJlc291cmNlU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogUmVzb3VyY2VQcm92aWRlciwgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoJ3BldHJpbmV0JywgcHJvdmlkZXIsIGNvbmZpZ1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBBbGwgVXNpbmcgUGV0cmkgTmV0XG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0XG4gICAgICovXG4gICAgcHVibGljIGdldEFsbChwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPEFycmF5PFBldHJpTmV0UmVmZXJlbmNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCdwZXRyaW5ldCcsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICdwZXRyaU5ldFJlZmVyZW5jZXMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBEYXRhIEZpZWxkIFJlZmVyZW5jZXMgVXNpbmdcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIFBPU1RcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L2RhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YVBldHJpTmV0KGJvZHk6IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7ICAvLyBUT0RPOiByZXNwb25zZVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgncGV0cmluZXQvZGF0YScsIHRoaXMuU0VSVkVSX1VSTCwgYm9keSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFRyYW5zaXRpb24gUmVmZXJlbmNlcyBVc2luZ1xuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogR0VUXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVVJMOioqIHt7YmFzZVVybH19L2FwaS9wZXRyaW5ldC90cmFuc2l0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQZXRyaU5ldFRyYW5zaXRpb25zKG5ldElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PFRyYW5zaXRpb24+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJy9wZXRyaW5ldC90cmFuc2l0aW9ucycsIHRoaXMuU0VSVkVSX1VSTCwgbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lkcycsIG5ldElkKSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAndHJhbnNpdGlvblJlZmVyZW5jZXMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBUcmFuc2FjdGlvbiBSZWZlcmVuY2VzIFVzaW5nXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tpZH0vdHJhbnNhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIGdldFBldHJpTmV0VHJhbnNhY3Rpb25zKG5ldElkOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8QXJyYXk8VHJhbnNhY3Rpb24+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJy9wZXRyaW5ldC8nICsgbmV0SWQgKyAnL3RyYW5zYWN0aW9ucycsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICd0cmFuc2FjdGlvbnMnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBSb2xlcyBSZWZlcmVuY2VzIFVzaW5nXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tpZH0vcm9sZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGV0cmlOZXRSb2xlcyhuZXRJZDogc3RyaW5nLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFJvbGVzQW5kUGVybWlzc2lvbnM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgnL3BldHJpbmV0LycgKyBuZXRJZCArICcvcm9sZXMnLCB0aGlzLlNFUlZFUl9VUkwsIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IE5ldCBGaWxlXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVHlwZToqKiBHRVRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBVUkw6Kioge3tiYXNlVXJsfX0vYXBpL3BldHJpbmV0L3tuZXRJZH0vZmlsZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXRGaWxlKG5ldElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBCbG9iPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKCdwZXRyaW5ldC8nICsgbmV0SWQgKyAnL2ZpbGUnLCB0aGlzLlNFUlZFUl9VUkwpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVByb3ZpZGVyLmdldFByb2dyZXNzKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IE9uZSBOZXRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIEdFVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQve2lkZW50aWZpZXJ9L3t2ZXJzaW9ufVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPbmUoaWRlbnRpZmllcjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8UGV0cmlOZXRSZWZlcmVuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgncGV0cmluZXQvJyArIGJ0b2EoaWRlbnRpZmllcikgKyAnLycgKyB2ZXJzaW9uLCB0aGlzLlNFUlZFUl9VUkwsIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAncGV0cmlOZXRSZWZlcmVuY2VzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgT25lIE5ldCBieSBJRFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogR0VUXG4gICAgICpcbiAgICAgKiAqKlJlcXVlc3QgVVJMOioqIHt7YmFzZVVybH19L2FwaS9wZXRyaW5ldC97aWR9XG4gICAgICovXG4gICAgcHVibGljIGdldE9uZUJ5SWQobmV0SWQ6IHN0cmluZywgcGFyYW1zPzogUGFyYW1zKTogT2JzZXJ2YWJsZTxQZXRyaU5ldD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCdwZXRyaW5ldC8nICsgbmV0SWQsIHRoaXMuU0VSVkVSX1VSTCwgcGFyYW1zKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIGltcG9ydCBQZXRyaU5ldFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogUE9TVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQvaW1wb3J0XG4gICAgICovXG4gICAgcHVibGljIGltcG9ydFBldHJpTmV0KGJvZHk6IEZvcm1EYXRhLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdFdpdGhFdmVudCQ8TWVzc2FnZVJlc291cmNlPigncGV0cmluZXQvaW1wb3J0JywgdGhpcy5TRVJWRVJfVVJMLCBib2R5LCBwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVByb3ZpZGVyLnByb2Nlc3NNZXNzYWdlUmVzb3VyY2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogc2VhcmNoIFBldHJpTmV0c1xuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFR5cGU6KiogUE9TVFxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQvc2VhcmNoXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFBldHJpTmV0cyhib2R5OiBQZXRyaU5ldFJlcXVlc3RCb2R5LCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2U8UGV0cmlOZXRSZWZlcmVuY2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCdwZXRyaW5ldC9zZWFyY2gnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHksIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuZ2V0UmVzb3VyY2VQYWdlPFBldHJpTmV0UmVmZXJlbmNlPihyLCAncGV0cmlOZXRSZWZlcmVuY2VzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWxldGUgUGV0cmlOZXRcbiAgICAgKlxuICAgICAqICoqUmVxdWVzdCBUeXBlOioqIERFTEVURVxuICAgICAqXG4gICAgICogKipSZXF1ZXN0IFVSTDoqKiB7e2Jhc2VVcmx9fS9hcGkvcGV0cmluZXQve2lkfVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ldElkIHN0cmluZ0lkIG9mIHRoZSBkZWxldGVkIFBldHJpIE5ldFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVQZXRyaU5ldChuZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZGVsZXRlJDxNZXNzYWdlUmVzb3VyY2U+KCdwZXRyaW5ldC8nICsgbmV0SWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcChwcm9jZXNzTWVzc2FnZVJlc3BvbnNlKSk7XG4gICAgfVxufVxuIl19
@@ -67,45 +67,6 @@ export class PublicTaskResourceService extends TaskResourceService {
67
67
  return this._provider.get$('public/task/' + taskId + '/data', this.SERVER_URL)
68
68
  .pipe(map(r => this.changeType(r, 'dataGroups')));
69
69
  }
70
- /**
71
- * Get all task data
72
- *
73
- * GET
74
- *
75
- * If you want to process the raw backend response use [rawGetData]{@link TaskResourceService#rawGetData} instead.
76
- *
77
- * @param taskId ID of the task who's data should be retrieved from the server
78
- * @returns processed data groups of the given task. If the task has no data an empty array will be returned.
79
- */
80
- getData(taskId) {
81
- return this.rawGetData(taskId).pipe(map((responseOutcome) => {
82
- const dataGroupsArray = this.changeType(responseOutcome.outcome.data, 'dataGroups');
83
- if (!Array.isArray(dataGroupsArray)) {
84
- return [];
85
- }
86
- const result = [];
87
- dataGroupsArray.forEach(dataGroupResource => {
88
- const dataFields = [];
89
- if (!dataGroupResource.fields._embedded) {
90
- return; // continue
91
- }
92
- const fields = [];
93
- Object.keys(dataGroupResource.fields._embedded).forEach(localizedFields => {
94
- fields.push(...dataGroupResource.fields._embedded[localizedFields]);
95
- });
96
- fields.sort((a, b) => a.order - b.order);
97
- dataFields.push(...fields.map(dataFieldResource => this._fieldConverter.toClass(dataFieldResource)));
98
- result.push({
99
- fields: dataFields,
100
- stretch: dataGroupResource.stretch,
101
- title: dataGroupResource.title,
102
- layout: dataGroupResource.layout,
103
- alignment: dataGroupResource.alignment
104
- });
105
- });
106
- return result;
107
- }));
108
- }
109
70
  /**
110
71
  * Set task data
111
72
  * POST
@@ -208,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
208
169
  providedIn: 'root'
209
170
  }]
210
171
  }], ctorParameters: function () { return [{ type: i1.ResourceProvider }, { type: i2.ConfigurationService }, { type: i3.FieldConverterService }, { type: i4.LoggerService }]; } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLXRhc2stcmVzb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wdWJsaWMvcHVibGljLXRhc2stcmVzb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRzdELE9BQU8sRUFBMkIsZ0JBQWdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQVM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQU9uRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0lBRTlELFlBQXNCLFNBQTJCLEVBQzNCLGNBQW9DLEVBQ3BDLGVBQXNDLEVBQ3RDLE9BQXNCO1FBQ3hDLEtBQUssQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUp6QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFFNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlDQUF5QztJQUNsQyxVQUFVLENBQUMsTUFBYztRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFB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Z3VsYXIvY29yZSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uL3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7UGFyYW1zLCBQcm92aWRlclByb2dyZXNzLCBSZXNvdXJjZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9yZXNvdXJjZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyLXR5cGUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRDb250YWluZXJ9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9jaGFuZ2VkLWZpZWxkLWNvbnRhaW5lcic7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdEJvZHl9IGZyb20gJy4uLy4uL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge1Rhc2tSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ludGVyZmFjZS90YXNrLXJlZmVyZW5jZSc7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL2RhdGEtZ3JvdXBzJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge1Rhc2t9IGZyb20gJy4uLy4uL2ludGVyZmFjZS90YXNrJztcbmltcG9ydCB7SHR0cEV2ZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UsIE1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtHZXREYXRhR3JvdXBzRXZlbnRPdXRjb21lfSBmcm9tICcuLi8uLi8uLi9ldmVudC9tb2RlbC9ldmVudC1vdXRjb21lcy9kYXRhLW91dGNvbWVzL2dldC1kYXRhLWdyb3Vwcy1ldmVudC1vdXRjb21lJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQdWJsaWNUYXNrUmVzb3VyY2VTZXJ2aWNlIGV4dGVuZHMgVGFza1Jlc291cmNlU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3Byb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9maWVsZENvbnZlcnRlcjogRmllbGRDb252ZXJ0ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF9wcm92aWRlciwgX2NvbmZpZ1NlcnZpY2UsIF9maWVsZENvbnZlcnRlciwgX2xvZ2dlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWduIHRhc2tcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvcHVibGljL3Rhc2svYXNzaWduLzppZFxuICAgIHB1YmxpYyBhc3NpZ25UYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3ZpZGVyLmdldCQoJ3B1YmxpYy90YXNrL2Fzc2lnbi8nICsgdGFza0lkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbmNlbCB0YXNrXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrL2NhbmNlbC86aWRcbiAgICBwdWJsaWMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm92aWRlci5nZXQkKCdwdWJsaWMvdGFzay9jYW5jZWwvJyArIHRhc2tJZCwgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2ggdGFza1xuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS9wdWJsaWMvdGFzay9maW5pc2gvOmlkXG4gICAgcHVibGljIGZpbmlzaFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIuZ2V0JCgncHVibGljL3Rhc2svZmluaXNoLycgKyB0YXNrSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRhc2tzIG9mIHRoZSBjYXNlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrL2Nhc2UvOmlkXG4gICAgcHVibGljIGdldEFsbFRhc2tzQnlDYXNlKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUYXNrUmVmZXJlbmNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIuZ2V0JCgncHVibGljL3Rhc2svY2FzZS8nICsgY2FzZUlkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGFzayBkYXRhXG4gICAgICpcbiAgICAgKiBHRVRcbiAgICAgKlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHBhcnNlIHRoZSByZXNwb25zZSB5b3Vyc2VsZiB1c2UgW2dldERhdGFde0BsaW5rIFRhc2tSZXNvdXJjZVNlcnZpY2UjZ2V0RGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRoZSByYXcgYmFja2VuZCByZXNwb25zZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHByb2Nlc3NpbmdcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvcHVibGljL3Rhc2svOmlkL2RhdGFcbiAgICBwdWJsaWMgcmF3R2V0RGF0YSh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm92aWRlci5nZXQkKCdwdWJsaWMvdGFzay8nICsgdGFza0lkICsgJy9kYXRhJywgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICdkYXRhR3JvdXBzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgR2V0IGFsbCB0YXNrIGRhdGFcbiAgICAgKlxuICAgICAqICBHRVRcbiAgICAgKlxuICAgICAqICBJZiB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSByYXcgYmFja2VuZCByZXNwb25zZSB1c2UgW3Jhd0dldERhdGFde0BsaW5rIFRhc2tSZXNvdXJjZVNlcnZpY2UjcmF3R2V0RGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhc2sgd2hvJ3MgZGF0YSBzaG91bGQgYmUgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlclxuICAgICAqIEByZXR1cm5zIHByb2Nlc3NlZCBkYXRhIGdyb3VwcyBvZiB0aGUgZ2l2ZW4gdGFzay4gSWYgdGhlIHRhc2sgaGFzIG5vIGRhdGEgYW4gZW1wdHkgYXJyYXkgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YSh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8RGF0YUdyb3VwPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdHZXREYXRhKHRhc2tJZCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2VPdXRjb21lOiBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXBzQXJyYXkgPSB0aGlzLmNoYW5nZVR5cGUoKHJlc3BvbnNlT3V0Y29tZS5vdXRjb21lIGFzIEdldERhdGFHcm91cHNFdmVudE91dGNvbWUpLmRhdGEsICdkYXRhR3JvdXBzJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFHcm91cHNBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBkYXRhR3JvdXBzQXJyYXkuZm9yRWFjaChkYXRhR3JvdXBSZXNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFGaWVsZHM6IEFycmF5PERhdGFGaWVsZDxhbnk+PiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFHcm91cFJlc291cmNlLmZpZWxkcy5fZW1iZWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YUdyb3VwUmVzb3VyY2UuZmllbGRzLl9lbWJlZGRlZCkuZm9yRWFjaChsb2NhbGl6ZWRGaWVsZHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uZGF0YUdyb3VwUmVzb3VyY2UuZmllbGRzLl9lbWJlZGRlZFtsb2NhbGl6ZWRGaWVsZHNdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZHMucHVzaCguLi5maWVsZHMubWFwKGRhdGFGaWVsZFJlc291cmNlID0+IHRoaXMuX2ZpZWxkQ29udmVydGVyLnRvQ2xhc3MoZGF0YUZpZWxkUmVzb3VyY2UpKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczogZGF0YUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGRhdGFHcm91cFJlc291cmNlLnN0cmV0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YUdyb3VwUmVzb3VyY2UudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ6IGRhdGFHcm91cFJlc291cmNlLmxheW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZGF0YUdyb3VwUmVzb3VyY2UuYWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0YXNrIGRhdGFcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrLzppZC9kYXRhXG4gICAgcHVibGljIHNldERhdGEodGFza0lkOiBzdHJpbmcsIGJvZHk6IFRhc2tTZXREYXRhUmVxdWVzdEJvZHkpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIucG9zdCQoJ3B1YmxpYy90YXNrLycgKyB0YXNrSWQgKyAnL2RhdGEnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaGVzIHRhc2tzIHRyb3VnaCB0aGUgTW9uZ28gZW5kcG9pbnQuXG4gICAgICogUE9TVFxuICAgICAqIEBwYXJhbSBmaWx0ZXJQYXJhbSBmaWx0ZXIgdXNlZCB0byBzZWFyY2ggdGhlIHRhc2tzLiBNdXN0IGJlIG9mIHR5cGUgYFRBU0tgLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgYHF1ZXJ5YCBhdHRyaWJ1dGUgb2YgdGhlIGZpbHRlciBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgZW5kcG9pbnQuXG4gICAgICogQXR0ZW1wdGluZyB0byB1c2UgaXQgd2lsbCBkaXNwbGF5IGEgd2FybmluZyBhbmQgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcmVxdWVzdCBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrL3NlYXJjaFxuICAgIHB1YmxpYyBnZXRUYXNrcyhmaWx0ZXJQYXJhbTogRmlsdGVyLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2U8VGFzaz4+IHtcbiAgICAgICAgaWYgKGZpbHRlclBhcmFtLnR5cGUgIT09IEZpbHRlclR5cGUuVEFTSykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCBmaWx0ZXIgZG9lc25cXCd0IGhhdmUgdHlwZSBUQVNLJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyUGFyYW0uYm9keUNvbnRhaW5zUXVlcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRUYXNrcyBlbmRwb2ludCBjYW5ub3QgYmUgcXVlcmllZCB3aXRoIGZpbHRlcnMgdGhhdCBjb250YWluIHRoZSBcXCdxdWVyeVxcJyBhdHRyaWJ1dGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcyA9IFJlc291cmNlUHJvdmlkZXIuY29tYmluZVBhcmFtcyhmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0UGFyYW1zKCksIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm92aWRlci5wb3N0JCgncHVibGljL3Rhc2svc2VhcmNoJywgdGhpcy5TRVJWRVJfVVJMLCBmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0Qm9keSgpLCBwYXJhbXMpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmdldFJlc291cmNlUGFnZTxUYXNrPihyLCAndGFza3MnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIHRhc2sgZmlsZSBmaWVsZCB2YWx1ZVxuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9maWxlLzpmaWVsZCAgICAgICAgIC0gZm9yIGZpbGUgZmllbGRcbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay86aWQvZmlsZS86ZmllbGQvOm5hbWUgICAtIGZvciBmaWxlIGxpc3QgZmllbGRcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKHRhc2tJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBCbG9iPiB7XG4gICAgICAgIGNvbnN0IHVybCA9ICEhbmFtZSA/IGBwdWJsaWMvdGFzay8ke3Rhc2tJZH0vZmlsZS8ke2ZpZWxkSWR9LyR7bmFtZX1gIDogYHB1YmxpYy90YXNrLyR7dGFza0lkfS9maWxlLyR7ZmllbGRJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXRCbG9iJCh1cmwsIHRoaXMuU0VSVkVSX1VSTCkucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlUHJvdmlkZXIuZ2V0UHJvZ3Jlc3MoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWQgZmlsZSBpbnRvIHRoZSB0YXNrXG4gICAgICogUE9TVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9maWxlLzpmaWVsZCAgICAgLSBmb3IgZmlsZSBmaWVsZFxuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9maWxlcy86ZmllbGQgICAgLSBmb3IgZmlsZSBsaXN0IGZpZWxkXG4gICAgcHVibGljIHVwbG9hZEZpbGUodGFza0lkOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBtdWx0aXBsZUZpbGVzOiBib29sZWFuKTpcbiAgICAgICAgT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIGNvbnN0IHVybCA9ICFtdWx0aXBsZUZpbGVzID8gYHB1YmxpYy90YXNrLyR7dGFza0lkfS9maWxlLyR7ZmllbGRJZH1gIDogYHB1YmxpYy90YXNrLyR7dGFza0lkfS9maWxlcy8ke2ZpZWxkSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdFdpdGhFdmVudCQ8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPih1cmwsIHRoaXMuU0VSVkVSX1VSTCwgYm9keSkucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVByb3ZpZGVyLmdldFByb2dyZXNzKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGZpbGUgZnJvbSB0aGUgdGFza1xuICAgICAqIERFTEVURVxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVGaWxlKHRhc2tJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICBjb25zdCB1cmwgPSAhIW5hbWUgPyBgcHVibGljL3Rhc2svJHt0YXNrSWR9L2ZpbGUvJHtmaWVsZElkfS8ke25hbWV9YCA6IGBwdWJsaWMvdGFzay8ke3Rhc2tJZH0vZmlsZS8ke2ZpZWxkSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZGVsZXRlJCh1cmwsIHRoaXMuU0VSVkVSX1VSTCkucGlwZShcbiAgICAgICAgICAgIG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIHRhc2sgZmlsZSBwcmV2aWV3IGZvciBmaWVsZCB2YWx1ZVxuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9maWxlX3ByZXZpZXcvOmZpZWxkXG4gICAgcHVibGljIGRvd25sb2FkRmlsZVByZXZpZXcodGFza0lkOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UHJvdmlkZXJQcm9ncmVzcyB8IEJsb2I+IHtcbiAgICAgICAgY29uc3QgdXJsID0gJ3B1YmxpYy90YXNrLycgKyB0YXNrSWQgKyAnL2ZpbGVfcHJldmlldy8nICsgZmllbGRJZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0QmxvYiQodXJsLCB0aGlzLlNFUlZFUl9VUkwpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVByb3ZpZGVyLmdldFByb2dyZXNzKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLXRhc2stcmVzb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wdWJsaWMvcHVibGljLXRhc2stcmVzb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRzdELE9BQU8sRUFBMkIsZ0JBQWdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQVE5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQU9uRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0lBRTlELFlBQXNCLFNBQTJCLEVBQzNCLGNBQW9DLEVBQ3BDLGVBQXNDLEVBQ3RDLE9BQXNCO1FBQ3hDLEtBQUssQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUp6QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFFNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlDQUF5QztJQUNsQyxVQUFVLENBQUMsTUFBYztRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFB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QUFNLEdBQUcsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNoQixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0I7b0JBQy9CLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLGFBQWEsQ0FBQyxRQUFRO29CQUN2QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCO29CQUNJLE9BQU8sU0FBUyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUMzQixDQUFDO0lBQ04sQ0FBQzs7dUhBL0tRLHlCQUF5QjsySEFBekIseUJBQXlCLGNBRnRCLE1BQU07NEZBRVQseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uL3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7UGFyYW1zLCBQcm92aWRlclByb2dyZXNzLCBSZXNvdXJjZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9yZXNvdXJjZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyLXR5cGUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtUYXNrU2V0RGF0YVJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdGFzay1zZXQtZGF0YS1yZXF1ZXN0LWJvZHknO1xuaW1wb3J0IHtUYXNrUmVmZXJlbmNlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdGFzay1yZWZlcmVuY2UnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtUYXNrfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvdGFzayc7XG5pbXBvcnQge0h0dHBFdmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlLCBNZXNzYWdlUmVzb3VyY2V9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7R2V0RGF0YUdyb3Vwc0V2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvZGF0YS1vdXRjb21lcy9nZXQtZGF0YS1ncm91cHMtZXZlbnQtb3V0Y29tZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHVibGljVGFza1Jlc291cmNlU2VydmljZSBleHRlbmRzIFRhc2tSZXNvdXJjZVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9wcm92aWRlcjogUmVzb3VyY2VQcm92aWRlcixcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXI6IEZpZWxkQ29udmVydGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZ2dlcjogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICBzdXBlcihfcHJvdmlkZXIsIF9jb25maWdTZXJ2aWNlLCBfZmllbGRDb252ZXJ0ZXIsIF9sb2dnZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbiB0YXNrXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrL2Fzc2lnbi86aWRcbiAgICBwdWJsaWMgYXNzaWduVGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm92aWRlci5nZXQkKCdwdWJsaWMvdGFzay9hc3NpZ24vJyArIHRhc2tJZCwgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGFza1xuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS9wdWJsaWMvdGFzay9jYW5jZWwvOmlkXG4gICAgcHVibGljIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIuZ2V0JCgncHVibGljL3Rhc2svY2FuY2VsLycgKyB0YXNrSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRhc2tcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvcHVibGljL3Rhc2svZmluaXNoLzppZFxuICAgIHB1YmxpYyBmaW5pc2hUYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3ZpZGVyLmdldCQoJ3B1YmxpYy90YXNrL2ZpbmlzaC8nICsgdGFza0lkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0YXNrcyBvZiB0aGUgY2FzZVxuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS9wdWJsaWMvdGFzay9jYXNlLzppZFxuICAgIHB1YmxpYyBnZXRBbGxUYXNrc0J5Q2FzZShjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8VGFza1JlZmVyZW5jZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3ZpZGVyLmdldCQoJ3B1YmxpYy90YXNrL2Nhc2UvJyArIGNhc2VJZCwgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHRhc2sgZGF0YVxuICAgICAqXG4gICAgICogR0VUXG4gICAgICpcbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBwYXJzZSB0aGUgcmVzcG9uc2UgeW91cnNlbGYgdXNlIFtnZXREYXRhXXtAbGluayBUYXNrUmVzb3VyY2VTZXJ2aWNlI2dldERhdGF9IGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgcmF3IGJhY2tlbmQgcmVzcG9uc2Ugd2l0aG91dCBhbnkgYWRkaXRpb25hbCBwcm9jZXNzaW5nXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3B1YmxpYy90YXNrLzppZC9kYXRhXG4gICAgcHVibGljIHJhd0dldERhdGEodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIuZ2V0JCgncHVibGljL3Rhc2svJyArIHRhc2tJZCArICcvZGF0YScsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAnZGF0YUdyb3VwcycpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRhc2sgZGF0YVxuICAgICAqIFBPU1RcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvcHVibGljL3Rhc2svOmlkL2RhdGFcbiAgICBwdWJsaWMgc2V0RGF0YSh0YXNrSWQ6IHN0cmluZywgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm92aWRlci5wb3N0JCgncHVibGljL3Rhc2svJyArIHRhc2tJZCArICcvZGF0YScsIHRoaXMuU0VSVkVSX1VSTCwgYm9keSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgdGFza3MgdHJvdWdoIHRoZSBNb25nbyBlbmRwb2ludC5cbiAgICAgKiBQT1NUXG4gICAgICogQHBhcmFtIGZpbHRlclBhcmFtIGZpbHRlciB1c2VkIHRvIHNlYXJjaCB0aGUgdGFza3MuIE11c3QgYmUgb2YgdHlwZSBgVEFTS2AuXG4gICAgICogTm90ZSB0aGF0IHRoZSBgcXVlcnlgIGF0dHJpYnV0ZSBvZiB0aGUgZmlsdGVyIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBlbmRwb2ludC5cbiAgICAgKiBBdHRlbXB0aW5nIHRvIHVzZSBpdCB3aWxsIGRpc3BsYXkgYSB3YXJuaW5nIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCByZXF1ZXN0IHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvcHVibGljL3Rhc2svc2VhcmNoXG4gICAgcHVibGljIGdldFRhc2tzKGZpbHRlclBhcmFtOiBGaWx0ZXIsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8UGFnZTxUYXNrPj4ge1xuICAgICAgICBpZiAoZmlsdGVyUGFyYW0udHlwZSAhPT0gRmlsdGVyVHlwZS5UQVNLKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIGZpbHRlciBkb2VzblxcJ3QgaGF2ZSB0eXBlIFRBU0snKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbS5ib2R5Q29udGFpbnNRdWVyeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFRhc2tzIGVuZHBvaW50IGNhbm5vdCBiZSBxdWVyaWVkIHdpdGggZmlsdGVycyB0aGF0IGNvbnRhaW4gdGhlIFxcJ3F1ZXJ5XFwnIGF0dHJpYnV0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zID0gUmVzb3VyY2VQcm92aWRlci5jb21iaW5lUGFyYW1zKGZpbHRlclBhcmFtLmdldFJlcXVlc3RQYXJhbXMoKSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3ZpZGVyLnBvc3QkKCdwdWJsaWMvdGFzay9zZWFyY2gnLCB0aGlzLlNFUlZFUl9VUkwsIGZpbHRlclBhcmFtLmdldFJlcXVlc3RCb2R5KCksIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuZ2V0UmVzb3VyY2VQYWdlPFRhc2s+KHIsICd0YXNrcycpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgdGFzayBmaWxlIGZpZWxkIHZhbHVlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkICAgICAgICAgLSBmb3IgZmlsZSBmaWVsZFxuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9maWxlLzpmaWVsZC86bmFtZSAgIC0gZm9yIGZpbGUgbGlzdCBmaWVsZFxuICAgIHB1YmxpYyBkb3dubG9hZEZpbGUodGFza0lkOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZywgbmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8UHJvdmlkZXJQcm9ncmVzcyB8IEJsb2I+IHtcbiAgICAgICAgY29uc3QgdXJsID0gISFuYW1lID8gYHB1YmxpYy90YXNrLyR7dGFza0lkfS9maWxlLyR7ZmllbGRJZH0vJHtuYW1lfWAgOiBgcHVibGljL3Rhc2svJHt0YXNrSWR9L2ZpbGUvJHtmaWVsZElkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBmaWxlIGludG8gdGhlIHRhc2tcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkICAgICAtIGZvciBmaWxlIGZpZWxkXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVzLzpmaWVsZCAgICAtIGZvciBmaWxlIGxpc3QgZmllbGRcbiAgICBwdWJsaWMgdXBsb2FkRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG11bHRpcGxlRmlsZXM6IGJvb2xlYW4pOlxuICAgICAgICBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gIW11bHRpcGxlRmlsZXMgPyBgcHVibGljL3Rhc2svJHt0YXNrSWR9L2ZpbGUvJHtmaWVsZElkfWAgOiBgcHVibGljL3Rhc2svJHt0YXNrSWR9L2ZpbGVzLyR7ZmllbGRJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0V2l0aEV2ZW50JDxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+KHVybCwgdGhpcy5TRVJWRVJfVVJMLCBib2R5KS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlUHJvdmlkZXIuZ2V0UHJvZ3Jlc3MoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgZmlsZSBmcm9tIHRoZSB0YXNrXG4gICAgICogREVMRVRFXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUZpbGUodGFza0lkOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZywgbmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8TWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIGNvbnN0IHVybCA9ICEhbmFtZSA/IGBwdWJsaWMvdGFzay8ke3Rhc2tJZH0vZmlsZS8ke2ZpZWxkSWR9LyR7bmFtZX1gIDogYHB1YmxpYy90YXNrLyR7dGFza0lkfS9maWxlLyR7ZmllbGRJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5kZWxldGUkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgdGFzayBmaWxlIHByZXZpZXcgZm9yIGZpZWxkIHZhbHVlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVfcHJldmlldy86ZmllbGRcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlUHJldmlldyh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgQmxvYj4ge1xuICAgICAgICBjb25zdCB1cmwgPSAncHVibGljL3Rhc2svJyArIHRhc2tJZCArICcvZmlsZV9wcmV2aWV3LycgKyBmaWVsZElkO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXRCbG9iJCh1cmwsIHRoaXMuU0VSVkVSX1VSTCkucGlwZShcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlUHJvdmlkZXIuZ2V0UHJvZ3Jlc3MoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -171,6 +171,9 @@ export class TaskResourceService extends AbstractResourceService {
171
171
  */
172
172
  getData(taskId) {
173
173
  return this.rawGetData(taskId).pipe(map((responseOutcome) => {
174
+ if (responseOutcome.error) {
175
+ throw new Error(responseOutcome.error);
176
+ }
174
177
  const dataGroupsArray = this.changeType(responseOutcome.outcome.data, 'dataGroups');
175
178
  if (!Array.isArray(dataGroupsArray)) {
176
179
  return [];
@@ -291,4 +294,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
291
294
  providedIn: 'root'
292
295
  }]
293
296
  }], ctorParameters: function () { return [{ type: i1.ResourceProvider }, { type: i2.ConfigurationService }, { type: i3.FieldConverterService }, { type: i4.LoggerService }]; } });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1yZXNvdXJjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBMkIsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUl4RixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFLbkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7Ozs7OztBQVF2RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBRTVELFlBQVksUUFBMEIsRUFDMUIsYUFBbUMsRUFDekIsZUFBc0MsRUFDdEMsT0FBc0I7UUFDeEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFGckIsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFFNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsV0FBbUI7UUFDNUIsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcs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bUJBQW1CLENBQUMsTUFBYyxFQUFFLE9BQWU7UUFDdEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUM3RCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDUixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLEtBQUssYUFBYSxDQUFDLGdCQUFnQjtvQkFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLEtBQUssYUFBYSxDQUFDLFFBQVE7b0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDdEI7b0JBQ0ksT0FBTyxTQUFTLENBQUM7YUFDeEI7UUFDTCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQzNCLENBQUM7SUFDTixDQUFDOztpSEFyVFEsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs0RkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFyYW1zLCBQcm92aWRlclByb2dyZXNzLCBSZXNvdXJjZVByb3ZpZGVyfSBmcm9tICcuLi9yZXNvdXJjZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvdW50fSBmcm9tICcuLi9pbnRlcmZhY2UvY291bnQnO1xuaW1wb3J0IHtFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UsIE1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUYXNrUmVmZXJlbmNlfSBmcm9tICcuLi9pbnRlcmZhY2UvdGFzay1yZWZlcmVuY2UnO1xuaW1wb3J0IHtUYXNrfSBmcm9tICcuLi9pbnRlcmZhY2UvdGFzayc7XG5pbXBvcnQge0NvdW50U2VydmljZX0gZnJvbSAnLi4vYWJzdHJhY3QtZW5kcG9pbnQvY291bnQtc2VydmljZSc7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9maWx0ZXInO1xuaW1wb3J0IHtGaWx0ZXJUeXBlfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlci10eXBlJztcbmltcG9ydCB7SHR0cEV2ZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtQYWdlfSBmcm9tICcuLi9pbnRlcmZhY2UvcGFnZSc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1NldERhdGFSZXF1ZXN0Qm9keX0gZnJvbSAnLi4vaW50ZXJmYWNlL3Rhc2stc2V0LWRhdGEtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7QWJzdHJhY3RSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uL2Fic3RyYWN0LWVuZHBvaW50L2Fic3RyYWN0LXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtHZXREYXRhR3JvdXBzRXZlbnRPdXRjb21lfSBmcm9tICcuLi8uLi9ldmVudC9tb2RlbC9ldmVudC1vdXRjb21lcy9kYXRhLW91dGNvbWVzL2dldC1kYXRhLWdyb3Vwcy1ldmVudC1vdXRjb21lJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYXNrUmVzb3VyY2VTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RSZXNvdXJjZVNlcnZpY2UgaW1wbGVtZW50cyBDb3VudFNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdmlkZXI6IFJlc291cmNlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9maWVsZENvbnZlcnRlcjogRmllbGRDb252ZXJ0ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCd0YXNrJywgcHJvdmlkZXIsIGNvbmZpZ1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBDb3VudCB0YXNrcyBieSBwcm92aWRlZCBjcml0ZXJpYVxuICAgICAqICBQT1NUXG4gICAgICogIHt7YmFzZVVybH19L2FwaS90YXNrL2NvdW50XG4gICAgICovXG4gICAgcHVibGljIGNvdW50KGZpbHRlclBhcmFtOiBGaWx0ZXIpOiBPYnNlcnZhYmxlPENvdW50PiB7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbS50eXBlICE9PSBGaWx0ZXJUeXBlLlRBU0spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgZmlsdGVyIGRvZXNuXFwndCBoYXZlIHR5cGUgVEFTSycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCd0YXNrL2NvdW50JywgdGhpcy5TRVJWRVJfVVJMLCBmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0Qm9keSgpLCBmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0UGFyYW1zKCkpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGFza3NcbiAgICAgKiBHRVRcbiAgICAgKiB7e2Jhc2VVcmx9fS9hcGkvdGFza1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBbGxUYXNrKCk6IE9ic2VydmFibGU8QXJyYXk8VGFzaz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzaycsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAndGFza3MnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbiB0YXNrXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svYXNzaWduLzppZFxuICAgIHB1YmxpYyBhc3NpZ25UYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzay9hc3NpZ24vJyArIHRhc2tJZCwgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGFza1xuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL2NhbmNlbC86aWRcbiAgICBwdWJsaWMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2svY2FuY2VsLycgKyB0YXNrSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZWdhdGUgdGFza1xuICAgICAqIFBPU1RcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9kZWxlZ2F0ZS86aWRcbiAgICBwdWJsaWMgZGVsZWdhdGVUYXNrKHRhc2tJZDogc3RyaW5nLCBib2R5OiBvYmplY3QpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgndGFzay9kZWxlZ2F0ZS8nICsgdGFza0lkLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHksIHVuZGVmaW5lZCwgeydDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbid9KVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2ggdGFza1xuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL2ZpbmlzaC86aWRcbiAgICBwdWJsaWMgZmluaXNoVGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2svZmluaXNoLycgKyB0YXNrSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgdGFza3MgdHJvdWdoIHRoZSBFbGFzdGljIGVuZHBvaW50LlxuICAgICAqIFBPU1RcbiAgICAgKiBAcGFyYW0gZmlsdGVyUGFyYW0gZmlsdGVyIHVzZWQgdG8gc2VhcmNoIHRoZSB0YXNrcy4gTXVzdCBiZSBvZiB0eXBlIGBUQVNLYC5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL3NlYXJjaF9lc1xuICAgIHB1YmxpYyBzZWFyY2hUYXNrKGZpbHRlclBhcmFtOiBGaWx0ZXIsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8UGFnZTxUYXNrPj4ge1xuICAgICAgICBpZiAoZmlsdGVyUGFyYW0udHlwZSAhPT0gRmlsdGVyVHlwZS5UQVNLKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIGZpbHRlciBkb2VzblxcJ3QgaGF2ZSB0eXBlIFRBU0snKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXMgPSBSZXNvdXJjZVByb3ZpZGVyLmNvbWJpbmVQYXJhbXMoZmlsdGVyUGFyYW0uZ2V0UmVxdWVzdFBhcmFtcygpLCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgndGFzay9zZWFyY2hfZXMnLCB0aGlzLlNFUlZFUl9VUkwsIGZpbHRlclBhcmFtLmdldFJlcXVlc3RCb2R5KCksIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuZ2V0UmVzb3VyY2VQYWdlPFRhc2s+KHIsICd0YXNrcycpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgdGFza3MgdHJvdWdoIHRoZSBNb25nbyBlbmRwb2ludC5cbiAgICAgKiBQT1NUXG4gICAgICogQHBhcmFtIGZpbHRlclBhcmFtIGZpbHRlciB1c2VkIHRvIHNlYXJjaCB0aGUgdGFza3MuIE11c3QgYmUgb2YgdHlwZSBgVEFTS2AuXG4gICAgICogTm90ZSB0aGF0IHRoZSBgcXVlcnlgIGF0dHJpYnV0ZSBvZiB0aGUgZmlsdGVyIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBlbmRwb2ludC5cbiAgICAgKiBBdHRlbXB0aW5nIHRvIHVzZSBpdCB3aWxsIGRpc3BsYXkgYSB3YXJuaW5nIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCByZXF1ZXN0IHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9zZWFyY2hcbiAgICBwdWJsaWMgZ2V0VGFza3MoZmlsdGVyUGFyYW06IEZpbHRlciwgcGFyYW1zPzogUGFyYW1zKTogT2JzZXJ2YWJsZTxQYWdlPFRhc2s+PiB7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbS50eXBlICE9PSBGaWx0ZXJUeXBlLlRBU0spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgZmlsdGVyIGRvZXNuXFwndCBoYXZlIHR5cGUgVEFTSycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlclBhcmFtLmJvZHlDb250YWluc1F1ZXJ5KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0VGFza3MgZW5kcG9pbnQgY2Fubm90IGJlIHF1ZXJpZWQgd2l0aCBmaWx0ZXJzIHRoYXQgY29udGFpbiB0aGUgXFwncXVlcnlcXCcgYXR0cmlidXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbXMgPSBSZXNvdXJjZVByb3ZpZGVyLmNvbWJpbmVQYXJhbXMoZmlsdGVyUGFyYW0uZ2V0UmVxdWVzdFBhcmFtcygpLCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgndGFzay9zZWFyY2gnLCB0aGlzLlNFUlZFUl9VUkwsIGZpbHRlclBhcmFtLmdldFJlcXVlc3RCb2R5KCksIHBhcmFtcylcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuZ2V0UmVzb3VyY2VQYWdlPFRhc2s+KHIsICd0YXNrcycpKSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0gQ0FTRSAtLS0tLS0tLS0tXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCB0YXNrcyBieSBjYXNlc1xuICAgICAqIFBPU1RcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9jYXNlXG4gICAgcHVibGljIGdldEFsbFRhc2tzQnlDYXNlcyhib2R5OiBvYmplY3QpOiBPYnNlcnZhYmxlPEFycmF5PFRhc2s+PiB7IC8vIFRPRE86ID8/XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCd0YXNrL2Nhc2UnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgJ3Rhc2tzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGFza3Mgb2YgdGhlIGNhc2VcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9jYXNlLzppZFxuICAgIHB1YmxpYyBnZXRBbGxUYXNrc0J5Q2FzZShjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8VGFza1JlZmVyZW5jZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzay9jYXNlLycgKyBjYXNlSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0gTVkgVGFzayAtLS0tLS0tLS0tXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCB0YXNrcyBhc3NpZ25lZCB0byBsb2dnZWQgdXNlclxuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL215XG4gICAgcHVibGljIGdldEFsbE15VGFza3MoKTogT2JzZXJ2YWJsZTxBcnJheTxUYXNrPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCd0YXNrL215JywgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGZpbmlzaGVkIHRhc2tzIGJ5IGxvZ2dlZCB1c2VyXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svbXkvZmluaXNoZWRcbiAgICBwdWJsaWMgZ2V0QWxsRmluaXNoZWRUYXNrKCk6IE9ic2VydmFibGU8QXJyYXk8VGFzaz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzay9teS9maW5pc2hlZCcsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCB0YXNrIGRhdGFcbiAgICAgKlxuICAgICAqIEdFVFxuICAgICAqXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gcGFyc2UgdGhlIHJlc3BvbnNlIHlvdXJzZWxmIHVzZSBbZ2V0RGF0YV17QGxpbmsgVGFza1Jlc291cmNlU2VydmljZSNnZXREYXRhfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIHJhdyBiYWNrZW5kIHJlc3BvbnNlIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgcHJvY2Vzc2luZ1xuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrLzppZC9kYXRhXG4gICAgcHVibGljIHJhd0dldERhdGEodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCd0YXNrLycgKyB0YXNrSWQgKyAnL2RhdGEnLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBHZXQgYWxsIHRhc2sgZGF0YVxuICAgICAqXG4gICAgICogIEdFVFxuICAgICAqXG4gICAgICogIElmIHlvdSB3YW50IHRvIHByb2Nlc3MgdGhlIHJhdyBiYWNrZW5kIHJlc3BvbnNlIHVzZSBbcmF3R2V0RGF0YV17QGxpbmsgVGFza1Jlc291cmNlU2VydmljZSNyYXdHZXREYXRhfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhc2tJZCBJRCBvZiB0aGUgdGFzayB3aG8ncyBkYXRhIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyXG4gICAgICogQHJldHVybnMgcHJvY2Vzc2VkIGRhdGEgZ3JvdXBzIG9mIHRoZSBnaXZlbiB0YXNrLiBJZiB0aGUgdGFzayBoYXMgbm8gZGF0YSBhbiBlbXB0eSBhcnJheSB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREYXRhKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxEYXRhR3JvdXA+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd0dldERhdGEodGFza0lkKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZU91dGNvbWU6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFHcm91cHNBcnJheSA9IHRoaXMuY2hhbmdlVHlwZSgocmVzcG9uc2VPdXRjb21lLm91dGNvbWUgYXMgR2V0RGF0YUdyb3Vwc0V2ZW50T3V0Y29tZSkuZGF0YSwgJ2RhdGFHcm91cHMnKTtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YUdyb3Vwc0FycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGFHcm91cHNBcnJheS5mb3JFYWNoKGRhdGFHcm91cFJlc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUZpZWxkczogQXJyYXk8RGF0YUZpZWxkPGFueT4+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YUdyb3VwUmVzb3VyY2UuZmllbGRzLl9lbWJlZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhR3JvdXBSZXNvdXJjZS5maWVsZHMuX2VtYmVkZGVkKS5mb3JFYWNoKGxvY2FsaXplZEZpZWxkcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCguLi5kYXRhR3JvdXBSZXNvdXJjZS5maWVsZHMuX2VtYmVkZGVkW2xvY2FsaXplZEZpZWxkc10pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkcy5wdXNoKC4uLmZpZWxkcy5tYXAoZGF0YUZpZWxkUmVzb3VyY2UgPT4gdGhpcy5fZmllbGRDb252ZXJ0ZXIudG9DbGFzcyhkYXRhRmllbGRSZXNvdXJjZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUdyb3VwT2JqZWN0OiBEYXRhR3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IGRhdGFGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBkYXRhR3JvdXBSZXNvdXJjZS5zdHJldGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGFHcm91cFJlc291cmNlLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiBkYXRhR3JvdXBSZXNvdXJjZS5sYXlvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGRhdGFHcm91cFJlc291cmNlLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFHcm91cFJlc291cmNlLnBhcmVudFRhc2tJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhR3JvdXBPYmplY3QucGFyZW50VGFza0lkID0gZGF0YUdyb3VwUmVzb3VyY2UucGFyZW50VGFza0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUdyb3VwT2JqZWN0LnBhcmVudFRyYW5zaXRpb25JZCA9IGRhdGFHcm91cFJlc291cmNlLnBhcmVudFRyYW5zaXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cE9iamVjdC5wYXJlbnRUYXNrUmVmSWQgPSBkYXRhR3JvdXBSZXNvdXJjZS5wYXJlbnRUYXNrUmVmSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhR3JvdXBPYmplY3QubmVzdGluZ0xldmVsID0gZGF0YUdyb3VwUmVzb3VyY2UubmVzdGluZ0xldmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBSZXNvdXJjZS5wYXJlbnRDYXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUdyb3VwT2JqZWN0WydwYXJlbnRDYXNlSWQnXSA9IGRhdGFHcm91cFJlc291cmNlLnBhcmVudENhc2VJZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhR3JvdXBPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0YXNrIGRhdGFcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2RhdGFcbiAgICBwdWJsaWMgc2V0RGF0YSh0YXNrSWQ6IHN0cmluZywgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCd0YXNrLycgKyB0YXNrSWQgKyAnL2RhdGEnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0gRklMRSAtLS0tLS0tLS0tLS1cbiAgICAvKipcbiAgICAgKiBEb3dubG9hZCB0YXNrIGZpbGUgZmllbGQgdmFsdWVcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay86aWQvZmlsZS86ZmllbGQgICAgICAgICAtIGZvciBmaWxlIGZpZWxkXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkLzpuYW1lICAgLSBmb3IgZmlsZSBsaXN0IGZpZWxkXG4gICAgcHVibGljIGRvd25sb2FkRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgQmxvYj4ge1xuICAgICAgICBjb25zdCB1cmwgPSAhIW5hbWUgPyAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkICsgJy8nICsgbmFtZSA6ICd0YXNrLycgKyB0YXNrSWQgKyAnL2ZpbGUvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBmaWxlIGludG8gdGhlIHRhc2tcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkICAgICAtIGZvciBmaWxlIGZpZWxkXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVzLzpmaWVsZCAgICAtIGZvciBmaWxlIGxpc3QgZmllbGRcbiAgICBwdWJsaWMgdXBsb2FkRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG11bHRpcGxlRmlsZXM6IGJvb2xlYW4pOlxuICAgICAgICBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gIW11bHRpcGxlRmlsZXMgPyAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkIDogJ3Rhc2svJyArIHRhc2tJZCArICcvZmlsZXMvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3RXaXRoRXZlbnQkPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4odXJsLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBmaWxlIGZyb20gdGhlIHRhc2tcbiAgICAgKiBERUxFVEVcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gISFuYW1lID8gJ3Rhc2svJyArIHRhc2tJZCArICcvZmlsZS8nICsgZmllbGRJZCArICcvJyArIG5hbWUgOiAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5kZWxldGUkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgdGFzayBmaWxlIHByZXZpZXcgZm9yIGZpZWxkIHZhbHVlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVfcHJldmlldy86ZmllbGRcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlUHJldmlldyh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgQmxvYj4ge1xuICAgICAgICBjb25zdCB1cmwgPSAndGFzay8nICsgdGFza0lkICsgJy9maWxlX3ByZXZpZXcvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1yZXNvdXJjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBMkIsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUl4RixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFLbkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7Ozs7OztBQVF2RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBRTVELFlBQVksUUFBMEIsRUFDMUIsYUFBbUMsRUFDekIsZUFBc0MsRUFDdEMsT0FBc0I7UUFDeEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFGckIsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFFNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsV0FBbUI7UUFDNUIsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcs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QyxVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQzFDLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsK0NBQStDO0lBQ3hDLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxPQUFlO1FBQ3RELE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNoQixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0I7b0JBQy9CLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLGFBQWEsQ0FBQyxRQUFRO29CQUN2QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCO29CQUNJLE9BQU8sU0FBUyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUMzQixDQUFDO0lBQ04sQ0FBQzs7aUhBelRRLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhcmFtcywgUHJvdmlkZXJQcm9ncmVzcywgUmVzb3VyY2VQcm92aWRlcn0gZnJvbSAnLi4vcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb3VudH0gZnJvbSAnLi4vaW50ZXJmYWNlL2NvdW50JztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlLCBNZXNzYWdlUmVzb3VyY2V9IGZyb20gJy4uL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGFza1JlZmVyZW5jZX0gZnJvbSAnLi4vaW50ZXJmYWNlL3Rhc2stcmVmZXJlbmNlJztcbmltcG9ydCB7VGFza30gZnJvbSAnLi4vaW50ZXJmYWNlL3Rhc2snO1xuaW1wb3J0IHtDb3VudFNlcnZpY2V9IGZyb20gJy4uL2Fic3RyYWN0LWVuZHBvaW50L2NvdW50LXNlcnZpY2UnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9maWx0ZXItdHlwZSc7XG5pbXBvcnQge0h0dHBFdmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtGaWVsZENvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdEJvZHl9IGZyb20gJy4uL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Fic3RyYWN0UmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi9hYnN0cmFjdC1lbmRwb2ludC9hYnN0cmFjdC1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7RGF0YUdyb3VwfSBmcm9tICcuLi9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcbmltcG9ydCB7R2V0RGF0YUdyb3Vwc0V2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvZGF0YS1vdXRjb21lcy9nZXQtZGF0YS1ncm91cHMtZXZlbnQtb3V0Y29tZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGFza1Jlc291cmNlU2VydmljZSBleHRlbmRzIEFic3RyYWN0UmVzb3VyY2VTZXJ2aWNlIGltcGxlbWVudHMgQ291bnRTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXI6IEZpZWxkQ29udmVydGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZ2dlcjogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICBzdXBlcigndGFzaycsIHByb3ZpZGVyLCBjb25maWdTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ291bnQgdGFza3MgYnkgcHJvdmlkZWQgY3JpdGVyaWFcbiAgICAgKiAgUE9TVFxuICAgICAqICB7e2Jhc2VVcmx9fS9hcGkvdGFzay9jb3VudFxuICAgICAqL1xuICAgIHB1YmxpYyBjb3VudChmaWx0ZXJQYXJhbTogRmlsdGVyKTogT2JzZXJ2YWJsZTxDb3VudD4ge1xuICAgICAgICBpZiAoZmlsdGVyUGFyYW0udHlwZSAhPT0gRmlsdGVyVHlwZS5UQVNLKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIGZpbHRlciBkb2VzblxcJ3QgaGF2ZSB0eXBlIFRBU0snKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgndGFzay9jb3VudCcsIHRoaXMuU0VSVkVSX1VSTCwgZmlsdGVyUGFyYW0uZ2V0UmVxdWVzdEJvZHkoKSwgZmlsdGVyUGFyYW0uZ2V0UmVxdWVzdFBhcmFtcygpKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHRhc2tzXG4gICAgICogR0VUXG4gICAgICoge3tiYXNlVXJsfX0vYXBpL3Rhc2tcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxsVGFzaygpOiBPYnNlcnZhYmxlPEFycmF5PFRhc2s+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2snLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgJ3Rhc2tzJykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ24gdGFza1xuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL2Fzc2lnbi86aWRcbiAgICBwdWJsaWMgYXNzaWduVGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2svYXNzaWduLycgKyB0YXNrSWQsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VsIHRhc2tcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9jYW5jZWwvOmlkXG4gICAgcHVibGljIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCd0YXNrL2NhbmNlbC8nICsgdGFza0lkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGVnYXRlIHRhc2tcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svZGVsZWdhdGUvOmlkXG4gICAgcHVibGljIGRlbGVnYXRlVGFzayh0YXNrSWQ6IHN0cmluZywgYm9keTogb2JqZWN0KTogT2JzZXJ2YWJsZTxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdCQoJ3Rhc2svZGVsZWdhdGUvJyArIHRhc2tJZCwgdGhpcy5TRVJWRVJfVVJMLCBib2R5LCB1bmRlZmluZWQsIHsnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nfSlcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRhc2tcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9maW5pc2gvOmlkXG4gICAgcHVibGljIGZpbmlzaFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5nZXQkKCd0YXNrL2ZpbmlzaC8nICsgdGFza0lkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaGVzIHRhc2tzIHRyb3VnaCB0aGUgRWxhc3RpYyBlbmRwb2ludC5cbiAgICAgKiBQT1NUXG4gICAgICogQHBhcmFtIGZpbHRlclBhcmFtIGZpbHRlciB1c2VkIHRvIHNlYXJjaCB0aGUgdGFza3MuIE11c3QgYmUgb2YgdHlwZSBgVEFTS2AuXG4gICAgICogQHBhcmFtIHBhcmFtcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9zZWFyY2hfZXNcbiAgICBwdWJsaWMgc2VhcmNoVGFzayhmaWx0ZXJQYXJhbTogRmlsdGVyLCBwYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2U8VGFzaz4+IHtcbiAgICAgICAgaWYgKGZpbHRlclBhcmFtLnR5cGUgIT09IEZpbHRlclR5cGUuVEFTSykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCBmaWx0ZXIgZG9lc25cXCd0IGhhdmUgdHlwZSBUQVNLJyk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zID0gUmVzb3VyY2VQcm92aWRlci5jb21iaW5lUGFyYW1zKGZpbHRlclBhcmFtLmdldFJlcXVlc3RQYXJhbXMoKSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdCQoJ3Rhc2svc2VhcmNoX2VzJywgdGhpcy5TRVJWRVJfVVJMLCBmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0Qm9keSgpLCBwYXJhbXMpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmdldFJlc291cmNlUGFnZTxUYXNrPihyLCAndGFza3MnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaGVzIHRhc2tzIHRyb3VnaCB0aGUgTW9uZ28gZW5kcG9pbnQuXG4gICAgICogUE9TVFxuICAgICAqIEBwYXJhbSBmaWx0ZXJQYXJhbSBmaWx0ZXIgdXNlZCB0byBzZWFyY2ggdGhlIHRhc2tzLiBNdXN0IGJlIG9mIHR5cGUgYFRBU0tgLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgYHF1ZXJ5YCBhdHRyaWJ1dGUgb2YgdGhlIGZpbHRlciBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgZW5kcG9pbnQuXG4gICAgICogQXR0ZW1wdGluZyB0byB1c2UgaXQgd2lsbCBkaXNwbGF5IGEgd2FybmluZyBhbmQgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcmVxdWVzdCBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svc2VhcmNoXG4gICAgcHVibGljIGdldFRhc2tzKGZpbHRlclBhcmFtOiBGaWx0ZXIsIHBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8UGFnZTxUYXNrPj4ge1xuICAgICAgICBpZiAoZmlsdGVyUGFyYW0udHlwZSAhPT0gRmlsdGVyVHlwZS5UQVNLKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIGZpbHRlciBkb2VzblxcJ3QgaGF2ZSB0eXBlIFRBU0snKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbS5ib2R5Q29udGFpbnNRdWVyeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFRhc2tzIGVuZHBvaW50IGNhbm5vdCBiZSBxdWVyaWVkIHdpdGggZmlsdGVycyB0aGF0IGNvbnRhaW4gdGhlIFxcJ3F1ZXJ5XFwnIGF0dHJpYnV0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zID0gUmVzb3VyY2VQcm92aWRlci5jb21iaW5lUGFyYW1zKGZpbHRlclBhcmFtLmdldFJlcXVlc3RQYXJhbXMoKSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIucG9zdCQoJ3Rhc2svc2VhcmNoJywgdGhpcy5TRVJWRVJfVVJMLCBmaWx0ZXJQYXJhbS5nZXRSZXF1ZXN0Qm9keSgpLCBwYXJhbXMpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmdldFJlc291cmNlUGFnZTxUYXNrPihyLCAndGFza3MnKSkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tIENBU0UgLS0tLS0tLS0tLVxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGFza3MgYnkgY2FzZXNcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svY2FzZVxuICAgIHB1YmxpYyBnZXRBbGxUYXNrc0J5Q2FzZXMoYm9keTogb2JqZWN0KTogT2JzZXJ2YWJsZTxBcnJheTxUYXNrPj4geyAvLyBUT0RPOiA/P1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5wb3N0JCgndGFzay9jYXNlJywgdGhpcy5TRVJWRVJfVVJMLCBib2R5KVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICd0YXNrcycpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRhc2tzIG9mIHRoZSBjYXNlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svY2FzZS86aWRcbiAgICBwdWJsaWMgZ2V0QWxsVGFza3NCeUNhc2UoY2FzZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PFRhc2tSZWZlcmVuY2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2svY2FzZS8nICsgY2FzZUlkLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tIE1ZIFRhc2sgLS0tLS0tLS0tLVxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGFza3MgYXNzaWduZWQgdG8gbG9nZ2VkIHVzZXJcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay9teVxuICAgIHB1YmxpYyBnZXRBbGxNeVRhc2tzKCk6IE9ic2VydmFibGU8QXJyYXk8VGFzaz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzay9teScsIHRoaXMuU0VSVkVSX1VSTClcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCB1bmRlZmluZWQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBmaW5pc2hlZCB0YXNrcyBieSBsb2dnZWQgdXNlclxuICAgICAqIEdFVFxuICAgICAqL1xuICAgIC8vIHt7YmFzZVVybH19L2FwaS90YXNrL215L2ZpbmlzaGVkXG4gICAgcHVibGljIGdldEFsbEZpbmlzaGVkVGFzaygpOiBPYnNlcnZhYmxlPEFycmF5PFRhc2s+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3Rhc2svbXkvZmluaXNoZWQnLCB0aGlzLlNFUlZFUl9VUkwpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGFzayBkYXRhXG4gICAgICpcbiAgICAgKiBHRVRcbiAgICAgKlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHBhcnNlIHRoZSByZXNwb25zZSB5b3Vyc2VsZiB1c2UgW2dldERhdGFde0BsaW5rIFRhc2tSZXNvdXJjZVNlcnZpY2UjZ2V0RGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRoZSByYXcgYmFja2VuZCByZXNwb25zZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHByb2Nlc3NpbmdcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay86aWQvZGF0YVxuICAgIHB1YmxpYyByYXdHZXREYXRhKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndGFzay8nICsgdGFza0lkICsgJy9kYXRhJywgdGhpcy5TRVJWRVJfVVJMKVxuICAgICAgICAgICAgLnBpcGUobWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgR2V0IGFsbCB0YXNrIGRhdGFcbiAgICAgKlxuICAgICAqICBHRVRcbiAgICAgKlxuICAgICAqICBJZiB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSByYXcgYmFja2VuZCByZXNwb25zZSB1c2UgW3Jhd0dldERhdGFde0BsaW5rIFRhc2tSZXNvdXJjZVNlcnZpY2UjcmF3R2V0RGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhc2sgd2hvJ3MgZGF0YSBzaG91bGQgYmUgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlclxuICAgICAqIEByZXR1cm5zIHByb2Nlc3NlZCBkYXRhIGdyb3VwcyBvZiB0aGUgZ2l2ZW4gdGFzay4gSWYgdGhlIHRhc2sgaGFzIG5vIGRhdGEgYW4gZW1wdHkgYXJyYXkgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YSh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8RGF0YUdyb3VwPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdHZXREYXRhKHRhc2tJZCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2VPdXRjb21lOiBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VPdXRjb21lLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZU91dGNvbWUuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFHcm91cHNBcnJheSA9IHRoaXMuY2hhbmdlVHlwZSgocmVzcG9uc2VPdXRjb21lLm91dGNvbWUgYXMgR2V0RGF0YUdyb3Vwc0V2ZW50T3V0Y29tZSkuZGF0YSwgJ2RhdGFHcm91cHMnKTtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YUdyb3Vwc0FycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGFHcm91cHNBcnJheS5mb3JFYWNoKGRhdGFHcm91cFJlc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUZpZWxkczogQXJyYXk8RGF0YUZpZWxkPGFueT4+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YUdyb3VwUmVzb3VyY2UuZmllbGRzLl9lbWJlZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhR3JvdXBSZXNvdXJjZS5maWVsZHMuX2VtYmVkZGVkKS5mb3JFYWNoKGxvY2FsaXplZEZpZWxkcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCguLi5kYXRhR3JvdXBSZXNvdXJjZS5maWVsZHMuX2VtYmVkZGVkW2xvY2FsaXplZEZpZWxkc10pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkcy5wdXNoKC4uLmZpZWxkcy5tYXAoZGF0YUZpZWxkUmVzb3VyY2UgPT4gdGhpcy5fZmllbGRDb252ZXJ0ZXIudG9DbGFzcyhkYXRhRmllbGRSZXNvdXJjZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUdyb3VwT2JqZWN0OiBEYXRhR3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IGRhdGFGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBkYXRhR3JvdXBSZXNvdXJjZS5zdHJldGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGFHcm91cFJlc291cmNlLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiBkYXRhR3JvdXBSZXNvdXJjZS5sYXlvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGRhdGFHcm91cFJlc291cmNlLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFHcm91cFJlc291cmNlLnBhcmVudFRhc2tJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhR3JvdXBPYmplY3QucGFyZW50VGFza0lkID0gZGF0YUdyb3VwUmVzb3VyY2UucGFyZW50VGFza0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUdyb3VwT2JqZWN0LnBhcmVudFRyYW5zaXRpb25JZCA9IGRhdGFHcm91cFJlc291cmNlLnBhcmVudFRyYW5zaXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cE9iamVjdC5wYXJlbnRUYXNrUmVmSWQgPSBkYXRhR3JvdXBSZXNvdXJjZS5wYXJlbnRUYXNrUmVmSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhR3JvdXBPYmplY3QubmVzdGluZ0xldmVsID0gZGF0YUdyb3VwUmVzb3VyY2UubmVzdGluZ0xldmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBSZXNvdXJjZS5wYXJlbnRDYXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUdyb3VwT2JqZWN0WydwYXJlbnRDYXNlSWQnXSA9IGRhdGFHcm91cFJlc291cmNlLnBhcmVudENhc2VJZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhR3JvdXBPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0YXNrIGRhdGFcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2RhdGFcbiAgICBwdWJsaWMgc2V0RGF0YSh0YXNrSWQ6IHN0cmluZywgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSk6IE9ic2VydmFibGU8RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3QkKCd0YXNrLycgKyB0YXNrSWQgKyAnL2RhdGEnLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpXG4gICAgICAgICAgICAucGlwZShtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgdW5kZWZpbmVkKSkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0gRklMRSAtLS0tLS0tLS0tLS1cbiAgICAvKipcbiAgICAgKiBEb3dubG9hZCB0YXNrIGZpbGUgZmllbGQgdmFsdWVcbiAgICAgKiBHRVRcbiAgICAgKi9cbiAgICAvLyB7e2Jhc2VVcmx9fS9hcGkvdGFzay86aWQvZmlsZS86ZmllbGQgICAgICAgICAtIGZvciBmaWxlIGZpZWxkXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkLzpuYW1lICAgLSBmb3IgZmlsZSBsaXN0IGZpZWxkXG4gICAgcHVibGljIGRvd25sb2FkRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgQmxvYj4ge1xuICAgICAgICBjb25zdCB1cmwgPSAhIW5hbWUgPyAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkICsgJy8nICsgbmFtZSA6ICd0YXNrLycgKyB0YXNrSWQgKyAnL2ZpbGUvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBmaWxlIGludG8gdGhlIHRhc2tcbiAgICAgKiBQT1NUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGUvOmZpZWxkICAgICAtIGZvciBmaWxlIGZpZWxkXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVzLzpmaWVsZCAgICAtIGZvciBmaWxlIGxpc3QgZmllbGRcbiAgICBwdWJsaWMgdXBsb2FkRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG11bHRpcGxlRmlsZXM6IGJvb2xlYW4pOlxuICAgICAgICBPYnNlcnZhYmxlPFByb3ZpZGVyUHJvZ3Jlc3MgfCBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gIW11bHRpcGxlRmlsZXMgPyAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkIDogJ3Rhc2svJyArIHRhc2tJZCArICcvZmlsZXMvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLnBvc3RXaXRoRXZlbnQkPEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZT4odXJsLCB0aGlzLlNFUlZFUl9VUkwsIGJvZHkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBmaWxlIGZyb20gdGhlIHRhc2tcbiAgICAgKiBERUxFVEVcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlRmlsZSh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gISFuYW1lID8gJ3Rhc2svJyArIHRhc2tJZCArICcvZmlsZS8nICsgZmllbGRJZCArICcvJyArIG5hbWUgOiAndGFzay8nICsgdGFza0lkICsgJy9maWxlLycgKyBmaWVsZElkO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VQcm92aWRlci5kZWxldGUkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsIHVuZGVmaW5lZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgdGFzayBmaWxlIHByZXZpZXcgZm9yIGZpZWxkIHZhbHVlXG4gICAgICogR0VUXG4gICAgICovXG4gICAgLy8ge3tiYXNlVXJsfX0vYXBpL3Rhc2svOmlkL2ZpbGVfcHJldmlldy86ZmllbGRcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlUHJldmlldyh0YXNrSWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm92aWRlclByb2dyZXNzIHwgQmxvYj4ge1xuICAgICAgICBjb25zdCB1cmwgPSAndGFzay8nICsgdGFza0lkICsgJy9maWxlX3ByZXZpZXcvJyArIGZpZWxkSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldEJsb2IkKHVybCwgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VQcm92aWRlci5nZXRQcm9ncmVzcyhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==