@sapui5/sap.fe.macros 1.141.2 → 1.143.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 (257) 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 +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  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/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -6,15 +6,14 @@ import Field from "sap/fe/macros/Field";
6
6
  import type { MassFieldProperties } from "sap/fe/macros/table/massEdit/library";
7
7
  import { SpecificSelectKeys } from "sap/fe/macros/table/massEdit/library";
8
8
  import Select from "sap/m/Select";
9
- import type UI5Event from "sap/ui/base/Event";
10
9
  import type Control from "sap/ui/core/Control";
11
10
  import Item from "sap/ui/core/Item";
12
11
  import type FormElement from "sap/ui/layout/form/FormElement";
13
- import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
14
12
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
15
13
  import type BaseContext from "sap/ui/model/Context";
16
14
  import type PropertyBinding from "sap/ui/model/PropertyBinding";
17
15
  import type Context from "sap/ui/model/odata/v4/Context";
16
+ import type { EventType } from "../../../../../../../../types/extension_types";
18
17
  import FieldRuntimeHelper from "../../field/FieldRuntimeHelper";
19
18
 
20
19
  export default class MassEditField {
@@ -164,10 +163,8 @@ export default class MassEditField {
164
163
  }
165
164
  }
166
165
 
167
- private handleFieldChange(event: Field$ChangeEvent): void {
168
- this.isValid = !!FieldRuntimeHelper.getFieldStateOnChange(event as Field$ChangeEvent & UI5Event<{ isValid: boolean }>).state[
169
- "validity"
170
- ];
166
+ private handleFieldChange(event: EventType<typeof Field.prototype.change>): void {
167
+ this.isValid = !!FieldRuntimeHelper.getFieldStateOnChange(event).state["validity"];
171
168
  }
172
169
 
173
170
  public isFieldValid(): boolean {
@@ -369,12 +369,11 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
369
369
  }
370
370
 
371
371
  // Action enablement for Mass Edit
372
- const updatablePropertyPath = table?.data("updatablePropertyPath");
373
372
  const draft = table?.data("draft");
374
373
  const readOnlyDraftEnabled = table.data("displayModePropertyBinding") === "true" && draft !== "undefined";
375
374
  const updatableContexts = [];
376
375
  for (const selectedContext of activeSelectedContexts) {
377
- if (TableRuntime.isUpdatableContext(updatablePropertyPath, selectedContext, readOnlyDraftEnabled)) {
376
+ if (TableRuntime.isUpdatableContext(tableDefinition.annotation.updatablePropertyPathInfo, selectedContext, readOnlyDraftEnabled)) {
378
377
  updatableContexts.push(selectedContext);
379
378
  }
380
379
  }
@@ -402,4 +401,4 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
402
401
  _exports = ContextMenuHandler;
403
402
  return _exports;
404
403
  }, false);
405
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsImRlbGV0ZUFjdGlvbiIsImZpbmQiLCJhY3Rpb24iLCJnZXRJZCIsImVuZHNXaXRoIiwiZGVsZXRlVmlzaWJsZSIsImdldEFjdGlvbiIsImdldFZpc2libGUiLCJpbmNsdWRlcyIsInNldFZpc2libGUiLCJhY3Rpb25JdGVtIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJmbGV4TWFuYWdlZE9iamVjdE1vZGVscyIsImZpbHRlciIsImRlcGVuZGVudCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNvbWUiLCJtb2RlbCIsImNvbnRleHRNZW51SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJhY3Rpb25JblN1Yk1lbnUiLCJfZmluZEFjdGlvbkluU3ViTWVudSIsImRlc3Ryb3kiLCJzdWJNZW51Iiwic3BsaWNlIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsIm5ld01lbnVCdXR0b24iLCJNZW51SXRlbSIsImlkIiwiZ2VuZXJhdGUiLCJ0ZXh0IiwiaSIsIml0ZW0iLCJzdWJJdGVtcyIsInN1Ykl0ZW0iLCJpbmRleCIsInRhYmxlQWN0aW9uVmlzaWJpbGl0eSIsInNldENvbnRleHRNZW51QWN0aXZlIiwiYWN0aXZlIiwiaXNDb250ZXh0TWVudUFjdGl2ZSIsInNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5IiwiY29udGV4dHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJjb2xsYWJvcmF0aW9uU2VydmljZSIsImNtSGVscGVyU2VydmljZSIsImdldE9wdGlvbnMiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJuYXZpZ2F0aW9uVHlwZSIsImFubm90YXRpb24iLCJyb3ciLCJuYXZpZ2F0aW9uSW5mbyIsInR5cGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImdldENvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImlzRHJhZnQiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRQYXRoIiwidmlzaWJsZSIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIl9vbkNvbnRleHRNZW51UHJlc3MiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJ0YWJsZUNvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImNvbnRleHRNZW51Q29udGV4dCIsImdldFBhcmFtZXRlciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250ZXh0TWVudVNlbGVjdGlvbiIsImdldFJlbGV2YW50U2VsZWN0aW9uIiwib25lQ29udGV4dElzQWN0aXZlIiwiaXNJbmFjdGl2ZSIsInNldFByb3BlcnR5IiwiYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyIsIm9Db250ZXh0Iiwib25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCIsImlzSW5saW5lQ3JlYXRpb25Nb2RlIiwiZ2V0Q3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwibmF2aWdhYmxlQ29udGV4dHMiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImdldFByb3BlcnR5Iiwicm91dGVQYXRoIiwidmlzaWJsZU1lbnVJdGVtcyIsInByZXZlbnREZWZhdWx0IiwiaXNFeHBhbmRhYmxlIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJpc0NvbGxhcHNhYmxlIiwiZGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiVGFibGVSdW50aW1lIiwic2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRyYWZ0IiwicmVhZE9ubHlEcmFmdEVuYWJsZWQiLCJ1cGRhdGFibGVDb250ZXh0cyIsInNlbGVjdGVkQ29udGV4dCIsImlzVXBkYXRhYmxlQ29udGV4dCIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwiX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQiLCJub2RlVHlwZSIsInVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQiLCJ1cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiSlNPTiIsInBhcnNlIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb250ZXh0TWVudUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1vZGVsIGZyb20gXCJzYXAvdWkvZmwvdXRpbC9NYW5hZ2VkT2JqZWN0TW9kZWxcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dE1lbnVIYW5kbGVyIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHByb3RlY3RlZCBjb250ZXh0TWVudUFjdGl2ZSA9IGZhbHNlO1xuXG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogQWxpZ24gY29udGV4dCBtZW51IHdpdGggdGhlIHRhYmxlIGFjdGlvbnMgYnkgUlRBIGNoYW5nZXMgaW4gdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdGFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBzb3J0SGVscGVyRm9yTWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25zID0gdGFibGUuZ2V0QWN0aW9ucygpO1xuXHRcdHRhYmxlQWN0aW9ucz8uZm9yRWFjaCgodGFibGVBY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uSXRlbSA9IHRhYmxlQWN0aW9uLmdldEFnZ3JlZ2F0aW9uKFwiYWN0aW9uXCIpIGFzIEJ1dHRvbjtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBzcGxpdCBieSBSVEFcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvblNwbGl0KHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0Ly8gUmVtb3ZlIG9yaWdpbmFsIG1lbnUgaXRlbSBhbmQgYWRkIHN1YiBpdGVtcyBhcyBuZXcgbWVudSBpdGVtc1xuXHRcdFx0XHR0aGlzLl9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBpdGVtIGhhcyBiZWVuIGNyZWF0ZWQgYnkgY29tYmluaW5nIHRoZSB0d28gYWN0aW9uc1xuXHRcdFx0aWYgKHRoaXMuX2lzQWN0aW9uQ29tYmluZWQodGFibGVBY3Rpb25JdGVtKSkge1xuXHRcdFx0XHR0aGlzLl9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0gYXMgdW5rbm93biBhcyBNZW51QnV0dG9uLCBjb250ZXh0TWVudSwgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtID0gdGhpcy5fZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0aWYgKGNvbnRleHRNZW51SXRlbSkge1xuXHRcdFx0XHR0aGlzLl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnVJdGVtLCB0YWJsZUFjdGlvbiBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uKTtcblx0XHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5wdXNoKGNvbnRleHRNZW51SXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQWxpZ24gdGhlIG9yZGVyIG9mIGNvbnRleHQtbWVudUl0ZW1zIHdpdGggYm91bmQgdGFibGUgYWN0aW9uc1xuXHRcdGlmIChzb3J0SGVscGVyRm9yTWVudUl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5mb3JFYWNoKChtZW51SXRlbSwgc29ydEluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGluZGV4T2ZDb250ZXh0TWVudSA9IGNvbnRleHRNZW51LmluZGV4T2ZJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0aWYgKGluZGV4T2ZDb250ZXh0TWVudSAhPT0gc29ydEluZGV4KSB7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShtZW51SXRlbSwgc29ydEluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGUgYWxsIGNvbnRleHQgbWVudSBhY3Rpb25zIGV4Y2VwdCBkZWxldGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdGhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUodGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZS5nZXRBY3Rpb25zKCkuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24uZ2V0SWQoKS5lbmRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGU6OkFjdGlvblRvb2xiYXJBY3Rpb25cIikpO1xuXHRcdGNvbnN0IGRlbGV0ZVZpc2libGUgPSAoZGVsZXRlQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pPy5nZXRBY3Rpb24oKS5nZXRWaXNpYmxlKCkgPz8gdHJ1ZTtcblx0XHRtZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0pID0+IHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgdGhlIGRlbGV0ZSBhY3Rpb25cblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiU3RhbmRhcmRBY3Rpb246OkRlbGV0ZTo6Q29udGV4dE1lbnVcIikpIHtcblx0XHRcdFx0bWVudUl0ZW0uc2V0VmlzaWJsZShkZWxldGVWaXNpYmxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKi9cblx0X2lzQWN0aW9uQ29tYmluZWQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBoYXZlIGN1c3RvbSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgTWVudUJ1dHRvbiBjcmVhdGVkIGJ5IFJUQSBjb21iaW5lIGNoYW5nZVxuXHRcdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0Ly8gZmluZCBhbGwgdGhlIGRlcGVuZGVudHMgd2hpY2ggYXJlIGEgRmxleCBNYW5hZ2VkT2JqZWN0TW9kZWxcblx0XHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGVtIGluY2x1ZGVzIFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiXG5cdFx0XHRyZXR1cm4gZmxleE1hbmFnZWRPYmplY3RNb2RlbHMuc29tZSgobW9kZWwpID0+XG5cdFx0XHRcdChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpLmluY2x1ZGVzKFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbWJpbmUgdGhlIGFjdGlvbnMgaW4gdGhlIGNvbnRleHQgbWVudSB0byBhbGlnbiB3aXRoIHRoZSB0YWJsZSBhY3Rpb24gdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdF9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCBjb250ZXh0TWVudTogTWVudSwgdGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly8gQ3JlYXRlIGEgbmV3IG1lbnUgYnV0dG9uIGluIHRoZSBjb250ZXh0IG1lbnUgaWYgaXQgZG9lcyBub3QgZXhpc3Rcblx0XHRjb25zdCBtZW51QnV0dG9uID0gdGhpcy5fZmluZE9yQ3JlYXRlTWVudUJ1dHRvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbSwgdGFibGUpO1xuXHRcdGNvbnN0IGFjdGlvbkl0ZW1zID0gYWN0aW9uSXRlbS5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25JdGVtcykge1xuXHRcdFx0Y29uc3QgdG9vbEJhckFjdGlvbiA9IGFjdGlvbjtcblx0XHRcdC8vIG5vdyBmaW5kIHRoZSBhY3Rpb24gaW4gdGhlIGNvbnRleHQgbWVudSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Db250ZXh0TWVudSA9IG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uSWRJblRvb2xiYXIgPSB0b29sQmFyQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIgKyBcIjo6Q29udGV4dE1lbnVcIiB8fFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bWVudUl0ZW0uc2V0VGV4dCh0b29sQmFyQWN0aW9uLmdldFRleHQoKSk7XG5cdFx0XHRcdFx0Ly8gQWRkIHRoZSBhY3Rpb24gdG8gdGhlIG1lbnUgYnV0dG9uXG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB3ZSBmaW5kIGFub3RoZXIgbWVudSBpbiB0aGUgY29udGV4dCBtZW51IHdlIGNoZWNrIGlmIHRoZSBhY3Rpb24gaXMgaW4gdGhlIHN1YiBtZW51XG5cdFx0XHRcdGlmIChtZW51SXRlbS5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgIW1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoYWN0aW9uSXRlbS5nZXRJZCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvbkluU3ViTWVudSA9IHRoaXMuX2ZpbmRBY3Rpb25JblN1Yk1lbnUobWVudUl0ZW0uZ2V0SXRlbXMoKSwgdG9vbEJhckFjdGlvbik7XG5cdFx0XHRcdFx0aWYgKGFjdGlvbkluU3ViTWVudSkge1xuXHRcdFx0XHRcdFx0YWN0aW9uSW5TdWJNZW51LnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKGFjdGlvbkluU3ViTWVudSk7XG5cdFx0XHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0bWVudUl0ZW0uZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgYWN0aW9uIGluIGFuIGFjdGlvbiBtZW51IGluIHRoZSBjb250ZXh0IG1lbnUsIGl0IHJldHVybiB0aGUgYWN0aW9uIGlmIGZvdW5kIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIG1lbnUuXG5cdCAqIEBwYXJhbSBzdWJNZW51IFRoZSBhcnJheSBvZiBhY3Rpb25zIGluIHRoZSBtZW51XG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gd2UgYXJlIHNlYXJjaGluZyBmb3Jcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZFxuXHQgKi9cblx0X2ZpbmRBY3Rpb25JblN1Yk1lbnUoc3ViTWVudTogTWVudUl0ZW1bXSwgYWN0aW9uSXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBzdWJNZW51KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikgfHxcblx0XHRcdFx0bWVudUl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSArIFwiOjpDb250ZXh0TWVudVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gbWVudUl0ZW07XG5cdFx0XHRcdHN1Yk1lbnUuc3BsaWNlKHN1Yk1lbnUuaW5kZXhPZihtZW51SXRlbSksIDEpO1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrJ3MgaWYgYSBwYXJ0aWN1bGFyIG1lbnUgYnV0dG9uIGV4aXN0cyBpbiB0aGUgY29udGV4dCBtZW51LCBpZiBub3QgY3JlYXRlcyBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkcyBpdCB0byB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgbWVudSBidXR0b24gdG8gZmluZCBvciBjcmVhdGVcblx0ICogQHBhcmFtIHRhYmxlIFRoZSBNRENUYWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgTWVudUl0ZW0gaWYgZm91bmQsIG90aGVyd2lzZSBhIG5ldyBNZW51SXRlbVxuXHQgKi9cblx0X2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IE1lbnVCdXR0b24sIHRhYmxlOiBNRENUYWJsZSk6IE1lbnVJdGVtIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBjb250ZXh0TWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHQvL2xvb3Agb3ZlciBjb250ZXh0TWVudUl0ZW1zIGFuZCBjaGVjayBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gYWxyZWFkeSBleGlzdHNcblx0XHRmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIGNvbnRleHRNZW51SXRlbXMpIHtcblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIG1lbnVJdGVtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkIGl0IHRvIHRoZSBjb250ZXh0TWVudVxuXHRcdGNvbnN0IG5ld01lbnVCdXR0b24gPSBuZXcgTWVudUl0ZW0oe1xuXHRcdFx0aWQ6IGdlbmVyYXRlKFt0YWJsZS5nZXRJZCgpLCBhY3Rpb25JdGVtLmdldElkKCksIFwiOjpDb250ZXh0TWVudVwiXSksXG5cdFx0XHR0ZXh0OiBhY3Rpb25JdGVtLmdldFRleHQoKVxuXHRcdH0pO1xuXHRcdGNvbnRleHRNZW51LmFkZEl0ZW0obmV3TWVudUJ1dHRvbik7XG5cdFx0cmV0dXJuIG5ld01lbnVCdXR0b247XG5cdH1cblxuXHQvKipcblx0ICogU3BsaXQgdGhlIGFjdGlvbiBpdGVtcyBpbiB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIGl0ZW0gdG8gc3BsaXRcblx0ICogQHBhcmFtIGNvbnRleHRNZW51IFRoZSBjb250ZXh0IG1lbnVcblx0ICovXG5cdF9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiB2b2lkIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgYSBNZW51XG5cdFx0XHRpZiAobWVudUl0ZW1zW2ldLmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bWVudUl0ZW1zW2ldXG5cdFx0XHRcdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKGl0ZW0pID0+IGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKS5yZXBsYWNlKFwiOjpBY3Rpb25NZW51XCIsIFwiOjpDb250ZXh0TWVudVwiKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVudUl0ZW0gPSBtZW51SXRlbXNbaV07XG5cdFx0XHRcdFx0Y29uc3Qgc3ViSXRlbXMgPSBtZW51SXRlbS5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgbWVudUl0ZW0gZnJvbSB0aGUgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IHRoZXNlIHN1Yi1pdGVtcyBpbnRvIHRoZSBjb250ZXh0TWVudSBzdGFydGluZyBmcm9tIHRoZSBvcmlnaW5hbCBpbmRleFxuXHRcdFx0XHRcdHN1Ykl0ZW1zLmZvckVhY2goKHN1Ykl0ZW0sIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb250ZXh0TWVudS5pbnNlcnRJdGVtKHN1Ykl0ZW0sIGkgKyBpbmRleCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIGZvciB0aGUgdGFibGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEByZXR1cm5zICBNZW51SXRlbXxudWxsIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcblx0ICovXG5cdF9nZXRDb3JyZXNwb25kaW5nQ29udGV4dE1lbnVBY3Rpb24odGFibGVBY3Rpb246IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiBNZW51SXRlbSB8IG51bGwge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG1lbnVJdGVtcykge1xuXHRcdFx0Ly8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBpcyBlaXRoZXIgYW4gaXRlbSB3aXRoIGFuIGFkZGl0aW9uYWwgXCI6OkNvbnRleHRNZW51XCIgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBpZFxuXHRcdFx0Ly8gb3IgaXQgaXMgYSBzcGxpdHRlZCBtZW51IGl0ZW0gd2hlcmUgdGhlIFwiOjpDb250ZXh0TWVudVwiIHBhcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaWRcblx0XHRcdGlmIChcblx0XHRcdFx0dGFibGVBY3Rpb24uZ2V0SWQoKSArIFwiOjpDb250ZXh0TWVudVwiID09PSBpdGVtLmdldElkKCkgfHxcblx0XHRcdFx0aXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IHRhYmxlQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKT8ucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHRcdC8vIGZvciBjb21iaW5lZCBhY3Rpb25zLCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0aGUgb25lIHdpdGggdGhlIHNhbWUgdGV4dFxuXHRcdFx0aWYgKGl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyh0YWJsZUFjdGlvbi5nZXRJZCgpKSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQWRqdXN0IHRoZSB0ZXh0IGFuZCB2aXNpYmlsaXR5IG9mIHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudUl0ZW0gVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFycmF5IG9mIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdF9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnVJdGVtOiBNZW51SXRlbSwgdGFibGVBY3Rpb246IEFjdGlvblRvb2xiYXJBY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBjaGFuZ2UgdGhlIHRleHQgb2YgdGhlIG1lbnUgaXRlbSBhcyB0aGUgdGV4dCBvZiBhY3Rpb24gaXRlbVxuXHRcdGNvbnRleHRNZW51SXRlbS5zZXRUZXh0KGFjdGlvbkl0ZW0uZ2V0VGV4dCgpKTtcblx0XHQvLyBjaGFuZ2UgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbnRleHRNZW51IGFjdGlvbiBhcyB0aGUgdmlzaWJpbGl0eSBvZiB0YWJsZSBhY3Rpb25cblx0XHRjb25zdCB0YWJsZUFjdGlvblZpc2liaWxpdHkgPSBhY3Rpb25JdGVtLmdldFZpc2libGUoKSAmJiB0YWJsZUFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0aWYgKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSAhPT0gY29udGV4dE1lbnVJdGVtLmdldFZpc2libGUoKSkge1xuXHRcdFx0Y29udGV4dE1lbnVJdGVtLnNldFZpc2libGUodGFibGVBY3Rpb25WaXNpYmlsaXR5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYW4gYWN0aW9uIGhhcyBiZWVuIHNwbGl0IGJ5IFJUQS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG9yaWdpbmFsIGFjdGlvbiBpdGVtXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgYWN0aW9uIGhhcyBiZWVuIHNwbGl0XG5cdCAqL1xuXHRfaXNBY3Rpb25TcGxpdChhY3Rpb25JdGVtOiBCdXR0b24pOiBib29sZWFuIHtcblx0XHRpZiAoYWN0aW9uSXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5NZW51QnV0dG9uXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0Y29uc3QgZmxleE1hbmFnZWRPYmplY3RNb2RlbHMgPSBkZXBlbmRlbnRzLmZpbHRlcigoZGVwZW5kZW50KSA9PiBkZXBlbmRlbnQgaW5zdGFuY2VvZiBNYW5hZ2VkT2JqZWN0TW9kZWwpO1xuXHRcdC8vIGNoZWNrIGlmIG9uZSBvZiB0aGVtIGhhcyB0aGUgbmFtZSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoXG5cdFx0XHQobW9kZWwpID0+IChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpID09PSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBtZW51IGl0ZW0gaGFzIGJlZW4gcHJlc3NlZC5cblx0ICogQHBhcmFtIGFjdGl2ZVxuXHQgKi9cblx0c2V0Q29udGV4dE1lbnVBY3RpdmUoYWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZXh0TWVudUFjdGl2ZSA9IGFjdGl2ZTtcblx0fVxuXG5cdGlzQ29udGV4dE1lbnVBY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGV4dE1lbnVBY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogTWFrZSB0aGUgbWVudSBpdGVtIG9mIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgdmlzaWJsZSBpZiBpdCBpcyBzdXBwb3J0ZWQuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gY29udGV4dHNcblx0ICovXG5cdHNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5KHRhYmxlOiBNRENUYWJsZSwgY29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQge1xuXHRcdC8vIGdldCBjb2xsYWJvcmF0aW9uIG1lbnUgaXRlbSBmcm9tIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSA9IG1lbnVJdGVtcz8uZmluZCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoXCJDb250ZXh0TWVudTo6Q29sbGFib3JhdGlvbk1hbmFnZXJcIikpO1xuXHRcdGlmIChjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtKSB7XG5cdFx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBvcHRpb24gZnJvbSBjb2xsYWJvcmF0aXZlIHRvb2xzIHNlcnZpY2Vcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlPy5nZXRPcHRpb25zKCk7XG5cdFx0XHQvLyBnZXQgbmF2aWdhdGlvbiBpbmZvIGZyb20gdGFibGUgZGVmaW5pdGlvblxuXHRcdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayk/LmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblR5cGUgPSB0YWJsZURlZmluaXRpb24/LmFubm90YXRpb24/LnJvdz8ubmF2aWdhdGlvbkluZm8/LnR5cGU7XG5cdFx0XHRpZiAoY29sbGFib3JhdGlvbk9wdGlvbiAmJiBuYXZpZ2F0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgJiYgY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJdGVtcyB0byBzaGFyZSBuZWVkcyB0byBoYXZlIGFuIGFjdGl2ZSBlbnRpdHksIGlmIGl0J3Mgbm90IENvbGxhYm9yYXRpdmUgRHJhZnQgb3IgYSBub24gZHJhZnQgcHJvZ3JhbW1pbmcgbW9kZWxcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHRzWzBdLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBpc0RyYWZ0ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIGNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRcdC8vIElmIHdlIGFyZSBpbiBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGluIGFuIG5vbi1kcmFmdCBhcHAsIHdlIHNldCB2aXNpYmxlIHRvIHRydWUuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB3ZSBvbmx5IHNldCB2aXNpYmxlIHRvIHRydWUsIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHMgaXMgb3IgaGFzIGFuIGFjdGl2ZSB2ZXJzaW9uLlxuXHRcdFx0XHRjb25zdCB2aXNpYmxlID1cblx0XHRcdFx0XHRjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpIHx8ICFpc0RyYWZ0XG5cdFx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHRcdDogY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eSB8fCBjb250ZXh0LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0uc2V0VmlzaWJsZSh2aXNpYmxlKTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0sIFwicHJlc3NcIiwgXCJDTTpTaGFyZUxpbmtcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgYmVmb3JlT3BlbkNvbnRleHRNZW51IGV2ZW50IG9mIHRoZSBNREMgVGFibGUuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vbkNvbnRleHRNZW51UHJlc3ModGhpczogSVRhYmxlQmxvY2sgJiBDb250ZXh0TWVudUhhbmRsZXIsIG9FdmVudDogVGFibGUkQmVmb3JlT3BlbkNvbnRleHRNZW51RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IG9FdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdHRhYmxlQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdLCAvLyBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgdGFibGVcblx0XHRcdGNvbnRleHRNZW51Q29udGV4dCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKSBhcyBDb250ZXh0LCAvLyByb3cgY2xpY2tlZCBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGhpcy5nZXRSZWxldmFudFNlbGVjdGlvbih0YWJsZUNvbnRleHRzLCBjb250ZXh0TWVudUNvbnRleHQpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYWxsIGNvbnRleHRzIGluIGNvbnRleHRNZW51U2VsZWN0aW9uIGFyZSBpbmFjdGl2ZVxuXHRcdC8vIGlmIHNvLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSBpbiB0aGUgaW50ZXJuYWwgbW9kZWwgdG8gdHJ1ZVxuXHRcdC8vIGlmIGp1c3Qgb25lIGNvbnRleHQgaXMgbm90IGluYWN0aXZlLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSB0byBmYWxzZVxuXHRcdGxldCBvbmVDb250ZXh0SXNBY3RpdmUgPSB0cnVlO1xuXHRcdG9uZUNvbnRleHRJc0FjdGl2ZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKGNvbnRleHQpID0+ICFjb250ZXh0LmlzSW5hY3RpdmUoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsICFvbmVDb250ZXh0SXNBY3RpdmUpO1xuXG5cdFx0Ly8gRG8gbm90IGNvbnNpZGVyIGVtcHR5IHJvd3MgYXMgc2VsZWN0ZWQgY29udGV4dCwgZm9yIG90aGVyIGFjdGlvbnMgdGhhbiBkZWxldGVcblx0XHRjb25zdCBhY3RpdmVTZWxlY3RlZENvbnRleHRzID0gY29udGV4dE1lbnVTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuICFvQ29udGV4dC5pc0luYWN0aXZlKCk7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDA7XG5cdFx0Y29uc3QgaXNJbmxpbmVDcmVhdGlvbk1vZGUgPVxuXHRcdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJICYgeyBnZXRDcmVhdGlvbk1vZGU6IEZ1bmN0aW9uIH0pPy5nZXRDcmVhdGlvbk1vZGUoKS5nZXROYW1lKCkgPT09XG5cdFx0XHRDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0Y29uc3QgbmF2aWdhYmxlQ29udGV4dHMgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQhb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmXG5cdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQ/LmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKClcblx0XHRcdFx0XHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkAkdWk1LmZlLnZpcnR1YWwucm91dGVOYXZpZ2FibGUtXCIgK1xuXHRcdFx0XHRcdFx0XHQodGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7IHJvdXRlUGF0aD86IHN0cmluZyB9KT8ucm91dGVQYXRoLFxuXHRcdFx0XHRcdFx0b0NvbnRleHRcblx0XHRcdFx0XHQpICE9PSBmYWxzZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzSW5jbHVkaW5nSW5hY3RpdmVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiwgbmF2aWdhYmxlQ29udGV4dHMpO1xuXHRcdC8vcmVzZXQgbnVtYmVyIG9mIHNlbGVjdGVkIGNvbnRleHRzIHRvIGVuc3VyZSBjYWxsYmFjayBmb3IgY3VzdG9tIGVuYWJsZSBoYW5kbGVyXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIC0xKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZk5hdmlnYWJsZUNvbnRleHRzXCIsIG5hdmlnYWJsZUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoKTtcblxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8qIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIgKi9cblx0XHRcdHRoaXMuYWxpZ25Db250ZXh0TWVudVdpdGhUYWJsZVRvb2xiYXJDaGFuZ2VzKHRhYmxlKTtcblx0XHR9IGVsc2UgaWYgKG9ubHlJbkFjdGl2ZUNvbnRleHRzU2VsZWN0ZWQgJiYgaXNJbmxpbmVDcmVhdGlvbk1vZGUpIHtcblx0XHRcdC8vIE9ubHkgRGVsZXRlIGlzIHZpc2libGVcblx0XHRcdHRoaXMuaGlkZUFsbENvbnRleHRNZW51QWN0aW9uc0V4Y2VwdERlbGV0ZSh0YWJsZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBNZW51SXRlbSBmb3IgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdFx0dGhpcy5zZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZSwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtZW51IGNvbnRhaW5zIG9ubHkgbm90IHZpc2libGUgaXRlbXNcblx0XHQvLyBpbiB0aGF0IGNhc2UgcHJldmVudCB0aGUgY29udGV4dCBtZW51IGZyb20gb3BlbmluZ1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcigobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldFZpc2libGUoKSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRvRXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGVtZW50IG9mIHRoZSBFeHBhbmQvQ29sbGFwc2UgYnV0dG9uc1xuXHRcdGNvbnN0IGlzRXhwYW5kYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IGlzQ29sbGFwc2FibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIGlzRXhwYW5kYWJsZSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBpc0NvbGxhcHNhYmxlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBEZWxldGVcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiwgdGFibGUuZ2V0SWQoKSk7XG5cdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCBjb250ZXh0TWVudVNlbGVjdGlvbiwgdHJ1ZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgSUJOXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGU/LmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQsIG5hdmlnYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBNYXNzIEVkaXRcblx0XHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0YWJsZT8uZGF0YShcInVwZGF0YWJsZVByb3BlcnR5UGF0aFwiKTtcblx0XHRjb25zdCBkcmFmdCA9IHRhYmxlPy5kYXRhKFwiZHJhZnRcIik7XG5cdFx0Y29uc3QgcmVhZE9ubHlEcmFmdEVuYWJsZWQgPSB0YWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiICYmIGRyYWZ0ICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRpZiAoVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIiwgdXBkYXRhYmxlQ29udGV4dHMpO1xuXG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgJiYgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb25bMF0sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdFRhYmxlUnVudGltZS51cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cblx0XHQvLyBPdGhlciBhY3Rpb24gZW5hYmxlbWVudFxuXHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0SlNPTi5wYXJzZSh0YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcInRhYmxlXCIsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdGdldFJlbGV2YW50U2VsZWN0aW9uKHRhYmxlQ29udGV4dHM6IENvbnRleHRbXSwgY29udGV4dE1lbnVDb250ZXh0OiBDb250ZXh0KTogQ29udGV4dFtdIHtcblx0XHRsZXQgY29udGV4dE1lbnVTZWxlY3Rpb246IENvbnRleHRbXTtcblx0XHRpZiAodGFibGVDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TWVudUNvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRhYmxlQ29udGV4dHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gW2NvbnRleHRNZW51Q29udGV4dF0gYXMgQ29udGV4dFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dE1lbnVTZWxlY3Rpb247XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztNQXNCcUJBLGtCQUFrQjtJQUFBLFNBQUFBLG1CQUFBO01BQUEsS0FDNUJDLGlCQUFpQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFGLGtCQUFB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
404
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsImRlbGV0ZUFjdGlvbiIsImZpbmQiLCJhY3Rpb24iLCJnZXRJZCIsImVuZHNXaXRoIiwiZGVsZXRlVmlzaWJsZSIsImdldEFjdGlvbiIsImdldFZpc2libGUiLCJpbmNsdWRlcyIsInNldFZpc2libGUiLCJhY3Rpb25JdGVtIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJmbGV4TWFuYWdlZE9iamVjdE1vZGVscyIsImZpbHRlciIsImRlcGVuZGVudCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNvbWUiLCJtb2RlbCIsImNvbnRleHRNZW51SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJhY3Rpb25JblN1Yk1lbnUiLCJfZmluZEFjdGlvbkluU3ViTWVudSIsImRlc3Ryb3kiLCJzdWJNZW51Iiwic3BsaWNlIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsIm5ld01lbnVCdXR0b24iLCJNZW51SXRlbSIsImlkIiwiZ2VuZXJhdGUiLCJ0ZXh0IiwiaSIsIml0ZW0iLCJzdWJJdGVtcyIsInN1Ykl0ZW0iLCJpbmRleCIsInRhYmxlQWN0aW9uVmlzaWJpbGl0eSIsInNldENvbnRleHRNZW51QWN0aXZlIiwiYWN0aXZlIiwiaXNDb250ZXh0TWVudUFjdGl2ZSIsInNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5IiwiY29udGV4dHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJjb2xsYWJvcmF0aW9uU2VydmljZSIsImNtSGVscGVyU2VydmljZSIsImdldE9wdGlvbnMiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJuYXZpZ2F0aW9uVHlwZSIsImFubm90YXRpb24iLCJyb3ciLCJuYXZpZ2F0aW9uSW5mbyIsInR5cGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImdldENvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImlzRHJhZnQiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRQYXRoIiwidmlzaWJsZSIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIl9vbkNvbnRleHRNZW51UHJlc3MiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJ0YWJsZUNvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImNvbnRleHRNZW51Q29udGV4dCIsImdldFBhcmFtZXRlciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250ZXh0TWVudVNlbGVjdGlvbiIsImdldFJlbGV2YW50U2VsZWN0aW9uIiwib25lQ29udGV4dElzQWN0aXZlIiwiaXNJbmFjdGl2ZSIsInNldFByb3BlcnR5IiwiYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyIsIm9Db250ZXh0Iiwib25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCIsImlzSW5saW5lQ3JlYXRpb25Nb2RlIiwiZ2V0Q3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwibmF2aWdhYmxlQ29udGV4dHMiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImdldFByb3BlcnR5Iiwicm91dGVQYXRoIiwidmlzaWJsZU1lbnVJdGVtcyIsInByZXZlbnREZWZhdWx0IiwiaXNFeHBhbmRhYmxlIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJpc0NvbGxhcHNhYmxlIiwiZGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiVGFibGVSdW50aW1lIiwic2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudCIsImRyYWZ0IiwicmVhZE9ubHlEcmFmdEVuYWJsZWQiLCJ1cGRhdGFibGVDb250ZXh0cyIsInNlbGVjdGVkQ29udGV4dCIsImlzVXBkYXRhYmxlQ29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aEluZm8iLCJjb250cm9sIiwiY3JlYXRlRW5hYmxlbWVudCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29udGV4dE1lbnVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3V0aWwvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVPcGVuQ29udGV4dE1lbnVFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51SGFuZGxlciBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRwcm90ZWN0ZWQgY29udGV4dE1lbnVBY3RpdmUgPSBmYWxzZTtcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIHRoZSB0YWJsZSBhY3Rpb25zIGJ5IFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2l0aCBib3VuZCB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXModGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3Qgc29ydEhlbHBlckZvck1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlLmdldEFjdGlvbnMoKTtcblx0XHR0YWJsZUFjdGlvbnM/LmZvckVhY2goKHRhYmxlQWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUFjdGlvbkl0ZW0gPSB0YWJsZUFjdGlvbi5nZXRBZ2dyZWdhdGlvbihcImFjdGlvblwiKSBhcyBCdXR0b247XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gc3BsaXQgYnkgUlRBXG5cdFx0XHRpZiAodGhpcy5faXNBY3Rpb25TcGxpdCh0YWJsZUFjdGlvbkl0ZW0pKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBvcmlnaW5hbCBtZW51IGl0ZW0gYW5kIGFkZCBzdWIgaXRlbXMgYXMgbmV3IG1lbnUgaXRlbXNcblx0XHRcdFx0dGhpcy5fc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFjdGlvbnNcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvbkNvbWJpbmVkKHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0dGhpcy5fY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUodGFibGVBY3Rpb25JdGVtIGFzIHVua25vd24gYXMgTWVudUJ1dHRvbiwgY29udGV4dE1lbnUsIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbSA9IHRoaXMuX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbih0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdGlmIChjb250ZXh0TWVudUl0ZW0pIHtcblx0XHRcdFx0dGhpcy5fYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51SXRlbSwgdGFibGVBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbik7XG5cdFx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMucHVzaChjb250ZXh0TWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIEFsaWduIHRoZSBvcmRlciBvZiBjb250ZXh0LW1lbnVJdGVtcyB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0XHRpZiAoc29ydEhlbHBlckZvck1lbnVJdGVtcy5sZW5ndGgpIHtcblx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIHNvcnRJbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmRleE9mQ29udGV4dE1lbnUgPSBjb250ZXh0TWVudS5pbmRleE9mSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdGlmIChpbmRleE9mQ29udGV4dE1lbnUgIT09IHNvcnRJbmRleCkge1xuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdGNvbnRleHRNZW51Lmluc2VydEl0ZW0obWVudUl0ZW0sIHNvcnRJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGFsbCBjb250ZXh0IG1lbnUgYWN0aW9ucyBleGNlcHQgZGVsZXRlLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRoaWRlQWxsQ29udGV4dE1lbnVBY3Rpb25zRXhjZXB0RGVsZXRlKHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGUuZ2V0QWN0aW9ucygpLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmdldElkKCkuZW5kc1dpdGgoXCJTdGFuZGFyZEFjdGlvbjo6RGVsZXRlOjpBY3Rpb25Ub29sYmFyQWN0aW9uXCIpKTtcblx0XHRjb25zdCBkZWxldGVWaXNpYmxlID0gKGRlbGV0ZUFjdGlvbiBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uKT8uZ2V0QWN0aW9uKCkuZ2V0VmlzaWJsZSgpID8/IHRydWU7XG5cdFx0bWVudUl0ZW1zLmZvckVhY2goKG1lbnVJdGVtKSA9PiB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIHRoZSBkZWxldGUgYWN0aW9uXG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGU6OkNvbnRleHRNZW51XCIpKSB7XG5cdFx0XHRcdG1lbnVJdGVtLnNldFZpc2libGUoZGVsZXRlVmlzaWJsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICovXG5cdF9pc0FjdGlvbkNvbWJpbmVkKGFjdGlvbkl0ZW06IEJ1dHRvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChhY3Rpb25JdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLk1lbnVCdXR0b25cIikge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgaGF2ZSBjdXN0b20gZGF0YSBhdHRyaWJ1dGUgb24gdGhlIE1lbnVCdXR0b24gY3JlYXRlZCBieSBSVEEgY29tYmluZSBjaGFuZ2Vcblx0XHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0XHRjb25zdCBmbGV4TWFuYWdlZE9iamVjdE1vZGVscyA9IGRlcGVuZGVudHMuZmlsdGVyKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudCBpbnN0YW5jZW9mIE1hbmFnZWRPYmplY3RNb2RlbCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlbSBpbmNsdWRlcyBcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIlxuXHRcdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoKG1vZGVsKSA9PlxuXHRcdFx0XHQobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKS5pbmNsdWRlcyhcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21iaW5lIHRoZSBhY3Rpb25zIGluIHRoZSBjb250ZXh0IG1lbnUgdG8gYWxpZ24gd2l0aCB0aGUgdGFibGUgYWN0aW9uIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRfY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbTogTWVudUJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUsIHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBpbiB0aGUgY29udGV4dCBtZW51IGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW0sIHRhYmxlKTtcblx0XHRjb25zdCBhY3Rpb25JdGVtcyA9IGFjdGlvbkl0ZW0uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9uSXRlbXMpIHtcblx0XHRcdGNvbnN0IHRvb2xCYXJBY3Rpb24gPSBhY3Rpb247XG5cdFx0XHQvLyBub3cgZmluZCB0aGUgYWN0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0IG1lbnVcblx0XHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2YgY29udGV4dE1lbnVJdGVtcykge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25JZEluQ29udGV4dE1lbnUgPSBtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Ub29sYmFyID0gdG9vbEJhckFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyICsgXCI6OkNvbnRleHRNZW51XCIgfHxcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtLnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdC8vIEFkZCB0aGUgYWN0aW9uIHRvIHRoZSBtZW51IGJ1dHRvblxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSWYgd2UgZmluZCBhbm90aGVyIG1lbnUgaW4gdGhlIGNvbnRleHQgbWVudSB3ZSBjaGVjayBpZiB0aGUgYWN0aW9uIGlzIGluIHRoZSBzdWIgbWVudVxuXHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmICFtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25JblN1Yk1lbnUgPSB0aGlzLl9maW5kQWN0aW9uSW5TdWJNZW51KG1lbnVJdGVtLmdldEl0ZW1zKCksIHRvb2xCYXJBY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25JblN1Yk1lbnUpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkluU3ViTWVudS5zZXRUZXh0KHRvb2xCYXJBY3Rpb24uZ2V0VGV4dCgpKTtcblx0XHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShhY3Rpb25JblN1Yk1lbnUpO1xuXHRcdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmdldEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgdGhlIGFjdGlvbiBpbiBhbiBhY3Rpb24gbWVudSBpbiB0aGUgY29udGV4dCBtZW51LCBpdCByZXR1cm4gdGhlIGFjdGlvbiBpZiBmb3VuZCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBtZW51LlxuXHQgKiBAcGFyYW0gc3ViTWVudSBUaGUgYXJyYXkgb2YgYWN0aW9ucyBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kQWN0aW9uSW5TdWJNZW51KHN1Yk1lbnU6IE1lbnVJdGVtW10sIGFjdGlvbkl0ZW06IE1lbnVJdGVtKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2Ygc3ViTWVudSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IGFjdGlvbkl0ZW0uZGF0YShcImFjdGlvbklkXCIpLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpIHx8XG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgKyBcIjo6Q29udGV4dE1lbnVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRzdWJNZW51LnNwbGljZShzdWJNZW51LmluZGV4T2YobWVudUl0ZW0pLCAxKTtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjaydzIGlmIGEgcGFydGljdWxhciBtZW51IGJ1dHRvbiBleGlzdHMgaW4gdGhlIGNvbnRleHQgbWVudSwgaWYgbm90IGNyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG1lbnUgYnV0dG9uIHRvIGZpbmQgb3IgY3JlYXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICogQHJldHVybnMgVGhlIE1lbnVJdGVtIGlmIGZvdW5kLCBvdGhlcndpc2UgYSBuZXcgTWVudUl0ZW1cblx0ICovXG5cdF9maW5kT3JDcmVhdGVNZW51QnV0dG9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCB0YWJsZTogTURDVGFibGUpOiBNZW51SXRlbSB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly9sb29wIG92ZXIgY29udGV4dE1lbnVJdGVtcyBhbmQgY2hlY2sgaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGFscmVhZHkgZXhpc3RzXG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhhY3Rpb25JdGVtLmdldElkKCkpKSB7XG5cdFx0XHRcdHJldHVybiBtZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZCBpdCB0byB0aGUgY29udGV4dE1lbnVcblx0XHRjb25zdCBuZXdNZW51QnV0dG9uID0gbmV3IE1lbnVJdGVtKHtcblx0XHRcdGlkOiBnZW5lcmF0ZShbdGFibGUuZ2V0SWQoKSwgYWN0aW9uSXRlbS5nZXRJZCgpLCBcIjo6Q29udGV4dE1lbnVcIl0pLFxuXHRcdFx0dGV4dDogYWN0aW9uSXRlbS5nZXRUZXh0KClcblx0XHR9KTtcblx0XHRjb250ZXh0TWVudS5hZGRJdGVtKG5ld01lbnVCdXR0b24pO1xuXHRcdHJldHVybiBuZXdNZW51QnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqL1xuXHRfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIGEgTWVudVxuXHRcdFx0aWYgKG1lbnVJdGVtc1tpXS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1lbnVJdGVtc1tpXVxuXHRcdFx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdC5zb21lKChpdGVtKSA9PiBpdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xuXHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW1zID0gbWVudUl0ZW0uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG1lbnVJdGVtIGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aGVzZSBzdWItaXRlbXMgaW50byB0aGUgY29udGV4dE1lbnUgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgaW5kZXhcblx0XHRcdFx0XHRzdWJJdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShzdWJJdGVtLCBpICsgaW5kZXgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBmb3IgdGhlIHRhYmxlIGFjdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcmV0dXJucyAgTWVudUl0ZW18bnVsbCB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRfZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogTWVudUl0ZW0gfCBudWxsIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdC8vIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgZWl0aGVyIGFuIGl0ZW0gd2l0aCBhbiBhZGRpdGlvbmFsIFwiOjpDb250ZXh0TWVudVwiIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaWRcblx0XHRcdC8vIG9yIGl0IGlzIGEgc3BsaXR0ZWQgbWVudSBpdGVtIHdoZXJlIHRoZSBcIjo6Q29udGV4dE1lbnVcIiBwYXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRhYmxlQWN0aW9uLmdldElkKCkgKyBcIjo6Q29udGV4dE1lbnVcIiA9PT0gaXRlbS5nZXRJZCgpIHx8XG5cdFx0XHRcdGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSB0YWJsZUFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik/LnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0XHQvLyBmb3IgY29tYmluZWQgYWN0aW9ucywgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBzYW1lIHRleHRcblx0XHRcdGlmIChpdGVtLmdldElkKCkuaW5jbHVkZXModGFibGVBY3Rpb24uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkanVzdCB0aGUgdGV4dCBhbmQgdmlzaWJpbGl0eSBvZiB0aGUgYWN0aW9uIGl0ZW1zIGluIHRoZSBjb250ZXh0IG1lbnUuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnVJdGVtIFRoZSBjb250ZXh0IG1lbnVcblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhcnJheSBvZiB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRfYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51SXRlbTogTWVudUl0ZW0sIHRhYmxlQWN0aW9uOiBBY3Rpb25Ub29sYmFyQWN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gY2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW0gYXMgdGhlIHRleHQgb2YgYWN0aW9uIGl0ZW1cblx0XHRjb250ZXh0TWVudUl0ZW0uc2V0VGV4dChhY3Rpb25JdGVtLmdldFRleHQoKSk7XG5cdFx0Ly8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250ZXh0TWVudSBhY3Rpb24gYXMgdGhlIHZpc2liaWxpdHkgb2YgdGFibGUgYWN0aW9uXG5cdFx0Y29uc3QgdGFibGVBY3Rpb25WaXNpYmlsaXR5ID0gYWN0aW9uSXRlbS5nZXRWaXNpYmxlKCkgJiYgdGFibGVBY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdGlmICh0YWJsZUFjdGlvblZpc2liaWxpdHkgIT09IGNvbnRleHRNZW51SXRlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdGNvbnRleHRNZW51SXRlbS5zZXRWaXNpYmxlKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFuIGFjdGlvbiBoYXMgYmVlbiBzcGxpdCBieSBSVEEuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBvcmlnaW5hbCBhY3Rpb24gaXRlbVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFjdGlvbiBoYXMgYmVlbiBzcGxpdFxuXHQgKi9cblx0X2lzQWN0aW9uU3BsaXQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHQvLyBmaW5kIGFsbCB0aGUgZGVwZW5kZW50cyB3aGljaCBhcmUgYSBGbGV4IE1hbmFnZWRPYmplY3RNb2RlbFxuXHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHQvLyBjaGVjayBpZiBvbmUgb2YgdGhlbSBoYXMgdGhlIG5hbWUgXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdHJldHVybiBmbGV4TWFuYWdlZE9iamVjdE1vZGVscy5zb21lKFxuXHRcdFx0KG1vZGVsKSA9PiAobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKSA9PT0gXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbnRleHQgbWVudSBpdGVtIGhhcyBiZWVuIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBhY3RpdmVcblx0ICovXG5cdHNldENvbnRleHRNZW51QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuY29udGV4dE1lbnVBY3RpdmUgPSBhY3RpdmU7XG5cdH1cblxuXHRpc0NvbnRleHRNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRNZW51QWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGhlIG1lbnUgaXRlbSBvZiBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHZpc2libGUgaWYgaXQgaXMgc3VwcG9ydGVkLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGNvbnRleHRzXG5cdCAqL1xuXHRzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZTogTURDVGFibGUsIGNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkIHtcblx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBtZW51IGl0ZW0gZnJvbSBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0gPSBtZW51SXRlbXM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiQ29udGV4dE1lbnU6OkNvbGxhYm9yYXRpb25NYW5hZ2VyXCIpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSkge1xuXHRcdFx0Ly8gZ2V0IGNvbGxhYm9yYXRpb24gb3B0aW9uIGZyb20gY29sbGFib3JhdGl2ZSB0b29scyBzZXJ2aWNlXG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9wdGlvbiA9IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U/LmNvbGxhYm9yYXRpb25TZXJ2aWNlLmNtSGVscGVyU2VydmljZT8uZ2V0T3B0aW9ucygpO1xuXHRcdFx0Ly8gZ2V0IG5hdmlnYXRpb24gaW5mbyBmcm9tIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgSVRhYmxlQmxvY2spPy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvPy50eXBlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgbmF2aWdhdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSXRlbXMgdG8gc2hhcmUgbmVlZHMgdG8gaGF2ZSBhbiBhY3RpdmUgZW50aXR5LCBpZiBpdCdzIG5vdCBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGEgbm9uIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZURyYWZ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0c1swXS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgaXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBjb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBJZiB3ZSBhcmUgaW4gQ29sbGFib3JhdGl2ZSBEcmFmdCBvciBpbiBhbiBub24tZHJhZnQgYXBwLCB3ZSBzZXQgdmlzaWJsZSB0byB0cnVlLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXQgdmlzaWJsZSB0byB0cnVlLCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzIGlzIG9yIGhhcyBhbiBhY3RpdmUgdmVyc2lvbi5cblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9XG5cdFx0XHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSB8fCAhaXNEcmFmdFxuXHRcdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0XHQ6IGNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgfHwgY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUodmlzaWJsZSk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLCBcInByZXNzXCIsIFwiQ006U2hhcmVMaW5rXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGJlZm9yZU9wZW5Db250ZXh0TWVudSBldmVudCBvZiB0aGUgTURDIFRhYmxlLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Db250ZXh0TWVudVByZXNzKHRoaXM6IElUYWJsZUJsb2NrICYgQ29udGV4dE1lbnVIYW5kbGVyLCBvRXZlbnQ6IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZUNvbnRleHRzID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSwgLy8gc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlXG5cdFx0XHRjb250ZXh0TWVudUNvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIikgYXMgQ29udGV4dCwgLy8gcm93IGNsaWNrZWQgZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRoaXMuZ2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0cywgY29udGV4dE1lbnVDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGlmIGFsbCBjb250ZXh0cyBpbiBjb250ZXh0TWVudVNlbGVjdGlvbiBhcmUgaW5hY3RpdmVcblx0XHQvLyBpZiBzbywgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgaW4gdGhlIGludGVybmFsIG1vZGVsIHRvIHRydWVcblx0XHQvLyBpZiBqdXN0IG9uZSBjb250ZXh0IGlzIG5vdCBpbmFjdGl2ZSwgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRsZXQgb25lQ29udGV4dElzQWN0aXZlID0gdHJ1ZTtcblx0XHRvbmVDb250ZXh0SXNBY3RpdmUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChjb250ZXh0KSA9PiAhY29udGV4dC5pc0luYWN0aXZlKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCAhb25lQ29udGV4dElzQWN0aXZlKTtcblxuXHRcdC8vIERvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciBvdGhlciBhY3Rpb25zIHRoYW4gZGVsZXRlXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9ubHlJbkFjdGl2ZUNvbnRleHRzU2VsZWN0ZWQgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID09PSAwO1xuXHRcdGNvbnN0IGlzSW5saW5lQ3JlYXRpb25Nb2RlID1cblx0XHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSAmIHsgZ2V0Q3JlYXRpb25Nb2RlOiBGdW5jdGlvbiB9KT8uZ2V0Q3JlYXRpb25Nb2RlKCkuZ2V0TmFtZSgpID09PVxuXHRcdFx0Q3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cztcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdGNvbnN0IG5hdmlnYWJsZUNvbnRleHRzID0gY29udGV4dE1lbnVTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0IW9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJlxuXHRcdFx0XHRvQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0Py5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpXG5cdFx0XHRcdFx0LmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XCJAJHVpNS5mZS52aXJ0dWFsLnJvdXRlTmF2aWdhYmxlLVwiICtcblx0XHRcdFx0XHRcdFx0KHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm8gYXMgeyByb3V0ZVBhdGg/OiBzdHJpbmcgfSk/LnJvdXRlUGF0aCxcblx0XHRcdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0KSAhPT0gZmFsc2Vcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlXCIsIGNvbnRleHRNZW51U2VsZWN0aW9uKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzXCIsIG5hdmlnYWJsZUNvbnRleHRzKTtcblx0XHQvL3Jlc2V0IG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyB0byBlbnN1cmUgY2FsbGJhY2sgZm9yIGN1c3RvbSBlbmFibGUgaGFuZGxlclxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCAtMSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZOYXZpZ2FibGVDb250ZXh0c1wiLCBuYXZpZ2FibGVDb250ZXh0cy5sZW5ndGgpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzRm9yRGVsZXRlXCIsIGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCk7XG5cblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvKiBBbGlnbiBjb250ZXh0IG1lbnUgd2l0aCBSVEEgY2hhbmdlcyBpbiB0YWJsZSB0b29sYmFyICovXG5cdFx0XHR0aGlzLmFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZSk7XG5cdFx0fSBlbHNlIGlmIChvbmx5SW5BY3RpdmVDb250ZXh0c1NlbGVjdGVkICYmIGlzSW5saW5lQ3JlYXRpb25Nb2RlKSB7XG5cdFx0XHQvLyBPbmx5IERlbGV0ZSBpcyB2aXNpYmxlXG5cdFx0XHR0aGlzLmhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUodGFibGUpO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgTWVudUl0ZW0gZm9yIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHRcdHRoaXMuc2V0Q29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbVZpc2liaWxpdHkodGFibGUsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWVudSBjb250YWlucyBvbmx5IG5vdCB2aXNpYmxlIGl0ZW1zXG5cdFx0Ly8gaW4gdGhhdCBjYXNlIHByZXZlbnQgdGhlIGNvbnRleHQgbWVudSBmcm9tIG9wZW5pbmdcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXG5cdFx0Y29uc3QgdmlzaWJsZU1lbnVJdGVtcyA9IG1lbnVJdGVtcy5maWx0ZXIoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmICh2aXNpYmxlTWVudUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0b0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gRW5hYmxlbWVudCBvZiB0aGUgRXhwYW5kL0NvbGxhcHNlIGJ1dHRvbnNcblx0XHRjb25zdCBpc0V4cGFuZGFibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSAhPT0gdW5kZWZpbmVkKTtcblx0XHRjb25zdCBpc0NvbGxhcHNhYmxlID0gY29udGV4dE1lbnVTZWxlY3Rpb24uc29tZSgoc2luZ2xlQ29udGV4dCkgPT4gc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2lzRXhwYW5kYWJsZVwiLCBpc0V4cGFuZGFibGUpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgaXNDb2xsYXBzYWJsZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgRGVsZXRlXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udHJvbElkXCIsIHRhYmxlLmdldElkKCkpO1xuXHRcdGRlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhpbnRlcm5hbE1vZGVsQ29udGV4dCwgY29udGV4dE1lbnVTZWxlY3Rpb24sIHRydWUpO1xuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIElCTlxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlPy5kYXRhKFwibmF2aWdhdGlvbkF2YWlsYWJsZU1hcFwiKTtcblx0XHRcdFRhYmxlUnVudGltZS5zZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLCB0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgTWFzcyBFZGl0XG5cdFx0Y29uc3QgZHJhZnQgPSB0YWJsZT8uZGF0YShcImRyYWZ0XCIpO1xuXHRcdGNvbnN0IHJlYWRPbmx5RHJhZnRFbmFibGVkID0gdGFibGUuZGF0YShcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIpID09PSBcInRydWVcIiAmJiBkcmFmdCAhPT0gXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCB1cGRhdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2YgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRUYWJsZVJ1bnRpbWUuaXNVcGRhdGFibGVDb250ZXh0KHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aEluZm8sIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dXBkYXRhYmxlQ29udGV4dHMucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiLCB1cGRhdGFibGVDb250ZXh0cyk7XG5cblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAmJiBjb250ZXh0TWVudVNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcblx0XHRcdFRhYmxlUnVudGltZS5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQsXG5cdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvblswXSxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblx0XHRUYWJsZVJ1bnRpbWUudXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblxuXHRcdC8vIE90aGVyIGFjdGlvbiBlbmFibGVtZW50XG5cdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0YWN0aXZlU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFwidGFibGVcIixcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0czogQ29udGV4dFtdLCBjb250ZXh0TWVudUNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0W10ge1xuXHRcdGxldCBjb250ZXh0TWVudVNlbGVjdGlvbjogQ29udGV4dFtdO1xuXHRcdGlmICh0YWJsZUNvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRNZW51Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGFibGVDb250ZXh0cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb24gPSBbY29udGV4dE1lbnVDb250ZXh0XSBhcyBDb250ZXh0W107XG5cdFx0fVxuXHRcdHJldHVybiBjb250ZXh0TWVudVNlbGVjdGlvbjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O01Bc0JxQkEsa0JBQWtCO0lBQUEsU0FBQUEsbUJBQUE7TUFBQSxLQUM1QkMsaUJBQWlCLEdBQUcsS0FBSztJQUFBO0lBQUFDLFFBQUEsR0FBQUYsa0JBQUE7SUFBQSxJQUFBRyxNQUFBLEdBQUFI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
@@ -412,12 +412,13 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
412
412
  }
413
413
 
414
414
  // Action enablement for Mass Edit
415
- const updatablePropertyPath = table?.data("updatablePropertyPath");
416
415
  const draft = table?.data("draft");
417
416
  const readOnlyDraftEnabled = table.data("displayModePropertyBinding") === "true" && draft !== "undefined";
418
417
  const updatableContexts: Context[] = [];
419
418
  for (const selectedContext of activeSelectedContexts) {
420
- if (TableRuntime.isUpdatableContext(updatablePropertyPath, selectedContext, readOnlyDraftEnabled)) {
419
+ if (
420
+ TableRuntime.isUpdatableContext(tableDefinition.annotation.updatablePropertyPathInfo, selectedContext, readOnlyDraftEnabled)
421
+ ) {
421
422
  updatableContexts.push(selectedContext);
422
423
  }
423
424
  }