@sapui5/sap.fe.macros 1.141.0 → 1.142.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 (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -6,10 +6,12 @@ import type ChartChart from "sap/chart/Chart";
6
6
  import type { PropertiesOf } from "sap/fe/base/ClassSupport";
7
7
  import { aggregation, association, defineUI5Class, event, implementInterface, property, xmlEventHandler } from "sap/fe/base/ClassSupport";
8
8
  import { controllerExtensionHandler } from "sap/fe/base/HookSupport";
9
+ import type { StartupParameters } from "sap/fe/core/AppComponent";
9
10
  import CommonUtils from "sap/fe/core/CommonUtils";
10
11
  import type TemplateComponent from "sap/fe/core/TemplateComponent";
11
12
  import type { NavigationParameter } from "sap/fe/core/controllerextensions/ViewState";
12
13
  import type IViewStateContributor from "sap/fe/core/controllerextensions/viewState/IViewStateContributor";
14
+ import type { OverflowGroupsConfiguration } from "sap/fe/core/converters/ManifestSettings";
13
15
  import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
14
16
  import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
15
17
  import type { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
@@ -23,6 +25,7 @@ import Action from "sap/fe/macros/chart/Action";
23
25
  import type ActionGroup from "sap/fe/macros/chart/ActionGroup";
24
26
  import ChartRuntime from "sap/fe/macros/chart/ChartRuntime";
25
27
  import ChartUtils from "sap/fe/macros/chart/ChartUtils";
28
+ import type FilterBar from "sap/fe/macros/controls/FilterBar";
26
29
  import type ISingleSectionContributor from "sap/fe/macros/controls/section/ISingleSectionContributor";
27
30
  import type { ConsumerData } from "sap/fe/macros/controls/section/ISingleSectionContributor";
28
31
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
@@ -40,7 +43,6 @@ import type LayoutData from "sap/ui/core/LayoutData";
40
43
  import { TitleLevel } from "sap/ui/core/library";
41
44
  import type MDCChart from "sap/ui/mdc/Chart";
42
45
  import type ChartDelegate from "sap/ui/mdc/ChartDelegate";
43
- import type FilterBar from "sap/ui/mdc/FilterBar";
44
46
  import type ActionToolbarAction from "sap/ui/mdc/actiontoolbar/ActionToolbarAction";
45
47
  import type { AppState, Items, Sorters } from "sap/ui/mdc/p13n/StateUtil";
46
48
  import StateUtil from "sap/ui/mdc/p13n/StateUtil";
@@ -49,10 +51,12 @@ import Filter from "sap/ui/model/Filter";
49
51
  import type Context from "sap/ui/model/odata/v4/Context";
50
52
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
51
53
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
54
+ import type { EventHandler } from "types/extension_types";
52
55
  import type { PropertyInfo } from "./DelegateUtil";
53
56
  import MacroAPI from "./MacroAPI";
54
57
  import type { ActionOrActionGroup, ChartContextObjectPath, ChartCustomData, CommandAction } from "./chart/MdcChartTemplate";
55
58
  import { getMdcChartTemplate } from "./chart/MdcChartTemplate";
59
+ import type OverflowGroup from "./chart/OverflowGroup";
56
60
  import PresentationVariantToStateUtilsPV from "./chart/adapter/ChartPvToStateUtils";
57
61
  import { createChartCardParams } from "./insights/AnalyticalInsightsHelper";
58
62
  import type { ControlState } from "./insights/CommonInsightsHelper";
@@ -262,6 +266,8 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
262
266
 
263
267
  chartActions?: BaseAction[] = [];
264
268
 
269
+ overflowGroups?: OverflowGroupsConfiguration;
270
+
265
271
  filter?: string;
266
272
 
267
273
  visible?: string;
@@ -322,6 +328,16 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
322
328
  })
323
329
  actions!: Action[] | ActionGroup[];
324
330
 
331
+ /**
332
+ * Aggregate overflowGroups of the chart.
333
+ * @public
334
+ */
335
+ @aggregation({
336
+ type: "sap.fe.macros.chart.OverflowGroup",
337
+ multiple: true
338
+ })
339
+ actionOverflowGroups?: OverflowGroup[];
340
+
325
341
  /**
326
342
  * Gets contexts from the chart that have been selected by the user.
327
343
  * @returns Contexts of the rows selected by the user
@@ -336,7 +352,7 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
336
352
  * @public
337
353
  */
338
354
  @event()
339
- selectionChange!: Function;
355
+ selectionChange!: EventHandler<UI5Event<{ data: unknown[]; selected: boolean }, Chart>>;
340
356
 
341
357
  /**
342
358
  * An event triggered when the chart requests data.
@@ -847,13 +863,13 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
847
863
  * @returns A promise that resolves when the variant has been applied.
848
864
  */
849
865
  async handleVariantIdPassedViaURLParams(): Promise<unknown> {
850
- const urlParams = this.getStartupParameters();
851
- const chartVariantId = urlParams?.["sap-ui-fe-chart-variant-id"]?.[0];
866
+ const urlParams = await this.getStartupParameters();
867
+ const chartVariantId = urlParams["sap-ui-fe-chart-variant-id"]?.[0];
852
868
  const view = CommonUtils.getTargetView(this);
853
869
  const viewData = view.getViewData();
854
870
  const vmType = viewData.variantManagement;
855
871
  const vm = (this.getContent() as MDCChart)?.getVariant();
856
- if (vm && chartVariantId && vmType === "Control") {
872
+ if (vm && chartVariantId && typeof chartVariantId === "string" && vmType === "Control") {
857
873
  const variantToApply = vm.getVariants().find((variant) => variant.getKey() === chartVariantId);
858
874
  const ControlVariantApplyAPI = (await import("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
859
875
  return ControlVariantApplyAPI.activateVariant({
@@ -866,14 +882,12 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
866
882
  /**
867
883
  * Retrieves the startup parameters from the application component data.
868
884
  * These parameters contain URL query parameters that were passed when the application was started.
869
- * @returns The startup parameters as a key-value mapping where each key can have multiple values,
870
- * or undefined if no parameters are available or if the component chain is not accessible.
885
+ * @returns The startup parameters.
871
886
  */
872
- getStartupParameters(): Record<string, string[]> | undefined {
887
+ async getStartupParameters(): Promise<StartupParameters> {
873
888
  const controller = this.getPageController();
874
- const appComponent = controller?.getAppComponent();
875
- const componentData = appComponent?.getComponentData();
876
- return componentData?.startupParameters as unknown as Record<string, string[]>;
889
+ const appComponent = controller.getAppComponent();
890
+ return appComponent.getStartupParameters();
877
891
  }
878
892
 
879
893
  /**
@@ -2,11 +2,12 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/UIFormatters", "sap/m/Avatar", "sap/m/Label", "sap/m/ResponsivePopover", "sap/ui/core/Element", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, ClassSupport, EventDelegateHook, BuildingBlock, CollaborationFormatters, ModelHelper, ResourceModelHelper, TypeGuards, UIFormatters, Avatar, Label, ResponsivePopover, UI5Element, _jsx) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/m/Avatar", "sap/m/Label", "sap/m/ResponsivePopover", "sap/ui/core/Element", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, ClassSupport, EventDelegateHook, BuildingBlock, CollaborationFormatters, ModelHelper, ResourceModelHelper, TypeGuards, DataModelPathHelper, UIFormatters, Avatar, Label, ResponsivePopover, UI5Element, _jsx) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;
9
9
  var _exports = {};
10
+ var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
10
11
  var isProperty = TypeGuards.isProperty;
11
12
  var property = ClassSupport.property;
12
13
  var event = ClassSupport.event;
@@ -27,10 +28,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
27
28
  type: "string"
28
29
  }), _dec3 = property({
29
30
  type: "string"
30
- }), _dec4 = event(), _dec5 = property({
31
+ }), _dec4 = event(), _dec5 = event(), _dec6 = property({
31
32
  type: "boolean",
32
33
  defaultValue: false
33
- }), _dec6 = property({
34
+ }), _dec7 = property({
34
35
  type: "object"
35
36
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
36
37
  function CollaborativeDraftHandler(idOrSettings, settings) {
@@ -55,16 +56,29 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
55
56
  * Event fired when the lock status changes.
56
57
  *
57
58
  * Parameters:<BR>
58
- * - isLocked : true if the property is locked, false otherwise<BR>
59
- * - lockingUserID: the ID of the user locking the property (undefined if not locked)<BR>
60
- * - lockingUserName: the name of the user locking the property (undefined if not locked)<BR>
61
- * - lockingUserInitials: the initials of the user locking the property (undefined if not locked)<BR>
62
- * - lockingUserColor: the color associated to the user locking the property (undefined if not locked)<BR>
59
+ * - isLocked : True if the property is locked, false otherwise<BR>
60
+ * - lockingUserID: The ID of the user locking the property (undefined if not locked)<BR>
61
+ * - lockingUserName: The name of the user locking the property (undefined if not locked)<BR>
62
+ * - lockingUserInitials: The initials of the user locking the property (undefined if not locked)<BR>
63
+ * - lockingUserColor: The color associated to the user locking the property (undefined if not locked)<BR>
63
64
  * @public
64
65
  * @ui5-experimental-since 1.141.0
65
66
  * @since 1.141.0
66
67
  */
67
68
  _initializerDefineProperty(_this, "lockChange", _descriptor3, _this);
69
+ /**
70
+ * Event fired when the user clicks on the avatar.
71
+ *
72
+ * Parameters:<BR>
73
+ * - lockingUserID: The ID of the user locking the property<BR>
74
+ * - lockingUserName: The name of the user locking the property<BR>
75
+ * - lockingUserInitials: The initials of the user locking the property<BR>
76
+ * - lockingUserColor: The color associated to the user locking the property<BR>
77
+ * @public
78
+ * @ui5-experimental-since 1.142.0
79
+ * @since 1.142.0
80
+ */
81
+ _initializerDefineProperty(_this, "avatarPress", _descriptor4, _this);
68
82
  /**
69
83
  * If set to true, the standard Avatar control is displayed to indicate the lock status.
70
84
  * If set to false, nothing is displayed.
@@ -72,25 +86,16 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
72
86
  * @ui5-experimental-since 1.141.0
73
87
  * @since 1.141.0
74
88
  */
75
- _initializerDefineProperty(_this, "showAvatar", _descriptor4, _this);
89
+ _initializerDefineProperty(_this, "showAvatar", _descriptor5, _this);
76
90
  /**
77
91
  * Internal property to receive the lock data
78
92
  */
79
- _initializerDefineProperty(_this, "lockInfo", _descriptor5, _this);
93
+ _initializerDefineProperty(_this, "lockInfo", _descriptor6, _this);
80
94
  return _this;
81
95
  }
82
96
  _exports = CollaborativeDraftHandler;
83
97
  _inheritsLoose(CollaborativeDraftHandler, _BuildingBlock);
84
98
  var _proto = CollaborativeDraftHandler.prototype;
85
- _proto.getFullMetaPath = function getFullMetaPath() {
86
- if (this.metaPath.startsWith("/")) {
87
- return this.metaPath;
88
- } else if (this.contextPath.endsWith("/")) {
89
- return `${this.contextPath}${this.metaPath}`;
90
- } else {
91
- return `${this.contextPath}/${this.metaPath}`;
92
- }
93
- };
94
99
  _proto.onMetadataAvailable = function onMetadataAvailable() {
95
100
  const owner = this._getOwner();
96
101
  if (!owner) {
@@ -99,15 +104,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
99
104
  if (!ModelHelper.isCollaborationDraftSupported(owner.getAppComponent().getModel().getMetaModel())) {
100
105
  return;
101
106
  }
102
- this.contextPath ??= this.getOwnerContextPath();
103
- const fullMetaPath = this.getFullMetaPath();
104
- const objectPath = this.getDataModelObjectPath(fullMetaPath);
107
+ const objectPath = this.getDataModelObjectForMetaPath(this.metaPath, this.contextPath);
105
108
  if (!objectPath || !isProperty(objectPath.targetObject)) {
106
- throw new Error(`CollaborativeDraftHandler: the provided metaPath '${fullMetaPath}' does not point to a valid property`);
109
+ throw new Error(`CollaborativeDraftHandler: the provided metaPath '${this.metaPath}' does not point to a valid property`);
107
110
  }
108
111
 
109
112
  // Bind the lockInfo property to the corresponding lockInfo in the internal model
110
- const keysBindingParts = objectPath.targetEntityType.keys.map(key => {
113
+ const keysBindingParts = objectPath.contextLocation?.targetEntityType.keys.map(key => {
111
114
  return {
112
115
  path: key.name,
113
116
  targetType: "any"
@@ -115,7 +118,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
115
118
  });
116
119
  const bindingInfo = {
117
120
  parts: [{
118
- path: `internal>/collaboration/activities${fullMetaPath}`,
121
+ path: `internal>/collaboration/activities${getTargetObjectPath(objectPath)}`,
119
122
  targetType: "any"
120
123
  }, ...keysBindingParts],
121
124
  formatter: CollaborationFormatters.getCollaborationInfo
@@ -149,8 +152,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
149
152
  * @returns The Avatar control
150
153
  */;
151
154
  _proto.createCollaborationAvatar = function createCollaborationAvatar(objectPath) {
152
- const collaborationExpression = UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.hasCollaborationActivity);
153
- const collaborationHasActivityExpression = compileExpression(collaborationExpression);
155
+ const collaborationHasActivityExpression = compileExpression(UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.hasCollaborationActivity));
154
156
  const collaborationInitialsExpression = compileExpression(UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityInitials));
155
157
  const collaborationColorExpression = compileExpression(UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityColor));
156
158
  return _jsx(Avatar, {
@@ -178,6 +180,16 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
178
180
  _proto.onAvatarPress = function onAvatarPress(evt) {
179
181
  const avatar = evt.getSource();
180
182
  const block = avatar.getParent();
183
+ if (block.hasListeners("avatarPress")) {
184
+ // If the event is handled by the application, do not open the popover
185
+ block.fireEvent("avatarPress", {
186
+ lockingUserID: block.lockInfo?.id,
187
+ lockingUserName: block.lockInfo?.name,
188
+ lockingUserInitials: block.lockInfo?.initials,
189
+ lockingUserColor: block.lockInfo?.color
190
+ });
191
+ return;
192
+ }
181
193
  const view = this.getPageController().getView();
182
194
  const resourceModel = ResourceModelHelper.getResourceModel(view);
183
195
  let popover = UI5Element.getElementById(`manageCollaborationDraft--editUser`);
@@ -211,14 +223,19 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
211
223
  enumerable: true,
212
224
  writable: true,
213
225
  initializer: null
214
- }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "showAvatar", [_dec5], {
226
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "avatarPress", [_dec5], {
227
+ configurable: true,
228
+ enumerable: true,
229
+ writable: true,
230
+ initializer: null
231
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "showAvatar", [_dec6], {
215
232
  configurable: true,
216
233
  enumerable: true,
217
234
  writable: true,
218
235
  initializer: function () {
219
236
  return false;
220
237
  }
221
- }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "lockInfo", [_dec6], {
238
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "lockInfo", [_dec7], {
222
239
  configurable: true,
223
240
  enumerable: true,
224
241
  writable: true,
@@ -227,4 +244,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
227
244
  _exports = CollaborativeDraftHandler;
228
245
  return _exports;
229
246
  }, false);
230
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiZXZlbnQiLCJfZGVjNSIsImRlZmF1bHRWYWx1ZSIsIl9kZWM2IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwiaWRPclNldHRpbmdzIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEZ1bGxNZXRhUGF0aCIsIm1ldGFQYXRoIiwic3RhcnRzV2l0aCIsImNvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwib3duZXIiLCJfZ2V0T3duZXIiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiZnVsbE1ldGFQYXRoIiwib2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwiRXJyb3IiLCJrZXlzQmluZGluZ1BhcnRzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJwYXRoIiwibmFtZSIsInRhcmdldFR5cGUiLCJiaW5kaW5nSW5mbyIsInBhcnRzIiwiZm9ybWF0dGVyIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJnZXRDb2xsYWJvcmF0aW9uSW5mbyIsImJpbmRQcm9wZXJ0eSIsImNvbnRlbnQiLCJzaG93QXZhdGFyIiwiY3JlYXRlQ29sbGFib3JhdGlvbkF2YXRhciIsInNldExvY2tJbmZvIiwibG9ja0luZm8iLCJmaXJlRXZlbnQiLCJpc0xvY2tlZCIsInVuZGVmaW5lZCIsImxvY2tpbmdVc2VySUQiLCJpZCIsImxvY2tpbmdVc2VyTmFtZSIsImxvY2tpbmdVc2VySW5pdGlhbHMiLCJpbml0aWFscyIsImxvY2tpbmdVc2VyQ29sb3IiLCJjb2xvciIsImNvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJjb2xsYWJvcmF0aW9uSGFzQWN0aXZpdHlFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMiLCJjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IiLCJfanN4IiwiQXZhdGFyIiwidmlzaWJsZSIsImRpc3BsYXlTaXplIiwiY3VzdG9tRGlzcGxheVNpemUiLCJjdXN0b21Gb250U2l6ZSIsImJhY2tncm91bmRDb2xvciIsInByZXNzIiwiZXZ0Iiwib25BdmF0YXJQcmVzcyIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwic3RvcFRhcFByb3BhZ2F0aW9uIiwiYXZhdGFyIiwiZ2V0U291cmNlIiwiYmxvY2siLCJnZXRQYXJlbnQiLCJ2aWV3IiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRWaWV3IiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwicG9wb3ZlciIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlJlc3BvbnNpdmVQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZFN0eWxlQ2xhc3MiLCJhZGREZXBlbmRlbnQiLCJkZXN0cm95Q29udGVudCIsImFkZENvbnRlbnQiLCJMYWJlbCIsInRleHQiLCJnZXRUZXh0Iiwib3BlbkJ5IiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEV2ZW50RGVsZWdhdGVIb29rIGZyb20gXCJzYXAvZmUvYmFzZS9FdmVudERlbGVnYXRlSG9va1wiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IHR5cGUgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEF2YXRhciwgeyB0eXBlIEF2YXRhciRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbi8qKlxuICogQSBCdWlsZGluZ0Jsb2NrIHRvIHdhdGNoIHRoZSBsb2NrIHN0YXR1cyBvZiBhIHByb3BlcnR5IGFuZCB0byByZWFjdCBvbiBjaGFuZ2VzLlxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuICogQHNpbmNlIDEuMTQxLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5Db2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxBdmF0YXI+IHtcblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLCBhbmQgY2FuIGJlIG92ZXJ3cml0dGVuLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGxvY2sgc3RhdHVzIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFBhcmFtZXRlcnM6PEJSPlxuXHQgKiAtIGlzTG9ja2VkIDogdHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbG9ja2VkLCBmYWxzZSBvdGhlcndpc2U8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJJRDogdGhlIElEIG9mIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5ICh1bmRlZmluZWQgaWYgbm90IGxvY2tlZCk8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJOYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VySW5pdGlhbHM6IHRoZSBpbml0aWFscyBvZiB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VyQ29sb3I6IHRoZSBjb2xvciBhc3NvY2lhdGVkIHRvIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5ICh1bmRlZmluZWQgaWYgbm90IGxvY2tlZCk8QlI+XG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QGV2ZW50KClcblx0bG9ja0NoYW5nZT86IEV2ZW50SGFuZGxlcjxcblx0XHRVSTVFdmVudDxcblx0XHRcdHtcblx0XHRcdFx0aXNMb2NrZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGxvY2tpbmdVc2VySUQ/OiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VyTmFtZT86IHN0cmluZztcblx0XHRcdFx0bG9ja2luZ1VzZXJJbml0aWFscz86IHN0cmluZztcblx0XHRcdFx0bG9ja2luZ1VzZXJDb2xvcj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyXG5cdFx0PlxuXHQ+O1xuXG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHN0YW5kYXJkIEF2YXRhciBjb250cm9sIGlzIGRpc3BsYXllZCB0byBpbmRpY2F0ZSB0aGUgbG9jayBzdGF0dXMuXG5cdCAqIElmIHNldCB0byBmYWxzZSwgbm90aGluZyBpcyBkaXNwbGF5ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0F2YXRhciA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0byByZWNlaXZlIHRoZSBsb2NrIGRhdGFcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIgfSlcblx0bG9ja0luZm8/OiBVc2VyQWN0aXZpdHk7XG5cblx0Y29uc3RydWN0b3IoaWRPclNldHRpbmdzOiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8Q29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlcj4sIHNldHRpbmdzPzogUHJvcGVydGllc09mPENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXI+KSB7XG5cdFx0c3VwZXIoaWRPclNldHRpbmdzLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRwcml2YXRlIGdldEZ1bGxNZXRhUGF0aCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tZXRhUGF0aDtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5jb250ZXh0UGF0aH0ke3RoaXMubWV0YVBhdGh9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGAke3RoaXMuY29udGV4dFBhdGh9LyR7dGhpcy5tZXRhUGF0aH1gO1xuXHRcdH1cblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGlmICghb3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGV4dFBhdGggPz89IHRoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpIGFzIHN0cmluZztcblx0XHRjb25zdCBmdWxsTWV0YVBhdGggPSB0aGlzLmdldEZ1bGxNZXRhUGF0aCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KGZ1bGxNZXRhUGF0aCk7XG5cdFx0aWYgKCFvYmplY3RQYXRoIHx8ICFpc1Byb3BlcnR5KG9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyOiB0aGUgcHJvdmlkZWQgbWV0YVBhdGggJyR7ZnVsbE1ldGFQYXRofScgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBwcm9wZXJ0eWApO1xuXHRcdH1cblxuXHRcdC8vIEJpbmQgdGhlIGxvY2tJbmZvIHByb3BlcnR5IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvY2tJbmZvIGluIHRoZSBpbnRlcm5hbCBtb2RlbFxuXHRcdGNvbnN0IGtleXNCaW5kaW5nUGFydHMgPSBvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgcGF0aDoga2V5Lm5hbWUsIHRhcmdldFR5cGU6IFwiYW55XCIgfTtcblx0XHR9KTtcblx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IHtcblx0XHRcdHBhcnRzOiBbeyBwYXRoOiBgaW50ZXJuYWw+L2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7ZnVsbE1ldGFQYXRofWAsIHRhcmdldFR5cGU6IFwiYW55XCIgfSwgLi4ua2V5c0JpbmRpbmdQYXJ0c10sXG5cdFx0XHRmb3JtYXR0ZXI6IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25JbmZvXG5cdFx0fTtcblxuXHRcdHRoaXMuYmluZFByb3BlcnR5KFwibG9ja0luZm9cIiwgYmluZGluZ0luZm8pO1xuXG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5zaG93QXZhdGFyKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbGxhYm9yYXRpb25BdmF0YXIob2JqZWN0UGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgbG9ja0luZm8gcHJvcGVydHkgYW5kIGZpcmUgdGhlIGxvY2tDaGFuZ2UgZXZlbnQgaWYgdGhlcmUgaXMgYSBjaGFuZ2UuXG5cdCAqIEBwYXJhbSBsb2NrSW5mb1xuXHQgKi9cblx0c2V0TG9ja0luZm8obG9ja0luZm86IG9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2tJbmZvICE9PSBsb2NrSW5mbykge1xuXHRcdFx0dGhpcy5sb2NrSW5mbyA9IGxvY2tJbmZvIGFzIFVzZXJBY3Rpdml0eSB8IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibG9ja0NoYW5nZVwiLCB7XG5cdFx0XHRcdGlzTG9ja2VkOiB0aGlzLmxvY2tJbmZvICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdGxvY2tpbmdVc2VySUQ6IHRoaXMubG9ja0luZm8/LmlkLFxuXHRcdFx0XHRsb2NraW5nVXNlck5hbWU6IHRoaXMubG9ja0luZm8/Lm5hbWUsXG5cdFx0XHRcdGxvY2tpbmdVc2VySW5pdGlhbHM6IHRoaXMubG9ja0luZm8/LmluaXRpYWxzLFxuXHRcdFx0XHRsb2NraW5nVXNlckNvbG9yOiB0aGlzLmxvY2tJbmZvPy5jb2xvclxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrIChBdmF0YXIpLlxuXHQgKiBAcGFyYW0gb2JqZWN0UGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgQXZhdGFyIGNvbnRyb2xcblx0ICovXG5cdGNyZWF0ZUNvbGxhYm9yYXRpb25BdmF0YXIob2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBBdmF0YXIge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKFxuXHRcdFx0b2JqZWN0UGF0aCxcblx0XHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmhhc0NvbGxhYm9yYXRpb25BY3Rpdml0eVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbGxhYm9yYXRpb25FeHByZXNzaW9uKTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24ob2JqZWN0UGF0aCwgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMpXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24ob2JqZWN0UGF0aCwgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IpXG5cdFx0KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QXZhdGFyXG5cdFx0XHRcdHZpc2libGU9e2NvbGxhYm9yYXRpb25IYXNBY3Rpdml0eUV4cHJlc3Npb259XG5cdFx0XHRcdGluaXRpYWxzPXtjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5U2l6ZT1cIkN1c3RvbVwiXG5cdFx0XHRcdGN1c3RvbURpc3BsYXlTaXplPVwiMS41cmVtXCJcblx0XHRcdFx0Y3VzdG9tRm9udFNpemU9XCIwLjhyZW1cIlxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I9e2NvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHByZXNzPXsoZXZ0OiBBdmF0YXIkUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25BdmF0YXJQcmVzcyhldnQpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IDxFdmVudERlbGVnYXRlSG9vayBzdG9wVGFwUHJvcGFnYXRpb249e3RydWV9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0F2YXRhcj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBwcmVzcyBldmVudCBvZiB0aGUgQXZhdGFyLlxuXHQgKiBAcGFyYW0gZXZ0XG5cdCAqL1xuXHRvbkF2YXRhclByZXNzKGV2dDogQXZhdGFyJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBhdmF0YXIgPSBldnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmxvY2sgPSBhdmF0YXIuZ2V0UGFyZW50KCkgYXMgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlcjtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHZpZXcpO1xuXHRcdGxldCBwb3BvdmVyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChgbWFuYWdlQ29sbGFib3JhdGlvbkRyYWZ0LS1lZGl0VXNlcmApIGFzIFJlc3BvbnNpdmVQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFwb3BvdmVyKSB7XG5cdFx0XHRwb3BvdmVyID0gbmV3IFJlc3BvbnNpdmVQb3BvdmVyKFwibWFuYWdlQ29sbGFib3JhdGlvbkRyYWZ0LS1lZGl0VXNlclwiLCB7XG5cdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiQm90dG9tXCJcblx0XHRcdH0pO1xuXHRcdFx0cG9wb3Zlci5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRcdHZpZXcuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdH1cblxuXHRcdHBvcG92ZXIuZGVzdHJveUNvbnRlbnQoKTtcblx0XHRwb3BvdmVyLmFkZENvbnRlbnQoXG5cdFx0XHRuZXcgTGFiZWwoe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05BVkFUQVJfVVNFUl9FRElUX0ZJRUxEXCIsIFtgJHtibG9jay5sb2NrSW5mbz8ubmFtZX1gXSlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRwb3BvdmVyLm9wZW5CeShhdmF0YXIpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEEsSUFPcUJBLHlCQUF5QixJQUFBQyxJQUFBLEdBRDdDQyxjQUFjLENBQUMseUNBQXlDLENBQUMsRUFBQUMsS0FBQSxHQVN4REMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUzVCRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FnQjVCQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBcUJQTCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUssWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNbERQLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUosSUFBQSxDQUFBVyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFHN0IsU0FBQWQsMEJBQVllLFlBQThELEVBQUVDLFFBQWtELEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9IQSxLQUFBLEdBQUFILGNBQUEsQ0FBQUksSUFBQSxPQUFNSCxZQUFZLEVBQUVDLFFBQVEsQ0FBQztNQS9EOUI7QUFDRDtBQUNBO0FBQ0E7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QWlCLENBQUMsb0NBQW9DLEVBQUU7VUFDckVDLFVBQVUsRUFBRSxLQUFLO1VBQ2pCQyxTQUFTLEVBQUU7UUFDWixDQUFDLENBQUM7UUFDRkwsT0FBTyxDQUFDTSxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDNUNaLElBQUksQ0FBQ2EsWUFBWSxDQUFDUCxPQUFPLENBQUM7TUFDM0I7TUFFQUEsT0FBTyxDQUFDUSxjQUFjLENBQUMsQ0FBQztNQUN4QlIsT0FBTyxDQUFDUyxVQUFVLENBQ2pCLElBQUlDLEtBQUssQ0FBQztRQUNUQyxJQUFJLEVBQUVkLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLHVDQUF1QyxFQUFFLENBQUMsR0FBR3BCLEtBQUssQ0FBQ3JDLFFBQVEsRUFBRVosSUFBSSxFQUFFLENBQUM7TUFDakcsQ0FBQyxDQUNGLENBQUM7TUFDRHlELE9BQU8sQ0FBQ2EsTUFBTSxDQUFDdkIsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxPQUFBdEcseUJBQUE7RUFBQSxFQTlMcUQ4SCxhQUFhLEdBQUExRyxXQUFBLEdBQUEyRyx5QkFBQSxDQUFBbEgsT0FBQSxDQUFBZSxTQUFBLGtCQUFBekIsS0FBQTtJQUFBNkgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE5RyxZQUFBLEdBQUEwRyx5QkFBQSxDQUFBbEgsT0FBQSxDQUFBZSxTQUFBLGVBQUF0QixLQUFBO0lBQUEwSCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTdHLFlBQUEsR0FBQXlHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsaUJBQUFyQixLQUFBO0lBQUF5SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTVHLFlBQUEsR0FBQXdHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsaUJBQUFuQixLQUFBO0lBQUF1SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQXVEdEQsS0FBSztJQUFBO0VBQUEsSUFBQTNHLFlBQUEsR0FBQXVHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsZUFBQWpCLEtBQUE7SUFBQXFILFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdEgsT0FBQSxNQUFBRCxNQUFBO0VBQUFhLFFBQUEsR0FBQXpCLHlCQUFBO0VBQUEsT0FBQXlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
247
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiZXZlbnQiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJpZE9yU2V0dGluZ3MiLCJzZXR0aW5ncyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsIm93bmVyIiwiX2dldE93bmVyIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsImlzUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJFcnJvciIsImtleXNCaW5kaW5nUGFydHMiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsInBhdGgiLCJuYW1lIiwidGFyZ2V0VHlwZSIsImJpbmRpbmdJbmZvIiwicGFydHMiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJnZXRDb2xsYWJvcmF0aW9uSW5mbyIsImJpbmRQcm9wZXJ0eSIsImNvbnRlbnQiLCJzaG93QXZhdGFyIiwiY3JlYXRlQ29sbGFib3JhdGlvbkF2YXRhciIsInNldExvY2tJbmZvIiwibG9ja0luZm8iLCJmaXJlRXZlbnQiLCJpc0xvY2tlZCIsInVuZGVmaW5lZCIsImxvY2tpbmdVc2VySUQiLCJpZCIsImxvY2tpbmdVc2VyTmFtZSIsImxvY2tpbmdVc2VySW5pdGlhbHMiLCJpbml0aWFscyIsImxvY2tpbmdVc2VyQ29sb3IiLCJjb2xvciIsImNvbGxhYm9yYXRpb25IYXNBY3Rpdml0eUV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJRm9ybWF0dGVycyIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5IiwiY29sbGFib3JhdGlvbkluaXRpYWxzRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25BY3Rpdml0eUluaXRpYWxzIiwiY29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25BY3Rpdml0eUNvbG9yIiwiX2pzeCIsIkF2YXRhciIsInZpc2libGUiLCJkaXNwbGF5U2l6ZSIsImN1c3RvbURpc3BsYXlTaXplIiwiY3VzdG9tRm9udFNpemUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmVzcyIsImV2dCIsIm9uQXZhdGFyUHJlc3MiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJFdmVudERlbGVnYXRlSG9vayIsInN0b3BUYXBQcm9wYWdhdGlvbiIsImF2YXRhciIsImdldFNvdXJjZSIsImJsb2NrIiwiZ2V0UGFyZW50IiwiaGFzTGlzdGVuZXJzIiwidmlldyIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInBvcG92ZXIiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJSZXNwb25zaXZlUG9wb3ZlciIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJhZGRTdHlsZUNsYXNzIiwiYWRkRGVwZW5kZW50IiwiZGVzdHJveUNvbnRlbnQiLCJhZGRDb250ZW50IiwiTGFiZWwiLCJ0ZXh0IiwiZ2V0VGV4dCIsIm9wZW5CeSIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGgsIHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBBdmF0YXIsIHsgdHlwZSBBdmF0YXIkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBSZXNwb25zaXZlUG9wb3ZlciBmcm9tIFwic2FwL20vUmVzcG9uc2l2ZVBvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG4vKipcbiAqIEEgQnVpbGRpbmdCbG9jayB0byB3YXRjaCB0aGUgbG9jayBzdGF0dXMgb2YgYSBwcm9wZXJ0eSBhbmQgdG8gcmVhY3Qgb24gY2hhbmdlcy5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcbiAqIEBzaW5jZSAxLjE0MS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlciBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8QXZhdGFyPiB7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHVzZWQgaW4gdGhlIGN1cnJlbnQgcGFnZSBvciBibG9jay5cblx0ICogVGhpcyBzZXR0aW5nIGlzIGRlZmluZWQgYnkgdGhlIGZyYW1ld29yaywgYW5kIGNhbiBiZSBvdmVyd3JpdHRlbi5cblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0MS4wXG5cdCAqIEBzaW5jZSAxLjE0MS4wXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YW1vZGVsLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0UGF0aC5cblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0MS4wXG5cdCAqIEBzaW5jZSAxLjE0MS4wXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBmaXJlZCB3aGVuIHRoZSBsb2NrIHN0YXR1cyBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBQYXJhbWV0ZXJzOjxCUj5cblx0ICogLSBpc0xvY2tlZCA6IFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGxvY2tlZCwgZmFsc2Ugb3RoZXJ3aXNlPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VySUQ6IFRoZSBJRCBvZiB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VyTmFtZTogVGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9ja2luZyB0aGUgcHJvcGVydHkgKHVuZGVmaW5lZCBpZiBub3QgbG9ja2VkKTxCUj5cblx0ICogLSBsb2NraW5nVXNlckluaXRpYWxzOiBUaGUgaW5pdGlhbHMgb2YgdGhlIHVzZXIgbG9ja2luZyB0aGUgcHJvcGVydHkgKHVuZGVmaW5lZCBpZiBub3QgbG9ja2VkKTxCUj5cblx0ICogLSBsb2NraW5nVXNlckNvbG9yOiBUaGUgY29sb3IgYXNzb2NpYXRlZCB0byB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBldmVudCgpXG5cdGxvY2tDaGFuZ2U/OiBFdmVudEhhbmRsZXI8XG5cdFx0VUk1RXZlbnQ8XG5cdFx0XHR7XG5cdFx0XHRcdGlzTG9ja2VkOiBib29sZWFuO1xuXHRcdFx0XHRsb2NraW5nVXNlcklEPzogc3RyaW5nO1xuXHRcdFx0XHRsb2NraW5nVXNlck5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VySW5pdGlhbHM/OiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VyQ29sb3I/OiBzdHJpbmc7XG5cdFx0XHR9LFxuXHRcdFx0Q29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclxuXHRcdD5cblx0PjtcblxuXHQvKipcblx0ICogRXZlbnQgZmlyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGF2YXRhci5cblx0ICpcblx0ICogUGFyYW1ldGVyczo8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJJRDogVGhlIElEIG9mIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5PEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VyTmFtZTogVGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9ja2luZyB0aGUgcHJvcGVydHk8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJJbml0aWFsczogVGhlIGluaXRpYWxzIG9mIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5PEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VyQ29sb3I6IFRoZSBjb2xvciBhc3NvY2lhdGVkIHRvIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5PEJSPlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQyLjBcblx0ICogQHNpbmNlIDEuMTQyLjBcblx0ICovXG5cdEBldmVudCgpXG5cdGF2YXRhclByZXNzPzogRXZlbnRIYW5kbGVyPFxuXHRcdFVJNUV2ZW50PFxuXHRcdFx0e1xuXHRcdFx0XHRsb2NraW5nVXNlcklEOiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VyTmFtZTogc3RyaW5nO1xuXHRcdFx0XHRsb2NraW5nVXNlckluaXRpYWxzOiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VyQ29sb3I6IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyXG5cdFx0PlxuXHQ+O1xuXG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHN0YW5kYXJkIEF2YXRhciBjb250cm9sIGlzIGRpc3BsYXllZCB0byBpbmRpY2F0ZSB0aGUgbG9jayBzdGF0dXMuXG5cdCAqIElmIHNldCB0byBmYWxzZSwgbm90aGluZyBpcyBkaXNwbGF5ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0F2YXRhciA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0byByZWNlaXZlIHRoZSBsb2NrIGRhdGFcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIgfSlcblx0bG9ja0luZm8/OiBVc2VyQWN0aXZpdHk7XG5cblx0Y29uc3RydWN0b3IoaWRPclNldHRpbmdzOiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8Q29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlcj4sIHNldHRpbmdzPzogUHJvcGVydGllc09mPENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXI+KSB7XG5cdFx0c3VwZXIoaWRPclNldHRpbmdzLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRpZiAoIW93bmVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob3duZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvYmplY3RQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxQcm9wZXJ0eT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFvYmplY3RQYXRoIHx8ICFpc1Byb3BlcnR5KG9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyOiB0aGUgcHJvdmlkZWQgbWV0YVBhdGggJyR7dGhpcy5tZXRhUGF0aH0nIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgcHJvcGVydHlgKTtcblx0XHR9XG5cblx0XHQvLyBCaW5kIHRoZSBsb2NrSW5mbyBwcm9wZXJ0eSB0byB0aGUgY29ycmVzcG9uZGluZyBsb2NrSW5mbyBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRjb25zdCBrZXlzQmluZGluZ1BhcnRzID0gb2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgcGF0aDoga2V5Lm5hbWUsIHRhcmdldFR5cGU6IFwiYW55XCIgfTtcblx0XHR9KTtcblx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IHtcblx0XHRcdHBhcnRzOiBbXG5cdFx0XHRcdHsgcGF0aDogYGludGVybmFsPi9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke2dldFRhcmdldE9iamVjdFBhdGgob2JqZWN0UGF0aCl9YCwgdGFyZ2V0VHlwZTogXCJhbnlcIiB9LFxuXHRcdFx0XHQuLi5rZXlzQmluZGluZ1BhcnRzIVxuXHRcdFx0XSxcblx0XHRcdGZvcm1hdHRlcjogQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkluZm9cblx0XHR9O1xuXG5cdFx0dGhpcy5iaW5kUHJvcGVydHkoXCJsb2NrSW5mb1wiLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRpZiAoIXRoaXMuY29udGVudCAmJiB0aGlzLnNob3dBdmF0YXIpIHtcblx0XHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29sbGFib3JhdGlvbkF2YXRhcihvYmplY3RQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBsb2NrSW5mbyBwcm9wZXJ0eSBhbmQgZmlyZSB0aGUgbG9ja0NoYW5nZSBldmVudCBpZiB0aGVyZSBpcyBhIGNoYW5nZS5cblx0ICogQHBhcmFtIGxvY2tJbmZvXG5cdCAqL1xuXHRzZXRMb2NrSW5mbyhsb2NrSW5mbzogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9ja0luZm8gIT09IGxvY2tJbmZvKSB7XG5cdFx0XHR0aGlzLmxvY2tJbmZvID0gbG9ja0luZm8gYXMgVXNlckFjdGl2aXR5IHwgdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsb2NrQ2hhbmdlXCIsIHtcblx0XHRcdFx0aXNMb2NrZWQ6IHRoaXMubG9ja0luZm8gIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0bG9ja2luZ1VzZXJJRDogdGhpcy5sb2NrSW5mbz8uaWQsXG5cdFx0XHRcdGxvY2tpbmdVc2VyTmFtZTogdGhpcy5sb2NrSW5mbz8ubmFtZSxcblx0XHRcdFx0bG9ja2luZ1VzZXJJbml0aWFsczogdGhpcy5sb2NrSW5mbz8uaW5pdGlhbHMsXG5cdFx0XHRcdGxvY2tpbmdVc2VyQ29sb3I6IHRoaXMubG9ja0luZm8/LmNvbG9yXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKEF2YXRhcikuXG5cdCAqIEBwYXJhbSBvYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBBdmF0YXIgY29udHJvbFxuXHQgKi9cblx0Y3JlYXRlQ29sbGFib3JhdGlvbkF2YXRhcihvYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IEF2YXRhciB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0VUlGb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKG9iamVjdFBhdGgsIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmhhc0NvbGxhYm9yYXRpb25BY3Rpdml0eSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25Jbml0aWFsc0V4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihvYmplY3RQYXRoLCBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uQWN0aXZpdHlJbml0aWFscylcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihvYmplY3RQYXRoLCBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uQWN0aXZpdHlDb2xvcilcblx0XHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBdmF0YXJcblx0XHRcdFx0dmlzaWJsZT17Y29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbn1cblx0XHRcdFx0aW5pdGlhbHM9e2NvbGxhYm9yYXRpb25Jbml0aWFsc0V4cHJlc3Npb259XG5cdFx0XHRcdGRpc3BsYXlTaXplPVwiQ3VzdG9tXCJcblx0XHRcdFx0Y3VzdG9tRGlzcGxheVNpemU9XCIxLjVyZW1cIlxuXHRcdFx0XHRjdXN0b21Gb250U2l6ZT1cIjAuOHJlbVwiXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcj17Y29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbn1cblx0XHRcdFx0cHJlc3M9eyhldnQ6IEF2YXRhciRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkF2YXRhclByZXNzKGV2dCk7XG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogPEV2ZW50RGVsZWdhdGVIb29rIHN0b3BUYXBQcm9wYWdhdGlvbj17dHJ1ZX0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQXZhdGFyPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBmb3IgdGhlIHByZXNzIGV2ZW50IG9mIHRoZSBBdmF0YXIuXG5cdCAqIEBwYXJhbSBldnRcblx0ICovXG5cdG9uQXZhdGFyUHJlc3MoZXZ0OiBBdmF0YXIkUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGF2YXRhciA9IGV2dC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBibG9jayA9IGF2YXRhci5nZXRQYXJlbnQoKSBhcyBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyO1xuXG5cdFx0aWYgKGJsb2NrLmhhc0xpc3RlbmVycyhcImF2YXRhclByZXNzXCIpKSB7XG5cdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgaGFuZGxlZCBieSB0aGUgYXBwbGljYXRpb24sIGRvIG5vdCBvcGVuIHRoZSBwb3BvdmVyXG5cdFx0XHRibG9jay5maXJlRXZlbnQoXCJhdmF0YXJQcmVzc1wiLCB7XG5cdFx0XHRcdGxvY2tpbmdVc2VySUQ6IGJsb2NrLmxvY2tJbmZvPy5pZCBhcyBzdHJpbmcsXG5cdFx0XHRcdGxvY2tpbmdVc2VyTmFtZTogYmxvY2subG9ja0luZm8/Lm5hbWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRsb2NraW5nVXNlckluaXRpYWxzOiBibG9jay5sb2NrSW5mbz8uaW5pdGlhbHMgYXMgc3RyaW5nLFxuXHRcdFx0XHRsb2NraW5nVXNlckNvbG9yOiBibG9jay5sb2NrSW5mbz8uY29sb3IgYXMgc3RyaW5nXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh2aWV3KTtcblx0XHRsZXQgcG9wb3ZlciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1hbmFnZUNvbGxhYm9yYXRpb25EcmFmdC0tZWRpdFVzZXJgKSBhcyBSZXNwb25zaXZlUG9wb3ZlciB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghcG9wb3Zlcikge1xuXHRcdFx0cG9wb3ZlciA9IG5ldyBSZXNwb25zaXZlUG9wb3ZlcihcIm1hbmFnZUNvbGxhYm9yYXRpb25EcmFmdC0tZWRpdFVzZXJcIiwge1xuXHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0cGxhY2VtZW50OiBcIkJvdHRvbVwiXG5cdFx0XHR9KTtcblx0XHRcdHBvcG92ZXIuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHR2aWV3LmFkZERlcGVuZGVudChwb3BvdmVyKTtcblx0XHR9XG5cblx0XHRwb3BvdmVyLmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0cG9wb3Zlci5hZGRDb250ZW50KFxuXHRcdFx0bmV3IExhYmVsKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9OQVZBVEFSX1VTRVJfRURJVF9GSUVMRFwiLCBbYCR7YmxvY2subG9ja0luZm8/Lm5hbWV9YF0pXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0cG9wb3Zlci5vcGVuQnkoYXZhdGFyKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxJQU9xQkEseUJBQXlCLElBQUFDLElBQUEsR0FEN0NDLGNBQWMsQ0FBQyx5Q0FBeUMsQ0FBQyxFQUFBQyxLQUFBLEdBU3hEQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FTNUJGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQWdCNUJDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0EwQlBELEtBQUssQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FvQlBOLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFTSxZQUFZLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1sRFIsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFZLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQUc3QixTQUFBZiwwQkFBWWdCLFlBQThELEVBQUVDLFFBQWtELEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9IQSxLQUFBLEdBQUFILGNBQUEsQ0FBQUksSUFBQSxPQUFNSCxZQUFZLEVBQUVDLFFBQVEsQ0FBQztNQXhGOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFOQ0csMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQUcsV0FBQSxFQUFBSCxLQUFBO01BVUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BTENFLDBCQUFBLENBQUFGLEtBQUEsY0FBQUksWUFBQSxFQUFBSixLQUFBO01BU0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFaQ0UsMEJBQUEsQ0FBQUYsS0FBQSxnQkFBQUssWUFBQSxFQUFBTCxLQUFBO01BMkJBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQVhDRSwwQkFBQSxDQUFBRixLQUFBLGlCQUFBTSxZQUFBLEVBQUFOLEtBQUE7TUF5QkE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFOQ0UsMEJBQUEsQ0FBQUYsS0FBQSxnQkFBQU8sWUFBQSxFQUFBUCxLQUFBO01BVUE7QUFDRDtBQUNBO01BRkNFLDBCQUFBLENBQUFGLEtBQUEsY0FBQVEsWUFBQSxFQUFBUixLQUFBO01BQUEsT0FBQUEsS0FBQTtJQVFBO0lBQUNTLFFBQUEsR0FBQTNCLHlCQUFBO0lBQUE0QixjQUFBLENBQUE1Qix5QkFBQSxFQUFBZSxjQUFBO0lBQUEsSUFBQWMsTUFBQSxHQUFBN0IseUJBQUEsQ0FBQThCLFNBQUE7SUFBQUQsTUFBQSxDQUVERSxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFBLEVBQVM7TUFDM0IsTUFBTUMsS0FBSyxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUM7TUFDOUIsSUFBSSxDQUFDRCxLQUFLLEVBQUU7UUFDWDtNQUNEO01BQ0EsSUFBSSxDQUFDRSxXQUFXLENBQUNDLDZCQUE2QixDQUFDSCxLQUFLLENBQUNJLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsRztNQUNEO01BRUEsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0MsNkJBQTZCLENBQVcsSUFBSSxDQUFDQyxRQUFRLEVBQUUsSUFBSSxDQUFDQyxXQUFXLENBQUM7TUFDaEcsSUFBSSxDQUFDSCxVQUFVLElBQUksQ0FBQ0ksVUFBVSxDQUFDSixVQUFVLENBQUNLLFlBQVksQ0FBQyxFQUFFO1FBQ3hELE1BQU0sSUFBSUMsS0FBSyxDQUFDLHFEQUFxRCxJQUFJLENBQUNKLFFBQVEsc0NBQXNDLENBQUM7TUFDMUg7O01BRUE7TUFDQSxNQUFNSyxnQkFBZ0IsR0FBR1AsVUFBVSxDQUFDUSxlQUFlLEVBQUVDLGdCQUFnQixDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBRUMsR0FBRyxJQUFLO1FBQ3ZGLE9BQU87VUFBRUMsSUFBSSxFQUFFRCxHQUFHLENBQUNFLElBQUk7VUFBRUMsVUFBVSxFQUFFO1FBQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7TUFDRixNQUFNQyxXQUFXLEdBQUc7UUFDbkJDLEtBQUssRUFBRSxDQUNOO1VBQUVKLElBQUksRUFBRSxxQ0FBcUNLLG1CQUFtQixDQUFDbEIsVUFBVSxDQUFDLEVBQUU7VUFBRWUsVUFBVSxFQUFFO1FBQU0sQ0FBQyxFQUNuRyxHQUFHUixnQkFBaUIsQ0FDcEI7UUFDRFksU0FBUyxFQUFFQyx1QkFBdUIsQ0FBQ0M7TUFDcEMsQ0FBQztNQUVELElBQUksQ0FBQ0MsWUFBWSxDQUFDLFVBQVUsRUFBRU4sV0FBVyxDQUFDO01BRTFDLElBQUksQ0FBQyxJQUFJLENBQUNPLE9BQU8sSUFBSSxJQUFJLENBQUNDLFVBQVUsRUFBRTtRQUNyQyxJQUFJLENBQUNELE9BQU8sR0FBRyxJQUFJLENBQUNFLHlCQUF5QixDQUFDekIsVUFBVSxDQUFDO01BQzFEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBVixNQUFBLENBSUFvQyxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQ0MsUUFBNEIsRUFBUTtNQUMvQyxJQUFJLElBQUksQ0FBQ0EsUUFBUSxLQUFLQSxRQUFRLEVBQUU7UUFDL0IsSUFBSSxDQUFDQSxRQUFRLEdBQUdBLFFBQW9DO1FBQ3BELElBQUksQ0FBQ0MsU0FBUyxDQUFDLFlBQVksRUFBRTtVQUM1QkMsUUFBUSxFQUFFLElBQUksQ0FBQ0YsUUFBUSxLQUFLRyxTQUFTO1VBQ3JDQyxhQUFhLEVBQUUsSUFBSSxDQUFDSixRQUFRLEVBQUVLLEVBQUU7VUFDaENDLGVBQWUsRUFBRSxJQUFJLENBQUNOLFFBQVEsRUFBRWIsSUFBSTtVQUNwQ29CLG1CQUFtQixFQUFFLElBQUksQ0FBQ1AsUUFBUSxFQUFFUSxRQUFRO1VBQzVDQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNULFFBQVEsRUFBRVU7UUFDbEMsQ0FBQyxDQUFDO01BQ0g7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9DLE1BQUEsQ0FLQW1DLHlCQUF5QixHQUF6QixTQUFBQSx5QkFBeUJBLENBQUN6QixVQUF5QyxFQUFVO01BQzVFLE1BQU1zQyxrQ0FBa0MsR0FBR0MsaUJBQWlCLENBQzNEQyxZQUFZLENBQUNDLDBCQUEwQixDQUFDekMsVUFBVSxFQUFFb0IsdUJBQXVCLENBQUNzQix3QkFBd0IsQ0FDckcsQ0FBQztNQUNELE1BQU1DLCtCQUErQixHQUFHSixpQkFBaUIsQ0FDeERDLFlBQVksQ0FBQ0MsMEJBQTBCLENBQUN6QyxVQUFVLEVBQUVvQix1QkFBdUIsQ0FBQ3dCLGdDQUFnQyxDQUM3RyxDQUFDO01BQ0QsTUFBTUMsNEJBQTRCLEdBQUdOLGlCQUFpQixDQUNyREMsWUFBWSxDQUFDQywwQkFBMEIsQ0FBQ3pDLFVBQVUsRUFBRW9CLHVCQUF1QixDQUFDMEIsNkJBQTZCLENBQzFHLENBQUM7TUFFRCxPQUNDQyxJQUFBLENBQUNDLE1BQU07UUFDTkMsT0FBTyxFQUFFWCxrQ0FBbUM7UUFDNUNILFFBQVEsRUFBRVEsK0JBQWdDO1FBQzFDTyxXQUFXLEVBQUMsUUFBUTtRQUNwQkMsaUJBQWlCLEVBQUMsUUFBUTtRQUMxQkMsY0FBYyxFQUFDLFFBQVE7UUFDdkJDLGVBQWUsRUFBRVIsNEJBQTZCO1FBQzlDUyxLQUFLLEVBQUdDLEdBQXNCLElBQVc7VUFDeEMsSUFBSSxDQUFDQyxhQUFhLENBQUNELEdBQUcsQ0FBQztRQUN4QixDQUFFO1FBQUFFLFFBQUEsRUFFRDtVQUNBQyxVQUFVLEVBQUVYLElBQUEsQ0FBQ1ksaUJBQWlCO1lBQUNDLGtCQUFrQixFQUFFO1VBQUssQ0FBRTtRQUMzRDtNQUFDLENBQ00sQ0FBQztJQUVYOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXRFLE1BQUEsQ0FJQWtFLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFDRCxHQUFzQixFQUFRO01BQzNDLE1BQU1NLE1BQU0sR0FBR04sR0FBRyxDQUFDTyxTQUFTLENBQUMsQ0FBQztNQUM5QixNQUFNQyxLQUFLLEdBQUdGLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQThCO01BRTdELElBQUlELEtBQUssQ0FBQ0UsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3RDO1FBQ0FGLEtBQUssQ0FBQ25DLFNBQVMsQ0FBQyxhQUFhLEVBQUU7VUFDOUJHLGFBQWEsRUFBRWdDLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRUssRUFBWTtVQUMzQ0MsZUFBZSxFQUFFOEIsS0FBSyxDQUFDcEMsUUFBUSxFQUFFYixJQUFjO1VBQy9Db0IsbUJBQW1CLEVBQUU2QixLQUFLLENBQUNwQyxRQUFRLEVBQUVRLFFBQWtCO1VBQ3ZEQyxnQkFBZ0IsRUFBRTJCLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRVU7UUFDbkMsQ0FBQyxDQUFDO1FBQ0Y7TUFDRDtNQUNBLE1BQU02QixJQUFJLEdBQUcsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQy9DLE1BQU1DLGFBQWEsR0FBR0MsbUJBQW1CLENBQUNDLGdCQUFnQixDQUFDTCxJQUFJLENBQUM7TUFDaEUsSUFBSU0sT0FBTyxHQUFHQyxVQUFVLENBQUNDLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBa0M7TUFFOUcsSUFBSSxDQUFDRixPQUFPLEVBQUU7UUFDYkEsT0FBTyxHQUFHLElBQUlHLGlCQUFpQixDQUFDLG9DQUFvQyxFQUFFO1VBQ3JFQyxVQUFVLEVBQUUsS0FBSztVQUNqQkMsU0FBUyxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0ZMLE9BQU8sQ0FBQ00sYUFBYSxDQUFDLHFCQUFxQixDQUFDO1FBQzVDWixJQUFJLENBQUNhLFlBQVksQ0FBQ1AsT0FBTyxDQUFDO01BQzNCO01BRUFBLE9BQU8sQ0FBQ1EsY0FBYyxDQUFDLENBQUM7TUFDeEJSLE9BQU8sQ0FBQ1MsVUFBVSxDQUNqQixJQUFJQyxLQUFLLENBQUM7UUFDVEMsSUFBSSxFQUFFZCxhQUFhLENBQUNlLE9BQU8sQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLEdBQUdyQixLQUFLLENBQUNwQyxRQUFRLEVBQUViLElBQUksRUFBRSxDQUFDO01BQ2pHLENBQUMsQ0FDRixDQUFDO01BQ0QwRCxPQUFPLENBQUNhLE1BQU0sQ0FBQ3hCLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQUEsT0FBQXBHLHlCQUFBO0VBQUEsRUF2TnFENkgsYUFBYSxHQUFBeEcsV0FBQSxHQUFBeUcseUJBQUEsQ0FBQWhILE9BQUEsQ0FBQWdCLFNBQUEsa0JBQUEzQixLQUFBO0lBQUE0SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTVHLFlBQUEsR0FBQXdHLHlCQUFBLENBQUFoSCxPQUFBLENBQUFnQixTQUFBLGVBQUF4QixLQUFBO0lBQUF5SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTNHLFlBQUEsR0FBQXVHLHlCQUFBLENBQUFoSCxPQUFBLENBQUFnQixTQUFBLGlCQUFBdkIsS0FBQTtJQUFBd0gsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUExRyxZQUFBLEdBQUFzRyx5QkFBQSxDQUFBaEgsT0FBQSxDQUFBZ0IsU0FBQSxrQkFBQXJCLEtBQUE7SUFBQXNILFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBekcsWUFBQSxHQUFBcUcseUJBQUEsQ0FBQWhILE9BQUEsQ0FBQWdCLFNBQUEsaUJBQUFwQixLQUFBO0lBQUFxSCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQWdGdEQsS0FBSztJQUFBO0VBQUEsSUFBQXhHLFlBQUEsR0FBQW9HLHlCQUFBLENBQUFoSCxPQUFBLENBQUFnQixTQUFBLGVBQUFsQixLQUFBO0lBQUFtSCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXBILE9BQUEsTUFBQUQsTUFBQTtFQUFBYyxRQUFBLEdBQUEzQix5QkFBQTtFQUFBLE9BQUEyQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -8,7 +8,7 @@ import * as CollaborationFormatters from "sap/fe/core/formatters/CollaborationFo
8
8
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
9
9
  import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
10
10
  import { isProperty } from "sap/fe/core/helpers/TypeGuards";
11
- import { type DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
11
+ import { getTargetObjectPath, type DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
12
12
  import * as UIFormatters from "sap/fe/core/templating/UIFormatters";
13
13
  import Avatar, { type Avatar$PressEvent } from "sap/m/Avatar";
14
14
  import Label from "sap/m/Label";
@@ -48,11 +48,11 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
48
48
  * Event fired when the lock status changes.
49
49
  *
50
50
  * Parameters:<BR>
51
- * - isLocked : true if the property is locked, false otherwise<BR>
52
- * - lockingUserID: the ID of the user locking the property (undefined if not locked)<BR>
53
- * - lockingUserName: the name of the user locking the property (undefined if not locked)<BR>
54
- * - lockingUserInitials: the initials of the user locking the property (undefined if not locked)<BR>
55
- * - lockingUserColor: the color associated to the user locking the property (undefined if not locked)<BR>
51
+ * - isLocked : True if the property is locked, false otherwise<BR>
52
+ * - lockingUserID: The ID of the user locking the property (undefined if not locked)<BR>
53
+ * - lockingUserName: The name of the user locking the property (undefined if not locked)<BR>
54
+ * - lockingUserInitials: The initials of the user locking the property (undefined if not locked)<BR>
55
+ * - lockingUserColor: The color associated to the user locking the property (undefined if not locked)<BR>
56
56
  * @public
57
57
  * @ui5-experimental-since 1.141.0
58
58
  * @since 1.141.0
@@ -71,6 +71,31 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
71
71
  >
72
72
  >;
73
73
 
74
+ /**
75
+ * Event fired when the user clicks on the avatar.
76
+ *
77
+ * Parameters:<BR>
78
+ * - lockingUserID: The ID of the user locking the property<BR>
79
+ * - lockingUserName: The name of the user locking the property<BR>
80
+ * - lockingUserInitials: The initials of the user locking the property<BR>
81
+ * - lockingUserColor: The color associated to the user locking the property<BR>
82
+ * @public
83
+ * @ui5-experimental-since 1.142.0
84
+ * @since 1.142.0
85
+ */
86
+ @event()
87
+ avatarPress?: EventHandler<
88
+ UI5Event<
89
+ {
90
+ lockingUserID: string;
91
+ lockingUserName: string;
92
+ lockingUserInitials: string;
93
+ lockingUserColor: string;
94
+ },
95
+ CollaborativeDraftHandler
96
+ >
97
+ >;
98
+
74
99
  /**
75
100
  * If set to true, the standard Avatar control is displayed to indicate the lock status.
76
101
  * If set to false, nothing is displayed.
@@ -91,16 +116,6 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
91
116
  super(idOrSettings, settings);
92
117
  }
93
118
 
94
- private getFullMetaPath(): string {
95
- if (this.metaPath.startsWith("/")) {
96
- return this.metaPath;
97
- } else if (this.contextPath.endsWith("/")) {
98
- return `${this.contextPath}${this.metaPath}`;
99
- } else {
100
- return `${this.contextPath}/${this.metaPath}`;
101
- }
102
- }
103
-
104
119
  onMetadataAvailable(): void {
105
120
  const owner = this._getOwner();
106
121
  if (!owner) {
@@ -110,19 +125,20 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
110
125
  return;
111
126
  }
112
127
 
113
- this.contextPath ??= this.getOwnerContextPath() as string;
114
- const fullMetaPath = this.getFullMetaPath();
115
- const objectPath = this.getDataModelObjectPath<Property>(fullMetaPath);
128
+ const objectPath = this.getDataModelObjectForMetaPath<Property>(this.metaPath, this.contextPath);
116
129
  if (!objectPath || !isProperty(objectPath.targetObject)) {
117
- throw new Error(`CollaborativeDraftHandler: the provided metaPath '${fullMetaPath}' does not point to a valid property`);
130
+ throw new Error(`CollaborativeDraftHandler: the provided metaPath '${this.metaPath}' does not point to a valid property`);
118
131
  }
119
132
 
120
133
  // Bind the lockInfo property to the corresponding lockInfo in the internal model
121
- const keysBindingParts = objectPath.targetEntityType.keys.map((key) => {
134
+ const keysBindingParts = objectPath.contextLocation?.targetEntityType.keys.map((key) => {
122
135
  return { path: key.name, targetType: "any" };
123
136
  });
124
137
  const bindingInfo = {
125
- parts: [{ path: `internal>/collaboration/activities${fullMetaPath}`, targetType: "any" }, ...keysBindingParts],
138
+ parts: [
139
+ { path: `internal>/collaboration/activities${getTargetObjectPath(objectPath)}`, targetType: "any" },
140
+ ...keysBindingParts!
141
+ ],
126
142
  formatter: CollaborationFormatters.getCollaborationInfo
127
143
  };
128
144
 
@@ -156,11 +172,9 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
156
172
  * @returns The Avatar control
157
173
  */
158
174
  createCollaborationAvatar(objectPath: DataModelObjectPath<Property>): Avatar {
159
- const collaborationExpression = UIFormatters.getCollaborationExpression(
160
- objectPath,
161
- CollaborationFormatters.hasCollaborationActivity
175
+ const collaborationHasActivityExpression = compileExpression(
176
+ UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.hasCollaborationActivity)
162
177
  );
163
- const collaborationHasActivityExpression = compileExpression(collaborationExpression);
164
178
  const collaborationInitialsExpression = compileExpression(
165
179
  UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityInitials)
166
180
  );
@@ -194,6 +208,17 @@ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
194
208
  onAvatarPress(evt: Avatar$PressEvent): void {
195
209
  const avatar = evt.getSource();
196
210
  const block = avatar.getParent() as CollaborativeDraftHandler;
211
+
212
+ if (block.hasListeners("avatarPress")) {
213
+ // If the event is handled by the application, do not open the popover
214
+ block.fireEvent("avatarPress", {
215
+ lockingUserID: block.lockInfo?.id as string,
216
+ lockingUserName: block.lockInfo?.name as string,
217
+ lockingUserInitials: block.lockInfo?.initials as string,
218
+ lockingUserColor: block.lockInfo?.color as string
219
+ });
220
+ return;
221
+ }
197
222
  const view = this.getPageController().getView();
198
223
  const resourceModel = ResourceModelHelper.getResourceModel(view);
199
224
  let popover = UI5Element.getElementById(`manageCollaborationDraft--editUser`) as ResponsivePopover | undefined;
@@ -6,6 +6,12 @@ sap.ui.define(["sap/base/util/deepClone", "sap/ui/model/Filter"], function (deep
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
+ /**
10
+ * Type definition for the CollectionBindingInfo used in the Table and Chart controls.
11
+ * This type is based on the sap.ui.model.odata.v4.ODataListBinding and adds additional parameters used in SAP Fiori elements.
12
+ * @public
13
+ * @typedef
14
+ */
9
15
  /**
10
16
  * API to add parameters to the collection binding info.
11
17
  * @hideconstructor
@@ -104,7 +110,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/ui/model/Filter"], function (deep
104
110
  }
105
111
 
106
112
  /**
107
- * Retrieve the 'serialized' binding info, useful if you want to create your own binding
113
+ * Retrieve the 'serialized' binding info which is useful if you want to create your own binding
108
114
  * @returns {CollectionBindingInfo} The {@link sap.fe.macros.CollectionBindingInfo "CollectionBindingInfo"}
109
115
  * @public
110
116
  */;
@@ -169,4 +175,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/ui/model/Filter"], function (deep
169
175
  _exports = CollectionBindingInfoAPI;
170
176
  return _exports;
171
177
  }, false);
172
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkiLCJiaW5kaW5nSW5mbyIsImF0dGFjaGVkRXZlbnRzIiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJjbG9uZUZpbHRlcnNDb250ZW50IiwiY2xvbmluZyIsImZpbHRlckluZm8iLCJwYXRoIiwiZ2V0UGF0aCIsIm9wZXJhdG9yIiwiZ2V0T3BlcmF0b3IiLCJ2YWx1ZTEiLCJnZXRWYWx1ZTEiLCJ2YWx1ZTIiLCJnZXRWYWx1ZTIiLCJ2YXJpYWJsZSIsImdldFZhcmlhYmxlIiwiY29uZGl0aW9uIiwiZ2V0Q29uZGl0aW9uIiwiYW5kIiwiaXNBbmQiLCJjYXNlU2Vuc2l0aXZlIiwiaXNDYXNlU2Vuc2l0aXZlIiwidGVzdEZuIiwiZ2V0VGVzdCIsInVuZGVmaW5lZCIsInRlc3QiLCJjb21wYXJhdG9yRm4iLCJnZXRDb21wYXJhdG9yIiwiY29tcGFyYXRvciIsImZpbHRlcnMiLCJnZXRGaWx0ZXJzIiwiYXJyYXlGaWx0ZXIiLCJtYXAiLCJzaW5nbGVGaWx0ZXIiLCJGaWx0ZXIiLCJhZGRGaWx0ZXIiLCJjdXN0b21GaWx0ZXIiLCJwdXNoIiwiZ2V0U29ydGVycyIsInNvcnRlciIsImFkZFNlbGVjdCIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJTdHJpbmciLCJ0b1N0cmluZyIsIiRzZWxlY3QiLCJnZXRCaW5kaW5nSW5mbyIsImNsb25lZEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZGVlcENsb25lIiwiYWRkU29ydGVyIiwiYXR0YWNoRXZlbnQiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImRhdGEiLCJoYW5kbGVyIiwiZ2V0QXR0YWNoZWRFdmVudHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxlY3Rpb25CaW5kaW5nSW5mby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckluZm8gPSB7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHRlc3Q/OiAocDE6IHVua25vd24pID0+IGJvb2xlYW47XG5cdGNvbXBhcmF0b3I/OiAocDE6IHVua25vd24sIHAyOiB1bmtub3duKSA9PiBudW1iZXI7XG5cdG9wZXJhdG9yPzpcblx0XHR8IEZpbHRlck9wZXJhdG9yXG5cdFx0fCBcIkFsbFwiXG5cdFx0fCBcIkFueVwiXG5cdFx0fCBcIkJUXCJcblx0XHR8IFwiQ29udGFpbnNcIlxuXHRcdHwgXCJFbmRzV2l0aFwiXG5cdFx0fCBcIkVRXCJcblx0XHR8IFwiR0VcIlxuXHRcdHwgXCJHVFwiXG5cdFx0fCBcIkxFXCJcblx0XHR8IFwiTFRcIlxuXHRcdHwgXCJOQlwiXG5cdFx0fCBcIk5FXCJcblx0XHR8IFwiTm90Q29udGFpbnNcIlxuXHRcdHwgXCJOb3RFbmRzV2l0aFwiXG5cdFx0fCBcIk5vdFN0YXJ0c1dpdGhcIlxuXHRcdHwgXCJTdGFydHNXaXRoXCJcblx0XHR8IHVuZGVmaW5lZDtcblx0dmFsdWUxPzogdW5rbm93bjtcblx0dmFsdWUyPzogdW5rbm93bjtcblx0dmFyaWFibGU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvbj86IEZpbHRlcjtcblx0ZmlsdGVycz86IEZpbHRlcltdO1xuXHRhbmQ/OiBib29sZWFuO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25CaW5kaW5nSW5mbyA9IHtcblx0ZXZlbnRzPzogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xuXHRzdXNwZW5kZWQ/OiBib29sZWFuO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRmaWx0ZXJzPzogRmlsdGVyO1xuXHRzZWFyY2g/OiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM/OiB7XG5cdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHQkc2VsZWN0Pzogc3RyaW5nO1xuXHRcdCQkYWdncmVnYXRpb24/OiBBZ2dyZWdhdGlvbjtcblx0XHQkJHNoYXJlZFJlcXVlc3Q/OiBib29sZWFuO1xuXHRcdCRjb3VudD86IGJvb2xlYW47XG5cdFx0JCRjbGVhclNlbGVjdGlvbk9uRmlsdGVyPzogYm9vbGVhbjtcblx0XHQkJGdldEtlZXBBbGl2ZUNvbnRleHQ/OiBib29sZWFuO1xuXHRcdCQkZ3JvdXBJZD86IHN0cmluZztcblx0XHQkJHVwZGF0ZUdyb3VwSWQ/OiBzdHJpbmc7XG5cdFx0JCRvd25SZXF1ZXN0PzogYm9vbGVhbjtcblx0XHQkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzPzogYm9vbGVhbjtcblx0fTtcblx0c29ydGVyPzogU29ydGVyW107XG59O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvbiA9IHtcblx0c2VhcmNoPzogc3RyaW5nO1xuXHRleHBhbmRUbz86IG51bWJlcjtcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXZlbnRIYW5kbGVyID0ge1xuXHRldmVudElkOiBzdHJpbmc7XG5cdGNhbGxiYWNrOiBGdW5jdGlvbjtcblx0bGlzdGVuZXI/OiBvYmplY3Q7XG5cdGRhdGE/OiBvYmplY3Q7XG59O1xuXG4vKipcbiAqIEFQSSB0byBhZGQgcGFyYW1ldGVycyB0byB0aGUgY29sbGVjdGlvbiBiaW5kaW5nIGluZm8uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5Db2xsZWN0aW9uQmluZGluZ0luZm9cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkge1xuXHRwcml2YXRlIGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvO1xuXG5cdHByaXZhdGUgYXR0YWNoZWRFdmVudHM6IEV2ZW50SGFuZGxlcltdID0gW107XG5cblx0Y29uc3RydWN0b3IoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvID0gYmluZGluZ0luZm87XG5cdH1cblxuXHQvKipcblx0ICogUmVjdXJzaXZlIGNsb25pbmcgb2YgdGhlIEZpbHRlci5cblx0ICogRmlsdGVycyBoYXZlIGEgcGFyYW1ldGVyIGFGaWx0ZXJzIHdoaWNoIGNvbnRhaW5zIG1vcmUgZmlsdGVycywgc28gd2UgdXNlIHRoaXMgbWV0aG9kIHRvIHJlY3Vyc2l2ZWx5IGNsb25lIGl0LlxuXHQgKiBjbG9uZUZpbHRlcnMgc2hvdWxkIGJlIGNhbGxlZCBmaXJzdCwgdG8gaGF2ZSB0aGUgRmlsdGVyIG91dHNpZGUgYW4gYXJyYXkgYW5kIGF2b2lkIGFuIGVtcHR5IGZpbHRlci5cblx0ICogQHBhcmFtIGNsb25pbmcgVGhlIGZpbHRlciB0byBiZSBjbG9uZWRcblx0ICogQHJldHVybnMgVGhlIGNsb25lZCBGaWx0ZXJcblx0ICovXG5cdGNsb25lRmlsdGVyc0NvbnRlbnQoY2xvbmluZzogRmlsdGVyKTogRmlsdGVyIHtcblx0XHRjb25zdCBmaWx0ZXJJbmZvOiBGaWx0ZXJJbmZvID0ge1xuXHRcdFx0cGF0aDogY2xvbmluZy5nZXRQYXRoKCksXG5cdFx0XHRvcGVyYXRvcjogY2xvbmluZy5nZXRPcGVyYXRvcigpLFxuXHRcdFx0dmFsdWUxOiBjbG9uaW5nLmdldFZhbHVlMSgpLFxuXHRcdFx0dmFsdWUyOiBjbG9uaW5nLmdldFZhbHVlMigpLFxuXHRcdFx0dmFyaWFibGU6IGNsb25pbmcuZ2V0VmFyaWFibGUoKSxcblx0XHRcdGNvbmRpdGlvbjogY2xvbmluZy5nZXRDb25kaXRpb24oKSxcblx0XHRcdGFuZDogY2xvbmluZy5pc0FuZCgpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogY2xvbmluZy5pc0Nhc2VTZW5zaXRpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCB0ZXN0Rm4gPSBjbG9uaW5nLmdldFRlc3QoKTtcblx0XHRpZiAodGVzdEZuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZpbHRlckluZm8udGVzdCA9IHRlc3RGbjtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wYXJhdG9yRm4gPSBjbG9uaW5nLmdldENvbXBhcmF0b3IoKTtcblx0XHRpZiAoY29tcGFyYXRvckZuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZpbHRlckluZm8uY29tcGFyYXRvciA9IGNvbXBhcmF0b3JGbjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJzID0gY2xvbmluZy5nZXRGaWx0ZXJzKCk7XG5cdFx0Y29uc3QgYXJyYXlGaWx0ZXIgPSBmaWx0ZXJzPy5tYXAoKHNpbmdsZUZpbHRlcjogRmlsdGVyKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUZpbHRlcnNDb250ZW50KHNpbmdsZUZpbHRlcik7XG5cdFx0fSk7XG5cdFx0aWYgKGFycmF5RmlsdGVyKSB7XG5cdFx0XHRmaWx0ZXJJbmZvLmZpbHRlcnMgPSBhcnJheUZpbHRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVySW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBmaWx0ZXJzIGFwcGxpZWQgdG8gdGhlIFRhYmxlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLkZpbHRlciBcImZpbHRlcnNcIn0gb24gdGhlIHRhYmxlXG5cdCAqL1xuXHRnZXRGaWx0ZXJzKCk6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb25lRmlsdGVyc0NvbnRlbnQodGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGZpbHRlciB0byB0aGUgZmlsdGVycyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGJpbmRpbmcgaW5mby5cblx0ICogQHBhcmFtIGN1c3RvbUZpbHRlciBUaGUge0BsaW5rIHNhcC51aS5tb2RlbC5GaWx0ZXIgXCJmaWx0ZXJcIn0gdG8gYWRkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZEZpbHRlcihjdXN0b21GaWx0ZXI6IEZpbHRlcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnMgPSB0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5maWx0ZXJzID8gW3RoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLmZpbHRlcnNdIDogW107XG5cdFx0ZmlsdGVycy5wdXNoKGN1c3RvbUZpbHRlcik7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoZmlsdGVycywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzb3J0ZXJzIG9mIHRoZSBUYWJsZS5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBzYXAudWkubW9kZWwuU29ydGVyIFwic29ydGVyc1wifSBvbiB0aGUgdGFibGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U29ydGVycygpOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnNvcnRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHNlbGVjdCBxdWVyeS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb3IgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHF1ZXJ5XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZFNlbGVjdChwYXJhbWV0ZXJzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IHBhcmFtZXRlclN0cmluZzogc3RyaW5nID0gcGFyYW1ldGVycy50b1N0cmluZygpO1xuXHRcdGlmICh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VsZWN0KSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSB0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgKyBcIixcIiArIHBhcmFtZXRlclN0cmluZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBwYXJhbWV0ZXJTdHJpbmc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSAnc2VyaWFsaXplZCcgYmluZGluZyBpbmZvLCB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGJpbmRpbmdcblx0ICogQHJldHVybnMge0NvbGxlY3Rpb25CaW5kaW5nSW5mb30gVGhlIHtAbGluayBzYXAuZmUubWFjcm9zLkNvbGxlY3Rpb25CaW5kaW5nSW5mbyBcIkNvbGxlY3Rpb25CaW5kaW5nSW5mb1wifVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdGdldEJpbmRpbmdJbmZvKCk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgY2xvbmVkQmluZGluZ0luZm8gPSB7IC4uLnRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvIH07XG5cblx0XHQvLyBNYWtpbmcgZGVlcENsb25lcyBvZiBvYmplY3RzIChleGNlcHQgU29ydGVycyBiZWNhdXNlIHdlIGNhbid0KVxuXHRcdGlmICh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5ldmVudHMpIHtcblx0XHRcdGNsb25lZEJpbmRpbmdJbmZvLmV2ZW50cyA9IGRlZXBDbG9uZSh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5ldmVudHMpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0Y2xvbmVkQmluZGluZ0luZm8uZmlsdGVycyA9IHRoaXMuY2xvbmVGaWx0ZXJzQ29udGVudCh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5maWx0ZXJzKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdGRlZXBDbG9uZSh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb25lZEJpbmRpbmdJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBzb3J0ZXIgdG8gdGhlIHNvcnRlcihzKSBhbHJlYWR5IHByZXNlbnQsIG9yIGNyZWF0ZSBvbmUgaWYgbm9uZSBleGlzdHMuXG5cdCAqIEBwYXJhbSBzb3J0ZXIgVGhlIHtAbGluayBzYXAudWkubW9kZWwuU29ydGVyIFwic29ydGVyXCJ9IHRvIGFkZCB0byB0aGUgcXVlcnlcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkU29ydGVyKHNvcnRlcjogU29ydGVyKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5zb3J0ZXIpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnNvcnRlciA9IFtzb3J0ZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5zb3J0ZXIucHVzaChzb3J0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggdGhlIGV2ZW50cyB0byB0aGUgdGFibGUgYmluZGluZy5cblx0ICogQHBhcmFtIGV2ZW50SWQgVGhlIGV2ZW50IElEIHRvIGF0dGFjaCB0aGUgY2FsbGJhY2sgdG9cblx0ICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHQgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZGF0YSBEYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhdHRhY2hFdmVudChldmVudElkOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbGlzdGVuZXI/OiBvYmplY3QsIGRhdGE/OiBvYmplY3QpOiB2b2lkIHtcblx0XHRjb25zdCBoYW5kbGVyOiBFdmVudEhhbmRsZXIgPSB7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9O1xuXHRcdHRoaXMuYXR0YWNoZWRFdmVudHMucHVzaChoYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhdHRhY2hlZCBldmVudCBoYW5kbGVycy5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYXR0YWNoZWQgZXZlbnQgaGFuZGxlcnMuXG5cdCAqL1xuXHRnZXRBdHRhY2hlZEV2ZW50cygpOiBFdmVudEhhbmRsZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRFdmVudHM7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUF3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEEsSUFPcUJBLHdCQUF3QjtJQUs1QyxTQUFBQSx5QkFBWUMsV0FBa0MsRUFBRTtNQUFBLEtBRnhDQyxjQUFjLEdBQW1CLEVBQUU7TUFHMUMsSUFBSSxDQUFDQyxxQkFBcUIsR0FBR0YsV0FBVztJQUN6Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkiLCJiaW5kaW5nSW5mbyIsImF0dGFjaGVkRXZlbnRzIiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJjbG9uZUZpbHRlcnNDb250ZW50IiwiY2xvbmluZyIsImZpbHRlckluZm8iLCJwYXRoIiwiZ2V0UGF0aCIsIm9wZXJhdG9yIiwiZ2V0T3BlcmF0b3IiLCJ2YWx1ZTEiLCJnZXRWYWx1ZTEiLCJ2YWx1ZTIiLCJnZXRWYWx1ZTIiLCJ2YXJpYWJsZSIsImdldFZhcmlhYmxlIiwiY29uZGl0aW9uIiwiZ2V0Q29uZGl0aW9uIiwiYW5kIiwiaXNBbmQiLCJjYXNlU2Vuc2l0aXZlIiwiaXNDYXNlU2Vuc2l0aXZlIiwidGVzdEZuIiwiZ2V0VGVzdCIsInVuZGVmaW5lZCIsInRlc3QiLCJjb21wYXJhdG9yRm4iLCJnZXRDb21wYXJhdG9yIiwiY29tcGFyYXRvciIsImZpbHRlcnMiLCJnZXRGaWx0ZXJzIiwiYXJyYXlGaWx0ZXIiLCJtYXAiLCJzaW5nbGVGaWx0ZXIiLCJGaWx0ZXIiLCJhZGRGaWx0ZXIiLCJjdXN0b21GaWx0ZXIiLCJwdXNoIiwiZ2V0U29ydGVycyIsInNvcnRlciIsImFkZFNlbGVjdCIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJTdHJpbmciLCJ0b1N0cmluZyIsIiRzZWxlY3QiLCJnZXRCaW5kaW5nSW5mbyIsImNsb25lZEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZGVlcENsb25lIiwiYWRkU29ydGVyIiwiYXR0YWNoRXZlbnQiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImRhdGEiLCJoYW5kbGVyIiwiZ2V0QXR0YWNoZWRFdmVudHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxlY3Rpb25CaW5kaW5nSW5mby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckluZm8gPSB7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHRlc3Q/OiAocDE6IHVua25vd24pID0+IGJvb2xlYW47XG5cdGNvbXBhcmF0b3I/OiAocDE6IHVua25vd24sIHAyOiB1bmtub3duKSA9PiBudW1iZXI7XG5cdG9wZXJhdG9yPzpcblx0XHR8IEZpbHRlck9wZXJhdG9yXG5cdFx0fCBcIkFsbFwiXG5cdFx0fCBcIkFueVwiXG5cdFx0fCBcIkJUXCJcblx0XHR8IFwiQ29udGFpbnNcIlxuXHRcdHwgXCJFbmRzV2l0aFwiXG5cdFx0fCBcIkVRXCJcblx0XHR8IFwiR0VcIlxuXHRcdHwgXCJHVFwiXG5cdFx0fCBcIkxFXCJcblx0XHR8IFwiTFRcIlxuXHRcdHwgXCJOQlwiXG5cdFx0fCBcIk5FXCJcblx0XHR8IFwiTm90Q29udGFpbnNcIlxuXHRcdHwgXCJOb3RFbmRzV2l0aFwiXG5cdFx0fCBcIk5vdFN0YXJ0c1dpdGhcIlxuXHRcdHwgXCJTdGFydHNXaXRoXCJcblx0XHR8IHVuZGVmaW5lZDtcblx0dmFsdWUxPzogdW5rbm93bjtcblx0dmFsdWUyPzogdW5rbm93bjtcblx0dmFyaWFibGU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvbj86IEZpbHRlcjtcblx0ZmlsdGVycz86IEZpbHRlcltdO1xuXHRhbmQ/OiBib29sZWFuO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogVHlwZSBkZWZpbml0aW9uIGZvciB0aGUgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHVzZWQgaW4gdGhlIFRhYmxlIGFuZCBDaGFydCBjb250cm9scy5cbiAqIFRoaXMgdHlwZSBpcyBiYXNlZCBvbiB0aGUgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmcgYW5kIGFkZHMgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHVzZWQgaW4gU0FQIEZpb3JpIGVsZW1lbnRzLlxuICogQHB1YmxpY1xuICogQHR5cGVkZWZcbiAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyA9IHtcblx0ZXZlbnRzPzogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xuXHRzdXNwZW5kZWQ/OiBib29sZWFuO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRmaWx0ZXJzPzogRmlsdGVyO1xuXHRzZWFyY2g/OiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM/OiB7XG5cdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHQkc2VsZWN0Pzogc3RyaW5nO1xuXHRcdCQkYWdncmVnYXRpb24/OiBBZ2dyZWdhdGlvbjtcblx0XHQkJHNoYXJlZFJlcXVlc3Q/OiBib29sZWFuO1xuXHRcdCRjb3VudD86IGJvb2xlYW47XG5cdFx0JCRjbGVhclNlbGVjdGlvbk9uRmlsdGVyPzogYm9vbGVhbjtcblx0XHQkJGdldEtlZXBBbGl2ZUNvbnRleHQ/OiBib29sZWFuO1xuXHRcdCQkZ3JvdXBJZD86IHN0cmluZztcblx0XHQkJHVwZGF0ZUdyb3VwSWQ/OiBzdHJpbmc7XG5cdFx0JCRvd25SZXF1ZXN0PzogYm9vbGVhbjtcblx0XHQkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzPzogYm9vbGVhbjtcblx0fTtcblx0c29ydGVyPzogU29ydGVyW107XG59O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvbiA9IHtcblx0c2VhcmNoPzogc3RyaW5nO1xuXHRleHBhbmRUbz86IG51bWJlcjtcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXZlbnRIYW5kbGVyID0ge1xuXHRldmVudElkOiBzdHJpbmc7XG5cdGNhbGxiYWNrOiBGdW5jdGlvbjtcblx0bGlzdGVuZXI/OiBvYmplY3Q7XG5cdGRhdGE/OiBvYmplY3Q7XG59O1xuXG4vKipcbiAqIEFQSSB0byBhZGQgcGFyYW1ldGVycyB0byB0aGUgY29sbGVjdGlvbiBiaW5kaW5nIGluZm8uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5Db2xsZWN0aW9uQmluZGluZ0luZm9cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIHtcblx0cHJpdmF0ZSBjb2xsZWN0aW9uQmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm87XG5cblx0cHJpdmF0ZSBhdHRhY2hlZEV2ZW50czogRXZlbnRIYW5kbGVyW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvcihiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvID0gYmluZGluZ0luZm87XG5cdH1cblxuXHQvKipcblx0ICogUmVjdXJzaXZlIGNsb25pbmcgb2YgdGhlIEZpbHRlci5cblx0ICogRmlsdGVycyBoYXZlIGEgcGFyYW1ldGVyIGFGaWx0ZXJzIHdoaWNoIGNvbnRhaW5zIG1vcmUgZmlsdGVycywgc28gd2UgdXNlIHRoaXMgbWV0aG9kIHRvIHJlY3Vyc2l2ZWx5IGNsb25lIGl0LlxuXHQgKiBjbG9uZUZpbHRlcnMgc2hvdWxkIGJlIGNhbGxlZCBmaXJzdCwgdG8gaGF2ZSB0aGUgRmlsdGVyIG91dHNpZGUgYW4gYXJyYXkgYW5kIGF2b2lkIGFuIGVtcHR5IGZpbHRlci5cblx0ICogQHBhcmFtIGNsb25pbmcgVGhlIGZpbHRlciB0byBiZSBjbG9uZWRcblx0ICogQHJldHVybnMgVGhlIGNsb25lZCBGaWx0ZXJcblx0ICovXG5cdGNsb25lRmlsdGVyc0NvbnRlbnQoY2xvbmluZzogRmlsdGVyKTogRmlsdGVyIHtcblx0XHRjb25zdCBmaWx0ZXJJbmZvOiBGaWx0ZXJJbmZvID0ge1xuXHRcdFx0cGF0aDogY2xvbmluZy5nZXRQYXRoKCksXG5cdFx0XHRvcGVyYXRvcjogY2xvbmluZy5nZXRPcGVyYXRvcigpLFxuXHRcdFx0dmFsdWUxOiBjbG9uaW5nLmdldFZhbHVlMSgpLFxuXHRcdFx0dmFsdWUyOiBjbG9uaW5nLmdldFZhbHVlMigpLFxuXHRcdFx0dmFyaWFibGU6IGNsb25pbmcuZ2V0VmFyaWFibGUoKSxcblx0XHRcdGNvbmRpdGlvbjogY2xvbmluZy5nZXRDb25kaXRpb24oKSxcblx0XHRcdGFuZDogY2xvbmluZy5pc0FuZCgpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogY2xvbmluZy5pc0Nhc2VTZW5zaXRpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCB0ZXN0Rm4gPSBjbG9uaW5nLmdldFRlc3QoKTtcblx0XHRpZiAodGVzdEZuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZpbHRlckluZm8udGVzdCA9IHRlc3RGbjtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wYXJhdG9yRm4gPSBjbG9uaW5nLmdldENvbXBhcmF0b3IoKTtcblx0XHRpZiAoY29tcGFyYXRvckZuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZpbHRlckluZm8uY29tcGFyYXRvciA9IGNvbXBhcmF0b3JGbjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJzID0gY2xvbmluZy5nZXRGaWx0ZXJzKCk7XG5cdFx0Y29uc3QgYXJyYXlGaWx0ZXIgPSBmaWx0ZXJzPy5tYXAoKHNpbmdsZUZpbHRlcjogRmlsdGVyKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUZpbHRlcnNDb250ZW50KHNpbmdsZUZpbHRlcik7XG5cdFx0fSk7XG5cdFx0aWYgKGFycmF5RmlsdGVyKSB7XG5cdFx0XHRmaWx0ZXJJbmZvLmZpbHRlcnMgPSBhcnJheUZpbHRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVySW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBmaWx0ZXJzIGFwcGxpZWQgdG8gdGhlIFRhYmxlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLkZpbHRlciBcImZpbHRlcnNcIn0gb24gdGhlIHRhYmxlXG5cdCAqL1xuXHRnZXRGaWx0ZXJzKCk6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb25lRmlsdGVyc0NvbnRlbnQodGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGZpbHRlciB0byB0aGUgZmlsdGVycyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGJpbmRpbmcgaW5mby5cblx0ICogQHBhcmFtIGN1c3RvbUZpbHRlciBUaGUge0BsaW5rIHNhcC51aS5tb2RlbC5GaWx0ZXIgXCJmaWx0ZXJcIn0gdG8gYWRkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZEZpbHRlcihjdXN0b21GaWx0ZXI6IEZpbHRlcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnMgPSB0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5maWx0ZXJzID8gW3RoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLmZpbHRlcnNdIDogW107XG5cdFx0ZmlsdGVycy5wdXNoKGN1c3RvbUZpbHRlcik7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoZmlsdGVycywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzb3J0ZXJzIG9mIHRoZSBUYWJsZS5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBzYXAudWkubW9kZWwuU29ydGVyIFwic29ydGVyc1wifSBvbiB0aGUgdGFibGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U29ydGVycygpOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnNvcnRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHNlbGVjdCBxdWVyeS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb3IgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHF1ZXJ5XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZFNlbGVjdChwYXJhbWV0ZXJzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IHBhcmFtZXRlclN0cmluZzogc3RyaW5nID0gcGFyYW1ldGVycy50b1N0cmluZygpO1xuXHRcdGlmICh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VsZWN0KSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSB0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgKyBcIixcIiArIHBhcmFtZXRlclN0cmluZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBwYXJhbWV0ZXJTdHJpbmc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSAnc2VyaWFsaXplZCcgYmluZGluZyBpbmZvIHdoaWNoIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gYmluZGluZ1xuXHQgKiBAcmV0dXJucyB7Q29sbGVjdGlvbkJpbmRpbmdJbmZvfSBUaGUge0BsaW5rIHNhcC5mZS5tYWNyb3MuQ29sbGVjdGlvbkJpbmRpbmdJbmZvIFwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCJ9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cblx0Z2V0QmluZGluZ0luZm8oKTogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgY2xvbmVkQmluZGluZ0luZm8gPSB7IC4uLnRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvIH07XG5cblx0XHQvLyBNYWtpbmcgZGVlcENsb25lcyBvZiBvYmplY3RzIChleGNlcHQgU29ydGVycyBiZWNhdXNlIHdlIGNhbid0KVxuXHRcdGlmICh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5ldmVudHMpIHtcblx0XHRcdGNsb25lZEJpbmRpbmdJbmZvLmV2ZW50cyA9IGRlZXBDbG9uZSh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5ldmVudHMpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uQmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0Y2xvbmVkQmluZGluZ0luZm8uZmlsdGVycyA9IHRoaXMuY2xvbmVGaWx0ZXJzQ29udGVudCh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5maWx0ZXJzKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdGRlZXBDbG9uZSh0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb25lZEJpbmRpbmdJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBzb3J0ZXIgdG8gdGhlIHNvcnRlcihzKSBhbHJlYWR5IHByZXNlbnQsIG9yIGNyZWF0ZSBvbmUgaWYgbm9uZSBleGlzdHMuXG5cdCAqIEBwYXJhbSBzb3J0ZXIgVGhlIHtAbGluayBzYXAudWkubW9kZWwuU29ydGVyIFwic29ydGVyXCJ9IHRvIGFkZCB0byB0aGUgcXVlcnlcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkU29ydGVyKHNvcnRlcjogU29ydGVyKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5zb3J0ZXIpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbkJpbmRpbmdJbmZvLnNvcnRlciA9IFtzb3J0ZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25CaW5kaW5nSW5mby5zb3J0ZXIucHVzaChzb3J0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggdGhlIGV2ZW50cyB0byB0aGUgdGFibGUgYmluZGluZy5cblx0ICogQHBhcmFtIGV2ZW50SWQgVGhlIGV2ZW50IElEIHRvIGF0dGFjaCB0aGUgY2FsbGJhY2sgdG9cblx0ICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHQgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZGF0YSBEYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhdHRhY2hFdmVudChldmVudElkOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbGlzdGVuZXI/OiBvYmplY3QsIGRhdGE/OiBvYmplY3QpOiB2b2lkIHtcblx0XHRjb25zdCBoYW5kbGVyOiBFdmVudEhhbmRsZXIgPSB7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9O1xuXHRcdHRoaXMuYXR0YWNoZWRFdmVudHMucHVzaChoYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhdHRhY2hlZCBldmVudCBoYW5kbGVycy5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYXR0YWNoZWQgZXZlbnQgaGFuZGxlcnMuXG5cdCAqL1xuXHRnZXRBdHRhY2hlZEV2ZW50cygpOiBFdmVudEhhbmRsZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRFdmVudHM7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBLElBTXFCQSx3QkFBd0I7SUFLNUMsU0FBQUEseUJBQVlDLFdBQTRDLEVBQUU7TUFBQSxLQUZsREMsY0FBYyxHQUFtQixFQUFFO01BRzFDLElBQUksQ0FBQ0MscUJBQXFCLEdBQUdGLFdBQVc7SUFDekM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFOQ0csUUFBQSxHQUFBSix3QkFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQUwsd0JBQUEsQ0FBQU0sU0FBQTtJQUFBRCxNQUFBLENBT0FFLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUNDLE9BQWUsRUFBVTtNQUM1QyxNQUFNQyxVQUFzQixHQUFHO1FBQzlCQyxJQUFJLEVBQUVGLE9BQU8sQ0FBQ0csT0FBTyxDQUFDLENBQUM7UUFDdkJDLFFBQVEsRUFBRUosT0FBTyxDQUFDSyxXQUFXLENBQUMsQ0FBQztRQUMvQkMsTUFBTSxFQUFFTixPQUFPLENBQUNPLFNBQVMsQ0FBQyxDQUFDO1FBQzNCQyxNQUFNLEVBQUVSLE9BQU8sQ0FBQ1MsU0FBUyxDQUFDLENBQUM7UUFDM0JDLFFBQVEsRUFBRVYsT0FBTyxDQUFDVyxXQUFXLENBQUMsQ0FBQztRQUMvQkMsU0FBUyxFQUFFWixPQUFPLENBQUNhLFlBQVksQ0FBQyxDQUFDO1FBQ2pDQyxHQUFHLEVBQUVkLE9BQU8sQ0FBQ2UsS0FBSyxDQUFDLENBQUM7UUFDcEJDLGFBQWEsRUFBRWhCLE9BQU8sQ0FBQ2lCLGVBQWUsQ0FBQztNQUN4QyxDQUFDO01BRUQsTUFBTUMsTUFBTSxHQUFHbEIsT0FBTyxDQUFDbUIsT0FBTyxDQUFDLENBQUM7TUFDaEMsSUFBSUQs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Q0FBQ0MsTUFBTSxHQUFHQyxTQUFTLENBQUMsSUFBSSxDQUFDakQscUJBQXFCLENBQUNnRCxNQUFNLENBQUM7TUFDeEU7TUFDQSxJQUFJLElBQUksQ0FBQ2hELHFCQUFxQixDQUFDOEIsT0FBTyxFQUFFO1FBQ3ZDaUIsaUJBQWlCLENBQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDMUIsbUJBQW1CLENBQUMsSUFBSSxDQUFDSixxQkFBcUIsQ0FBQzhCLE9BQU8sQ0FBQztNQUN6RjtNQUNBLElBQUksSUFBSSxDQUFDOUIscUJBQXFCLENBQUMwQyxVQUFVLEVBQUU7UUFDMUNPLFNBQVMsQ0FBQyxJQUFJLENBQUNqRCxxQkFBcUIsQ0FBQzBDLFVBQVUsQ0FBQztNQUNqRDtNQUNBLE9BQU9LLGlCQUFpQjtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTdDLE1BQUEsQ0FLQWdELFNBQVMsR0FBVCxTQUFBQSxTQUFTQSxDQUFDVixNQUFjLEVBQVE7TUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQ3hDLHFCQUFxQixDQUFDd0MsTUFBTSxFQUFFO1FBQ3ZDLElBQUksQ0FBQ3hDLHFCQUFxQixDQUFDd0MsTUFBTSxHQUFHLENBQUNBLE1BQU0sQ0FBQztNQUM3QyxDQUFDLE1BQU07UUFDTixJQUFJLENBQUN4QyxxQkFBcUIsQ0FBQ3dDLE1BQU0sQ0FBQ0YsSUFBSSxDQUFDRSxNQUFNLENBQUM7TUFDL0M7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQXRDLE1BQUEsQ0FRQWlELFdBQVcsR0FBWCxTQUFBQSxXQUFXQSxDQUFDQyxPQUFlLEVBQUVDLFFBQWtCLEVBQUVDLFFBQWlCLEVBQUVDLElBQWEsRUFBUTtNQUN4RixNQUFNQyxPQUFxQixHQUFHO1FBQUVKLE9BQU87UUFBRUMsUUFBUTtRQUFFQyxRQUFRO1FBQUVDO01BQUssQ0FBQztNQUNuRSxJQUFJLENBQUN4RCxjQUFjLENBQUN1QyxJQUFJLENBQUNrQixPQUFPLENBQUM7SUFDbEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdEQsTUFBQSxDQUlBdUQsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFtQjtNQUNuQyxPQUFPLElBQUksQ0FBQzFELGNBQWM7SUFDM0IsQ0FBQztJQUFBLE9BQUFGLHdCQUFBO0VBQUE7RUFBQUksUUFBQSxHQUFBSix3QkFBQTtFQUFBLE9BQUFJLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==