@igo2/common 1.10.0 → 1.11.0

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 (178) hide show
  1. package/bundles/igo2-common.umd.js +744 -251
  2. package/bundles/igo2-common.umd.js.map +1 -1
  3. package/esm2015/lib/action/action.module.js +1 -1
  4. package/esm2015/lib/action/actionbar/actionbar-item.component.js +1 -1
  5. package/esm2015/lib/action/actionbar/actionbar.component.js +1 -1
  6. package/esm2015/lib/action/actionbar/actionbar.module.js +1 -1
  7. package/esm2015/lib/action/index.js +1 -1
  8. package/esm2015/lib/action/shared/action.enums.js +1 -1
  9. package/esm2015/lib/action/shared/action.interfaces.js +1 -1
  10. package/esm2015/lib/action/shared/index.js +1 -1
  11. package/esm2015/lib/action/shared/store.js +1 -1
  12. package/esm2015/lib/backdrop/backdrop.component.js +1 -1
  13. package/esm2015/lib/backdrop/backdrop.module.js +1 -1
  14. package/esm2015/lib/backdrop/index.js +1 -1
  15. package/esm2015/lib/badge-icon/badge-icon.directive.js +1 -1
  16. package/esm2015/lib/badge-icon/badge-icon.module.js +1 -1
  17. package/esm2015/lib/badge-icon/index.js +1 -1
  18. package/esm2015/lib/clickout/clickout.directive.js +1 -1
  19. package/esm2015/lib/clickout/clickout.module.js +1 -1
  20. package/esm2015/lib/clickout/index.js +1 -1
  21. package/esm2015/lib/clone/clone.module.js +1 -1
  22. package/esm2015/lib/clone/clone.pipe.js +1 -1
  23. package/esm2015/lib/clone/index.js +1 -1
  24. package/esm2015/lib/collapsible/collapse.directive.js +1 -1
  25. package/esm2015/lib/collapsible/collapsible.component.js +1 -1
  26. package/esm2015/lib/collapsible/collapsible.module.js +1 -1
  27. package/esm2015/lib/collapsible/index.js +1 -1
  28. package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +1 -1
  29. package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +1 -1
  30. package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +1 -1
  31. package/esm2015/lib/confirm-dialog/index.js +1 -1
  32. package/esm2015/lib/context-menu/context-menu.directive.js +1 -1
  33. package/esm2015/lib/context-menu/context-menu.module.js +1 -1
  34. package/esm2015/lib/context-menu/index.js +1 -1
  35. package/esm2015/lib/custom-html/custom-html.component.js +1 -1
  36. package/esm2015/lib/custom-html/custom-html.module.js +1 -1
  37. package/esm2015/lib/custom-html/custom-html.pipe.js +1 -1
  38. package/esm2015/lib/custom-html/index.js +1 -1
  39. package/esm2015/lib/drag-drop/drag-drop.module.js +1 -1
  40. package/esm2015/lib/drag-drop/index.js +1 -1
  41. package/esm2015/lib/dynamic-component/dynamic-component.module.js +1 -1
  42. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +5 -2
  43. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +1 -1
  44. package/esm2015/lib/dynamic-component/index.js +1 -1
  45. package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +1 -1
  46. package/esm2015/lib/dynamic-component/shared/dynamic-component.js +1 -1
  47. package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +1 -1
  48. package/esm2015/lib/dynamic-component/shared/index.js +1 -1
  49. package/esm2015/lib/entity/entity-selector/entity-selector.component.js +1 -1
  50. package/esm2015/lib/entity/entity-selector/entity-selector.module.js +1 -1
  51. package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +1 -1
  52. package/esm2015/lib/entity/entity-table/entity-table.component.js +547 -116
  53. package/esm2015/lib/entity/entity-table/entity-table.module.js +31 -4
  54. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +1 -1
  55. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +1 -1
  56. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +1 -1
  57. package/esm2015/lib/entity/entity.module.js +1 -1
  58. package/esm2015/lib/entity/index.js +1 -1
  59. package/esm2015/lib/entity/shared/entity.enums.js +2 -1
  60. package/esm2015/lib/entity/shared/entity.interfaces.js +1 -1
  61. package/esm2015/lib/entity/shared/entity.utils.js +1 -1
  62. package/esm2015/lib/entity/shared/index.js +1 -1
  63. package/esm2015/lib/entity/shared/state.js +1 -1
  64. package/esm2015/lib/entity/shared/store.js +1 -1
  65. package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +1 -1
  66. package/esm2015/lib/entity/shared/strategies/filter-selection.js +1 -1
  67. package/esm2015/lib/entity/shared/strategies/index.js +1 -1
  68. package/esm2015/lib/entity/shared/strategies/strategy.js +1 -1
  69. package/esm2015/lib/entity/shared/transaction.js +1 -1
  70. package/esm2015/lib/entity/shared/view.js +1 -1
  71. package/esm2015/lib/entity/shared/watcher.js +1 -1
  72. package/esm2015/lib/flexible/flexible.component.js +1 -1
  73. package/esm2015/lib/flexible/flexible.module.js +1 -1
  74. package/esm2015/lib/flexible/flexible.type.js +1 -1
  75. package/esm2015/lib/flexible/index.js +1 -1
  76. package/esm2015/lib/form/form/form.component.js +1 -1
  77. package/esm2015/lib/form/form/form.module.js +1 -1
  78. package/esm2015/lib/form/form-field/form-field-select.component.js +1 -1
  79. package/esm2015/lib/form/form-field/form-field-text.component.js +1 -1
  80. package/esm2015/lib/form/form-field/form-field-textarea.component.js +1 -1
  81. package/esm2015/lib/form/form-field/form-field.component.js +1 -1
  82. package/esm2015/lib/form/form-field/form-field.module.js +1 -1
  83. package/esm2015/lib/form/form-field/index.js +1 -1
  84. package/esm2015/lib/form/form-group/form-group.component.js +1 -1
  85. package/esm2015/lib/form/form-group/form-group.module.js +1 -1
  86. package/esm2015/lib/form/form.module.js +1 -1
  87. package/esm2015/lib/form/index.js +1 -1
  88. package/esm2015/lib/form/shared/form-field-component.js +1 -1
  89. package/esm2015/lib/form/shared/form-field.service.js +1 -1
  90. package/esm2015/lib/form/shared/form.interfaces.js +1 -1
  91. package/esm2015/lib/form/shared/form.service.js +9 -5
  92. package/esm2015/lib/form/shared/form.utils.js +1 -1
  93. package/esm2015/lib/form/shared/index.js +1 -1
  94. package/esm2015/lib/home-button/home-button.component.js +1 -1
  95. package/esm2015/lib/home-button/home-button.module.js +1 -1
  96. package/esm2015/lib/home-button/index.js +1 -1
  97. package/esm2015/lib/image/image.module.js +1 -1
  98. package/esm2015/lib/image/index.js +1 -1
  99. package/esm2015/lib/image/secure-image.pipe.js +1 -1
  100. package/esm2015/lib/interactive-tour/index.js +1 -1
  101. package/esm2015/lib/interactive-tour/interactive-tour.component.js +1 -1
  102. package/esm2015/lib/interactive-tour/interactive-tour.interface.js +1 -1
  103. package/esm2015/lib/interactive-tour/interactive-tour.loader.js +1 -1
  104. package/esm2015/lib/interactive-tour/interactive-tour.module.js +1 -1
  105. package/esm2015/lib/interactive-tour/interactive-tour.service.js +1 -1
  106. package/esm2015/lib/json-dialog/index.js +1 -1
  107. package/esm2015/lib/json-dialog/json-dialog.component.js +1 -1
  108. package/esm2015/lib/json-dialog/json-dialog.module.js +1 -1
  109. package/esm2015/lib/json-dialog/json-dialog.service.js +1 -1
  110. package/esm2015/lib/keyvalue/index.js +1 -1
  111. package/esm2015/lib/keyvalue/keyvalue.module.js +1 -1
  112. package/esm2015/lib/keyvalue/keyvalue.pipe.js +1 -1
  113. package/esm2015/lib/list/index.js +1 -1
  114. package/esm2015/lib/list/list-item.directive.js +1 -1
  115. package/esm2015/lib/list/list.component.js +1 -1
  116. package/esm2015/lib/list/list.module.js +1 -1
  117. package/esm2015/lib/panel/index.js +1 -1
  118. package/esm2015/lib/panel/panel.component.js +1 -1
  119. package/esm2015/lib/panel/panel.module.js +1 -1
  120. package/esm2015/lib/sidenav/index.js +1 -1
  121. package/esm2015/lib/sidenav/sidenav-shim.directive.js +1 -1
  122. package/esm2015/lib/sidenav/sidenav.module.js +1 -1
  123. package/esm2015/lib/spinner/index.js +1 -1
  124. package/esm2015/lib/spinner/spinner-activity.directive.js +1 -1
  125. package/esm2015/lib/spinner/spinner.component.js +1 -1
  126. package/esm2015/lib/spinner/spinner.module.js +1 -1
  127. package/esm2015/lib/stop-propagation/index.js +1 -1
  128. package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +1 -1
  129. package/esm2015/lib/stop-propagation/stop-propagation.directive.js +1 -1
  130. package/esm2015/lib/stop-propagation/stop-propagation.module.js +1 -1
  131. package/esm2015/lib/table/index.js +1 -1
  132. package/esm2015/lib/table/table-action-color.enum.js +1 -1
  133. package/esm2015/lib/table/table-database.js +1 -1
  134. package/esm2015/lib/table/table-datasource.js +1 -1
  135. package/esm2015/lib/table/table-model.interface.js +1 -1
  136. package/esm2015/lib/table/table.component.js +1 -1
  137. package/esm2015/lib/table/table.module.js +1 -1
  138. package/esm2015/lib/tool/index.js +1 -1
  139. package/esm2015/lib/tool/shared/index.js +1 -1
  140. package/esm2015/lib/tool/shared/tool-component.js +1 -1
  141. package/esm2015/lib/tool/shared/tool.interface.js +1 -1
  142. package/esm2015/lib/tool/shared/tool.service.js +1 -1
  143. package/esm2015/lib/tool/shared/toolbox.enums.js +1 -1
  144. package/esm2015/lib/tool/shared/toolbox.js +1 -1
  145. package/esm2015/lib/tool/tool.module.js +1 -1
  146. package/esm2015/lib/tool/toolbox/toolbox.animation.js +1 -1
  147. package/esm2015/lib/tool/toolbox/toolbox.component.js +1 -1
  148. package/esm2015/lib/tool/toolbox/toolbox.module.js +1 -1
  149. package/esm2015/lib/widget/index.js +1 -1
  150. package/esm2015/lib/widget/shared/index.js +1 -1
  151. package/esm2015/lib/widget/shared/widget.interfaces.js +1 -1
  152. package/esm2015/lib/widget/shared/widget.js +1 -1
  153. package/esm2015/lib/widget/shared/widget.service.js +1 -1
  154. package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +1 -1
  155. package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +1 -1
  156. package/esm2015/lib/widget/widget.module.js +1 -1
  157. package/esm2015/lib/workspace/index.js +1 -1
  158. package/esm2015/lib/workspace/shared/index.js +1 -1
  159. package/esm2015/lib/workspace/shared/store.js +1 -1
  160. package/esm2015/lib/workspace/shared/workspace.interfaces.js +1 -1
  161. package/esm2015/lib/workspace/shared/workspace.js +1 -1
  162. package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +5 -3
  163. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
  164. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +1 -1
  165. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +1 -1
  166. package/esm2015/lib/workspace/workspace.module.js +1 -1
  167. package/esm2015/public_api.js +1 -1
  168. package/fesm2015/igo2-common.js +600 -145
  169. package/fesm2015/igo2-common.js.map +1 -1
  170. package/lib/entity/entity-table/entity-table.component.d.ts +55 -4
  171. package/lib/entity/entity-table/entity-table.module.d.ts +17 -11
  172. package/lib/entity/shared/entity.enums.d.ts +1 -0
  173. package/lib/entity/shared/entity.interfaces.d.ts +23 -0
  174. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +5 -1
  175. package/package.json +3 -3
  176. package/style/common.theming.scss +12 -12
  177. package/style/partial/action.scss +18 -18
  178. package/style/partial/common.variables.scss +8 -8
@@ -1,20 +1,33 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Optional, Self } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
4
4
  import { MatTableDataSource } from '@angular/material/table';
5
+ import { MatFormFieldControl } from '@angular/material/form-field';
6
+ import { FormGroup } from '@angular/forms';
7
+ import { map } from 'rxjs/operators';
8
+ import * as moment_ from 'moment';
5
9
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/table";
7
- import * as i2 from "@angular/material/sort";
8
- import * as i3 from "@angular/common";
9
- import * as i4 from "@angular/material/checkbox";
10
- import * as i5 from "@angular/material/icon";
11
- import * as i6 from "@angular/material/button";
12
- import * as i7 from "../../stop-propagation/stop-propagation.directive";
13
- import * as i8 from "./entity-table-row.directive";
14
- import * as i9 from "../entity-table-paginator/entity-table-paginator.component";
15
- import * as i10 from "../../image/secure-image.pipe";
16
- import * as i11 from "@ngx-translate/core";
17
- import * as i12 from "../../custom-html/custom-html.pipe";
10
+ import * as i1 from "@angular/forms";
11
+ import * as i2 from "@angular/cdk/a11y";
12
+ import * as i3 from "@angular/material/core";
13
+ import * as i4 from "@angular/material/table";
14
+ import * as i5 from "@angular/material/sort";
15
+ import * as i6 from "@angular/common";
16
+ import * as i7 from "@angular/material/checkbox";
17
+ import * as i8 from "@angular/material/tooltip";
18
+ import * as i9 from "@angular/material/autocomplete";
19
+ import * as i10 from "@angular/material/datepicker";
20
+ import * as i11 from "@angular/material/form-field";
21
+ import * as i12 from "@angular/material/input";
22
+ import * as i13 from "@angular/material/select";
23
+ import * as i14 from "@angular/material/icon";
24
+ import * as i15 from "@angular/material/button";
25
+ import * as i16 from "../../stop-propagation/stop-propagation.directive";
26
+ import * as i17 from "./entity-table-row.directive";
27
+ import * as i18 from "../entity-table-paginator/entity-table-paginator.component";
28
+ import * as i19 from "../../image/secure-image.pipe";
29
+ import * as i20 from "@ngx-translate/core";
30
+ import * as i21 from "../../custom-html/custom-html.pipe";
18
31
  function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
19
32
  const _r10 = i0.ɵɵgetCurrentView();
20
33
  i0.ɵɵelementContainerStart(0);
@@ -66,30 +79,32 @@ function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ct
66
79
  i0.ɵɵelementEnd();
67
80
  } if (rf & 2) {
68
81
  const column_r16 = i0.ɵɵnextContext(2).$implicit;
82
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
69
83
  i0.ɵɵadvance(1);
70
84
  i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
71
85
  } }
72
86
  function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
73
87
  i0.ɵɵelementContainerStart(0);
74
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 1, "th", 15);
88
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
75
89
  i0.ɵɵelementContainerEnd();
76
90
  } }
77
91
  function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
78
- i0.ɵɵelementStart(0, "th", 9);
92
+ i0.ɵɵelementStart(0, "th", 18);
79
93
  i0.ɵɵtext(1);
80
94
  i0.ɵɵelementEnd();
81
95
  } if (rf & 2) {
82
96
  const column_r16 = i0.ɵɵnextContext(2).$implicit;
97
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
83
98
  i0.ɵɵadvance(1);
84
99
  i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
85
100
  } }
86
101
  function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
87
102
  i0.ɵɵelementContainerStart(0);
88
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 1, "th", 3);
103
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
89
104
  i0.ɵɵelementContainerEnd();
90
105
  } }
91
106
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelementStart(0, "td", 20);
107
+ i0.ɵɵelementStart(0, "td", 22);
93
108
  i0.ɵɵtext(1);
94
109
  i0.ɵɵelementEnd();
95
110
  } if (rf & 2) {
@@ -101,7 +116,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
101
116
  i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
102
117
  } }
103
118
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelement(0, "img", 24);
119
+ i0.ɵɵelement(0, "img", 26);
105
120
  i0.ɵɵpipe(1, "async");
106
121
  i0.ɵɵpipe(2, "secureImage");
107
122
  } if (rf & 2) {
@@ -120,11 +135,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
120
135
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
121
136
  } }
122
137
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "td", 20);
124
- i0.ɵɵelementStart(1, "a", 21);
138
+ i0.ɵɵelementStart(0, "td", 22);
139
+ i0.ɵɵelementStart(1, "a", 23);
125
140
  i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
126
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
127
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
141
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
142
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
128
143
  i0.ɵɵelementEnd();
129
144
  i0.ɵɵelementEnd();
130
145
  } if (rf & 2) {
@@ -140,8 +155,8 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
140
155
  } }
141
156
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
142
157
  i0.ɵɵelementContainerStart(0);
143
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 18);
144
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 19, i0.ɵɵtemplateRefExtractor);
158
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
159
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 21, i0.ɵɵtemplateRefExtractor);
145
160
  i0.ɵɵelementContainerEnd();
146
161
  } if (rf & 2) {
147
162
  const record_r31 = ctx.$implicit;
@@ -153,11 +168,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
153
168
  } }
154
169
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
155
170
  i0.ɵɵelementContainerStart(0);
156
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 17);
171
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
157
172
  i0.ɵɵelementContainerEnd();
158
173
  } }
159
174
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelement(0, "td", 27);
175
+ i0.ɵɵelement(0, "td", 29);
161
176
  } if (rf & 2) {
162
177
  const record_r47 = i0.ɵɵnextContext().$implicit;
163
178
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
@@ -165,7 +180,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
165
180
  i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
166
181
  } }
167
182
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
168
- i0.ɵɵelement(0, "img", 24);
183
+ i0.ɵɵelement(0, "img", 26);
169
184
  i0.ɵɵpipe(1, "async");
170
185
  i0.ɵɵpipe(2, "secureImage");
171
186
  } if (rf & 2) {
@@ -184,11 +199,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
184
199
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
185
200
  } }
186
201
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
187
- i0.ɵɵelementStart(0, "td", 20);
188
- i0.ɵɵelementStart(1, "a", 21);
202
+ i0.ɵɵelementStart(0, "td", 22);
203
+ i0.ɵɵelementStart(1, "a", 23);
189
204
  i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
190
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
191
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
205
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
206
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
192
207
  i0.ɵɵelementEnd();
193
208
  i0.ɵɵelementEnd();
194
209
  } if (rf & 2) {
@@ -204,8 +219,8 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
204
219
  } }
205
220
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
206
221
  i0.ɵɵelementContainerStart(0);
207
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 25);
208
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 26, i0.ɵɵtemplateRefExtractor);
222
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
223
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
209
224
  i0.ɵɵelementContainerEnd();
210
225
  } if (rf & 2) {
211
226
  const record_r47 = ctx.$implicit;
@@ -217,29 +232,185 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
217
232
  } }
218
233
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
219
234
  i0.ɵɵelementContainerStart(0);
220
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 17);
235
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
221
236
  i0.ɵɵelementContainerEnd();
222
237
  } }
238
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
239
+ const _r79 = i0.ɵɵgetCurrentView();
240
+ i0.ɵɵelementStart(0, "div", 43);
241
+ i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
242
+ i0.ɵɵelementStart(2, "input", 45);
243
+ i0.ɵɵlistener("dateChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template_input_dateChange_2_listener($event) { i0.ɵɵrestoreView(_r79); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return ctx_r77.onDateChange(column_r16.name, record_r63, $event); });
244
+ i0.ɵɵelementEnd();
245
+ i0.ɵɵelement(3, "mat-datepicker", null, 46);
246
+ i0.ɵɵelementEnd();
247
+ } if (rf & 2) {
248
+ const _r76 = i0.ɵɵreference(4);
249
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
250
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
251
+ const ctx_r67 = i0.ɵɵnextContext();
252
+ i0.ɵɵadvance(1);
253
+ i0.ɵɵproperty("for", _r76);
254
+ i0.ɵɵadvance(1);
255
+ i0.ɵɵpropertyInterpolate("value", ctx_r67.getValue(record_r63, column_r16));
256
+ i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
257
+ } }
258
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
259
+ const _r85 = i0.ɵɵgetCurrentView();
260
+ i0.ɵɵelementStart(0, "input", 47);
261
+ i0.ɵɵlistener("focus", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return column_r16.onFocus($event); })("keypress", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return column_r16.onChange($event); })("blur", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return column_r16.onBlur($event); });
262
+ i0.ɵɵelementEnd();
263
+ } if (rf & 2) {
264
+ const column_r16 = i0.ɵɵnextContext(5).$implicit;
265
+ i0.ɵɵproperty("formControlName", column_r16.name);
266
+ } }
267
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
268
+ const _r93 = i0.ɵɵgetCurrentView();
269
+ i0.ɵɵelementStart(0, "input", 48);
270
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r93); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return ctx_r91.onValueChange(column_r16.name, record_r63, $event); });
271
+ i0.ɵɵelementEnd();
272
+ } if (rf & 2) {
273
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
274
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
275
+ const ctx_r69 = i0.ɵɵnextContext();
276
+ i0.ɵɵpropertyInterpolate("step", column_r16.step);
277
+ i0.ɵɵpropertyInterpolate("value", ctx_r69.getValue(record_r63, column_r16));
278
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
279
+ i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
280
+ i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
281
+ i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
282
+ i0.ɵɵproperty("formControlName", column_r16.name);
283
+ } }
284
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
285
+ const _r99 = i0.ɵɵgetCurrentView();
286
+ i0.ɵɵelementStart(0, "input", 49);
287
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r99); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return ctx_r97.onValueChange(column_r16.name, record_r63, $event); });
288
+ i0.ɵɵelementEnd();
289
+ } if (rf & 2) {
290
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
291
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
292
+ const ctx_r70 = i0.ɵɵnextContext();
293
+ i0.ɵɵpropertyInterpolate("value", ctx_r70.getValue(record_r63, column_r16));
294
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
295
+ i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
296
+ i0.ɵɵproperty("formControlName", column_r16.name);
297
+ } }
298
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template(rf, ctx) { if (rf & 1) {
299
+ const _r105 = i0.ɵɵgetCurrentView();
300
+ i0.ɵɵelementStart(0, "mat-checkbox", 50);
301
+ i0.ɵɵlistener("change", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r105); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return ctx_r103.onBooleanValueChange(column_r16.name, record_r63, $event); });
302
+ i0.ɵɵelementEnd();
303
+ } if (rf & 2) {
304
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
305
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
306
+ const ctx_r71 = i0.ɵɵnextContext();
307
+ i0.ɵɵproperty("formControlName", column_r16.name)("checked", ctx_r71.getValue(record_r63, column_r16));
308
+ } }
309
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
310
+ i0.ɵɵelementStart(0, "mat-option", 53);
311
+ i0.ɵɵtext(1);
312
+ i0.ɵɵelementEnd();
313
+ } if (rf & 2) {
314
+ const option_r110 = ctx.$implicit;
315
+ i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
316
+ i0.ɵɵadvance(1);
317
+ i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
318
+ } }
319
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template(rf, ctx) { if (rf & 1) {
320
+ const _r113 = i0.ɵɵgetCurrentView();
321
+ i0.ɵɵelementStart(0, "mat-select", 51);
322
+ i0.ɵɵlistener("selectionChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template_mat_select_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r113); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return ctx_r111.onSelectValueChange(column_r16.name, record_r63, $event); });
323
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template, 2, 3, "mat-option", 52);
324
+ i0.ɵɵelementEnd();
325
+ } if (rf & 2) {
326
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
327
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
328
+ const ctx_r72 = i0.ɵɵnextContext();
329
+ i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
330
+ i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", ctx_r72.getValue(record_r63, column_r16));
331
+ i0.ɵɵadvance(1);
332
+ i0.ɵɵproperty("ngForOf", column_r16.domainValues);
333
+ } }
334
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
335
+ i0.ɵɵelement(0, "input", 54);
336
+ } if (rf & 2) {
337
+ i0.ɵɵnextContext();
338
+ const _r74 = i0.ɵɵreference(9);
339
+ const record_r63 = i0.ɵɵnextContext().$implicit;
340
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
341
+ const ctx_r73 = i0.ɵɵnextContext();
342
+ i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
343
+ i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
344
+ i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
345
+ } }
346
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
347
+ i0.ɵɵelementStart(0, "mat-option", 55);
348
+ i0.ɵɵtext(1);
349
+ i0.ɵɵelementEnd();
350
+ } if (rf & 2) {
351
+ const option_r119 = ctx.$implicit;
352
+ i0.ɵɵproperty("value", option_r119.id);
353
+ i0.ɵɵadvance(1);
354
+ i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
355
+ } }
223
356
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
224
- i0.ɵɵelement(0, "td", 27);
225
- i0.ɵɵpipe(1, "sanitizeHtml");
357
+ const _r122 = i0.ɵɵgetCurrentView();
358
+ i0.ɵɵelementStart(0, "td", 32);
359
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template, 5, 4, "div", 33);
360
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template, 1, 1, "input", 34);
361
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template, 1, 7, "input", 35);
362
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
363
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
364
+ i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
365
+ i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 4, "input", 39);
366
+ i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
367
+ i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return ctx_r120.onAutocompleteValueChange(column_r16.name, record_r63, $event); });
368
+ i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
369
+ i0.ɵɵpipe(11, "async");
370
+ i0.ɵɵelementEnd();
371
+ i0.ɵɵelementEnd();
226
372
  } if (rf & 2) {
227
373
  const record_r63 = i0.ɵɵnextContext().$implicit;
228
374
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
229
375
  const ctx_r64 = i0.ɵɵnextContext();
230
- i0.ɵɵproperty("ngClass", ctx_r64.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r64.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
376
+ i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", ctx_r64.getCellClass(record_r63, column_r16));
377
+ i0.ɵɵadvance(1);
378
+ i0.ɵɵproperty("ngIf", column_r16.type === "date");
379
+ i0.ɵɵadvance(1);
380
+ i0.ɵɵproperty("ngIf", column_r16.type === "time");
381
+ i0.ɵɵadvance(1);
382
+ i0.ɵɵproperty("ngIf", column_r16.type === "number");
383
+ i0.ɵɵadvance(1);
384
+ i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
385
+ i0.ɵɵadvance(1);
386
+ i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
387
+ i0.ɵɵadvance(1);
388
+ i0.ɵɵproperty("ngIf", column_r16.type === "list");
389
+ i0.ɵɵadvance(1);
390
+ i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
391
+ i0.ɵɵadvance(3);
392
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions));
231
393
  } }
232
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
233
- i0.ɵɵelement(0, "img", 24);
394
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
395
+ i0.ɵɵelement(0, "td", 29);
396
+ i0.ɵɵpipe(1, "sanitizeHtml");
397
+ } if (rf & 2) {
398
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
399
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
400
+ const ctx_r126 = i0.ɵɵnextContext();
401
+ i0.ɵɵproperty("ngClass", ctx_r126.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r126.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
402
+ } }
403
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template(rf, ctx) { if (rf & 1) {
404
+ i0.ɵɵelement(0, "img", 26);
234
405
  i0.ɵɵpipe(1, "async");
235
406
  i0.ɵɵpipe(2, "secureImage");
236
407
  } if (rf & 2) {
237
- const record_r63 = i0.ɵɵnextContext(2).$implicit;
408
+ const record_r63 = i0.ɵɵnextContext(3).$implicit;
238
409
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
239
- const ctx_r69 = i0.ɵɵnextContext();
240
- i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r69.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
410
+ const ctx_r131 = i0.ɵɵnextContext();
411
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r131.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
241
412
  } }
242
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
413
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
243
414
  i0.ɵɵelementStart(0, "span");
244
415
  i0.ɵɵtext(1);
245
416
  i0.ɵɵpipe(2, "translate");
@@ -248,111 +419,137 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_co
248
419
  i0.ɵɵadvance(1);
249
420
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
250
421
  } }
251
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
252
- i0.ɵɵelementStart(0, "td", 20);
253
- i0.ɵɵelementStart(1, "a", 21);
254
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
255
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
256
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
422
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
423
+ i0.ɵɵelementStart(0, "td", 22);
424
+ i0.ɵɵelementStart(1, "a", 23);
425
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
426
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template, 3, 5, "img", 24);
427
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
257
428
  i0.ɵɵelementEnd();
258
429
  i0.ɵɵelementEnd();
259
430
  } if (rf & 2) {
260
- const _r70 = i0.ɵɵreference(4);
261
- const record_r63 = i0.ɵɵnextContext().$implicit;
431
+ const _r132 = i0.ɵɵreference(4);
432
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
262
433
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
263
- const ctx_r66 = i0.ɵɵnextContext();
264
- i0.ɵɵproperty("ngClass", ctx_r66.getCellClass(record_r63, column_r16));
434
+ const ctx_r128 = i0.ɵɵnextContext();
435
+ i0.ɵɵproperty("ngClass", ctx_r128.getCellClass(record_r63, column_r16));
265
436
  i0.ɵɵadvance(1);
266
- i0.ɵɵpropertyInterpolate("href", ctx_r66.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
437
+ i0.ɵɵpropertyInterpolate("href", ctx_r128.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
267
438
  i0.ɵɵadvance(1);
268
- i0.ɵɵproperty("ngIf", ctx_r66.isImg(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r70);
439
+ i0.ɵɵproperty("ngIf", ctx_r128.isImg(ctx_r128.getValue(record_r63, column_r16)))("ngIfElse", _r132);
440
+ } }
441
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
442
+ i0.ɵɵtemplate(0, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template, 2, 4, "td", 27);
443
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template, 5, 4, "ng-template", null, 56, i0.ɵɵtemplateRefExtractor);
444
+ } if (rf & 2) {
445
+ const _r127 = i0.ɵɵreference(2);
446
+ const record_r63 = i0.ɵɵnextContext().$implicit;
447
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
448
+ const ctx_r66 = i0.ɵɵnextContext();
449
+ i0.ɵɵproperty("ngIf", !ctx_r66.isUrl(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r127);
269
450
  } }
270
451
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
271
452
  i0.ɵɵelementContainerStart(0);
272
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 2, 4, "td", 25);
273
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
453
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
454
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 3, 2, "ng-template", null, 31, i0.ɵɵtemplateRefExtractor);
274
455
  i0.ɵɵelementContainerEnd();
275
456
  } if (rf & 2) {
276
457
  const record_r63 = ctx.$implicit;
277
458
  const _r65 = i0.ɵɵreference(3);
278
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
279
- const ctx_r62 = i0.ɵɵnextContext();
459
+ const ctx_r62 = i0.ɵɵnextContext(4);
280
460
  i0.ɵɵadvance(1);
281
- i0.ɵɵproperty("ngIf", !ctx_r62.isUrl(ctx_r62.getValue(record_r63, column_r16)))("ngIfElse", _r65);
461
+ i0.ɵɵproperty("ngIf", ctx_r62.isEdition(record_r63))("ngIfElse", _r65);
282
462
  } }
283
463
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
284
464
  i0.ɵɵelementContainerStart(0);
285
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 17);
465
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
286
466
  i0.ɵɵelementContainerEnd();
287
467
  } }
288
468
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵelementStart(0, "td", 20);
290
- i0.ɵɵelement(1, "mat-icon", 30);
469
+ const _r145 = i0.ɵɵgetCurrentView();
470
+ i0.ɵɵelementStart(0, "td", 22);
471
+ i0.ɵɵelementStart(1, "mat-icon", 58);
472
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template_mat_icon_click_1_listener($event) { i0.ɵɵrestoreView(_r145); const column_r16 = i0.ɵɵnextContext(3).$implicit; return column_r16.onClick($event); });
473
+ i0.ɵɵelementEnd();
291
474
  i0.ɵɵelementEnd();
292
475
  } if (rf & 2) {
293
- const record_r79 = ctx.$implicit;
476
+ const record_r142 = ctx.$implicit;
294
477
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
295
- const ctx_r78 = i0.ɵɵnextContext();
296
- i0.ɵɵproperty("ngClass", ctx_r78.getCellClass(record_r79, column_r16));
478
+ const ctx_r141 = i0.ɵɵnextContext();
479
+ i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
297
480
  i0.ɵɵadvance(1);
298
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r78.getValue(record_r79, column_r16));
481
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r141.getValue(record_r142, column_r16) || column_r16.icon);
299
482
  } }
300
483
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
301
484
  i0.ɵɵelementContainerStart(0);
302
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 29);
485
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 57);
303
486
  i0.ɵɵelementContainerEnd();
304
487
  } }
305
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template(rf, ctx) { if (rf & 1) {
306
- const _r89 = i0.ɵɵgetCurrentView();
307
- i0.ɵɵelementStart(0, "button", 34);
308
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r89); const button_r84 = i0.ɵɵnextContext().$implicit; const record_r82 = i0.ɵɵnextContext().$implicit; const ctx_r87 = i0.ɵɵnextContext(4); return ctx_r87.onButtonClick(button_r84.click, record_r82); });
309
- i0.ɵɵelement(1, "mat-icon", 30);
488
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
489
+ const _r156 = i0.ɵɵgetCurrentView();
490
+ i0.ɵɵelementStart(0, "button", 62);
491
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r156); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r154 = i0.ɵɵnextContext(4); return ctx_r154.onButtonClick(button_r150.click, record_r148); });
492
+ i0.ɵɵelement(1, "mat-icon", 63);
310
493
  i0.ɵɵelementEnd();
311
494
  } if (rf & 2) {
312
- const button_r84 = i0.ɵɵnextContext().$implicit;
313
- i0.ɵɵproperty("color", button_r84.color);
495
+ const button_r150 = i0.ɵɵnextContext(2).$implicit;
496
+ i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
314
497
  i0.ɵɵadvance(1);
315
- i0.ɵɵpropertyInterpolate("svgIcon", button_r84.icon);
498
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
316
499
  } }
317
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template(rf, ctx) { if (rf & 1) {
318
- const _r94 = i0.ɵɵgetCurrentView();
319
- i0.ɵɵelementStart(0, "button", 35);
320
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r94); const button_r84 = i0.ɵɵnextContext().$implicit; const record_r82 = i0.ɵɵnextContext().$implicit; const ctx_r92 = i0.ɵɵnextContext(4); return ctx_r92.onButtonClick(button_r84.click, record_r82); });
321
- i0.ɵɵelement(1, "mat-icon", 30);
500
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
501
+ const _r161 = i0.ɵɵgetCurrentView();
502
+ i0.ɵɵelementStart(0, "button", 64);
503
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r161); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r159 = i0.ɵɵnextContext(4); return ctx_r159.onButtonClick(button_r150.click, record_r148); });
504
+ i0.ɵɵelement(1, "mat-icon", 63);
322
505
  i0.ɵɵelementEnd();
323
506
  } if (rf & 2) {
324
- const button_r84 = i0.ɵɵnextContext().$implicit;
325
- i0.ɵɵproperty("color", button_r84.color);
507
+ const button_r150 = i0.ɵɵnextContext(2).$implicit;
508
+ i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
509
+ i0.ɵɵadvance(1);
510
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
511
+ } }
512
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
513
+ i0.ɵɵelementContainerStart(0);
514
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 60);
515
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 61);
516
+ i0.ɵɵelementContainerEnd();
517
+ } if (rf & 2) {
518
+ const button_r150 = i0.ɵɵnextContext().$implicit;
326
519
  i0.ɵɵadvance(1);
327
- i0.ɵɵpropertyInterpolate("svgIcon", button_r84.icon);
520
+ i0.ɵɵproperty("ngIf", button_r150.style === "mat-icon-button");
521
+ i0.ɵɵadvance(1);
522
+ i0.ɵɵproperty("ngIf", button_r150.style !== "mat-icon-button");
328
523
  } }
329
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template(rf, ctx) { if (rf & 1) {
524
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
330
525
  i0.ɵɵelementStart(0, "span");
331
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template, 2, 2, "button", 32);
332
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template, 2, 2, "button", 33);
526
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
333
527
  i0.ɵɵelementEnd();
334
528
  } if (rf & 2) {
335
- const button_r84 = ctx.$implicit;
336
- i0.ɵɵadvance(1);
337
- i0.ɵɵproperty("ngIf", button_r84.style === "mat-icon-button");
529
+ const button_r150 = ctx.$implicit;
530
+ const record_r148 = i0.ɵɵnextContext().$implicit;
531
+ const ctx_r149 = i0.ɵɵnextContext(4);
338
532
  i0.ɵɵadvance(1);
339
- i0.ɵɵproperty("ngIf", button_r84.style !== "mat-icon-button");
533
+ i0.ɵɵproperty("ngIf", ctx_r149.isEdition(record_r148) === button_r150.editMode);
340
534
  } }
341
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template(rf, ctx) { if (rf & 1) {
342
- i0.ɵɵelementStart(0, "td", 20);
343
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template, 3, 2, "span", 31);
535
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
536
+ i0.ɵɵelementContainerStart(0);
537
+ i0.ɵɵelementStart(1, "td", 22);
538
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 59);
344
539
  i0.ɵɵelementEnd();
540
+ i0.ɵɵelementContainerEnd();
345
541
  } if (rf & 2) {
346
- const record_r82 = ctx.$implicit;
542
+ const record_r148 = ctx.$implicit;
347
543
  const column_r16 = i0.ɵɵnextContext(3).$implicit;
348
- const ctx_r81 = i0.ɵɵnextContext();
349
- i0.ɵɵproperty("ngClass", ctx_r81.getCellClass(record_r82, column_r16));
544
+ const ctx_r147 = i0.ɵɵnextContext();
350
545
  i0.ɵɵadvance(1);
351
- i0.ɵɵproperty("ngForOf", ctx_r81.getValue(record_r82, column_r16));
546
+ i0.ɵɵproperty("ngClass", ctx_r147.getCellClass(record_r148, column_r16));
547
+ i0.ɵɵadvance(1);
548
+ i0.ɵɵproperty("ngForOf", ctx_r147.getValue(record_r148, column_r16));
352
549
  } }
353
550
  function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
354
551
  i0.ɵɵelementContainerStart(0);
355
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template, 2, 2, "td", 29);
552
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
356
553
  i0.ɵɵelementContainerEnd();
357
554
  } }
358
555
  function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
@@ -395,34 +592,44 @@ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
395
592
  i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
396
593
  } }
397
594
  function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
398
- i0.ɵɵelement(0, "tr", 36);
595
+ i0.ɵɵelement(0, "tr", 65);
399
596
  } if (rf & 2) {
400
597
  const ctx_r3 = i0.ɵɵnextContext();
401
598
  i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
402
599
  } }
403
600
  function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
404
- const _r100 = i0.ɵɵgetCurrentView();
405
- i0.ɵɵelementStart(0, "tr", 37);
406
- i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r100); const record_r98 = restoredCtx.$implicit; const ctx_r99 = i0.ɵɵnextContext(); return ctx_r99.onRowSelect(record_r98); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r100); const record_r98 = restoredCtx.$implicit; const ctx_r101 = i0.ɵɵnextContext(); return ctx_r101.onRowClick(record_r98); });
601
+ const _r169 = i0.ɵɵgetCurrentView();
602
+ i0.ɵɵelementStart(0, "tr", 66);
603
+ i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r168 = i0.ɵɵnextContext(); return ctx_r168.onRowSelect(record_r167); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r170 = i0.ɵɵnextContext(); return ctx_r170.onRowClick(record_r167); });
407
604
  i0.ɵɵelementEnd();
408
605
  } if (rf & 2) {
409
- const record_r98 = ctx.$implicit;
606
+ const record_r167 = ctx.$implicit;
410
607
  const ctx_r4 = i0.ɵɵnextContext();
411
- i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r98))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r98));
608
+ i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r167))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r167));
412
609
  } }
413
610
  function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
414
- const _r103 = i0.ɵɵgetCurrentView();
415
- i0.ɵɵelementStart(0, "igo-entity-table-paginator", 38);
416
- i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r103); const ctx_r102 = i0.ɵɵnextContext(); return ctx_r102.paginatorChange($event); });
611
+ const _r172 = i0.ɵɵgetCurrentView();
612
+ i0.ɵɵelementStart(0, "igo-entity-table-paginator", 67);
613
+ i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r172); const ctx_r171 = i0.ɵɵnextContext(); return ctx_r171.paginatorChange($event); });
417
614
  i0.ɵɵelementEnd();
418
615
  } if (rf & 2) {
419
616
  const ctx_r5 = i0.ɵɵnextContext();
420
617
  i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
421
618
  } }
619
+ const moment = moment_;
422
620
  export class EntityTableComponent {
423
- constructor(cdRef) {
621
+ constructor(cdRef, formBuilder, _focusMonitor, _elementRef, ngControl, _parentForm, _controlName, _defaultErrorStateMatcher, dateAdapter) {
424
622
  this.cdRef = cdRef;
623
+ this.formBuilder = formBuilder;
624
+ this._focusMonitor = _focusMonitor;
625
+ this._elementRef = _elementRef;
626
+ this.ngControl = ngControl;
627
+ this._parentForm = _parentForm;
628
+ this._controlName = _controlName;
629
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
630
+ this.dateAdapter = dateAdapter;
425
631
  this.entitySortChange$ = new BehaviorSubject(false);
632
+ this.formGroup = new FormGroup({});
426
633
  /**
427
634
  * Reference to the column renderer types
428
635
  * @internal
@@ -467,6 +674,7 @@ export class EntityTableComponent {
467
674
  * @internal
468
675
  */
469
676
  this.dataSource = new MatTableDataSource();
677
+ this.dateAdapter.setLocale('fr-CA');
470
678
  }
471
679
  /**
472
680
  * Table paginator
@@ -528,6 +736,118 @@ export class EntityTableComponent {
528
736
  this.handleDatasource();
529
737
  }
530
738
  }
739
+ /**
740
+ * Process text or number value change (edition)
741
+ */
742
+ onValueChange(column, record, event) {
743
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
744
+ record.entity.properties[key] = event.target.value;
745
+ }
746
+ /**
747
+ * Process boolean value change (edition)
748
+ */
749
+ onBooleanValueChange(column, record, event) {
750
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
751
+ record.entity.properties[key] = event.checked;
752
+ }
753
+ /**
754
+ * Process select value change (edition)
755
+ */
756
+ onSelectValueChange(column, record, event) {
757
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
758
+ record.entity.properties[key] = event.value;
759
+ }
760
+ /**
761
+ * Process autocomplete value change (edition)
762
+ */
763
+ onAutocompleteValueChange(column, record, event) {
764
+ this.formGroup.controls[column].setValue(event.option.viewValue);
765
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
766
+ record.entity.properties[key] = event.option.value;
767
+ }
768
+ /**
769
+ * Process date value change (edition)
770
+ */
771
+ onDateChange(column, record, event) {
772
+ const format = "YYYY-MM-DD";
773
+ const value = moment(event.value).format(format);
774
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
775
+ record.entity.properties[key] = value;
776
+ }
777
+ /**
778
+ * Enable edition mode for one row
779
+ * More than one row can be edited at the same time
780
+ */
781
+ enableEdit(record) {
782
+ const item = record.entity.properties;
783
+ this.template.columns.forEach(column => {
784
+ var _a;
785
+ column.title = ((_a = column.validation) === null || _a === void 0 ? void 0 : _a.mandatory) && !column.title.includes('*') ? column.title + ' *' : column.title;
786
+ const key = this.getColumnKeyWithoutPropertiesTag(column.name);
787
+ if (column.type === 'boolean') {
788
+ if (!item[key] || item[key] === null) {
789
+ item[key] = false;
790
+ }
791
+ else if (typeof item[key] === 'string') {
792
+ item[key] = JSON.parse(item[key].toLowerCase());
793
+ }
794
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
795
+ }
796
+ else if (column.type === 'list') {
797
+ if (column.multiple) {
798
+ this.formGroup.setControl(column.name, this.formBuilder.control([item[key]]));
799
+ }
800
+ else {
801
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
802
+ typeof item[key] === 'string' ?
803
+ this.formGroup.controls[column.name].setValue(parseInt(item[key])) :
804
+ this.formGroup.controls[column.name].setValue(item[key]);
805
+ }
806
+ }
807
+ else if (column.type === 'autocomplete') {
808
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
809
+ this.filteredOptions = this.formGroup.controls[column.name].valueChanges.pipe(map(value => {
810
+ if (value.length) {
811
+ return column.domainValues.filter((option) => {
812
+ const filterNormalized = value ? value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '') : '';
813
+ const featureNameNormalized = option.value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
814
+ return featureNameNormalized.includes(filterNormalized);
815
+ });
816
+ }
817
+ }));
818
+ let formControlValue = item[key];
819
+ column.domainValues.forEach(option => {
820
+ if (typeof formControlValue === 'string' && /^\d+$/.test(formControlValue)) {
821
+ formControlValue = parseInt(formControlValue);
822
+ }
823
+ if (option.value === formControlValue || option.id === formControlValue) {
824
+ formControlValue = option.value;
825
+ }
826
+ });
827
+ this.formGroup.controls[column.name].setValue(formControlValue);
828
+ }
829
+ else if (column.type === 'date') {
830
+ if (column.visible) {
831
+ if (item[key]) {
832
+ let date = moment(item[key]);
833
+ item[key] = date.utc().format('YYYY-MM-DD');
834
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
835
+ }
836
+ else {
837
+ const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);
838
+ record.entity.properties[newKey] = null;
839
+ this.formGroup.setControl(column.name, this.formBuilder.control(null));
840
+ }
841
+ }
842
+ }
843
+ else {
844
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
845
+ }
846
+ if (this.formGroup.controls[column.name] && this.getValidationAttributeValue(column, 'readonly')) {
847
+ this.formGroup.controls[column.name].disable();
848
+ }
849
+ });
850
+ }
531
851
  handleDatasource() {
532
852
  this.unsubscribeStore();
533
853
  this.selection$$ = this.store.stateView
@@ -546,6 +866,9 @@ export class EntityTableComponent {
546
866
  this.selectionState$.next(this.computeSelectionState(records));
547
867
  });
548
868
  this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
869
+ if (all[0]) {
870
+ this.enableEdit(all[0]);
871
+ }
549
872
  this.dataSource.data = all;
550
873
  });
551
874
  }
@@ -765,13 +1088,102 @@ export class EntityTableComponent {
765
1088
  */
766
1089
  getValue(record, column) {
767
1090
  const entity = record.entity;
1091
+ let value;
768
1092
  if (column.valueAccessor !== undefined) {
769
1093
  return column.valueAccessor(entity, record);
770
1094
  }
771
1095
  if (this.template.valueAccessor !== undefined) {
772
1096
  return this.template.valueAccessor(entity, column.name, record);
773
1097
  }
774
- return this.store.getProperty(entity, column.name);
1098
+ value = this.store.getProperty(entity, column.name);
1099
+ if (column.type === 'boolean') {
1100
+ if (value === undefined || value === null || value === '') {
1101
+ value = false;
1102
+ }
1103
+ else if (typeof value !== 'boolean' && value !== undefined) {
1104
+ if (typeof value === 'number') {
1105
+ value = Boolean(value);
1106
+ }
1107
+ else {
1108
+ value = JSON.parse(value.toLowerCase());
1109
+ }
1110
+ }
1111
+ if (!this.isEdition(record)) {
1112
+ value = value ? '✓' : ''; // check mark
1113
+ }
1114
+ }
1115
+ else if (column.type === 'list' && value && column.domainValues) {
1116
+ if (column.multiple) {
1117
+ let list_id;
1118
+ typeof value === 'string' ? list_id = value.match(/[\w.-]+/g).map(Number) : list_id = value;
1119
+ let list_option = [];
1120
+ column.domainValues.forEach(option => {
1121
+ if (list_id.includes(option.id)) {
1122
+ if (record.edition) {
1123
+ list_option.push(option.id);
1124
+ }
1125
+ else {
1126
+ list_option.push(option.value);
1127
+ }
1128
+ }
1129
+ });
1130
+ this.isEdition(record) ? value = list_id : value = list_option;
1131
+ }
1132
+ else {
1133
+ column.domainValues.forEach(option => {
1134
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
1135
+ value = parseInt(value);
1136
+ }
1137
+ if (option.value === value || option.id === value) {
1138
+ this.isEdition(record) ? value = option.id : value = option.value;
1139
+ }
1140
+ });
1141
+ }
1142
+ }
1143
+ else if (column.type === 'autocomplete' && value && column.domainValues) {
1144
+ column.domainValues.forEach(option => {
1145
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
1146
+ value = parseInt(value);
1147
+ }
1148
+ if (option.value === value || option.id === value) {
1149
+ value = option.value;
1150
+ }
1151
+ });
1152
+ }
1153
+ else if (column.type === 'date') {
1154
+ if (this.isEdition(record)) {
1155
+ if (value) {
1156
+ let date = moment(value);
1157
+ value = date.format();
1158
+ this.formGroup.controls[column.name].setValue(value);
1159
+ }
1160
+ }
1161
+ else if (!this.isEdition(record) && value === null) {
1162
+ value = "";
1163
+ }
1164
+ }
1165
+ if (value === undefined) {
1166
+ value = '';
1167
+ }
1168
+ return value;
1169
+ }
1170
+ /**
1171
+ * Method to access an entity's validation values
1172
+ * @param column Column
1173
+ * @param validationType string
1174
+ * @returns Any value (false if no validation or not the one concerned)
1175
+ * @internal
1176
+ */
1177
+ getValidationAttributeValue(column, validationType) {
1178
+ if (column.validation !== undefined && column.validation[validationType] !== undefined) {
1179
+ return column.validation[validationType];
1180
+ }
1181
+ else {
1182
+ return false;
1183
+ }
1184
+ }
1185
+ isEdition(record) {
1186
+ return record.entity.edition ? true : false;
775
1187
  }
776
1188
  /**
777
1189
  * Return the type of renderer of a column
@@ -848,13 +1260,23 @@ export class EntityTableComponent {
848
1260
  * @internal
849
1261
  */
850
1262
  onButtonClick(clickFunc, record) {
1263
+ this.enableEdit(record);
851
1264
  if (typeof clickFunc === 'function') {
852
1265
  clickFunc(record.entity, record);
853
1266
  }
854
1267
  }
1268
+ /**
1269
+ * Retrieve column name without his "properties" tag (useful for edition workspace properties)
1270
+ */
1271
+ getColumnKeyWithoutPropertiesTag(column) {
1272
+ if (column.includes('properties.')) {
1273
+ return column.split('.')[1];
1274
+ }
1275
+ return column;
1276
+ }
855
1277
  }
856
- EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
857
- EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", ""], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
1278
+ EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
1279
+ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip"], ["mat-header-cell", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], [3, "svgIcon"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
858
1280
  i0.ɵɵelementStart(0, "div", 0);
859
1281
  i0.ɵɵelementStart(1, "table", 1);
860
1282
  i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
@@ -879,16 +1301,25 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
879
1301
  i0.ɵɵproperty("matRowDefColumns", ctx.headers);
880
1302
  i0.ɵɵadvance(1);
881
1303
  i0.ɵɵproperty("ngIf", ctx.withPaginator);
882
- } }, directives: [i1.MatTable, i2.MatSort, i3.NgClass, i1.MatColumnDef, i1.MatHeaderCellDef, i1.MatCellDef, i3.NgForOf, i1.MatHeaderRowDef, i1.MatRowDef, i3.NgIf, i1.MatHeaderCell, i4.MatCheckbox, i1.MatCell, i2.MatSortHeader, i5.MatIcon, i6.MatButton, i7.StopPropagationDirective, i1.MatHeaderRow, i1.MatRow, i8.EntityTableRowDirective, i9.EntityTablePaginatorComponent], pipes: [i3.AsyncPipe, i10.SecureImagePipe, i11.TranslatePipe, i12.SanitizeHtmlPipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}"], changeDetection: 0 });
1304
+ } }, directives: [i4.MatTable, i5.MatSort, i6.NgClass, i4.MatColumnDef, i4.MatHeaderCellDef, i4.MatCellDef, i6.NgForOf, i4.MatHeaderRowDef, i4.MatRowDef, i6.NgIf, i4.MatHeaderCell, i7.MatCheckbox, i4.MatCell, i5.MatSortHeader, i8.MatTooltip, i1.NgControlStatusGroup, i1.FormGroupDirective, i9.MatAutocomplete, i10.MatDatepickerToggle, i11.MatSuffix, i12.MatInput, i10.MatDatepickerInput, i1.DefaultValueAccessor, i1.NgControlStatus, i1.FormControlName, i10.MatDatepicker, i1.NumberValueAccessor, i1.MinValidator, i1.MaxValidator, i1.RequiredValidator, i13.MatSelect, i3.MatOption, i9.MatAutocompleteTrigger, i14.MatIcon, i15.MatButton, i16.StopPropagationDirective, i4.MatHeaderRow, i4.MatRow, i17.EntityTableRowDirective, i18.EntityTablePaginatorComponent], pipes: [i6.AsyncPipe, i19.SecureImagePipe, i20.TranslatePipe, i21.SanitizeHtmlPipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}.class_boolean[_ngcontent-%COMP%], .class_icon[_ngcontent-%COMP%], .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}.class_sting[_ngcontent-%COMP%], .class_text[_ngcontent-%COMP%], .class_number_edition[_ngcontent-%COMP%]{text-align:left}td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
883
1305
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
884
1306
  type: Component,
885
1307
  args: [{
886
1308
  selector: 'igo-entity-table',
887
1309
  templateUrl: './entity-table.component.html',
888
1310
  styleUrls: ['./entity-table.component.scss'],
889
- changeDetection: ChangeDetectionStrategy.OnPush
1311
+ changeDetection: ChangeDetectionStrategy.OnPush,
1312
+ providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]
890
1313
  }]
891
- }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { store: [{
1314
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
1315
+ type: Optional
1316
+ }, {
1317
+ type: Self
1318
+ }] }, { type: i1.NgForm, decorators: [{
1319
+ type: Optional
1320
+ }] }, { type: i1.FormControlName, decorators: [{
1321
+ type: Optional
1322
+ }] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, { store: [{
892
1323
  type: Input
893
1324
  }], paginator: [{
894
1325
  type: Input
@@ -909,4 +1340,4 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
909
1340
  }], entitySortChange: [{
910
1341
  type: Output
911
1342
  }] }); })();
912
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBTXhCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztJQ2ZuRCw2QkFBZ0U7SUFDOUQsd0NBRWtGO0lBRnBFLHFQQUF1QztJQUdyRCxpQkFBZTtJQUNqQiwwQkFBZTs7OztJQUhDLGVBQTREO0lBQTVELG9GQUE0RCw4RUFBQTs7O0lBSDlFLDZCQUFpQztJQUMvQiw0R0FLZTs7SUFDakIsMEJBQWU7OztJQU5FLGVBQThCO0lBQTlCLG1FQUE4Qjs7O0lBRmpELDZCQUFzQztJQUNwQyw2RkFPZTtJQUNqQixpQkFBSzs7O0lBUlksZUFBZ0I7SUFBaEIsd0NBQWdCOzs7O0lBU2pDLDhCQUFzQztJQUNwQyx3Q0FHZ0Q7SUFIbEMsNElBQStCLHVCQUF1QixHQUFHLElBQUksSUFBQyxvVUFDd0Isd0JBQXdCLElBRGhELG9SQUFBO0lBSTVFLGlCQUFlO0lBQ2pCLGlCQUFLOzs7O0lBRlcsZUFBaUM7SUFBakMsMERB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QjtRQUMzQixnQ0FNbUM7UUFBakMsc0hBQWlCLGtCQUFjLElBQUM7UUFFaEMsZ0NBQXlFO1FBQ3ZFLG1FQVNLO1FBQ0wsbUVBTUs7UUFDUCwwQkFBZTtRQUVmLHVGQTBGZTtRQUVmLG1FQUlLO1FBQ0wsbUVBVUs7UUFDUCxpQkFBUTtRQUNSLG1IQUs2QjtRQUMvQixpQkFBTTs7UUE1SUYsZUFBMkI7UUFBM0IsNkNBQTJCLDhCQUFBLHFDQUFBO1FBeUJtQyxlQUFtQjtRQUFuQiw4Q0FBbUI7UUE4RjlFLGVBQTBCO1FBQTFCLDZDQUEwQiwwQ0FBQTtRQU1ILGVBQWlCO1FBQWpCLDhDQUFpQjtRQVNoQixlQUFtQjtRQUFuQix3Q0FBbUI7O3VGRHRHckMsb0JBQW9CO2NBTmhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0VBMkNVLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVN0YXRlLFxuICBFbnRpdHlTdG9yZSxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcbiAgRW50aXR5VGFibGVDb2x1bW4sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXG4gIEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3Jcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBlbnRpdHlTb3J0Q2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY29sdW1uIHJlbmRlcmVyIHR5cGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciA9IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXI7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uJ3Mgc3RhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0aW9uLHMgc3RhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rpb25TdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBzdG9yZSdzIHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3Rpb24kJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGRhdGFTb3VyY2VcbiAgICovXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xuICAgKiBtdWx0aXBsZSByZWNvcmRzIGJ5IGhvbGRpbmcgdGhlIHNoaWZ0IGtleSBhbmQgY2hlY2tpbmdcbiAgICogY2hlY2tib3hlcy5cbiAgICovXG4gIHByaXZhdGUgbGFzdFJlY29yZENoZWNrZWRLZXk6IEVudGl0eUtleTtcblxuICAvKipcbiAgICogRW50aXR5IHN0b3JlXG4gICAqL1xuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcblxuICAvKipcbiAgICogVGFibGUgcGFnaW5hdG9yXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcGFnaW5hdG9yKHZhbHVlOiBNYXRQYWdpbmF0b3IpIHtcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjtcbiAgfVxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcblxuICAvKipcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXG4gICAqL1xuICBASW5wdXQoKVxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KClcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBlbnRpdHlDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIHNlbGVjdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgYWRkZWQ6IG9iamVjdFtdO1xuICB9PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBlbnRpdHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8e2NvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFRhYmxlIGhlYWRlcnNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgaGVhZGVycygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcbiAgICAgIC5tYXAoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gWydzZWxlY3Rpb25DaGVja2JveCddLmNvbmNhdChjb2x1bW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8b2JqZWN0PigpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgc2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBhIHNlbGVjdGlvbiBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTsgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTsgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgZml4ZWRIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjsgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFjayB0aGUgc2VsZWN0aW9uIHN0YXRlIHRvIHByb3Blcmx5IGRpc3BsYXkgdGhlIHNlbGVjdGlvbiBjaGVja2JveGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHN0b3JlID0gY2hhbmdlcy5zdG9yZTtcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCkuaW5kZXhPZihmaXJzdFNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xuICAgICAgICBjb25zdCBwYWdlTWluID0gdGhpcy5wYWdpbmF0b3IgPyBwYWdlTWF4IC0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgOiAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xuICAgICAgfSk7XG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gYWxsO1xuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlU3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uJCQpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSQkKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja2J5IGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBpbmRleCBSZWNvcmQgaW5kZXhcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRUcmFja0J5RnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3QsIEVudGl0eVN0YXRlPikgPT4ge1xuICAgICAgcmV0dXJuIHJlY29yZC5yZWY7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGEgcmVmcmVzaCBvZiB0aHJlIHRhYmxlLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlblxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cbiAgICogdGhlIHJlY29yZHMgbmVlZCBhbiB1cGRhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHBhZ2luYXRvckNoYW5nZShldmVudDogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb3J0LCBzb3J0IHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZXZlbnQgU29ydCBldmVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uU29ydChldmVudDoge2FjdGl2ZTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZ30pIHtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5kaXJlY3Rpb247XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXG4gICAgICAuZmluZCgoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlKTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHtcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlLmVtaXQoe2NvbHVtbiwgZGlyZWN0aW9ufSk7XG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UkLm5leHQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgY2xpY2tlZCwgZW1pdCBhbiBldmVudFxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgICB0aGlzLmVudGl0eUNsaWNrLmVtaXQocmVjb3JkLmVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcbiAgICogXCJtYW55XCIgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIGFsd2F5cyBzZWxlY3QgYSBzaW5nbGUsIGV4Y2x1c2l2ZSByb3cuIFNlbGVjdGluZ1xuICAgKiBtdWx0aXBsZSByb3dzIHNob3VsZCBiZSBhY2hpZXZlZCBieSB1c2luZyB0aGUgY2hlY2tib3hlcy5cbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRydWV9LCB0cnVlKTtcbiAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uVG9nZ2xlUm93cyh0b2dnbGU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVBbGwoe3NlbGVjdGVkOiB0b2dnbGV9KTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXRpZXNdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcbiAgICogZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBleGNsdXNpdmUgPSB0b2dnbGUgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0TWFueTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdG9nZ2xlfSwgZXhjbHVzaXZlKTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcbiAgICogZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblNoaWZ0VG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0TWFueSA9PT0gZmFsc2UgfHwgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG9nZ2xlUm93KHRvZ2dsZSwgcmVjb3JkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcbiAgICAvLyB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgaGVsZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvNjIzMlxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xuICAgIGNvbnN0IHJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKHJlY29yZCk7XG4gICAgY29uc3QgbGFzdFJlY29yZENoZWNrZWQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXQodGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSk7XG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xuICAgIGNvbnN0IHNlbGVjdFJlY29yZHMgPSByZWNvcmRzLnNsaWNlKE1hdGgubWluKC4uLmluZGV4ZXMpLCBNYXRoLm1heCguLi5pbmRleGVzKSArIDEpO1xuXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcCgoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5KTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZU1hbnkoZW50aXRpZXMsIHtzZWxlY3RlZDogdG9nZ2xlfSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IGVudGl0aWVzfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pOiBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xuICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aDtcbiAgICByZXR1cm4gc2VsZWN0aW9uQ291bnQgPT09IDAgP1xuICAgICAgc3RhdGVzLk5vbmUgOlxuICAgICAgKHNlbGVjdGlvbkNvdW50ID09PSB0aGlzLnN0b3JlLnN0YXRlVmlldy5jb3VudCA/IHN0YXRlcy5BbGwgOiBzdGF0ZXMuU29tZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZVxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHNvcnRhYmxlID0gY29sdW1uLnNvcnQ7XG4gICAgaWYgKHNvcnRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgcm93IHNob3VsZCBiZSBzZWxlY3RlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJvd0lzU2VsZWN0ZWQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZCA/IHN0YXRlLnNlbGVjdGVkIDogZmFsc2U7XG4gIH1cblxuICBpc0ltZyh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydqcGcnLCAncG5nJywgJ2dpZiddLmluZGV4T2YodmFsdWUuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1VybCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsdWVzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFZhbHVlKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBhbnkge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4udmFsdWVBY2Nlc3NvcihlbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvcihlbnRpdHksIGNvbHVtbi5uYW1lLCByZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcmVuZGVyZXIgb2YgYSBjb2x1bW5cbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgUmVuZGVyZXIgdHlwZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyIHtcbiAgICBpZiAoY29sdW1uLnJlbmRlcmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XG4gICAgfVxuICAgIHJldHVybiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRUYWJsZUNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdpZ28tZW50aXR5LXRhYmxlLXdpdGgtc2VsZWN0aW9uJzogdGhpcy5zZWxlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRIZWFkZXJDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYygpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUucm93Q2xhc3NGdW5jO1xuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRDZWxsQ2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBjbHMgPSB7fTtcblxuICAgIGNvbnN0IHRhYmxlRnVuYyA9IHRoaXMudGVtcGxhdGUuY2VsbENsYXNzRnVuYztcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCB0YWJsZUZ1bmMoZW50aXR5LCBjb2x1bW4sIHJlY29yZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkZ1bmMgPSBjb2x1bW4uY2VsbENsYXNzRnVuYztcbiAgICBpZiAoY29sdW1uRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjbHM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25CdXR0b25DbGljayhcbiAgICBjbGlja0Z1bmM6IChlbnRpdHk6IG9iamVjdCwgcmVjb3JkPzogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHZvaWQsXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PlxuICApIHtcbiAgICBpZiAodHlwZW9mIGNsaWNrRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgPHRhYmxlXG4gICAgbWF0LXRhYmxlXG4gICAgbWF0U29ydFxuICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3MoKVwiXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIlxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydCgkZXZlbnQpXCI+XG5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuU29tZVwiPlxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgPG1hdC1jaGVja2JveCAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zaGlmdEtleSA/IG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KCRldmVudC5jaGVja2VkLCByZWNvcmQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSBhcyBjb2x1bW5SZW5kZXJlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfMKgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uY29tbW9uLmVudGl0eS10YWJsZS50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybEhUTUxcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNhbml0aXplSHRtbFwiPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgIG1hdC1taW5pLWZhYlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyXG4gICAgICBtYXQtaGVhZGVyLXJvd1xuICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXI7XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIj5cbiAgICA8L3RyPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgaWdvRW50aXR5VGFibGVSb3dcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcmVjb3JkOyBjb2x1bW5zOiBoZWFkZXJzO1wiXG4gICAgICBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiXG4gICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICBbc2VsZWN0ZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCJcbiAgICAgIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiXG4gICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyZWNvcmQpXCI+XG4gICAgPC90cj5cbiAgPC90YWJsZT5cbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiXG4gICAgW3N0b3JlXT1cInN0b3JlXCJcbiAgICBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCJcbiAgICBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIlxuICAgIChwYWdpbmF0b3JDaGFuZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIj5cbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
1343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQU9MLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQzFCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBbUQsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDaENkLDZCQUFnRTtJQUM1RCx3Q0FDb0U7SUFEdEQscVBBQXVDO0lBRXJELGlCQUFlO0lBQ25CLDBCQUFlOzs7O0lBSDJDLGVBQTREO0lBQTVELG9GQUE0RCw4RUFBQTs7O0lBRjFILDZCQUFpQztJQUM3Qiw0R0FJZTs7SUFDbkIsMEJBQWU7OztJQUxJLGVBQThCO0lBQTlCLG1FQUE4Qjs7O0lB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QUNqRjs7c0JBOEpJLFFBQVE7O3NCQUFJLElBQUk7O3NCQUNoQixRQUFROztzQkFDUixRQUFRO2tGQWpIRixLQUFLO2tCQUFiLEtBQUs7WUFLTyxTQUFTO2tCQUFyQixLQUFLO1lBYUcsUUFBUTtrQkFBaEIsS0FBSztZQU1OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGFBQWE7a0JBRFosS0FBSztZQU9OLGdCQUFnQjtrQkFEZixLQUFLO1lBTUksV0FBVztrQkFBcEIsTUFBTTtZQUtHLGtCQUFrQjtrQkFBM0IsTUFBTTtZQU9HLGdCQUFnQjtrQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlSZWNvcmQsXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcclxuICBFbnRpdHlUYWJsZUNvbHVtbixcclxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxyXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXHJcbiAgRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvclxyXG59IGZyb20gJy4uL3NoYXJlZCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgTmdGb3JtLCBGb3JtQ29udHJvbE5hbWUsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1lbnRpdHktdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVudGl0eVRhYmxlQ29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBlbnRpdHlTb3J0Q2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gcmVuZGVyZXIgdHlwZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBzZWxlY3Rpb24ncyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3Rpb24scyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvblN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHN0b3JlJ3Mgc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb24kJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGRhdGFTb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcclxuICAgKiBtdWx0aXBsZSByZWNvcmRzIGJ5IGhvbGRpbmcgdGhlIHNoaWZ0IGtleSBhbmQgY2hlY2tpbmdcclxuICAgKiBjaGVja2JveGVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGFzdFJlY29yZENoZWNrZWRLZXk6IEVudGl0eUtleTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW50aXR5IHN0b3JlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRhYmxlIHBhZ2luYXRvclxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdG9yO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgdGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBlbnRpdHkgKHJvdykgaXMgc2VsZWN0ZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBhZGRlZDogb2JqZWN0W107XHJcbiAgfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7Y29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmd9PiA9IG5ldyBFdmVudEVtaXR0ZXIodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgaGVhZGVyc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBoZWFkZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcclxuICAgICAgLm1hcCgoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbHVtbnMgPSBbJ3NlbGVjdGlvbkNoZWNrYm94J10uY29uY2F0KGNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uQ2hlY2tib3ggfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdE1hbnkgfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXI7IH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByb3RlY3RlZCBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3BhcmVudEZvcm06IE5nRm9ybSxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfY29udHJvbE5hbWU6IEZvcm1Db250cm9sTmFtZSxcclxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcclxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZSgnZnItQ0EnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrIHRoZSBzZWxlY3Rpb24gc3RhdGUgdG8gcHJvcGVybHkgZGlzcGxheSB0aGUgc2VsZWN0aW9uIGNoZWNrYm94ZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjaGFuZ2VzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmN1cnJlbnRWYWx1ZSAhPT0gc3RvcmUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgdGV4dCBvciBudW1iZXIgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxyXG4gICAqL1xyXG4gIG9uVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYm9vbGVhbiB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIHNlbGVjdCB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGF1dG9jb21wbGV0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbl0uc2V0VmFsdWUoZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSk7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgZGF0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICBjb25zdCB2YWx1ZSA9IG1vbWVudChldmVudC52YWx1ZSkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIGVkaXRpb24gbW9kZSBmb3Igb25lIHJvd1xyXG4gICAqIE1vcmUgdGhhbiBvbmUgcm93IGNhbiBiZSBlZGl0ZWQgYXQgdGhlIHNhbWUgdGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZW5hYmxlRWRpdChyZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzO1xyXG4gICAgdGhpcy50ZW1wbGF0ZS5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgY29sdW1uLnRpdGxlID0gY29sdW1uLnZhbGlkYXRpb24/Lm1hbmRhdG9yeSAmJiAhY29sdW1uLnRpdGxlLmluY2x1ZGVzKCcqJykgPyBjb2x1bW4udGl0bGUgKyAnIConIDogY29sdW1uLnRpdGxlO1xyXG5cclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtW2tleV0gfHwgaXRlbVtrZXldID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBKU09OLnBhcnNlKGl0ZW1ba2V5XS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0Jykge1xyXG4gICAgICAgIGlmIChjb2x1bW4ubXVsdGlwbGUpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgICAgW2l0ZW1ba2V5XV1cclxuICAgICAgICAgICkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICAgKSk7XHJcblxyXG4gICAgICAgICAgdHlwZW9mIGl0ZW1ba2V5XSA9PT0gJ3N0cmluZycgP1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUocGFyc2VJbnQoaXRlbVtrZXldKSkgOlxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoaXRlbVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgbWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZG9tYWluVmFsdWVzLmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSBpdGVtW2tleV07XHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGZvcm1Db250cm9sVmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkKyQvLnRlc3QoZm9ybUNvbnRyb2xWYWx1ZSkpIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IHBhcnNlSW50KGZvcm1Db250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gZm9ybUNvbnRyb2xWYWx1ZSB8fCBvcHRpb24uaWQgPT09IGZvcm1Db250cm9sVmFsdWUpIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGZvcm1Db250cm9sVmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2tleV0pIHtcclxuICAgICAgICAgICAgbGV0IGRhdGUgPSBtb21lbnQoaXRlbVtrZXldKTtcclxuICAgICAgICAgICAgaXRlbVtrZXldID0gZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICAgICAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNbbmV3S2V5XSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXSAmJiB0aGlzLmdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZCA9IHJlY29yZHNbMF07XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCkuaW5kZXhPZihmaXJzdFNlbGVjdGVkKTtcclxuICAgICAgICBjb25zdCBwYWdlTWF4ID0gdGhpcy5wYWdpbmF0b3IgPyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSAqICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKyAxKSA6IDA7XHJcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcclxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XHJcbiAgICAgICAgICBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPj0gcGFnZU1heCkpIHtcclxuICAgICAgICAgIGNvbnN0IHBhZ2VUb1JlYWNoID0gTWF0aC5mbG9vcihmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gLyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlJC5uZXh0KHRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlKHJlY29yZHMpKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UkJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCQoKS5zdWJzY3JpYmUoKGFsbCkgPT4ge1xyXG4gICAgICBpZiAoYWxsWzBdKSB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0KGFsbFswXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBhbGw7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmJpbmQgdGhlIHN0b3JlIHdhdGNoZXJcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVN0b3JlKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uJCQpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24kJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSQkKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2J5IGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gaW5kZXggUmVjb3JkIGluZGV4XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3QsIEVudGl0eVN0YXRlPikgPT4ge1xyXG4gICAgICByZXR1cm4gcmVjb3JkLnJlZjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGEgcmVmcmVzaCBvZiB0aHJlIHRhYmxlLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlblxyXG4gICAqIHRoZSBkYXRhIHNvdXJjZSBkb2Vzbid0IGVtaXQgYSBuZXcgdmFsdWUgYnV0IGZvciBzb21lIHJlYXNvblxyXG4gICAqIHRoZSByZWNvcmRzIG5lZWQgYW4gdXBkYXRlLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHBhZ2luYXRvckNoYW5nZShldmVudDogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvciA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc29ydCwgc29ydCB0aGUgc3RvcmVcclxuICAgKiBAcGFyYW0gZXZlbnQgU29ydCBldmVudFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uU29ydChldmVudDoge2FjdGl2ZTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZ30pIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbjtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xyXG4gICAgICAuZmluZCgoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlKTtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHtcclxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbiksXHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHtjb2x1bW4sIGRpcmVjdGlvbn0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UkLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBjbGlja2VkLCBlbWl0IGFuIGV2ZW50XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd0NsaWNrKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICAgIHRoaXMuZW50aXR5Q2xpY2suZW1pdChyZWNvcmQuZW50aXR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHNlbGVjdGVkLCBzZWxlY3QgaXQgaW4gdGhlIHN0b3JlIGFuZCBlbWl0IGFuIGV2ZW50LiBFdmVuIGlmXHJcbiAgICogXCJtYW55XCIgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIGFsd2F5cyBzZWxlY3QgYSBzaW5nbGUsIGV4Y2x1c2l2ZSByb3cuIFNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJvd3Mgc2hvdWxkIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBjaGVja2JveGVzLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Sb3dTZWxlY3QocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRydWV9LCB0cnVlKTtcclxuICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IG9yIHVuc2VsZWN0IGFsbCByb3dzIGF0IG9uY2UuIE9uIHNlbGVjdCwgZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93cyh0b2dnbGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVBbGwoe3NlbGVjdGVkOiB0b2dnbGV9KTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgIC5hbGwoKVxyXG4gICAgICAgIC5tYXAoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5lbnRpdHkpO1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0aWVzXX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgZXhjbHVzaXZlID0gdG9nZ2xlID09PSB0cnVlICYmICF0aGlzLnNlbGVjdE1hbnk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdG9nZ2xlfSwgZXhjbHVzaXZlKTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXHJcbiAgICogZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25TaGlmdFRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdE1hbnkgPT09IGZhbHNlIHx8IHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9uVG9nZ2xlUm93KHRvZ2dsZSwgcmVjb3JkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIG1hdCBjaGVja2JveCB3cm9uZyBiZWhhdmlvclxyXG4gICAgLy8gd2hlbiB0aGUgc2hpZnQga2V5IGlzIGhlbGQuXHJcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvNjIzMlxyXG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNlbGVjdE5vZGUoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCByZWNvcmRzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCk7XHJcbiAgICBjb25zdCByZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihyZWNvcmQpO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZENoZWNrZWQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXQodGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSk7XHJcbiAgICBjb25zdCBsYXN0UmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YobGFzdFJlY29yZENoZWNrZWQpO1xyXG4gICAgY29uc3QgaW5kZXhlcyA9IFtyZWNvcmRJbmRleCwgbGFzdFJlY29yZEluZGV4XTtcclxuICAgIGNvbnN0IHNlbGVjdFJlY29yZHMgPSByZWNvcmRzLnNsaWNlKE1hdGgubWluKC4uLmluZGV4ZXMpLCBNYXRoLm1heCguLi5pbmRleGVzKSArIDEpO1xyXG5cclxuICAgIGNvbnN0IGVudGl0aWVzID0gc2VsZWN0UmVjb3Jkcy5tYXAoKF9yZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBfcmVjb3JkLmVudGl0eSk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZU1hbnkoZW50aXRpZXMsIHtzZWxlY3RlZDogdG9nZ2xlfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBlbnRpdGllc30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgc2VsZWN0aW9uIHN0YXRlXHJcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pOiBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlIHtcclxuICAgIGNvbnN0IHN0YXRlcyA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGg7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ291bnQgPT09IDAgP1xyXG4gICAgICBzdGF0ZXMuTm9uZSA6XHJcbiAgICAgIChzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnQgPyBzdGF0ZXMuQWxsIDogc3RhdGVzLlNvbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvcnRhYmxlID0gY29sdW1uLnNvcnQ7XHJcbiAgICBpZiAoc29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc29ydGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSByb3cgc2hvdWxkIGJlIHNlbGVjdGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcm93SXNTZWxlY3RlZChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcclxuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZCA/IHN0YXRlLnNlbGVjdGVkIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0ltZyh2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgWydqcGcnLCAncG5nJywgJ2dpZiddLmluZGV4T2YodmFsdWUuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVXJsKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHZhbHVlLnNsaWNlKDAsIDgpID09PSAnaHR0cHM6Ly8nIHx8IHZhbHVlLnNsaWNlKDAsIDcpID09PSAnaHR0cDovLydcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsdWVzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFZhbHVlKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBhbnkge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGlmIChjb2x1bW4udmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4udmFsdWVBY2Nlc3NvcihlbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvcihlbnRpdHksIGNvbHVtbi5uYW1lLCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgdmFsdWUgPSB0aGlzLnN0b3JlLmdldFByb3BlcnR5KGVudGl0eSwgY29sdW1uLm5hbWUpO1xyXG5cclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKXtcclxuICAgICAgICAgIHZhbHVlID0gQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpKXtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gJyYjMTAwMDM7JyA6ICcnOyAvLyBjaGVjayBtYXJrXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0JyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGlmIChjb2x1bW4ubXVsdGlwbGUpIHtcclxuICAgICAgICBsZXQgbGlzdF9pZDtcclxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSA6IGxpc3RfaWQgPSB2YWx1ZTtcclxuICAgICAgICBsZXQgbGlzdF9vcHRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAobGlzdF9pZC5pbmNsdWRlcyhvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gbGlzdF9pZCA6IHZhbHVlID0gbGlzdF9vcHRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gb3B0aW9uLmlkIDogdmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcclxuICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgbGV0IGRhdGUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgICAgICAgdmFsdWUgPSBkYXRlLmZvcm1hdCgpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsaWRhdGlvbiB2YWx1ZXNcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWUgKGZhbHNlIGlmIG5vIHZhbGlkYXRpb24gb3Igbm90IHRoZSBvbmUgY29uY2VybmVkKVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCB2YWxpZGF0aW9uVHlwZTogc3RyaW5nKTogYW55IHtcclxuICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNFZGl0aW9uKHJlY29yZCkge1xyXG4gICAgcmV0dXJuIHJlY29yZC5lbnRpdHkuZWRpdGlvbiA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdHlwZSBvZiByZW5kZXJlciBvZiBhIGNvbHVtblxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgUmVuZGVyZXIgdHlwZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyIHtcclxuICAgIGlmIChjb2x1bW4ucmVuZGVyZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdGFibGUgbmdDbGFzc1xyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUYWJsZUNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnaWdvLWVudGl0eS10YWJsZS13aXRoLXNlbGVjdGlvbic6IHRoaXMuc2VsZWN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgaGVhZGVyIG5nQ2xhc3NcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0SGVhZGVyQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Um93Q2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUucm93Q2xhc3NGdW5jO1xyXG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICByZXR1cm4gZnVuYyhlbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q2VsbENsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGNscyA9IHt9O1xyXG5cclxuICAgIGNvbnN0IHRhYmxlRnVuYyA9IHRoaXMudGVtcGxhdGUuY2VsbENsYXNzRnVuYztcclxuICAgIGlmICh0YWJsZUZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgdGFibGVGdW5jKGVudGl0eSwgY29sdW1uLCByZWNvcmQpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb2x1bW5GdW5jID0gY29sdW1uLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAoY29sdW1uRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCBjb2x1bW5GdW5jKGVudGl0eSwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNscztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYSBidXR0b24gaXMgY2xpY2tlZFxyXG4gICAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkJ1dHRvbkNsaWNrKFxyXG4gICAgY2xpY2tGdW5jOiAoZW50aXR5OiBvYmplY3QsIHJlY29yZD86IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB2b2lkLFxyXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PlxyXG4gICkge1xyXG4gICAgdGhpcy5lbmFibGVFZGl0KHJlY29yZCk7XHJcbiAgICBpZiAodHlwZW9mIGNsaWNrRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjbGlja0Z1bmMocmVjb3JkLmVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGNvbHVtbiBuYW1lIHdpdGhvdXQgaGlzIFwicHJvcGVydGllc1wiIHRhZyAodXNlZnVsIGZvciBlZGl0aW9uIHdvcmtzcGFjZSBwcm9wZXJ0aWVzKVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW46IHN0cmluZykge1xyXG4gICAgaWYgKGNvbHVtbi5pbmNsdWRlcygncHJvcGVydGllcy4nKSkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnNwbGl0KCcuJylbMV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XHJcbiAgICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzcygpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0KCRldmVudClcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93cygkZXZlbnQuY2hlY2tlZClcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5BbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIiAoY2xpY2spPVwiJGV2ZW50LnNoaWZ0S2V5ID9cclxuICAgICAgICAgICAgICAgIG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCxyZWNvcmQpXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGVtcGxhdGUuY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSBhcyBjb2x1bW5SZW5kZXJlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxEZWZhdWx0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2lnby5jb21tb24uZW50aXR5LXRhYmxlLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHxcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dCBlZGl0aW9uXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAqbmdJZj1cImlzRWRpdGlvbihyZWNvcmQpO2Vsc2UgaXNVbnNhbml0aXplZEhUTUxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGltZVwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwiOTAwXCIgKGZvY3VzKT1cImNvbHVtbi5vbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImNvbHVtbi5vbkNoYW5nZSgkZXZlbnQpXCIgKGJsdXIpPVwiY29sdW1uLm9uQmx1cigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbnVtYmVyJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwie3tjb2x1bW4uc3RlcH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seT1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5Jyl9fVwiIHJlcXVpcmVkPVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5Jyl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtaW5WYWx1ZScpfX1cIiBtYXg9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiICpuZ0lmPVwiIWNvbHVtbi50eXBlIHx8IGNvbHVtbi50eXBlID09PSdzdHJpbmcnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQm9vbGVhblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsJGV2ZW50KVwiPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLmRvbWFpblZhbHVlc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIiB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsV2lkdGg9XCI0MzBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxVbnNhbml0aXplZEhUTUxcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2FuaXRpemVIdG1sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCIgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfHwgY29sdW1uLmljb259fVwiIChjbGljayk9XCJjb2x1bW4ub25DbGljaygkZXZlbnQpXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCkgPT09IGJ1dHRvbi5lZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIiAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e2J1dHRvbi5pY29ufX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSAhPT0gJ21hdC1pY29uLWJ1dHRvbidcIiBpZ29TdG9wUHJvcGFnYXRpb24gbWF0LW1pbmktZmFiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCIgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcmVjb3JkKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiaGVhZGVyczsgc3RpY2t5OiBmaXhlZEhlYWRlcjtcIiBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCI+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHIgbWF0LXJvdyBpZ29FbnRpdHlUYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJlY29yZDsgY29sdW1uczogaGVhZGVycztcIiBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyZWNvcmQpXCIgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIiBbc2VsZWN0ZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCIgKHNlbGVjdCk9XCJvblJvd1NlbGVjdChyZWNvcmQpXCIgKGNsaWNrKT1cIm9uUm93Q2xpY2socmVjb3JkKVwiPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiIFtzdG9yZV09XCJzdG9yZVwiIFtwYWdpbmF0b3JPcHRpb25zXT1cInBhZ2luYXRvck9wdGlvbnNcIiBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIiAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L2lnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yPlxyXG48L2Rpdj4iXX0=