@sapui5/sap.fe.macros 1.140.0 → 1.141.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 (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -2,7 +2,7 @@
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/base/Log", "sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin", "sap/ui/mdc/p13n/StateUtil"], function (Log, IViewStateContributorMixin, StateUtil) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin", "sap/ui/mdc/p13n/StateUtil"], function (Log, CommonUtils, IViewStateContributorMixin, StateUtil) {
6
6
  "use strict";
7
7
 
8
8
  function __ui5_require_async(path) {
@@ -120,6 +120,57 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/viewState/IView
120
120
  }
121
121
  }
122
122
 
123
+ /**
124
+ * Handles the application of a variant ID passed via URL parameters.
125
+ * @returns A promise that resolves when the variant has been applied.
126
+ */;
127
+ _proto.handleVariantIdPassedViaURLParams = async function handleVariantIdPassedViaURLParams() {
128
+ const urlParams = this.getStartupParameters();
129
+ const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
130
+ const view = CommonUtils.getTargetView(this);
131
+ const viewData = view.getViewData();
132
+ const vmType = viewData.variantManagement;
133
+ const vm = this.content.getVariant();
134
+ if (vm && tableVariantId && vmType === "Control") {
135
+ const variantToApply = vm.getVariants().find(variant => variant.getKey() === tableVariantId);
136
+ const ControlVariantApplyAPI = (await __ui5_require_async("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
137
+ return ControlVariantApplyAPI.activateVariant({
138
+ element: vm,
139
+ variantReference: variantToApply.getKey()
140
+ });
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Retrieves the startup parameters from the application component data.
146
+ * These parameters contain URL query parameters that were passed when the application was started.
147
+ * @returns The startup parameters as a key-value mapping where each key can have multiple values,
148
+ * or undefined if no parameters are available or if the component chain is not accessible.
149
+ */;
150
+ _proto.getStartupParameters = function getStartupParameters() {
151
+ const controller = this.getPageController();
152
+ const appComponent = controller.getAppComponent();
153
+ const componentData = appComponent.getComponentData();
154
+ return componentData.startupParameters;
155
+ }
156
+
157
+ /**
158
+ * Asynchronously applies navigation parameters to the filter bar.
159
+ * @param navigationParameter The navigation parameters to be applied.
160
+ * @returns A promise that resolves when the parameters have been applied.
161
+ */;
162
+ _proto.applyNavigationParameters = async function applyNavigationParameters(navigationParameter) {
163
+ try {
164
+ // Only handle variant ID from URL parameters if applyVariantFromURLParams is true
165
+ if (navigationParameter.applyVariantFromURLParams ?? false) {
166
+ await this.handleVariantIdPassedViaURLParams();
167
+ }
168
+ } catch (error) {
169
+ Log.error(`Error tying to apply navigation parameters to ${this.getMetadata().getName()}} control with ID: ${this.getId()}`, error);
170
+ }
171
+ return Promise.resolve();
172
+ }
173
+
123
174
  /**
124
175
  * Asynchronously applies the provided control state to the viewstate.
125
176
  * @param controlState The state to be applied to the control.
@@ -200,4 +251,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/viewState/IView
200
251
  _exports = TableAPIStateHandler;
201
252
  return _exports;
202
253
  }, false);
203
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJpbml0aWFsaXplZCIsImlubmVyVGFibGVTdGF0ZSIsImN1cnJlbnRWYXJpYW50IiwicXVpY2tGaWx0ZXJLZXkiLCJ1bmRlZmluZWQiLCJvdk0iLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsInNWYXJpYW50UmVmZXJlbmNlIiwic29tZSIsIm9WYXJpYW50IiwiZ2V0S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiQ29udHJvbFZhcmlhbnRBcHBseUFQSSIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJmaW5hbFN0YXRlIiwic3VwcGxlbWVudGFyeUNvbmZpZyIsImRpZmZTdGF0ZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldFNlbGVjdGVkS2V5Iiwib25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSIsImluaXRpYWxMb2FkIiwiZmlsdGVyQmFyIiwiZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQSIsIndhaXRGb3JJbml0aWFsU3RhdGUiLCJ0aGVuIiwicmViaW5kIiwiY2F0Y2giLCJJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVBUElTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW4gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3ZpZXdTdGF0ZS9JVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpblwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvQ29tbW9uSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlU3RhdGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUFQSVN0YXRlSGFuZGxlciBleHRlbmRzIElWaWV3U3RhdGVDb250cmlidXRvck1peGluPFRhYmxlU3RhdGU+IHtcblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IHJldHJpZXZlcyB0aGUgc3RhdGUgb2YgdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2aWV3c3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB0YWJsZSBzdGF0ZSBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGFzeW5jIHJldHJpZXZlU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPFRhYmxlU3RhdGUgfCBudWxsPiB7XG5cdFx0Y29uc3QgdGFibGVTdGF0ZTogVGFibGVTdGF0ZSA9IHt9O1xuXHRcdHRhYmxlU3RhdGUuaW5uZXJUYWJsZSA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlKGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KSkgYXMgb2JqZWN0O1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5nZXRRdWlja0ZpbHRlcigpO1xuXHRcdGlmIChxdWlja0ZpbHRlcikge1xuXHRcdFx0Y29uc3QgcXVpY2tGaWx0ZXJTdGF0ZSA9IHF1aWNrRmlsdGVyLmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0XHRpZiAoIXRhYmxlU3RhdGUucXVpY2tGaWx0ZXIpIHtcblx0XHRcdFx0dGFibGVTdGF0ZS5xdWlja0ZpbHRlciA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0dGFibGVTdGF0ZS5xdWlja0ZpbHRlci5zZWxlY3RlZEtleSA9IHF1aWNrRmlsdGVyU3RhdGU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRUb1JldHJpZXZlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnQoKT8uZ2V0SWQoKTtcblx0XHRpZiAodmFyaWFudFRvUmV0cmlldmUpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0XHRpZiAoIXRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGFibGVTdGF0ZS52YXJpYW50TWFuYWdlbWVudCA9IHsgdmFyaWFudElkOiB2YXJpYW50TWFuYWdlbWVudENvbnRyb2w/LmdldEN1cnJlbnRWYXJpYW50S2V5KCkgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQudmFyaWFudElkID0gdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sIGJ5IHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbml0aWFsIHN0YXRlIGlzIHNldC5cblx0ICovXG5cdGFzeW5jIHNldEluaXRpYWxTdGF0ZSh0aGlzOiBUYWJsZUFQSSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdFx0dGhpcy5pbml0aWFsQ29udHJvbFN0YXRlID0gaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBsZWdhY3kgc3RhdGUgdG8gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb250cm9sIHN0YXRlIHJldHJpZXZhbCBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGdldENvbnRyb2xTdGF0ZSBGdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY29udHJvbCBzdGF0ZS5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZS5cblx0ICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlMZWdhY3lTdGF0ZShcblx0XHR0aGlzOiBUYWJsZUFQSSxcblx0XHRnZXRDb250cm9sU3RhdGU6IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0X25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCB2bSA9IHRhYmxlLmdldFZhcmlhbnQoKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblxuXHRcdGNvbnN0IHRhYmxlU3RhdGUgPSBnZXRDb250cm9sU3RhdGUodGFibGUpIGFzIHsgaW5pdGlhbFN0YXRlPzogVGFibGVTdGF0ZTsgZnVsbFN0YXRlPzogVGFibGVTdGF0ZSB9O1xuXHRcdGNvbnN0IHZtU3RhdGUgPSB2bSA/IGdldENvbnRyb2xTdGF0ZSh2bSkgOiBudWxsO1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlcj8uY29udGVudCA/IGdldENvbnRyb2xTdGF0ZShxdWlja0ZpbHRlci5jb250ZW50KSA6IG51bGw7XG5cblx0XHRjb25zdCBjb250cm9sU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblxuXHRcdGlmICh0YWJsZVN0YXRlKSB7XG5cdFx0XHRjb250cm9sU3RhdGUuaW5uZXJUYWJsZSA9IHtcblx0XHRcdFx0Li4uY29udHJvbFN0YXRlLmlubmVyVGFibGUsXG5cdFx0XHRcdC4uLnRhYmxlU3RhdGUsXG5cdFx0XHRcdGZ1bGxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5mdWxsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5mdWxsU3RhdGVcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiB7XG5cdFx0XHRcdFx0Li4uY29udHJvbFN0YXRlLmlubmVyVGFibGU/LmluaXRpYWxTdGF0ZSxcblx0XHRcdFx0XHQuLi50YWJsZVN0YXRlLmluaXRpYWxTdGF0ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmICh2bVN0YXRlPy52YXJpYW50SWQpIHtcblx0XHRcdGNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCA9IHtcblx0XHRcdFx0Li4uY29udHJvbFN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0XHR2YXJpYW50SWQ6IHZtU3RhdGUudmFyaWFudElkLnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKHF1aWNrRmlsdGVyU3RhdGU/LnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRjb250cm9sU3RhdGUucXVpY2tGaWx0ZXIgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5xdWlja0ZpbHRlcixcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IHF1aWNrRmlsdGVyU3RhdGUuc2VsZWN0ZWRLZXkudG9TdHJpbmcoKVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBPYmplY3Qua2V5cyhjb250cm9sU3RhdGUpLmxlbmd0aCA+IDApIHtcblx0XHRcdGF3YWl0IHRoaXMuYXBwbHlTdGF0ZShjb250cm9sU3RhdGUgYXMgb2JqZWN0LCBfbmF2UGFyYW1ldGVycywgc2hvdWxkQXBwbHlEaWZmU3RhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSBhcHBsaWVzIHRoZSBwcm92aWRlZCBjb250cm9sIHN0YXRlIHRvIHRoZSB2aWV3c3RhdGUuXG5cdCAqIEBwYXJhbSBjb250cm9sU3RhdGUgVGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gT3B0aW9uYWwgZmxhZyB0byBza2lwIG1lcmdpbmcgc3RhdGVzLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlTdGF0ZShcblx0XHR0aGlzOiBUYWJsZUFQSSxcblx0XHRjb250cm9sU3RhdGU6IFRhYmxlU3RhdGUsXG5cdFx0X25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0Ly8gVGFibGUgcHJvcGVydGllcyBuZWVkIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBkaWZmU3RhdGUvcmV0cmlldmVTdGF0ZS4gSG93ZXZlciwgYXBwbHlTdGF0ZVxuXHRcdC8vIGdldHMgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUgdGFibGUncyBsaWZlY3ljbGUsIHNvIHRoZSBkZWxlZ2F0ZSBhbmQgcHJvcGVydGllcyBhcmUgbm90IHlldCBhdmFpbGFibGUuXG5cdFx0YXdhaXQgdGhpcy5jb250ZW50LmluaXRpYWxpemVkKCk7XG5cblx0XHRjb25zdCBpbm5lclRhYmxlU3RhdGUgPSBjb250cm9sU3RhdGU/LmlubmVyVGFibGU7XG5cdFx0Y29uc3QgdmFyaWFudElkID0gY29udHJvbFN0YXRlPy52YXJpYW50TWFuYWdlbWVudD8udmFyaWFudElkO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdGhpcy5jb250ZW50Py5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJLZXkgPSBjb250cm9sU3RhdGU/LnF1aWNrRmlsdGVyPy5zZWxlY3RlZEtleTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblxuXHRcdC8vIEhhbmRsZSBWYXJpYW50IE1hbmFnZW1lbnRcblx0XHRpZiAodmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgdmFyaWFudElkICE9PSBjdXJyZW50VmFyaWFudC5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRjb25zdCBvdk0gPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRcdGNvbnN0IGFWYXJpYW50cyA9IG92TT8uZ2V0VmFyaWFudHMoKTtcblx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gYVZhcmlhbnRzPy5zb21lKChvVmFyaWFudCkgPT4gb1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHZhcmlhbnRJZClcblx0XHRcdFx0PyB2YXJpYW50SWRcblx0XHRcdFx0OiBvdk0/LmdldFN0YW5kYXJkVmFyaWFudEtleTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0ZWxlbWVudDogb3ZNLFxuXHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXdhaXQgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIHN0YXRlIGV2ZW4gaWYgYWJvdmUgY29uZGl0aW9uIG5vdCBzYXRpZXNmaWVkXG5cdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBJbm5lciBUYWJsZSBTdGF0ZVxuXG5cdFx0bGV0IGZpbmFsU3RhdGU7XG5cblx0XHRpZiAoaW5uZXJUYWJsZVN0YXRlKSB7XG5cdFx0XHRpZiAoc2hvdWxkQXBwbHlEaWZmU3RhdGUgJiYgaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZSkge1xuXHRcdFx0XHRpZiAoIWlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiAhY29udHJvbFN0YXRlPy5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0Y29udHJvbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaW5hbFN0YXRlID0gaW5uZXJUYWJsZVN0YXRlLmZ1bGxTdGF0ZTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCBmaW5hbFN0YXRlKTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgUXVpY2sgRmlsdGVyIFN0YXRlXG5cdFx0aWYgKHF1aWNrRmlsdGVyS2V5ICYmIHF1aWNrRmlsdGVyS2V5ICE9PSBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXI/LnNldFNlbGVjdGVkS2V5KHF1aWNrRmlsdGVyS2V5KTtcblx0XHRcdHRoaXMub25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbml0aWFsTG9hZCAmJiB0aGlzLmZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5nZXRGaWx0ZXJCYXJDb250cm9sKHRoaXMuZmlsdGVyQmFyKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdGZpbHRlckJhclxuXHRcdFx0XHRcdC53YWl0Rm9ySW5pdGlhbFN0YXRlKClcblx0XHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRlbnQucmViaW5kKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgaW5pdGlhbCBzdGF0ZSBvZiBmaWx0ZXIgYmFyXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFVcUJBLG9CQUFvQiwwQkFBQUMscUJBQUE7SUFBQSxTQUFBRCxxQkFBQTtNQUFBLE9BQUFDLHFCQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLFFBQUEsR0FBQUosb0JBQUE7SUFBQUssY0FBQSxDQUFBTCxvQkFBQSxFQUFBQyxxQkFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQU4sb0JBQUEsQ0FBQU8sU0FBQTtJQUN4QztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSU1FLGFBQWEsR0FBbkIsZUFBTUEsYUFBYUEsQ0FBQSxFQUE2QztNQUMvRCxNQUFNQyxVQUFzQixHQUFHLENBQUMsQ0FBQztNQUNqQ0EsVUFBVSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsTUFBTUMsU0FBUyxDQUFDQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFXO01BQzNHLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDO01BQ3pDLElBQUlELFdBQVcsRUFBRTtRQUNoQixNQUFNRSxnQkFBZ0IsR0FBR0YsV0FBVyxDQUFDRyxjQUFjLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUNULFVBQVUsQ0FBQ00sV0FBVyxFQUFFO1VBQzVCTixVQUFVLENBQUNNLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDNUI7UUFDQU4sVUFBVSxDQUFDTSxXQUFXLENBQUNJLFdBQVcsR0FBR0YsZ0JBQWdCO01BQ3REO01BQ0EsTUFBTUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDTixP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
254
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJ1cmxQYXJhbXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInRhYmxlVmFyaWFudElkIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2bVR5cGUiLCJ2YXJpYW50VG9BcHBseSIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJnZXRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsImNvbnRyb2xsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvblBhcmFtZXRlciIsImFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwiaW5uZXJUYWJsZVN0YXRlIiwiY3VycmVudFZhcmlhbnQiLCJxdWlja0ZpbHRlcktleSIsInVuZGVmaW5lZCIsIm92TSIsImFWYXJpYW50cyIsInNWYXJpYW50UmVmZXJlbmNlIiwic29tZSIsIm9WYXJpYW50IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZmluYWxTdGF0ZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJkaWZmU3RhdGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJzZXRTZWxlY3RlZEtleSIsIm9uUXVpY2tGaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJpbml0aWFsTG9hZCIsImZpbHRlckJhciIsImdldEZpbHRlckJhckNvbnRyb2wiLCJpc0EiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwidGhlbiIsInJlYmluZCIsImNhdGNoIiwiSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IElWaWV3U3RhdGVDb250cmlidXRvck1peGluIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW5cIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVBUElTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbjxUYWJsZVN0YXRlPiB7XG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmlld3N0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGFibGUgc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRhc3luYyByZXRyaWV2ZVN0YXRlKHRoaXM6IFRhYmxlQVBJKTogUHJvbWlzZTxUYWJsZVN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblx0XHR0YWJsZVN0YXRlLmlubmVyVGFibGUgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRpZiAocXVpY2tGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlci5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnF1aWNrRmlsdGVyKSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIgPSB7fTtcblx0XHRcdH1cblx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIuc2VsZWN0ZWRLZXkgPSBxdWlja0ZpbHRlclN0YXRlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0dGhpczogVGFibGVBUEksXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSB0YWJsZS5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLmdldFF1aWNrRmlsdGVyKCk7XG5cblx0XHRjb25zdCB0YWJsZVN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKHRhYmxlKSBhcyB7IGluaXRpYWxTdGF0ZT86IFRhYmxlU3RhdGU7IGZ1bGxTdGF0ZT86IFRhYmxlU3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblx0XHRjb25zdCBxdWlja0ZpbHRlclN0YXRlID0gcXVpY2tGaWx0ZXI/LmNvbnRlbnQgPyBnZXRDb250cm9sU3RhdGUocXVpY2tGaWx0ZXIuY29udGVudCkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cblx0XHRpZiAodGFibGVTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyVGFibGUgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlLFxuXHRcdFx0XHQuLi50YWJsZVN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJUYWJsZT8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLnRhYmxlU3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChxdWlja0ZpbHRlclN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnF1aWNrRmlsdGVyID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUucXVpY2tGaWx0ZXIsXG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBxdWlja0ZpbHRlclN0YXRlLnNlbGVjdGVkS2V5LnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIG9iamVjdCwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYXBwbGljYXRpb24gb2YgYSB2YXJpYW50IElEIHBhc3NlZCB2aWEgVVJMIHBhcmFtZXRlcnMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhcmlhbnQgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRTdGFydHVwUGFyYW1ldGVycygpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXHRcdGNvbnN0IHRhYmxlVmFyaWFudElkID0gdXJsUGFyYW1zW1wic2FwLXVpLWZlLXRhYmxlLXZhcmlhbnQtaWRcIl0/LlswXTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB2bVR5cGUgPSB2aWV3RGF0YS52YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2bSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0aWYgKHZtICYmIHRhYmxlVmFyaWFudElkICYmIHZtVHlwZSA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRUb0FwcGx5ID0gdm0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB2YXJpYW50LmdldEtleSgpID09PSB0YWJsZVZhcmlhbnRJZCk7XG5cdFx0XHRjb25zdCBDb250cm9sVmFyaWFudEFwcGx5QVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdHJldHVybiBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdGVsZW1lbnQ6IHZtLFxuXHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiB2YXJpYW50VG9BcHBseS5nZXRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudCBkYXRhLlxuXHQgKiBUaGVzZSBwYXJhbWV0ZXJzIGNvbnRhaW4gVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YXMgc3RhcnRlZC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBhcyBhIGtleS12YWx1ZSBtYXBwaW5nIHdoZXJlIGVhY2gga2V5IGNhbiBoYXZlIG11bHRpcGxlIHZhbHVlcyxcblx0ICogICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvciBpZiB0aGUgY29tcG9uZW50IGNoYWluIGlzIG5vdCBhY2Nlc3NpYmxlLlxuXHQgKi9cblx0Z2V0U3RhcnR1cFBhcmFtZXRlcnModGhpczogVGFibGVBUEkpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0cmV0dXJuIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKHRoaXM6IFRhYmxlQVBJICYgVGFibGVBUElTdGF0ZUhhbmRsZXIsIG5hdmlnYXRpb25QYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gT25seSBoYW5kbGUgdmFyaWFudCBJRCBmcm9tIFVSTCBwYXJhbWV0ZXJzIGlmIGFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMgaXMgdHJ1ZVxuXHRcdFx0aWYgKG5hdmlnYXRpb25QYXJhbWV0ZXIuYXBwbHlWYXJpYW50RnJvbVVSTFBhcmFtcyA/PyBmYWxzZSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcygpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdGBFcnJvciB0eWluZyB0byBhcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgdG8gJHt0aGlzLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfX0gY29udHJvbCB3aXRoIElEOiAke3RoaXMuZ2V0SWQoKX1gLFxuXHRcdFx0XHRlcnJvciBhcyBFcnJvclxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgdGhlIHByb3ZpZGVkIGNvbnRyb2wgc3RhdGUgdG8gdGhlIHZpZXdzdGF0ZS5cblx0ICogQHBhcmFtIGNvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBPcHRpb25hbCBmbGFnIHRvIHNraXAgbWVyZ2luZyBzdGF0ZXMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN0YXRlIGhhcyBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseVN0YXRlKFxuXHRcdHRoaXM6IFRhYmxlQVBJLFxuXHRcdGNvbnRyb2xTdGF0ZTogVGFibGVTdGF0ZSxcblx0XHRfbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2hvdWxkQXBwbHlEaWZmU3RhdGU/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghY29udHJvbFN0YXRlKSByZXR1cm47XG5cblx0XHQvLyBUYWJsZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIGRpZmZTdGF0ZS9yZXRyaWV2ZVN0YXRlLiBIb3dldmVyLCBhcHBseVN0YXRlXG5cdFx0Ly8gZ2V0cyBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZSB0YWJsZSdzIGxpZmVjeWNsZSwgc28gdGhlIGRlbGVnYXRlIGFuZCBwcm9wZXJ0aWVzIGFyZSBub3QgeWV0IGF2YWlsYWJsZS5cblx0XHRhd2FpdCB0aGlzLmNvbnRlbnQuaW5pdGlhbGl6ZWQoKTtcblxuXHRcdGNvbnN0IGlubmVyVGFibGVTdGF0ZSA9IGNvbnRyb2xTdGF0ZT8uaW5uZXJUYWJsZTtcblx0XHRjb25zdCB2YXJpYW50SWQgPSBjb250cm9sU3RhdGU/LnZhcmlhbnRNYW5hZ2VtZW50Py52YXJpYW50SWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlcktleSA9IGNvbnRyb2xTdGF0ZT8ucXVpY2tGaWx0ZXI/LnNlbGVjdGVkS2V5O1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5nZXRRdWlja0ZpbHRlcigpO1xuXG5cdFx0Ly8gSGFuZGxlIFZhcmlhbnQgTWFuYWdlbWVudFxuXHRcdGlmICh2YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiB2YXJpYW50SWQgIT09IGN1cnJlbnRWYXJpYW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdGNvbnN0IG92TSA9IHRoaXMuY29udGVudD8uZ2V0VmFyaWFudCgpO1xuXHRcdFx0Y29uc3QgYVZhcmlhbnRzID0gb3ZNPy5nZXRWYXJpYW50cygpO1xuXHRcdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSBhVmFyaWFudHM/LnNvbWUoKG9WYXJpYW50KSA9PiBvVmFyaWFudC5nZXRLZXkoKSA9PT0gdmFyaWFudElkKVxuXHRcdFx0XHQ/IHZhcmlhbnRJZFxuXHRcdFx0XHQ6IG92TT8uZ2V0U3RhbmRhcmRWYXJpYW50S2V5O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRlbGVtZW50OiBvdk0sXG5cdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgc3RhdGUgZXZlbiBpZiBhYm92ZSBjb25kaXRpb24gbm90IHNhdGllc2ZpZWRcblx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIElubmVyIFRhYmxlIFN0YXRlXG5cblx0XHRsZXQgZmluYWxTdGF0ZTtcblxuXHRcdGlmIChpbm5lclRhYmxlU3RhdGUpIHtcblx0XHRcdGlmIChzaG91bGRBcHBseURpZmZTdGF0ZSAmJiBpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlKSB7XG5cdFx0XHRcdGlmICghaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0aW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmluYWxTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoXG5cdFx0XHRcdFx0dGhpcy5jb250ZW50LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmICFjb250cm9sU3RhdGU/LnN1cHBsZW1lbnRhcnlDb25maWcpIHtcblx0XHRcdFx0XHRjb250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIGZpbmFsU3RhdGUpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBRdWljayBGaWx0ZXIgU3RhdGVcblx0XHRpZiAocXVpY2tGaWx0ZXJLZXkgJiYgcXVpY2tGaWx0ZXJLZXkgIT09IHF1aWNrRmlsdGVyPy5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRxdWlja0ZpbHRlcj8uc2V0U2VsZWN0ZWRLZXkocXVpY2tGaWx0ZXJLZXkpO1xuXHRcdFx0dGhpcy5vblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmluaXRpYWxMb2FkICYmIHRoaXMuZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldEZpbHRlckJhckNvbnRyb2wodGhpcy5maWx0ZXJCYXIpO1xuXHRcdFx0aWYgKGZpbHRlckJhciAmJiBmaWx0ZXJCYXIuaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRcdFx0ZmlsdGVyQmFyXG5cdFx0XHRcdFx0LndhaXRGb3JJbml0aWFsU3RhdGUoKVxuXHRcdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGVudC5yZWJpbmQoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBpbml0aWFsIHN0YXRlIG9mIGZpbHRlciBiYXJcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQVdxQkEsb0JBQW9CLDBCQUFBQyxxQkFBQTtJQUFBLFNBQUFELHFCQUFBO01BQUEsT0FBQUMscUJBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsUUFBQSxHQUFBSixvQkFBQTtJQUFBSyxjQUFBLENBQUFMLG9CQUFBLEVBQUFDLHFCQUFBO0lBQUEsSUFBQUssTUFBQSxHQUFBTixvQkFBQSxDQUFBTyxTQUFBO0lBQ3hDO0FBQ0Q7QUFDQTtBQUNBO0lBSENELE1BQUEsQ0FJTUUsYUFBYSxHQUFuQixlQUFNQSxhQUFhQSxDQUFBLEVBQTZDO01BQy9ELE1B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
@@ -1,4 +1,5 @@
1
1
  import Log from "sap/base/Log";
2
+ import CommonUtils from "sap/fe/core/CommonUtils";
2
3
  import type { NavigationParameter } from "sap/fe/core/controllerextensions/ViewState";
3
4
  import IViewStateContributorMixin from "sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin";
4
5
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
@@ -105,6 +106,60 @@ export default class TableAPIStateHandler extends IViewStateContributorMixin<Tab
105
106
  }
106
107
  }
107
108
 
109
+ /**
110
+ * Handles the application of a variant ID passed via URL parameters.
111
+ * @returns A promise that resolves when the variant has been applied.
112
+ */
113
+ async handleVariantIdPassedViaURLParams(this: TableAPI & TableAPIStateHandler): Promise<unknown> {
114
+ const urlParams = this.getStartupParameters() as unknown as Record<string, string[]>;
115
+ const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
116
+ const view = CommonUtils.getTargetView(this);
117
+ const viewData = view.getViewData();
118
+ const vmType = viewData.variantManagement;
119
+ const vm = this.content.getVariant();
120
+ if (vm && tableVariantId && vmType === "Control") {
121
+ const variantToApply = vm.getVariants().find((variant) => variant.getKey() === tableVariantId);
122
+ const ControlVariantApplyAPI = (await import("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
123
+ return ControlVariantApplyAPI.activateVariant({
124
+ element: vm,
125
+ variantReference: variantToApply.getKey()
126
+ });
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Retrieves the startup parameters from the application component data.
132
+ * These parameters contain URL query parameters that were passed when the application was started.
133
+ * @returns The startup parameters as a key-value mapping where each key can have multiple values,
134
+ * or undefined if no parameters are available or if the component chain is not accessible.
135
+ */
136
+ getStartupParameters(this: TableAPI): Record<string, string> | undefined {
137
+ const controller = this.getPageController();
138
+ const appComponent = controller.getAppComponent();
139
+ const componentData = appComponent.getComponentData();
140
+ return componentData.startupParameters as unknown as Record<string, string>;
141
+ }
142
+
143
+ /**
144
+ * Asynchronously applies navigation parameters to the filter bar.
145
+ * @param navigationParameter The navigation parameters to be applied.
146
+ * @returns A promise that resolves when the parameters have been applied.
147
+ */
148
+ async applyNavigationParameters(this: TableAPI & TableAPIStateHandler, navigationParameter: NavigationParameter): Promise<void> {
149
+ try {
150
+ // Only handle variant ID from URL parameters if applyVariantFromURLParams is true
151
+ if (navigationParameter.applyVariantFromURLParams ?? false) {
152
+ await this.handleVariantIdPassedViaURLParams();
153
+ }
154
+ } catch (error: unknown) {
155
+ Log.error(
156
+ `Error tying to apply navigation parameters to ${this.getMetadata().getName()}} control with ID: ${this.getId()}`,
157
+ error as Error
158
+ );
159
+ }
160
+ return Promise.resolve();
161
+ }
162
+
108
163
  /**
109
164
  * Asynchronously applies the provided control state to the viewstate.
110
165
  * @param controlState The state to be applied to the control.
@@ -7,6 +7,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/u
7
7
 
8
8
  var _exports = {};
9
9
  var getLocalizedText = ResourceModelHelper.getLocalizedText;
10
+ // The type ExportSettings is not exported from "sap/ui/export/library" so we need to redefine them here
10
11
  let TableExport = /*#__PURE__*/function () {
11
12
  function TableExport() {}
12
13
  _exports = TableExport;
@@ -115,14 +116,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/u
115
116
  this.setExportConfig(columns, exportColumns, index);
116
117
  this.addTargetValueColumn(columns, exportColumns, resourceBundle, index);
117
118
  }
119
+ if (exportColumn.valueMap && typeof exportColumn.valueMap === "string") {
120
+ exportColumn.valueMap = JSON.parse(exportColumn.valueMap);
121
+ }
118
122
  }
119
123
  const tableAPIDownloadUrl = table.getParent().downloadUrl;
120
124
  if (tableAPIDownloadUrl) {
121
125
  exportSettings.dataSource.dataUrl = tableAPIDownloadUrl;
122
126
  }
127
+ this.setFileAndSheetName(exportSettings, tableDefinition);
123
128
  return exportSettings;
124
129
  }
125
130
 
131
+ /**
132
+ * Sets the file name and sheet name for the export settings.
133
+ * @param exportSettings The table export settings
134
+ * @param tableDefinition The table definition from the table converter
135
+ */;
136
+ TableExport.setFileAndSheetName = function setFileAndSheetName(exportSettings, tableDefinition) {
137
+ if (tableDefinition.control.exportFileName) {
138
+ exportSettings.fileName = tableDefinition.control.exportFileName;
139
+ }
140
+ if (tableDefinition.control.exportSheetName && exportSettings.workbook.context) {
141
+ exportSettings.workbook.context.sheetName = tableDefinition.control.exportSheetName;
142
+ }
143
+ }
144
+
126
145
  /**
127
146
  * Sets the static size limit for the table export.
128
147
  * @param tableDefinition The table definition from the table converter
@@ -138,12 +157,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/u
138
157
  }
139
158
 
140
159
  /**
141
- * Sets the translated textual representation of a column with boolean value.
160
+ * Sets the translated textual representation of a column with a Boolean value.
142
161
  * @param exportColumn The column to be exported
143
162
  * @param resourceBundle The resource bundle
144
163
  */;
145
164
  TableExport.translateBooleanValueForExport = function translateBooleanValueForExport(exportColumn, resourceBundle) {
146
- if (exportColumn.type === "Boolean") {
165
+ if (exportColumn.type === "Boolean" && !(exportColumn.trueValue || exportColumn.falseValue)) {
147
166
  exportColumn.falseValue = resourceBundle.getText("no");
148
167
  exportColumn.trueValue = resourceBundle.getText("yes");
149
168
  }
@@ -240,4 +259,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/u
240
259
  _exports = TableExport;
241
260
  return _exports;
242
261
  }, false);
243
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUV4cG9ydCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJzZXRUYWJsZUJpbmRpbmdJbmZvIiwiYmluZGluZ0luZm8iLCJ0YWJsZUJpbmRpbmdJbmZvIiwic2V0RG93bmxvYWRVcmwiLCJkb3dubG9hZFVybCIsInVuZGVmaW5lZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsInRhYmxlIiwiZ2V0Q29udGVudCIsInByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJjb2x1bW5zRXhwb3J0U2V0dGluZ3MiLCJtZGNDb2x1bW4iLCJnZXRDb2x1bW5zIiwiY29uY2F0IiwiZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MiLCJiaW5kaW5nUGFyYW1ldGVycyIsImNvbGxlY3Rpb25LZXlzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJuYW1lIiwic2VsZWN0UHJvcGVydGllcyIsImNvbHVtbiIsIkFycmF5IiwiaXNBcnJheSIsInByb3BlcnR5Iiwiam9pbiIsImZvckVhY2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMiLCJPYmplY3QiLCJyZXF1ZXN0QXRMZWFzdCIsInByb3AiLCJwYXJhbWV0ZXJzIiwiJHNlYXJjaCIsIiQkYWdncmVnYXRpb24iLCJ0YWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZG93bmxvYWRMaXN0QmluZGluZyIsImdldE1vZGVsIiwiYmluZExpc3QiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsInNvcnRlciIsImZpbHRlcnMiLCJyZXF1ZXN0RG93bmxvYWRVcmwiLCJkZXN0cm95IiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsIl9vbkJlZm9yZUV4cG9ydCIsImV4cG9ydEV2ZW50IiwiaXNTcGxpdE1vZGUiLCJnZXRQYXJhbWV0ZXIiLCJzcGxpdENlbGxzIiwiZ2V0U291cmNlIiwiZXhwb3J0U2V0dGluZ3MiLCJ0YWJsZURlZmluaXRpb24iLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImNvbHVtbnMiLCJzZXRTdGF0aWNTaXplTGltaXQiLCJleHBvcnRDb2x1bW5zIiwid29ya2Jvb2siLCJpbmRleCIsImxlbmd0aCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0Iiwic2V0RXhwb3J0Q29uZmlnIiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJ0YWJsZUFQSURvd25sb2FkVXJsIiwiZ2V0UGFyZW50IiwiZGF0YVNvdXJjZSIsImRhdGFVcmwiLCJjb250cm9sIiwidHlwZSIsInNpemVMaW1pdCIsImV4cG9ydFJlcXVlc3RTaXplIiwiZmFsc2VWYWx1ZSIsImdldFRleHQiLCJ0cnVlVmFsdWUiLCJyZWZlcmVuY2VkQ29sdW1uIiwiZmluZCIsInByb3BlcnR5SW5mb3MiLCJyZWxhdGl2ZVBhdGgiLCJ0b1N0cmluZyIsImV4cG9ydENvbmZpZ0xpc3QiLCJ0YXJnZXRWYWx1ZUNvbHVtbiIsImlzUHJvcGVydHlGcm9tRXhwb3J0IiwiY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkIiwiY29sdW1uVG9CZUFkZGVkIiwidGVtcGxhdGUiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsInNwbGljZSIsImNvbHVtbkV4cG9ydCIsImNvbHVtbk5lZWRzVG9CZUFkZGVkIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUV4cG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0dHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdHR5cGUgQ29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdHR5cGUgVGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB7IHR5cGUgVGFibGUkQmVmb3JlRXhwb3J0RXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgSVRhYmxlQmxvY2sgfSBmcm9tIFwiLi4vVGFibGVBUElcIjtcblxudHlwZSBFeHBvcnRDb2x1bW4gPSB7XG5cdHByb3BlcnR5OiBzdHJpbmcgfCBzdHJpbmdbXTtcblx0bGFiZWw6IHN0cmluZztcblx0Y29sdW1uSWQ/OiBzdHJpbmc7XG5cdHdpZHRoPzogbnVtYmVyO1xuXHR0ZXh0QWxpZ24/OiBzdHJpbmc7XG5cdGRpc3BsYXlVbml0PzogYm9vbGVhbjtcblx0dHJ1ZVZhbHVlPzogc3RyaW5nO1xuXHRmYWxzZVZhbHVlPzogc3RyaW5nO1xuXHR2YWx1ZU1hcD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGRlbGltaXRlcj86IGJvb2xlYW47XG5cdHdyYXA/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHRzY2FsZT86IG51bWJlcjtcbn07XG5cbnR5cGUgVXNlckV4cG9ydFNldHRpbmdzID0ge1xuXHRzcGxpdENlbGxzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cG9ydFNldHRpbmdzID0ge1xuXHRmaWxlVHlwZT86IHN0cmluZztcblx0ZGF0YVNvdXJjZToge1xuXHRcdGRhdGFVcmw6IHN0cmluZztcblx0XHRzaXplTGltaXQ/OiBudW1iZXI7XG5cdH07XG5cdHdvcmtib29rOiB7XG5cdFx0Y29sdW1uczogRXhwb3J0Q29sdW1uW107XG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUV4cG9ydCBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRkb3dubG9hZFVybD86IHN0cmluZztcblxuXHR0YWJsZUJpbmRpbmdJbmZvPzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvO1xuXG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogU3RvcmVzIHRoZSBiaW5kaW5nIGluZm8gZm9yIHRoZSB0YWJsZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdHNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRcdHRoaXMudGFibGVCaW5kaW5nSW5mbyA9IGJpbmRpbmdJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbXB1dGUgdGhlIGRvd25sb2FkIFVSTCB0byBiZSB1c2VkIGJ5IHRoZSBleHBvcnQgYW5kIHN0b3JlIGl0IGluIHRoZSBUYWJsZUFQSS5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGVuIGRvd25sb2FkVXJsIGlzIHNldFxuXHQgKi9cblx0YXN5bmMgc2V0RG93bmxvYWRVcmwodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUV4cG9ydCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vZW1wdHkgdGhlIGRvd25sb2FkVXJsIHRvIHByZXZlbnQgYW4gaW52YWxpZCBvbmUgdG8gYmUgdXNlZFxuXHRcdHRoaXMuZG93bmxvYWRVcmwgPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3MgPT09IHRydWUpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgYW4gYW5hbHl0aWNhbCB0YWJsZSwgJHNlbGVjdCBpcyBub3Qgc3VwcG9ydGVkLCBzbyB3ZSBkb24ndCBjYWxjdWxhdGUgdGhlIGRvd25sb2FkIFVSTCAod2UgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgZG93bmxvYWRVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlIZWxwZXIgPSB0YWJsZS5nZXRQcm9wZXJ0eUhlbHBlcigpO1xuXHRcdFx0bGV0IGNvbHVtbnNFeHBvcnRTZXR0aW5nczogRXhwb3J0Q29sdW1uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgbWRjQ29sdW1uIG9mIHRhYmxlLmdldENvbHVtbnMoKSkge1xuXHRcdFx0XHRjb2x1bW5zRXhwb3J0U2V0dGluZ3MgPSBjb2x1bW5zRXhwb3J0U2V0dGluZ3MuY29uY2F0KHByb3BlcnR5SGVscGVyLmdldENvbHVtbkV4cG9ydFNldHRpbmdzKG1kY0NvbHVtbikpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyczogeyAkc2VsZWN0Pzogc3RyaW5nOyAkc2VhcmNoPzogc3RyaW5nOyAkJGFnZ3JlZ2F0aW9uPzogb2JqZWN0IH0gPSB7fTtcblx0XHRcdC8vIHdlIGp1c3Qgd2FudCB0byByZXF1ZXN0IHRoZSBwcm9wZXJ0aWVzIG5lY2Vzc2FyeSBmb3IgdGhlIGV4cG9ydFxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbktleXMgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgsIHRoaXMuY29udGV4dFBhdGgpPy50YXJnZXRFbnRpdHlUeXBlLmtleXMubWFwKFxuXHRcdFx0XHQoa2V5KSA9PiBrZXkubmFtZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHNlbGVjdFByb3BlcnRpZXMgPSBjb2x1bW5zRXhwb3J0U2V0dGluZ3MubWFwKChjb2x1bW46IEV4cG9ydENvbHVtbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShjb2x1bW4ucHJvcGVydHkpID8gY29sdW1uLnByb3BlcnR5LmpvaW4oXCIsXCIpIDogY29sdW1uLnByb3BlcnR5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb2xsZWN0aW9uS2V5cz8uZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdGlmICghc2VsZWN0UHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRcdFx0c2VsZWN0UHJvcGVydGllcy5wdXNoKGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgcmVxdWVzdEF0TGVhc3RQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5yZXF1ZXN0QXRMZWFzdCk7XG5cdFx0XHRyZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXM/LmZvckVhY2goKHByb3ApID0+IHtcblx0XHRcdFx0aWYgKCFzZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3ApKSB7XG5cdFx0XHRcdFx0c2VsZWN0UHJvcGVydGllcy5wdXNoKHByb3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzW1wiJHNlbGVjdFwiXSA9IHNlbGVjdFByb3BlcnRpZXMuam9pbihcIixcIik7XG5cblx0XHRcdGlmICh0aGlzLnRhYmxlQmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiRzZWFyY2gpIHtcblx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnMuJHNlYXJjaCA9IHRoaXMudGFibGVCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRhYmxlQmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiQkYWdncmVnYXRpb24pIHtcblx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbiA9IHRoaXMudGFibGVCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb247XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdC8vIHdlIGNyZWF0ZSBhIGxpc3QgYmluZGluZyB0byBjb21wdXRlIHRoZSByaWdodCB1cmwgZm9yIHRoZSBleHBvcnQgZnJvbSBpdHMgYmluZGluZyBwYXJhbWV0ZXJzXG5cdFx0XHRjb25zdCBkb3dubG9hZExpc3RCaW5kaW5nID0gKHRhYmxlQmluZGluZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmJpbmRMaXN0KFxuXHRcdFx0XHR0YWJsZUJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHR0YWJsZUJpbmRpbmcuZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHR0aGlzLnRhYmxlQmluZGluZ0luZm8/LnNvcnRlcixcblx0XHRcdFx0dGhpcy50YWJsZUJpbmRpbmdJbmZvPy5maWx0ZXJzLFxuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHRcdGRvd25sb2FkVXJsID0gYXdhaXQgZG93bmxvYWRMaXN0QmluZGluZy5yZXF1ZXN0RG93bmxvYWRVcmwoKTtcblx0XHRcdGRvd25sb2FkTGlzdEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGRvd25sb2FkIFVSTCBmb3IgdGhlIGV4cG9ydFwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHRcdGlmIChkb3dubG9hZFVybCkge1xuXHRcdFx0dGhpcy5kb3dubG9hZFVybCA9IGRvd25sb2FkVXJsO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcmNlcHQgdGhlIGV4cG9ydCBiZWZvcmUgaXQncyB0cmlnZ2VyZWQgdG8gY292ZXIgc3BlY2lmaWMgY2FzZXMgdGhhdCBjb3VsZG4ndCBiZSBhZGRyZXNzZWQgb24gdGhlIHByb3BlcnR5SW5mb3MgZm9yIGVhY2ggY29sdW1uLlxuXHQgKiBlLmcuIEZpeGVkIFRhcmdldCBWYWx1ZSBmb3IgdGhlIGRhdGFwb2ludHMuXG5cdCAqIEBwYXJhbSB0aGlzXG5cdCAqIEBwYXJhbSBleHBvcnRFdmVudFxuXHQgKi9cblx0X29uQmVmb3JlRXhwb3J0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVFeHBvcnQsIGV4cG9ydEV2ZW50OiBUYWJsZSRCZWZvcmVFeHBvcnRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGlzU3BsaXRNb2RlID0gKGV4cG9ydEV2ZW50LmdldFBhcmFtZXRlcihcInVzZXJFeHBvcnRTZXR0aW5nc1wiKSBhcyBVc2VyRXhwb3J0U2V0dGluZ3MpPy5zcGxpdENlbGxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHRhYmxlID0gZXhwb3J0RXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRleHBvcnRTZXR0aW5ncyA9IGV4cG9ydEV2ZW50LmdldFBhcmFtZXRlcihcImV4cG9ydFNldHRpbmdzXCIpIGFzIEV4cG9ydFNldHRpbmdzLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblxuXHRcdFRhYmxlRXhwb3J0LnVwZGF0ZUV4cG9ydFNldHRpbmdzKGV4cG9ydFNldHRpbmdzLCB0YWJsZURlZmluaXRpb24sIHRhYmxlLCBpc1NwbGl0TW9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdGFibGUgY29sdW1ucyB0aGF0IGNhbiBiZSBleHBvcnRlZC5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gaXNTcGxpdE1vZGUgRGVmaW5lcyBpZiB0aGUgZXhwb3J0IGhhcyBiZWVuIGxhdW5jaGVkIHVzaW5nIHNwbGl0IG1vZGVcblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIHVwZGF0ZUV4cG9ydFNldHRpbmdzKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyxcblx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0aXNTcGxpdE1vZGU6IGJvb2xlYW5cblx0KTogRXhwb3J0U2V0dGluZ3Mge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0YWJsZURlZmluaXRpb24uY29sdW1ucztcblx0XHR0aGlzLnNldFN0YXRpY1NpemVMaW1pdCh0YWJsZURlZmluaXRpb24sIGV4cG9ydFNldHRpbmdzKTtcblx0XHRjb25zdCBleHBvcnRDb2x1bW5zID0gZXhwb3J0U2V0dGluZ3Mud29ya2Jvb2suY29sdW1ucztcblx0XHRmb3IgKGxldCBpbmRleCA9IGV4cG9ydENvbHVtbnMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuXHRcdFx0Y29uc3QgZXhwb3J0Q29sdW1uID0gZXhwb3J0Q29sdW1uc1tpbmRleF07XG5cdFx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRcdGV4cG9ydENvbHVtbi5sYWJlbCA9IGdldExvY2FsaXplZFRleHQoZXhwb3J0Q29sdW1uLmxhYmVsLCB0YWJsZSk7XG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW4sIHJlc291cmNlQnVuZGxlKTtcblx0XHRcdGlmIChpc1NwbGl0TW9kZSkge1xuXHRcdFx0XHR0aGlzLnNldEV4cG9ydENvbmZpZyhjb2x1bW5zLCBleHBvcnRDb2x1bW5zLCBpbmRleCk7XG5cdFx0XHRcdHRoaXMuYWRkVGFyZ2V0VmFsdWVDb2x1bW4oY29sdW1ucywgZXhwb3J0Q29sdW1ucywgcmVzb3VyY2VCdW5kbGUsIGluZGV4KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUElEb3dubG9hZFVybCA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KS5kb3dubG9hZFVybDtcblx0XHRpZiAodGFibGVBUElEb3dubG9hZFVybCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5kYXRhVXJsID0gdGFibGVBUElEb3dubG9hZFVybDtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHN0YXRpYyBzaXplIGxpbWl0IGZvciB0aGUgdGFibGUgZXhwb3J0LlxuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIHRhYmxlIGV4cG9ydCBzZXR0aW5nc1xuXHQgKi9cblx0c3RhdGljIHNldFN0YXRpY1NpemVMaW1pdCh0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiwgZXhwb3J0U2V0dGluZ3M6IEV4cG9ydFNldHRpbmdzKTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgJiZcblx0XHRcdCh0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIpXG5cdFx0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5kYXRhU291cmNlLnNpemVMaW1pdCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydFJlcXVlc3RTaXplID8/IDEwMDA7XG5cdFx0fSBlbHNlIGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5leHBvcnRSZXF1ZXN0U2l6ZSkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhbmFseXRpY2FsIG9yIHRyZWUgdGFibGUsIHRoZSBzaXplIGxpbWl0IGlzIHNldCB0byB0aGUgb25lIGRlZmluZWQgaW4gdGhlIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGV4cG9ydFNldHRpbmdzLmRhdGFTb3VyY2Uuc2l6ZUxpbWl0ID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHRyYW5zbGF0ZWQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbHVtbiB3aXRoIGJvb2xlYW4gdmFsdWUuXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKi9cblx0c3RhdGljIHRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKTogdm9pZCB7XG5cdFx0aWYgKGV4cG9ydENvbHVtbi50eXBlID09PSBcIkJvb2xlYW5cIikge1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmZhbHNlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwibm9cIik7XG5cdFx0XHRleHBvcnRDb2x1bW4udHJ1ZVZhbHVlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcInllc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgb3JpZ2luYXRpbmcgZXhwb3J0IGNvbmZpZyBvZiBhIHNpbmdsZSBwcm9wZXJ0eSByZWZlcmVuY2VkIG9uIGEgZmllbGQgZ3JvdXAgb3IgYSBjdXN0b20gY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1ucyBUaGUgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICovXG5cdHN0YXRpYyBzZXRFeHBvcnRDb25maWcoY29sdW1uczogVGFibGVDb2x1bW5bXSwgZXhwb3J0Q29sdW1uczogRXhwb3J0Q29sdW1uW10sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCByZWZlcmVuY2VkQ29sdW1uID0gY29sdW1ucy5maW5kKFxuXHRcdFx0KGNvbHVtbikgPT4gIWNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIChjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5yZWxhdGl2ZVBhdGggPT09IGV4cG9ydENvbHVtbnNbaW5kZXhdLnByb3BlcnR5LnRvU3RyaW5nKClcblx0XHQpO1xuXHRcdGlmIChyZWZlcmVuY2VkQ29sdW1uPy5leHBvcnRTZXR0aW5ncykge1xuXHRcdFx0Ly8gQWxsIGV4cG9ydCBzZXR0aW5ncyBvZiBhIGNvbHVtbiB0byBiZSBleHBvcnRlZCBjYW4ndCBiZSBhZGRlZCB0byB0aGUgZXhwb3J0IHNldHRpbmdzIG9iamVjdFxuXHRcdFx0Ly8gYmVjYXVzZSBjb2x1bW4gY291bGQgaGF2ZSB1bml0cy90aW1lem9uZXMvY3VycmVuY2llcyB0aGF0IGFyZW4ndCByZXF1aXJlZCBvbiBjdXN0b20gY3VzdG9tcyBidXQgb25seSBvbiBjb2x1bW5zIGZyb20gYW5ub3RhdGlvbnNcblx0XHRcdGNvbnN0IGV4cG9ydENvbmZpZ0xpc3Q6IEFycmF5PGtleW9mIENvbHVtbkV4cG9ydFNldHRpbmdzPiA9IFtcInNjYWxlXCIsIFwiZGVsaW1pdGVyXCIsIFwiZm9ybWF0XCIsIFwidXRjXCIsIFwidHlwZVwiLCBcImlucHV0Rm9ybWF0XCJdO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgZXhwb3J0Q29uZmlnTGlzdCkge1xuXHRcdFx0XHRpZiAocmVmZXJlbmNlZENvbHVtbi5leHBvcnRTZXR0aW5nc1trZXldKSB7XG5cdFx0XHRcdFx0ZXhwb3J0Q29sdW1uc1tpbmRleF0gPSB7IC4uLmV4cG9ydENvbHVtbnNbaW5kZXhdLCAuLi57IFtrZXldOiByZWZlcmVuY2VkQ29sdW1uLmV4cG9ydFNldHRpbmdzW2tleV0gfSB9O1xuXHRcdFx0XHRcdGlmIChleHBvcnRDb2x1bW5zW2luZGV4XS50eXBlID09PSBcIkN1cnJlbmN5XCIpIHtcblx0XHRcdFx0XHRcdGV4cG9ydENvbHVtbnNbaW5kZXhdLnR5cGUgPSBcIk51bWJlclwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgdGFyZ2V0IHZhbHVlIGNvbHVtbiB3aGVuIHRoZXJlIGlzIGEgZGF0YXBvaW50IGNvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgdG8gYmUgZXhwb3J0ZWRcblx0ICogQHBhcmFtIHJlc291cmNlQnVuZGxlIFRoZSByZXNvdXJjZSBidW5kbGVcblx0ICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkXG5cdCAqL1xuXHRzdGF0aWMgYWRkVGFyZ2V0VmFsdWVDb2x1bW4oXG5cdFx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRleHBvcnRDb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSxcblx0XHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsXG5cdFx0aW5kZXg6IG51bWJlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB0YXJnZXRWYWx1ZUNvbHVtbiA9IChjb2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdKT8uZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuaXNQcm9wZXJ0eUZyb21FeHBvcnQoY29sdW1uLCBleHBvcnRDb2x1bW5zW2luZGV4XSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkKGNvbHVtbiwgZXhwb3J0Q29sdW1uc1tpbmRleF0pO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRWYWx1ZUNvbHVtbikge1xuXHRcdFx0Y29uc3QgY29sdW1uVG9CZUFkZGVkOiBFeHBvcnRDb2x1bW4gPSB7XG5cdFx0XHRcdGxhYmVsOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVGFyZ2V0VmFsdWVcIiksXG5cdFx0XHRcdHByb3BlcnR5OiBBcnJheS5pc0FycmF5KGV4cG9ydENvbHVtbnNbaW5kZXhdLnByb3BlcnR5KVxuXHRcdFx0XHRcdD8gZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHlcblx0XHRcdFx0XHQ6IChbZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHldIGFzIHN0cmluZ1tdKSxcblx0XHRcdFx0dGVtcGxhdGU6IHRhcmdldFZhbHVlQ29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlXG5cdFx0XHR9O1xuXHRcdFx0ZXhwb3J0Q29sdW1ucy5zcGxpY2UoaW5kZXggKyAxLCAwLCBjb2x1bW5Ub0JlQWRkZWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGNvbHVtbidzIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIHRoZSBleHBvcnRDb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBmcm9tIHRoZSBhbm5vdGF0aW9ucyBjb2x1bW5cblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbiBUaGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBXaGV0aGVyIHRoZSBjb2x1bW4gaGFzIHRoZSBleHBvcnRDb2x1bW4gcHJvcGVydHlcblx0ICovXG5cdHN0YXRpYyBpc1Byb3BlcnR5RnJvbUV4cG9ydChjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiwgZXhwb3J0Q29sdW1uOiBFeHBvcnRDb2x1bW4pOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHRjb2x1bW4ucmVsYXRpdmVQYXRoID09PSBleHBvcnRDb2x1bW4ucHJvcGVydHkgfHxcblx0XHRcdGV4cG9ydENvbHVtbi5wcm9wZXJ0eS5pbmNsdWRlcyhjb2x1bW4ucmVsYXRpdmVQYXRoKSB8fFxuXHRcdFx0ZXhwb3J0Q29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKGNvbHVtbi5uYW1lKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdC8vIEluIGNhc2Ugb2YgY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0aWYgKGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDEgJiYgZXhwb3J0Q29sdW1uLnByb3BlcnR5WzBdID09PSBjb2x1bW4ucHJvcGVydHlJbmZvc1swXSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGlmIGEgY29sdW1uIHRoYXQgaXMgdG8gYmUgZXhwb3J0ZWQgYW5kIGNvbnRhaW5zIGEgRGF0YVBvaW50IHdpdGggYSBmaXhlZCB0YXJnZXQgdmFsdWUgbmVlZHMgdG8gYmUgYWRkZWQuXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBmcm9tIHRoZSBhbm5vdGF0aW9ucyBjb2x1bW5cblx0ICogQHBhcmFtIGNvbHVtbkV4cG9ydCBUaGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlZCBjb2x1bW4gaGFzIGRlZmluZWQgYSB0YXJnZXRWYWx1ZSBmb3IgdGhlIGRhdGFQb2ludCwgZmFsc2UgZWxzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c3RhdGljIGNvbHVtbldpdGhUYXJnZXRWYWx1ZVRvQmVBZGRlZChjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sdW1uRXhwb3J0OiBFeHBvcnRDb2x1bW4pOiBib29sZWFuIHtcblx0XHRsZXQgY29sdW1uTmVlZHNUb0JlQWRkZWQgPSBmYWxzZTtcblx0XHRpZiAoY29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlICYmIGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vQWRkIFRhcmdldFZhbHVlIGNvbHVtbiB3aGVuIGV4cG9ydGluZyBvbiBzcGxpdCBtb2RlXG5cdFx0XHQvLyBwYXJ0IG9mIGEgRmllbGRHcm91cCBvciBmcm9tIGEgbGluZUl0ZW0gb3IgZnJvbSBhIGNvbHVtbiBvbiB0aGUgZW50aXR5U2V0XG5cdFx0XHRkZWxldGUgY29sdW1uRXhwb3J0LnRlbXBsYXRlO1xuXHRcdFx0Y29sdW1uTmVlZHNUb0JlQWRkZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uTmVlZHNUb0JlQWRkZWQ7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O01Ba0RxQkEsV0FBVztJQUFBLFNBQUFBLFlBQUE7SUFBQUMsUUFBQSxHQUFBRCxXQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixXQUFBLENBQUFHLFNBQUE7SUFBQUQsTUFBQSxDQUsvQkUsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNDLFVBQW9CLEVBQVE7TUFDdEM7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFILE1BQUEsQ0FJQUksbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsV0FBa0MsRUFBUTtNQUM3RCxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxXQUFXO0lBQ3BDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBTCxNQUFBLENBS01PLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FBQSxFQUFpRDtNQUNwRTtNQUNBLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxTQUFTO01BRTVCLElBQUksSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLGVBQWUsS0FBSyxJQUFJLEVBQUU7UUFDdkQ7UUFDQTtNQUNEO01BRUEsSUFBSUgsV0FBc0M7TUFDMUMsTUFBTUksS0FBSyxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDL0IsSUFBSTtRQUNILE1BQU1DLGNBQWMsR0FBR0YsS0FBSyxDQUFDRyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hELElBQUlDLHFCQUFxQyxHQUFHLEVBQUU7UUFDOUMsS0FBSyxNQUFNQyxTQUFTLElBQUlMLEtBQUssQ0FBQ00sVUFBVSxDQUFDLENBQUMsRUFBRTtVQUMzQ0YscUJBQXFCLEdBQUdBLHFCQUFxQixDQUFDRyxNQUFNLENBQUNMLGNBQWMsQ0FB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
262
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUV4cG9ydCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJzZXRUYWJsZUJpbmRpbmdJbmZvIiwiYmluZGluZ0luZm8iLCJ0YWJsZUJpbmRpbmdJbmZvIiwic2V0RG93bmxvYWRVcmwiLCJkb3dubG9hZFVybCIsInVuZGVmaW5lZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsInRhYmxlIiwiZ2V0Q29udGVudCIsInByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJjb2x1bW5zRXhwb3J0U2V0dGluZ3MiLCJtZGNDb2x1bW4iLCJnZXRDb2x1bW5zIiwiY29uY2F0IiwiZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MiLCJiaW5kaW5nUGFyYW1ldGVycyIsImNvbGxlY3Rpb25LZXlzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJuYW1lIiwic2VsZWN0UHJvcGVydGllcyIsImNvbHVtbiIsIkFycmF5IiwiaXNBcnJheSIsInByb3BlcnR5Iiwiam9pbiIsImZvckVhY2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMiLCJPYmplY3QiLCJyZXF1ZXN0QXRMZWFzdCIsInByb3AiLCJwYXJhbWV0ZXJzIiwiJHNlYXJjaCIsIiQkYWdncmVnYXRpb24iLCJ0YWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZG93bmxvYWRMaXN0QmluZGluZyIsImdldE1vZGVsIiwiYmluZExpc3QiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsInNvcnRlciIsImZpbHRlcnMiLCJyZXF1ZXN0RG93bmxvYWRVcmwiLCJkZXN0cm95IiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsIl9vbkJlZm9yZUV4cG9ydCIsImV4cG9ydEV2ZW50IiwiaXNTcGxpdE1vZGUiLCJnZXRQYXJhbWV0ZXIiLCJzcGxpdENlbGxzIiwiZ2V0U291cmNlIiwiZXhwb3J0U2V0dGluZ3MiLCJ0YWJsZURlZmluaXRpb24iLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImNvbHVtbnMiLCJzZXRTdGF0aWNTaXplTGltaXQiLCJleHBvcnRDb2x1bW5zIiwid29ya2Jvb2siLCJpbmRleCIsImxlbmd0aCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0Iiwic2V0RXhwb3J0Q29uZmlnIiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJ2YWx1ZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlQVBJRG93bmxvYWRVcmwiLCJnZXRQYXJlbnQiLCJkYXRhU291cmNlIiwiZGF0YVVybCIsInNldEZpbGVBbmRTaGVldE5hbWUiLCJjb250cm9sIiwiZXhwb3J0RmlsZU5hbWUiLCJmaWxlTmFtZSIsImV4cG9ydFNoZWV0TmFtZSIsImNvbnRleHQiLCJzaGVldE5hbWUiLCJ0eXBlIiwic2l6ZUxpbWl0IiwiZXhwb3J0UmVxdWVzdFNpemUiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwiZ2V0VGV4dCIsInJlZmVyZW5jZWRDb2x1bW4iLCJmaW5kIiwicHJvcGVydHlJbmZvcyIsInJlbGF0aXZlUGF0aCIsInRvU3RyaW5nIiwiZXhwb3J0Q29uZmlnTGlzdCIsInRhcmdldFZhbHVlQ29sdW1uIiwiaXNQcm9wZXJ0eUZyb21FeHBvcnQiLCJjb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQiLCJjb2x1bW5Ub0JlQWRkZWQiLCJ0ZW1wbGF0ZSIsImV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlIiwic3BsaWNlIiwiY29sdW1uRXhwb3J0IiwiY29sdW1uTmVlZHNUb0JlQWRkZWQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXhwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQge1xuXHR0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dHlwZSBDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0dHlwZSBUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFRleHRBbGlnbiB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZSRCZWZvcmVFeHBvcnRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuXG50eXBlIEV4cG9ydENvbHVtbiA9IHtcblx0cHJvcGVydHk6IHN0cmluZyB8IHN0cmluZ1tdO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRjb2x1bW5JZD86IHN0cmluZztcblx0d2lkdGg/OiBudW1iZXI7XG5cdHRleHRBbGlnbj86IFRleHRBbGlnbjtcblx0ZGlzcGxheVVuaXQ/OiBib29sZWFuO1xuXHR0cnVlVmFsdWU/OiBzdHJpbmc7XG5cdGZhbHNlVmFsdWU/OiBzdHJpbmc7XG5cdHZhbHVlTWFwPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcblx0ZGVsaW1pdGVyPzogYm9vbGVhbjtcblx0d3JhcD86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHNjYWxlPzogbnVtYmVyO1xufTtcblxudHlwZSBVc2VyRXhwb3J0U2V0dGluZ3MgPSB7XG5cdHNwbGl0Q2VsbHM/OiBib29sZWFuO1xufTtcblxuLy8gVGhlIHR5cGUgRXhwb3J0U2V0dGluZ3MgaXMgbm90IGV4cG9ydGVkIGZyb20gXCJzYXAvdWkvZXhwb3J0L2xpYnJhcnlcIiBzbyB3ZSBuZWVkIHRvIHJlZGVmaW5lIHRoZW0gaGVyZVxuZXhwb3J0IHR5cGUgRXhwb3J0U2V0dGluZ3MgPSB7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRkYXRhU291cmNlOiB7XG5cdFx0ZGF0YVVybDogc3RyaW5nO1xuXHRcdHNpemVMaW1pdD86IG51bWJlcjtcblx0fTtcblx0d29ya2Jvb2s6IHtcblx0XHRjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXTtcblx0XHRjb250ZXh0PzogeyBzaGVldE5hbWU/OiBzdHJpbmcgfTtcblx0fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlRXhwb3J0IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdGRvd25sb2FkVXJsPzogc3RyaW5nO1xuXG5cdHRhYmxlQmluZGluZ0luZm8/OiBDb2xsZWN0aW9uQmluZGluZ0luZm87XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgdGhlIGJpbmRpbmcgaW5mbyBmb3IgdGhlIHRhYmxlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nSW5mb1xuXHQgKi9cblx0c2V0VGFibGVCaW5kaW5nSW5mbyhiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFx0dGhpcy50YWJsZUJpbmRpbmdJbmZvID0gYmluZGluZ0luZm87XG5cdH1cblxuXHQvKipcblx0ICogQ29tcHV0ZSB0aGUgZG93bmxvYWQgVVJMIHRvIGJlIHVzZWQgYnkgdGhlIGV4cG9ydCBhbmQgc3RvcmUgaXQgaW4gdGhlIFRhYmxlQVBJLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoZW4gZG93bmxvYWRVcmwgaXMgc2V0XG5cdCAqL1xuXHRhc3luYyBzZXREb3dubG9hZFVybCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9lbXB0eSB0aGUgZG93bmxvYWRVcmwgdG8gcHJldmVudCBhbiBpbnZhbGlkIG9uZSB0byBiZSB1c2VkXG5cdFx0dGhpcy5kb3dubG9hZFVybCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlLCAkc2VsZWN0IGlzIG5vdCBzdXBwb3J0ZWQsIHNvIHdlIGRvbid0IGNhbGN1bGF0ZSB0aGUgZG93bmxvYWQgVVJMICh3ZSB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyKVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb3dubG9hZFVybDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUhlbHBlciA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCk7XG5cdFx0XHRsZXQgY29sdW1uc0V4cG9ydFNldHRpbmdzOiBFeHBvcnRDb2x1bW5bXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBtZGNDb2x1bW4gb2YgdGFibGUuZ2V0Q29sdW1ucygpKSB7XG5cdFx0XHRcdGNvbHVtbnNFeHBvcnRTZXR0aW5ncyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5jb25jYXQocHJvcGVydHlIZWxwZXIuZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MobWRjQ29sdW1uKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJzOiB7ICRzZWxlY3Q/OiBzdHJpbmc7ICRzZWFyY2g/OiBzdHJpbmc7ICQkYWdncmVnYXRpb24/OiBvYmplY3QgfSA9IHt9O1xuXHRcdFx0Ly8gd2UganVzdCB3YW50IHRvIHJlcXVlc3QgdGhlIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciB0aGUgZXhwb3J0XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uS2V5cyA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk/LnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoXG5cdFx0XHRcdChrZXkpID0+IGtleS5uYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2VsZWN0UHJvcGVydGllcyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5tYXAoKGNvbHVtbjogRXhwb3J0Q29sdW1uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGNvbHVtbi5wcm9wZXJ0eSkgPyBjb2x1bW4ucHJvcGVydHkuam9pbihcIixcIikgOiBjb2x1bW4ucHJvcGVydHk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbGxlY3Rpb25LZXlzPy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0aWYgKCFzZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2goa2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLnJlcXVlc3RBdExlYXN0KTtcblx0XHRcdHJlcXVlc3RBdExlYXN0UHJvcGVydGllcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAoIXNlbGVjdFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcCkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnNbXCIkc2VsZWN0XCJdID0gc2VsZWN0UHJvcGVydGllcy5qb2luKFwiLFwiKTtcblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJHNlYXJjaCkge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kc2VhcmNoID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJCRhZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Ly8gd2UgY3JlYXRlIGEgbGlzdCBiaW5kaW5nIHRvIGNvbXB1dGUgdGhlIHJpZ2h0IHVybCBmb3IgdGhlIGV4cG9ydCBmcm9tIGl0cyBiaW5kaW5nIHBhcmFtZXRlcnNcblx0XHRcdGNvbnN0IGRvd25sb2FkTGlzdEJpbmRpbmcgPSAodGFibGVCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuYmluZExpc3QoXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdHRoaXMudGFibGVCaW5kaW5nSW5mbz8uc29ydGVyLFxuXHRcdFx0XHR0aGlzLnRhYmxlQmluZGluZ0luZm8/LmZpbHRlcnMsXG5cdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0ZG93bmxvYWRVcmwgPSBhd2FpdCBkb3dubG9hZExpc3RCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpO1xuXHRcdFx0ZG93bmxvYWRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgZXhwb3J0XCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdFx0aWYgKGRvd25sb2FkVXJsKSB7XG5cdFx0XHR0aGlzLmRvd25sb2FkVXJsID0gZG93bmxvYWRVcmw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpdCdzIHRyaWdnZXJlZCB0byBjb3ZlciBzcGVjaWZpYyBjYXNlcyB0aGF0IGNvdWxkbid0IGJlIGFkZHJlc3NlZCBvbiB0aGUgcHJvcGVydHlJbmZvcyBmb3IgZWFjaCBjb2x1bW4uXG5cdCAqIGUuZy4gRml4ZWQgVGFyZ2V0IFZhbHVlIGZvciB0aGUgZGF0YXBvaW50cy5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHBhcmFtIGV4cG9ydEV2ZW50XG5cdCAqL1xuXHRfb25CZWZvcmVFeHBvcnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUV4cG9ydCwgZXhwb3J0RXZlbnQ6IFRhYmxlJEJlZm9yZUV4cG9ydEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNTcGxpdE1vZGUgPSAoZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwidXNlckV4cG9ydFNldHRpbmdzXCIpIGFzIFVzZXJFeHBvcnRTZXR0aW5ncyk/LnNwbGl0Q2VsbHMgPT09IHRydWU7XG5cdFx0Y29uc3QgdGFibGUgPSBleHBvcnRFdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGV4cG9ydFNldHRpbmdzID0gZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXhwb3J0U2V0dGluZ3NcIikgYXMgRXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXG5cdFx0VGFibGVFeHBvcnQudXBkYXRlRXhwb3J0U2V0dGluZ3MoZXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbiwgdGFibGUsIGlzU3BsaXRNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB0YWJsZSBjb2x1bW5zIHRoYXQgY2FuIGJlIGV4cG9ydGVkLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIHRhYmxlIGV4cG9ydCBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBpc1NwbGl0TW9kZSBEZWZpbmVzIGlmIHRoZSBleHBvcnQgaGFzIGJlZW4gbGF1bmNoZWQgdXNpbmcgc3BsaXQgbW9kZVxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqL1xuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3MoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IEV4cG9ydFNldHRpbmdzLFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRpc1NwbGl0TW9kZTogYm9vbGVhblxuXHQpOiBFeHBvcnRTZXR0aW5ncyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zO1xuXHRcdHRoaXMuc2V0U3RhdGljU2l6ZUxpbWl0KHRhYmxlRGVmaW5pdGlvbiwgZXhwb3J0U2V0dGluZ3MpO1xuXHRcdGNvbnN0IGV4cG9ydENvbHVtbnMgPSBleHBvcnRTZXR0aW5ncy53b3JrYm9vay5jb2x1bW5zO1xuXHRcdGZvciAobGV0IGluZGV4ID0gZXhwb3J0Q29sdW1ucy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG5cdFx0XHRjb25zdCBleHBvcnRDb2x1bW4gPSBleHBvcnRDb2x1bW5zW2luZGV4XTtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChleHBvcnRDb2x1bW4ubGFiZWwsIHRhYmxlKTtcblx0XHRcdHRoaXMudHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0KGV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0aWYgKGlzU3BsaXRNb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2V0RXhwb3J0Q29uZmlnKGNvbHVtbnMsIGV4cG9ydENvbHVtbnMsIGluZGV4KTtcblx0XHRcdFx0dGhpcy5hZGRUYXJnZXRWYWx1ZUNvbHVtbihjb2x1bW5zLCBleHBvcnRDb2x1bW5zLCByZXNvdXJjZUJ1bmRsZSwgaW5kZXgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cG9ydENvbHVtbi52YWx1ZU1hcCAmJiB0eXBlb2YgZXhwb3J0Q29sdW1uLnZhbHVlTWFwID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGV4cG9ydENvbHVtbi52YWx1ZU1hcCA9IEpTT04ucGFyc2UoZXhwb3J0Q29sdW1uLnZhbHVlTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUElEb3dubG9hZFVybCA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KS5kb3dubG9hZFVybDtcblx0XHRpZiAodGFibGVBUElEb3dubG9hZFVybCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5kYXRhVXJsID0gdGFibGVBUElEb3dubG9hZFVybDtcblx0XHR9XG5cdFx0dGhpcy5zZXRGaWxlQW5kU2hlZXROYW1lKGV4cG9ydFNldHRpbmdzLCB0YWJsZURlZmluaXRpb24pO1xuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmaWxlIG5hbWUgYW5kIHNoZWV0IG5hbWUgZm9yIHRoZSBleHBvcnQgc2V0dGluZ3MuXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgdGFibGUgZXhwb3J0IHNldHRpbmdzXG5cdCAqIEBwYXJhbSB0YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqL1xuXHRzdGF0aWMgc2V0RmlsZUFuZFNoZWV0TmFtZShleHBvcnRTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKTogdm9pZCB7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5maWxlTmFtZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lO1xuXHRcdH1cblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lICYmIGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQuc2hlZXROYW1lID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdGF0aWMgc2l6ZSBsaW1pdCBmb3IgdGhlIHRhYmxlIGV4cG9ydC5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdHN0YXRpYyBzZXRTdGF0aWNTaXplTGltaXQodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sIGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCF0YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzICYmXG5cdFx0XHQodGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIkdyaWRUYWJsZVwiKVxuXHRcdCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5zaXplTGltaXQgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5leHBvcnRSZXF1ZXN0U2l6ZSA/PyAxMDAwO1xuXHRcdH0gZWxzZSBpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgYW5hbHl0aWNhbCBvciB0cmVlIHRhYmxlLCB0aGUgc2l6ZSBsaW1pdCBpcyBzZXQgdG8gdGhlIG9uZSBkZWZpbmVkIGluIHRoZSB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRleHBvcnRTZXR0aW5ncy5kYXRhU291cmNlLnNpemVMaW1pdCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydFJlcXVlc3RTaXplO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB0cmFuc2xhdGVkIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBjb2x1bW4gd2l0aCBhIEJvb2xlYW4gdmFsdWUuXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKi9cblx0c3RhdGljIHRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKTogdm9pZCB7XG5cdFx0aWYgKGV4cG9ydENvbHVtbi50eXBlID09PSBcIkJvb2xlYW5cIiAmJiAhKGV4cG9ydENvbHVtbi50cnVlVmFsdWUgfHwgZXhwb3J0Q29sdW1uLmZhbHNlVmFsdWUpKSB7XG5cdFx0XHRleHBvcnRDb2x1bW4uZmFsc2VWYWx1ZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKTtcblx0XHRcdGV4cG9ydENvbHVtbi50cnVlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcmlnaW5hdGluZyBleHBvcnQgY29uZmlnIG9mIGEgc2luZ2xlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBmaWVsZCBncm91cCBvciBhIGN1c3RvbSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIHNldEV4cG9ydENvbmZpZyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBleHBvcnRDb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZmVyZW5jZWRDb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG5cdFx0XHQoY29sdW1uKSA9PiAhY29sdW1uLnByb3BlcnR5SW5mb3MgJiYgKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkudG9TdHJpbmcoKVxuXHRcdCk7XG5cdFx0aWYgKHJlZmVyZW5jZWRDb2x1bW4/LmV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHQvLyBBbGwgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIHRvIGJlIGV4cG9ydGVkIGNhbid0IGJlIGFkZGVkIHRvIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHQvLyBiZWNhdXNlIGNvbHVtbiBjb3VsZCBoYXZlIHVuaXRzL3RpbWV6b25lcy9jdXJyZW5jaWVzIHRoYXQgYXJlbid0IHJlcXVpcmVkIG9uIGN1c3RvbSBjdXN0b21zIGJ1dCBvbmx5IG9uIGNvbHVtbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRcdFx0Y29uc3QgZXhwb3J0Q29uZmlnTGlzdDogQXJyYXk8a2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3M+ID0gW1wic2NhbGVcIiwgXCJkZWxpbWl0ZXJcIiwgXCJmb3JtYXRcIiwgXCJ1dGNcIiwgXCJ0eXBlXCIsIFwiaW5wdXRGb3JtYXRcIl07XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBleHBvcnRDb25maWdMaXN0KSB7XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VkQ29sdW1uLmV4cG9ydFNldHRpbmdzW2tleV0pIHtcblx0XHRcdFx0XHRleHBvcnRDb2x1bW5zW2luZGV4XSA9IHsgLi4uZXhwb3J0Q29sdW1uc1tpbmRleF0sIC4uLnsgW2tleV06IHJlZmVyZW5jZWRDb2x1bW4uZXhwb3J0U2V0dGluZ3Nba2V5XSB9IH07XG5cdFx0XHRcdFx0aWYgKGV4cG9ydENvbHVtbnNbaW5kZXhdLnR5cGUgPT09IFwiQ3VycmVuY3lcIikge1xuXHRcdFx0XHRcdFx0ZXhwb3J0Q29sdW1uc1tpbmRleF0udHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSB0YXJnZXQgdmFsdWUgY29sdW1uIHdoZW4gdGhlcmUgaXMgYSBkYXRhcG9pbnQgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1ucyBUaGUgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICovXG5cdHN0YXRpYyBhZGRUYXJnZXRWYWx1ZUNvbHVtbihcblx0XHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdGV4cG9ydENvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuXHRcdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSxcblx0XHRpbmRleDogbnVtYmVyXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlQ29sdW1uID0gKGNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pPy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghdGhpcy5pc1Byb3BlcnR5RnJvbUV4cG9ydChjb2x1bW4sIGV4cG9ydENvbHVtbnNbaW5kZXhdKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQoY29sdW1uLCBleHBvcnRDb2x1bW5zW2luZGV4XSk7XG5cdFx0fSk7XG5cdFx0aWYgKHRhcmdldFZhbHVlQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5Ub0JlQWRkZWQ6IEV4cG9ydENvbHVtbiA9IHtcblx0XHRcdFx0bGFiZWw6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUYXJnZXRWYWx1ZVwiKSxcblx0XHRcdFx0cHJvcGVydHk6IEFycmF5LmlzQXJyYXkoZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkpXG5cdFx0XHRcdFx0PyBleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eVxuXHRcdFx0XHRcdDogKFtleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eV0gYXMgc3RyaW5nW10pLFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGFyZ2V0VmFsdWVDb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWVcblx0XHRcdH07XG5cdFx0XHRleHBvcnRDb2x1bW5zLnNwbGljZShpbmRleCArIDEsIDAsIGNvbHVtblRvQmVBZGRlZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29sdW1uJ3MgcHJvcGVydHkgY29ycmVzcG9uZHMgdG8gdGhlIGV4cG9ydENvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIFdoZXRoZXIgdGhlIGNvbHVtbiBoYXMgdGhlIGV4cG9ydENvbHVtbiBwcm9wZXJ0eVxuXHQgKi9cblx0c3RhdGljIGlzUHJvcGVydHlGcm9tRXhwb3J0KGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdGNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGV4cG9ydENvbHVtbi5wcm9wZXJ0eSB8fFxuXHRcdFx0ZXhwb3J0Q29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKGNvbHVtbi5yZWxhdGl2ZVBhdGgpIHx8XG5cdFx0XHRleHBvcnRDb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSAmJiBleHBvcnRDb2x1bW4ucHJvcGVydHlbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eUluZm9zWzBdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgYSBjb2x1bW4gdGhhdCBpcyB0byBiZSBleHBvcnRlZCBhbmQgY29udGFpbnMgYSBEYXRhUG9pbnQgd2l0aCBhIGZpeGVkIHRhcmdldCB2YWx1ZSBuZWVkcyB0byBiZSBhZGRlZC5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gY29sdW1uRXhwb3J0IFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2VkIGNvbHVtbiBoYXMgZGVmaW5lZCBhIHRhcmdldFZhbHVlIGZvciB0aGUgZGF0YVBvaW50LCBmYWxzZSBlbHNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkKGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBjb2x1bW5FeHBvcnQ6IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGxldCBjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IGZhbHNlO1xuXHRcdGlmIChjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgJiYgY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly9BZGQgVGFyZ2V0VmFsdWUgY29sdW1uIHdoZW4gZXhwb3J0aW5nIG9uIHNwbGl0IG1vZGVcblx0XHRcdC8vIHBhcnQgb2YgYSBGaWVsZEdyb3VwIG9yIGZyb20gYSBsaW5lSXRlbSBvciBmcm9tIGEgY29sdW1uIG9uIHRoZSBlbnRpdHlTZXRcblx0XHRcdGRlbGV0ZSBjb2x1bW5FeHBvcnQudGVtcGxhdGU7XG5cdFx0XHRjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBjb2x1bW5OZWVkc1RvQmVBZGRlZDtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUF3Q0E7RUFBQSxJQWFxQkEsV0FBVztJQUFBLFNBQUFBLFlBQUE7SUFBQUMsUUFBQSxHQUFBRCxXQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixXQUFBLENBQUFHLFNBQUE7SUFBQUQsTUFBQSxDQUsvQkUsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNDLFVBQW9CLEVBQVE7TUFDdEM7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFILE1BQUEsQ0FJQUksbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsV0FBa0MsRUFBUTtNQUM3RCxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxXQUFXO0lBQ3BDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBTCxNQUFBLENBS01PLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FBQSxFQUFpRDtNQUNwRTtNQUNBLElBQUksQ0FBQ0MsV0FBVyxHQUFH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
@@ -10,6 +10,7 @@ import {
10
10
  import { getLocalizedText } from "sap/fe/core/helpers/ResourceModelHelper";
11
11
  import { type CollectionBindingInfo } from "sap/fe/macros/CollectionBindingInfo";
12
12
  import Library from "sap/ui/core/Lib";
13
+ import type { TextAlign } from "sap/ui/core/library";
13
14
  import type MDCTable from "sap/ui/mdc/Table";
14
15
  import { type Table$BeforeExportEvent } from "sap/ui/mdc/Table";
15
16
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
@@ -20,7 +21,7 @@ type ExportColumn = {
20
21
  label: string;
21
22
  columnId?: string;
22
23
  width?: number;
23
- textAlign?: string;
24
+ textAlign?: TextAlign;
24
25
  displayUnit?: boolean;
25
26
  trueValue?: string;
26
27
  falseValue?: string;
@@ -37,14 +38,16 @@ type UserExportSettings = {
37
38
  splitCells?: boolean;
38
39
  };
39
40
 
41
+ // The type ExportSettings is not exported from "sap/ui/export/library" so we need to redefine them here
40
42
  export type ExportSettings = {
41
- fileType?: string;
43
+ fileName?: string;
42
44
  dataSource: {
43
45
  dataUrl: string;
44
46
  sizeLimit?: number;
45
47
  };
46
48
  workbook: {
47
49
  columns: ExportColumn[];
50
+ context?: { sheetName?: string };
48
51
  };
49
52
  };
50
53
 
@@ -177,14 +180,32 @@ export default class TableExport implements IInterfaceWithMixin {
177
180
  this.setExportConfig(columns, exportColumns, index);
178
181
  this.addTargetValueColumn(columns, exportColumns, resourceBundle, index);
179
182
  }
183
+ if (exportColumn.valueMap && typeof exportColumn.valueMap === "string") {
184
+ exportColumn.valueMap = JSON.parse(exportColumn.valueMap);
185
+ }
180
186
  }
181
187
  const tableAPIDownloadUrl = (table.getParent() as ITableBlock & TableExport).downloadUrl;
182
188
  if (tableAPIDownloadUrl) {
183
189
  exportSettings.dataSource.dataUrl = tableAPIDownloadUrl;
184
190
  }
191
+ this.setFileAndSheetName(exportSettings, tableDefinition);
185
192
  return exportSettings;
186
193
  }
187
194
 
195
+ /**
196
+ * Sets the file name and sheet name for the export settings.
197
+ * @param exportSettings The table export settings
198
+ * @param tableDefinition The table definition from the table converter
199
+ */
200
+ static setFileAndSheetName(exportSettings: ExportSettings, tableDefinition: TableVisualization): void {
201
+ if (tableDefinition.control.exportFileName) {
202
+ exportSettings.fileName = tableDefinition.control.exportFileName;
203
+ }
204
+ if (tableDefinition.control.exportSheetName && exportSettings.workbook.context) {
205
+ exportSettings.workbook.context.sheetName = tableDefinition.control.exportSheetName;
206
+ }
207
+ }
208
+
188
209
  /**
189
210
  * Sets the static size limit for the table export.
190
211
  * @param tableDefinition The table definition from the table converter
@@ -203,12 +224,12 @@ export default class TableExport implements IInterfaceWithMixin {
203
224
  }
204
225
 
205
226
  /**
206
- * Sets the translated textual representation of a column with boolean value.
227
+ * Sets the translated textual representation of a column with a Boolean value.
207
228
  * @param exportColumn The column to be exported
208
229
  * @param resourceBundle The resource bundle
209
230
  */
210
231
  static translateBooleanValueForExport(exportColumn: ExportColumn, resourceBundle: ResourceBundle): void {
211
- if (exportColumn.type === "Boolean") {
232
+ if (exportColumn.type === "Boolean" && !(exportColumn.trueValue || exportColumn.falseValue)) {
212
233
  exportColumn.falseValue = resourceBundle.getText("no");
213
234
  exportColumn.trueValue = resourceBundle.getText("yes");
214
235
  }