@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/helpers/BindingHelper", "sap/m/Button", "sap/m/ObjectMarker", "sap/m/Popover", "sap/m/Text", "sap/m/VBox", "sap/m/library", "sap/ui/core/Lib", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (formatMessage, BindingToolkit, ClassSupport, CommonUtils, BuildingBlock, BindingHelper, Button, ObjectMarker, Popover, Text, VBox, library, Library, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
9
9
  var _exports = {};
10
10
  var ObjectMarkerVisibility = library.ObjectMarkerVisibility;
11
11
  var ObjectMarkerType = library.ObjectMarkerType;
@@ -48,6 +48,9 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
48
48
  type: "boolean"
49
49
  }), _dec7 = property({
50
50
  type: "boolean"
51
+ }), _dec8 = property({
52
+ type: "string",
53
+ allowedValues: ["Inline", "Overlay"]
51
54
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
52
55
  function DraftIndicator(properties, others) {
53
56
  var _this;
@@ -61,6 +64,7 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
61
64
  _initializerDefineProperty(_this, "class", _descriptor4, _this);
62
65
  _initializerDefineProperty(_this, "usedInTable", _descriptor5, _this);
63
66
  _initializerDefineProperty(_this, "usedInAnalyticalTable", _descriptor6, _this);
67
+ _initializerDefineProperty(_this, "reactiveAreaMode", _descriptor7, _this);
64
68
  return _this;
65
69
  }
66
70
  _exports = DraftIndicator;
@@ -280,7 +284,8 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
280
284
  visibility: visibility,
281
285
  additionalInfo: this.getIconAndTextAdditionalInfoBindingExpression(),
282
286
  ariaLabelledBy: this.ariaLabelledBy ? this.ariaLabelledBy : [],
283
- class: this.class
287
+ class: this.class,
288
+ reactiveAreaMode: this.reactiveAreaMode
284
289
  });
285
290
  }
286
291
 
@@ -303,7 +308,8 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
303
308
  visibility: ObjectMarkerVisibility.IconOnly,
304
309
  visible: visible,
305
310
  ariaLabelledBy: this.ariaLabelledBy ? this.ariaLabelledBy : [],
306
- class: this.class
311
+ class: this.class,
312
+ reactiveAreaMode: this.reactiveAreaMode
307
313
  });
308
314
  }
309
315
 
@@ -353,8 +359,13 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
353
359
  enumerable: true,
354
360
  writable: true,
355
361
  initializer: null
362
+ }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "reactiveAreaMode", [_dec8], {
363
+ configurable: true,
364
+ enumerable: true,
365
+ writable: true,
366
+ initializer: null
356
367
  }), _class2)) || _class);
357
368
  _exports = DraftIndicator;
358
369
  return _exports;
359
370
  }, false);
360
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdEluZGljYXRvciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsInJlcXVpcmVkIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RHJhZnRJbmRpY2F0b3JUeXBlIiwiaW5kaWNhdG9yIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiSWNvbkFuZFRleHQiLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiRXJyb3IiLCJhZGRBcmlhTGFiZWxsZWRCeUZvckRyYWZ0SW5kaWNhdG9yIiwiZWxlbWVudCIsImFyaWFMYWJlbGxlZEJ5cyIsImNvbnRlbnQiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImFkZEFyaWFMYWJlbGxlZEJ5Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNyZWF0ZUNvbnRlbnQiLCJmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciIsImhhc0RyYWZ0RW50aXR5IiwiZHJhZnRJblByb2Nlc3NCeVVzZXIiLCJkcmFmdExhc3RDaGFuZ2VkQnlVc2VyIiwiZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjIiwiZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MiLCJtYWNyb1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidXNlckRlc2NyaXB0aW9uIiwiZ2V0VGV4dCIsImdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsIm1ldGFEYXRhIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZHJhZnRBZG1pbkVsZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJmaW5kIiwiYSIsIm5hbWUiLCJkcmFmdEFkbWluUHJvcGVydGllcyIsInRhcmdldFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwibWFwIiwib0RyYWZ0QWRtaW5Qcm9wZXJ0eSIsImdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaWZFbHNlIiwibm90IiwiRW50aXR5IiwiSXNBY3RpdmUiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsInBhdGhJbk1vZGVsIiwiSGFzRHJhZnQiLCJpc0VtcHR5IiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsInBhcnRzIiwicGF0aCIsInB1c2giLCJmb3JtYXR0ZXIiLCJjcmVhdGVQb3BvdmVyIiwiY29udHJvbCIsImlzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZyIsImFuZCIsImRyYWZ0V2l0aE5vQ2hhbmdlc1RleHRCaW5kaW5nIiwiaXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZyIsImRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyIsIm1vZGVsIiwiZm9ybWF0TWVzc2FnZSIsImlzQWN0aXZlSW5zdGFuY2VCaW5kaW5nIiwiYWN0aXZlSW5zdGFuY2VUZXh0QmluZGluZyIsInBvcG92ZXIiLCJfanN4IiwiUG9wb3ZlciIsInRpdGxlIiwic2hvd0hlYWRlciIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJlbmRCdXR0b24iLCJCdXR0b24iLCJpY29uIiwicHJlc3MiLCJkcmFmdFBvcG92ZXIiLCJjbG9zZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwidmlzaWJsZSIsIlRleHQiLCJ0ZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiYWRkRGVwZW5kZW50Iiwib25PYmplY3RNYXJrZXJQcmVzc2VkIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJvcGVuQnkiLCJnZXRJY29uQW5kVGV4dEFkZGl0aW9uYWxJbmZvQmluZGluZ0V4cHJlc3Npb24iLCJvckJpbmRpbmdzIiwib3IiLCJnZXRJY29uQW5kVGV4dENvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm9iak1hcmtlclR5cGUiLCJPYmplY3RNYXJrZXJUeXBlIiwiVW5zYXZlZCIsIkRyYWZ0IiwiTG9ja2VkQnkiLCJVbnNhdmVkQnkiLCJGbGFnZ2VkIiwidmlzaWJpbGl0eSIsIlRleHRPbmx5IiwiT2JqZWN0TWFya2VyIiwiYmluZCIsImFkZGl0aW9uYWxJbmZvIiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRJY29uT25seUNvbnRlbnQiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJMb2NrZWQiLCJ1c2VkSW5UYWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsInVuZGVmaW5lZCIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRyYWZ0SW5kaWNhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgZm9ybWF0TWVzc2FnZSBmcm9tIFwic2FwL2Jhc2Uvc3RyaW5ncy9mb3JtYXRNZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBpZkVsc2UsIGlzRW1wdHksIG5vdCwgb3IsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RNYXJrZXIkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RNYXJrZXJcIjtcbmltcG9ydCBPYmplY3RNYXJrZXIgZnJvbSBcInNhcC9tL09iamVjdE1hcmtlclwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgT2JqZWN0TWFya2VyVHlwZSwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRHJhZnRJbmRpY2F0b3IgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpEcmFmdEluZGljYXRvclxuICogaWQ9XCJTb21lSURcIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQHByaXZhdGVcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5kcmFmdEluZGljYXRvci5EcmFmdEluZGljYXRvclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZnRJbmRpY2F0b3IgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPENvbnRyb2w+IHtcblx0LyoqXG5cdCAqIElEIG9mIHRoZSBEcmFmdEluZGljYXRvclxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBpZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGRyYWZ0SW5kaWNhdG9yVHlwZT86IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHkgfCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0ID0gT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dDtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0Y29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBjbGFzcyA9IFwiXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgdXNlZEluVGFibGU/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHVzZWRJbkFuYWx5dGljYWxUYWJsZT86IGJvb2xlYW47XG5cblx0ZHJhZnRQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGlzSGlkZGVuRHJhZnRFbmFibGVkPzogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPERyYWZ0SW5kaWNhdG9yPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdH1cblxuXHRzZXREcmFmdEluZGljYXRvclR5cGUoXG5cdFx0aW5kaWNhdG9yOiBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dCB8IE9iamVjdE1hcmtlclZpc2liaWxpdHkuVGV4dE9ubHlcblx0KTogdm9pZCB7XG5cdFx0aWYgKFtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5LCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0XS5pbmNsdWRlcyhpbmRpY2F0b3IpKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZHJhZnRJbmRpY2F0b3JUeXBlXCIsIGluZGljYXRvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQWxsb3dlZCB2YWx1ZSAke2luZGljYXRvcn0gZG9lcyBub3QgbWF0Y2hgKTtcblx0XHR9XG5cdH1cblxuXHRhZGRBcmlhTGFiZWxsZWRCeUZvckRyYWZ0SW5kaWNhdG9yKGVsZW1lbnQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFyaWFMYWJlbGxlZEJ5cyA9ICh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBPYmplY3RNYXJrZXIpPy5nZXRBcmlhTGFiZWxsZWRCeSgpID8/IFtdO1xuXHRcdGlmICghYXJpYUxhYmVsbGVkQnlzLmluY2x1ZGVzKGVsZW1lbnQpKSB7XG5cdFx0XHQodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgT2JqZWN0TWFya2VyKT8uYWRkQXJpYUxhYmVsbGVkQnkoZWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJ1bnRpbWUgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgY29ycmVjdCB0ZXh0IHRoYXQgZGlzcGxheXMgdGhlIG93bmVyIG9mIGEgZHJhZnQuXG5cdCAqXG5cdCAqIFRoaXMgaXMgdXNlZCBpbiBjYXNlIHRoZSBEcmFmdEluZGljYXRvciBpcyBzaG93biBmb3IgYW4gYWN0aXZlIGVudGl0eSB0aGF0IGhhcyBhIGRyYWZ0IG9mIGFub3RoZXIgdXNlci5cblx0ICogQHBhcmFtIGhhc0RyYWZ0RW50aXR5XG5cdCAqIEBwYXJhbSBkcmFmdEluUHJvY2Vzc0J5VXNlclxuXHQgKiBAcGFyYW0gZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlclxuXHQgKiBAcGFyYW0gZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjXG5cdCAqIEBwYXJhbSBkcmFmdExhc3RDaGFuZ2VkQnlVc2VyRGVzY1xuXHQgKiBAcmV0dXJucyBUZXh0IHRvIGRpc3BsYXlcblx0ICovXG5cdHN0YXRpYyBmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3Zlcihcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlXG5cdFx0dGhpczogdm9pZCxcblx0XHRoYXNEcmFmdEVudGl0eTogYm9vbGVhbixcblx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlcjogc3RyaW5nLFxuXHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXI6IHN0cmluZyxcblx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2M6IHN0cmluZyxcblx0XHRkcmFmdExhc3RDaGFuZ2VkQnlVc2VyRGVzYzogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbWFjcm9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpO1xuXHRcdGlmICghbWFjcm9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGlmIChoYXNEcmFmdEVudGl0eSkge1xuXHRcdFx0Y29uc3QgdXNlckRlc2NyaXB0aW9uID1cblx0XHRcdFx0ZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjIHx8IGRyYWZ0SW5Qcm9jZXNzQnlVc2VyIHx8IGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjIHx8IGRyYWZ0TGFzdENoYW5nZWRCeVVzZXI7XG5cblx0XHRcdGlmICghdXNlckRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9VTlNBVkVEX0NIQU5HRVNfQllfVU5LTk9XTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkcmFmdEluUHJvY2Vzc0J5VXNlclxuXHRcdFx0XHRcdD8gbWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUVMRF9SVU5USU1FX0RSQUZUX1BPUE9WRVJfTE9DS0VEX0JZX0tOT1dOXCIsIFt1c2VyRGVzY3JpcHRpb25dKVxuXHRcdFx0XHRcdDogbWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUVMRF9SVU5USU1FX0RSQUZUX1BPUE9WRVJfVU5TQVZFRF9DSEFOR0VTX0JZX0tOT1dOXCIsIFt1c2VyRGVzY3JpcHRpb25dKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG1hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklFTERfUlVOVElNRV9EUkFGVF9QT1BPVkVSX05PX0RBVEFfVEVYVFwiKTtcblx0XHR9XG5cdH1cblxuXHQvKioqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGVudGl0eSBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIGVudGl0eSBzZXRcblx0ICpcblx0ICogQHJldHVybnMgTGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtZXRhRGF0YTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdFBhdGgodGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbkVsZW1lbnQgPSBtZXRhRGF0YT8udGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChhKSA9PiBhLm5hbWUgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik7XG5cdFx0Y29uc3QgZHJhZnRBZG1pblByb3BlcnRpZXMgPSBkcmFmdEFkbWluRWxlbWVudD8udGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBkcmFmdEFkbWluUHJvcGVydGllcz8ubWFwKChvRHJhZnRBZG1pblByb3BlcnR5KSA9PiBvRHJhZnRBZG1pblByb3BlcnR5Lm5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRleHQgZGlzcGxheWVkIGFzIHRpdGxlIG9mIHRoZSBwb3B1cC5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0UG9wb3ZlclRpdGxlQmluZGluZ0V4cHJlc3Npb24oKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+IHtcblx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0bm90KEVudGl0eS5Jc0FjdGl2ZSksXG5cdFx0XHR0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdD8gcGF0aEluTW9kZWwoXCJNX0RSQUZUX1BPUE9WRVJfQURNSU5fVU5TQVZFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQ6IHBhdGhJbk1vZGVsKFwiTV9DT01NT05fRFJBRlRfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIiksXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdEVudGl0eS5IYXNEcmFmdCxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG5vdChpc0VtcHR5KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKSksXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJNX0NPTU1PTl9EUkFGVF9MT0NLRURfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIiksXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJNX0RSQUZUX1BPUE9WRVJfQURNSU5fVU5TQVZFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLmRyYWZ0SW5kaWNhdG9yVHlwZSA9PT0gT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dFxuXHRcdFx0XHRcdD8gXCIgXCJcblx0XHRcdFx0XHQ6IHBhdGhJbk1vZGVsKFwiQ19EUkFGVF9QT1BPVkVSX0FETUlOX0RBVEFfRFJBRlRJTkZPX0ZMQUdHRURfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIilcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRleHQgZGlzcGxheWVkIHRvIGlkZW50aWZ5IHRoZSBkcmFmdCBvd25lciBpbiB0aGUgcG9wdXAuXG5cdCAqIFRoaXMgYmluZGluZyBpcyBjb25maWd1cmVkIHRvIGNhbGwgZm9ybWF0RHJhZnRPd25lclRleHRJblBvcG92ZXIgYXQgcnVudGltZS5cblx0ICpcblx0ICogV2UgY2Fubm90IHJlZmVyZW5jZSBmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciBkaXJlY3RseSBhcyB3ZSBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgcGFzcyBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgZXhpc3Qgb3Igbm90LFxuXHQgKiBhbmQgcmVmZXJyaW5nIHRvIG5vbi1leGlzdGluZyBwcm9wZXJ0aWVzIGZhaWxzIHRoZSBiaW5kaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXREcmFmdE93bmVyVGV4dEJpbmRpbmdFeHByZXNzaW9uKCk6IHtcblx0XHRwYXJ0czogdW5rbm93bltdO1xuXHRcdGZvcm1hdHRlcjogKFxuXHRcdFx0aGFzRHJhZnRFbnRpdHk6IGJvb2xlYW4sXG5cdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlcjogc3RyaW5nLFxuXHRcdFx0ZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjogc3RyaW5nLFxuXHRcdFx0ZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjOiBzdHJpbmcsXG5cdFx0XHRkcmFmdExhc3RDaGFuZ2VkQnlVc2VyRGVzYzogc3RyaW5nXG5cdFx0KSA9PiBzdHJpbmc7XG5cdH0ge1xuXHRcdGNvbnN0IGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyA9IHRoaXMuZ2V0RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzKCk7XG5cblx0XHRjb25zdCBwYXJ0cyA9IFtcblx0XHRcdHsgcGF0aDogXCJIYXNEcmFmdEVudGl0eVwiLCB0YXJnZXRUeXBlOiBcImFueVwiIH0sXG5cdFx0XHR7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIgfSxcblx0XHRcdHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiIH1cblx0XHRdO1xuXHRcdGlmIChkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXM/LmluY2x1ZGVzKFwiSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdHBhcnRzLnB1c2goeyBwYXRoOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uXCIgfSk7XG5cdFx0fVxuXHRcdGlmIChkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXM/LmluY2x1ZGVzKFwiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiKSkge1xuXHRcdFx0cGFydHMucHVzaCh7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiIH0pO1xuXHRcdH1cblxuXHRcdC8vcGFydHMucHVzaCh7cGF0aDogXCJzYXAuZmUuaTE4bj5cIn0pXG5cblx0XHRyZXR1cm4geyBwYXJ0cywgZm9ybWF0dGVyOiBEcmFmdEluZGljYXRvci5mb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBwb3BvdmVyIGNvbnRyb2wgdG8gZGlzcGxheSBkcmFmdCBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCB0aGF0IHRoZSBwb3BvdmVyIGlzIHRvIGJlIGNyZWF0ZWQgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHBvcG92ZXIgY29udHJvbFxuXHQgKi9cblx0Y3JlYXRlUG9wb3Zlcihjb250cm9sOiBDb250cm9sKTogUG9wb3ZlciB7XG5cdFx0Y29uc3QgaXNEcmFmdFdpdGhOb0NoYW5nZXNCaW5kaW5nID0gYW5kKG5vdChFbnRpdHkuSXNBY3RpdmUpLCBpc0VtcHR5KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIpKSk7XG5cdFx0Y29uc3QgZHJhZnRXaXRoTm9DaGFuZ2VzVGV4dEJpbmRpbmcgPVxuXHRcdFx0dGhpcy5kcmFmdEluZGljYXRvclR5cGUgPT09IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHRcblx0XHRcdFx0PyBwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9HRU5FUklDX0xPQ0tFRF9PQkpFQ1RfUE9QT1ZFUl9URVhUXCIsIFwic2FwLmZlLmkxOG5cIilcblx0XHRcdFx0OiBwYXRoSW5Nb2RlbChcIkNfRFJBRlRfUE9QT1ZFUl9BRE1JTl9EQVRBX0RSQUZUSU5GT19QT1BPVkVSX05PX0RBVEFfVEVYVFwiLCBcInNhcC5mZS5pMThuXCIpO1xuXG5cdFx0Y29uc3QgaXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZyA9IGFuZChcblx0XHRcdG5vdChFbnRpdHkuSXNBY3RpdmUpLFxuXHRcdFx0bm90KGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIikpKVxuXHRcdCk7XG5cdFx0Y29uc3QgZHJhZnRXaXRoQ2hhbmdlc1RleHRCaW5kaW5nID0ge1xuXHRcdFx0cGFydHM6IFtcblx0XHRcdFx0eyBwYXRoOiBcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9MQVNUX0NIQU5HRV9URVhUXCIsIG1vZGVsOiBcInNhcC5mZS5pMThuXCIgfSxcblx0XHRcdFx0eyBwYXRoOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiIH1cblx0XHRcdF0sXG5cdFx0XHRmb3JtYXR0ZXI6IGZvcm1hdE1lc3NhZ2Vcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNBY3RpdmVJbnN0YW5jZUJpbmRpbmcgPSBhbmQoRW50aXR5LklzQWN0aXZlLCBub3QoaXNFbXB0eShwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiKSkpKTtcblx0XHRjb25zdCBhY3RpdmVJbnN0YW5jZVRleHRCaW5kaW5nID0geyAuLi5kcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmcgfTtcblxuXHRcdGNvbnN0IHBvcG92ZXI6IFBvcG92ZXIgPSAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRQb3BvdmVyVGl0bGVCaW5kaW5nRXhwcmVzc2lvbigpfVxuXHRcdFx0XHRzaG93SGVhZGVyPXt0cnVlfVxuXHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZz17ZmFsc2V9XG5cdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0cGxhY2VtZW50PXtcIkF1dG9cIn1cblx0XHRcdFx0ZW5kQnV0dG9uPXtcblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9kZWNsaW5lXCJ9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kcmFmdFBvcG92ZXI/LmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkgYXMgQnV0dG9uXG5cdFx0XHRcdH1cblx0XHRcdD5cblx0XHRcdFx0PFZCb3ggY2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifT5cblx0XHRcdFx0XHQ8VkJveCB2aXNpYmxlPXtpc0RyYWZ0V2l0aE5vQ2hhbmdlc0JpbmRpbmd9PlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD17ZHJhZnRXaXRoTm9DaGFuZ2VzVGV4dEJpbmRpbmd9IC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzRHJhZnRXaXRoQ2hhbmdlc0JpbmRpbmd9PlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD17ZHJhZnRXaXRoQ2hhbmdlc1RleHRCaW5kaW5nfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHQ8VkJveCB2aXNpYmxlPXtpc0FjdGl2ZUluc3RhbmNlQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXt0aGlzLmdldERyYWZ0T3duZXJUZXh0QmluZGluZ0V4cHJlc3Npb24oKX0gLz5cblx0XHRcdFx0XHRcdDxUZXh0IGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5Ub3BcIn0gdGV4dD17YWN0aXZlSW5zdGFuY2VUZXh0QmluZGluZ30gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdDwvVkJveD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpIGFzIFBvcG92ZXI7XG5cblx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNvbnRyb2wpLmFkZERlcGVuZGVudChwb3BvdmVyKTtcblx0XHRyZXR1cm4gcG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHByZXNzaW5nIG9mIHRoZSBvYmplY3QgbWFya2VyIGJ5IG9wZW5pbmcgYSBjb3JyZXNwb25kaW5nIHBvcG92ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIHByZXNzIGV2ZW50XG5cdCAqL1xuXHRvbk9iamVjdE1hcmtlclByZXNzZWQoZXZlbnQ6IE9iamVjdE1hcmtlciRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBzb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdHRoaXMuZHJhZnRQb3BvdmVyID8/PSB0aGlzLmNyZWF0ZVBvcG92ZXIoc291cmNlKTtcblxuXHRcdHRoaXMuZHJhZnRQb3BvdmVyLnNldEJpbmRpbmdDb250ZXh0KGJpbmRpbmdDb250ZXh0KTtcblx0XHR0aGlzLmRyYWZ0UG9wb3Zlci5vcGVuQnkoc291cmNlLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgXCJhZGRpdGlvbmFsSW5mb1wiIGF0dHJpYnV0ZSBpbiB0aGUgXCJJY29uQW5kVGV4dFwiIGNhc2UuXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldEljb25BbmRUZXh0QWRkaXRpb25hbEluZm9CaW5kaW5nRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzID0gdGhpcy5nZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTtcblxuXHRcdGNvbnN0IG9yQmluZGluZ3MgPSBbXTtcblx0XHRpZiAoZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzPy5pbmNsdWRlcyhcIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRvckJpbmRpbmdzLnB1c2gocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvblwiKSk7XG5cdFx0fVxuXHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlclwiKSk7XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRvckJpbmRpbmdzLnB1c2gocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIpKTtcblx0XHR9XG5cdFx0b3JCaW5kaW5ncy5wdXNoKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIikpO1xuXG5cdFx0cmV0dXJuIGlmRWxzZTxzdHJpbmc+KEVudGl0eS5IYXNEcmFmdCwgb3IoLi4ub3JCaW5kaW5ncykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhpcyBidWlsZGluZyBibG9jayBmb3IgdGhlIFwiSWNvbkFuZFRleHRcIiB0eXBlLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCB0cmVlXG5cdCAqL1xuXHRnZXRJY29uQW5kVGV4dENvbnRlbnQoKTogT2JqZWN0TWFya2VyIHtcblx0XHR0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0Y29uc3Qgb2JqTWFya2VyVHlwZSA9IHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgPyBPYmplY3RNYXJrZXJUeXBlLlVuc2F2ZWQgOiBPYmplY3RNYXJrZXJUeXBlLkRyYWZ0O1xuXHRcdGNvbnN0IHR5cGUgPSBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdG9iak1hcmtlclR5cGUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdEVudGl0eS5IYXNEcmFmdCxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpLFxuXHRcdFx0XHRcdE9iamVjdE1hcmtlclR5cGUuTG9ja2VkQnksXG5cdFx0XHRcdFx0aWZFbHNlKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIiksIE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZEJ5LCBPYmplY3RNYXJrZXJUeXBlLlVuc2F2ZWQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdE9iamVjdE1hcmtlclR5cGUuRmxhZ2dlZFxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaWZFbHNlKG5vdChFbnRpdHkuSGFzRHJhZnQpLCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5LlRleHRPbmx5LCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0TWFya2VyXG5cdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdHByZXNzPXt0aGlzLm9uT2JqZWN0TWFya2VyUHJlc3NlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHR2aXNpYmlsaXR5PXt2aXNpYmlsaXR5fVxuXHRcdFx0XHRhZGRpdGlvbmFsSW5mbz17dGhpcy5nZXRJY29uQW5kVGV4dEFkZGl0aW9uYWxJbmZvQmluZGluZ0V4cHJlc3Npb24oKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnkgPyB0aGlzLmFyaWFMYWJlbGxlZEJ5IDogW119XG5cdFx0XHRcdGNsYXNzPXt0aGlzLmNsYXNzfVxuXHRcdFx0Lz5cblx0XHQpIGFzIE9iamVjdE1hcmtlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoaXMgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZSBcIkljb25Pbmx5XCIgdHlwZS5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0SWNvbk9ubHlDb250ZW50KCk6IE9iamVjdE1hcmtlciB7XG5cdFx0Y29uc3QgdHlwZSA9IGlmRWxzZShcblx0XHRcdG5vdChFbnRpdHkuSXNBY3RpdmUpLFxuXHRcdFx0T2JqZWN0TWFya2VyVHlwZS5EcmFmdCxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0ISF0aGlzLnVzZWRJbkFuYWx5dGljYWxUYWJsZSxcblx0XHRcdFx0XHRPYmplY3RNYXJrZXJUeXBlLkxvY2tlZCxcblx0XHRcdFx0XHRpZkVsc2UocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiksIE9iamVjdE1hcmtlclR5cGUuTG9ja2VkLCBPYmplY3RNYXJrZXJUeXBlLlVuc2F2ZWQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdE9iamVjdE1hcmtlclR5cGUuRmxhZ2dlZFxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRsZXQgdmlzaWJsZTtcblx0XHRpZiAodGhpcy51c2VkSW5UYWJsZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dmlzaWJsZSA9IG9yKG5vdChFbnRpdHkuSXNBY3RpdmUpLCBhbmQoRW50aXR5LklzQWN0aXZlLCBFbnRpdHkuSGFzRHJhZnQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgRW50aXR5Lkhhc0RyYWZ0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyBjb250ZXh0IGF0IGFsbCwgc28gZG9uJ3Qgc2hvdyB0aGUgaW5kaWNhdG9yXG5cdFx0XHR2aXNpYmxlID0gYW5kKFxuXHRcdFx0XHRub3QoaXNFbXB0eShFbnRpdHkuSGFzRHJhZnQpKSxcblx0XHRcdFx0bm90KFVJLklzRWRpdGFibGUpLFxuXHRcdFx0XHRFbnRpdHkuSGFzRHJhZnQsXG5cdFx0XHRcdG5vdChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZVwiKSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RNYXJrZXJcblx0XHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdFx0cHJlc3M9eyF0aGlzLnVzZWRJbkFuYWx5dGljYWxUYWJsZSA/IHRoaXMub25PYmplY3RNYXJrZXJQcmVzc2VkLmJpbmQodGhpcykgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHZpc2liaWxpdHk9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdHZpc2libGU9e3Zpc2libGV9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5ID8gdGhpcy5hcmlhTGFiZWxsZWRCeSA6IFtdfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5jbGFzc31cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCB0cmVlXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdE1hcmtlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJY29uQW5kVGV4dENvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0SWNvbk9ubHlDb250ZW50KCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFWQSxJQVlxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUs1REMsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdESCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEcsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREwsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBR0ROLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUdEUCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFKLElBQUEsQ0FBQVcsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBT0YsU0FBQWQsZUFBWWUsVUFBMkQsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDbkdBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9BQU1ILFVBQVUsRUFBRUMsTUFBTSxDQUFDO01BdkMxQjtBQUNEO0FBQ0E7TUFGQ0csMEJBQUEsQ0FBQUYsS0FBQSxRQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSx3QkFBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsaUJBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLFdBQUFNLFlBQUEsRUFBQU4sS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGlCQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSwyQkFBQVEsWUFBQSxFQUFBUixLQUFBO01BQUEsT0FBQUEsS0FBQTtJQXdDQTtJQUFDUyxRQUFBLEdBQUExQixjQUFBO0lBQUEyQixjQUFBLENBQUEzQixjQUFBLEVBQUFjLGNBQUE7SUFBQSxJQUFBYyxNQUFBLEdBQUE1QixjQUFBLENBQUE2QixTQUFBO0lBQUFELE1BQUEsQ0FFREUscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FDcEJDLFNBQWlILEVBQzFHO01BQ1AsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0MsUUFBUSxFQUFFRCxzQkFBc0IsQ0FBQ0UsV0FBVyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0osU0FBUyxDQUFDLEVBQUU7UUFDOUYsSUFBSSxDQUFDSyxXQUFXLENBQUMsb0JBQW9CLEVBQUVMLFNBQVMsQ0FBQztNQUNsRCxDQUFDLE1BQU07UUFDTixNQUFNLElBQUlNLEtBQUssQ0FBQyxpQkFBaUJOLFNBQVMsaUJBQWlCLENBQUM7TUFDN0Q7SUFDRCxDQUFDO0lBQUFILE1BQUEsQ0FFRFUsa0NBQWtDLEdBQWxDLFNBQUFBLGtDQUFrQ0EsQ0FBQ0MsT0FBZSxFQUFRO01BQ3pELE1BQU1DLGVBQWUsR0FBSSxJQUFJLENBQUNDLE9BQU8sRUFBOEJDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFO01BQzVGLElBQUksQ0FBQ0YsZUFBZSxDQUFDTCxRQUFRLENBQUNJLE9BQU8sQ0FBQyxFQUFFO1FBQ3RDLElBQUksQ0FBQ0UsT0FBTyxFQUE4QkUsaUJBQWlCLENBQUNKLE9BQU8sQ0FBQztNQUN0RTtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFYLE1BQUEsQ0FHQWdCLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBUztNQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDSCxPQUFPLEVBQUU7UUFDbEIsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSSxDQUFDSSxhQUFhLENBQUMsQ0FBQztNQUNwQztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FWQztJQUFBN0MsY0FBQSxDQVdPOEMsNkJBQTZCLEdBQXBDLFNBQU9BLDZCQUE2QkEsQ0FHbkNDLGNBQXVCLEVBQ3ZCQyxvQkFBNEIsRUFDNUJDLHNCQUE4QixFQUM5QkMsd0JBQWdDLEVBQ2hDQywwQkFBa0MsRUFDekI7TUFDVCxNQUFNQyxtQkFBbUIsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUM7TUFDekUsSUFBSSxDQUFDRixtQkFBbUIsRUFBRTtRQUN6QixPQUFPLEVBQUU7TUFDVjtNQUNBLElBQUlMLGNBQWMsRUFBRTtRQUNuQixNQUFNUSxlQUFlLEdBQ3BCTCx3QkFBd0IsSUFBSUYsb0JBQW9CLElBQUlHLDBCQUEwQixJQUFJRixzQkFBc0I7UUFFekcsSUFBSSxDQUFDTSxlQUFlLEVBQUU7VUFDckIsT0FBT0gsbUJBQW1CLENBQUNJLE9BQU8sQ0FBQywwREFBMEQsQ0FBQztRQUMvRixDQUFDLE1BQU07VUFDTixPQUFPUixvQkFBb0IsR0FDeEJJLG1CQUFtQixDQUFDSSxPQUFPLENBQUMsK0NBQStDLEVBQUUsQ0FBQ0QsZUFBZSxDQUFDLENBQUMsR0FDL0ZILG1CQUFtQixDQUFDSSxPQUFPLENBQUMsd0RBQXdELEVBQUUsQ0FBQ0QsZUFBZSxDQUFDLENBQUM7UUFDNUc7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPSCxtQkFBbUIsQ0FBQ0ksT0FBTyxDQUFDLDRDQUE0QyxDQUFDO01BQ2pGO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE1QixNQUFBLENBS0E2QixvQ0FBb0MsR0FBcEMsU0FBQUEsb0NBQW9DQSxDQUFBLEVBQXlCO01BQzVELE1BQU1DLFFBQW1ELEdBQUcsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQztNQUN6RyxNQUFNQyxpQkFBaUIsR0FBR0gsUUFBUSxFQUFFSSxnQkFBZ0IsQ0FBQ0Msb0JBQW9CLENBQUNDLElBQUksQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNDLElBQUksS0FBSyx5QkFBeUIsQ0FBQztNQUMzSCxNQUFNQyxvQkFBb0IsR0FBR04saUJBQWlCLEVBQUVPLFVBQVUsQ0FBQ0MsZ0JBQWdCO01BQzNFLE9BQU9GLG9CQUFvQixFQUFFRyxHQUFHLENBQUVDLG1CQUFtQixJQUFLQSxtQkFBbUIsQ0FBQ0wsSUFBSSxDQUFDO0lBQ3BGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXRDLE1BQUEsQ0FJQTRDLGdDQUFnQyxHQUFoQyxTQUFBQSxnQ0FBZ0NBLENBQUEsRUFBNEM7TUFDM0UsT0FBT0MsTUFBTSxDQUNaQyxHQUFHLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQ3BCLElBQUksQ0FBQ0Msb0JBQW9CLEdBQ3RCQyxXQUFXLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUFDLEdBQ2xFQSxXQUFXLENBQUMsdUJBQXVCLEVBQUUsYUFBYSxDQUFDLEVBQ3RETCxNQUFNLENBQ0xFLE1BQU0sQ0FBQ0ksUUFBUSxFQUNmTixNQUFNLENBQ0xDLEdBQUcsQ0FBQ00sT0FBTyxDQUFDRixXQUFXLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDLEVBQ3BFQSxXQUFXLENBQUMsOEJBQThCLEVBQUUsYUFBYSxDQUFDLEVBQzFEQSxXQUFXLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUNsRSxDQUFDLEVBQ0QsSUFBSSxDQUFDRyxrQkFBa0IsS0FBS2pELHNCQUFzQixDQUFDRSxXQUFXLEdBQzNELEdBQUcsR0FDSDRDLFdBQVcsQ0FBQyxxREFBcUQsRUFBRSxhQUFhLENBQ3BGLENBQ0QsQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBbEQsTUFBQSxDQVFBc0Qsa0NBQWtDLEdBQWxDLFNBQUFBLGtDQUFrQ0EsQ0FBQSxFQVNoQztNQUNELE1BQU1DLGlDQUFpQyxHQUFHLElBQUksQ0FBQzFCLG9DQUFvQyxDQUFDLENBQUM7TUFFckYsTUFBTTJCLEtBQUssR0FBRyxDQUNiO1FBQUVDLElBQUksRUFBRSxnQkFBZ0I7UUFBRWpCLFVBQVUsRUFBRTtNQUFNLENBQUMsRUFDN0M7UUFBRWlCLElBQUksRUFBRTtNQUEwQyxDQUFDLEVBQ25EO1FBQUVBLElBQUksRUFBRTtNQUE0QyxDQUFDLENBQ3JEO01BQ0QsSUFBSUYsaUNBQWlDLEVBQUVoRCxRQUFRLENBQUMsNEJBQTRCLENBQUMsRUFBRTtRQUM5RWlELEtBQUssQ0FBQ0UsSUFBSSxDQUFDO1VBQUVELElBQUksRUFBRTtRQUFxRCxDQUFDLENBQUM7TUFDM0U7TUFDQSxJQUFJRixpQ0FBaUMsRUFBRWhELFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO1FBQ2hGaUQsS0FBSyxDQUFDRSxJQUFJLENBQUM7VUFBRUQsSUFBSSxFQUFFO1FBQXVELENBQUMsQ0FBQztNQUM3RTs7TUFFQTs7TUFFQSxPQUFPO1FBQUVELEtBQUs7UUFBRUcsU0FBUyxFQUFFdkYsY0FBYyxDQUFDOEM7TUFBOEIsQ0FBQztJQUMxRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWxCLE1BQUEsQ0FLQTRELGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFDQyxPQUFnQixFQUFXO01BQ3hDLE1BQU1DLDJCQUEyQixHQUFHQyxHQUFHLENBQUNqQixHQUFHLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQUVJLE9BQU8sQ0FBQ0YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQztNQUNqSSxNQUFNYyw2QkFBNkIsR0FDbEMsSUFBSSxDQUFDWCxrQkFBa0IsS0FBS2pELHNCQUFzQixDQUFDRSxXQUFXLEdBQzNENEMsV0FBVyxDQUFDLDBEQUEwRCxFQUFFLGFBQWEsQ0FBQyxHQUN0RkEsV0FBVyxDQUFDLDJEQUEyRCxFQUFFLGFBQWEsQ0FBQztNQUUzRixNQUFNZSx5QkFBeUIsR0FBR0YsR0FBRyxDQUNwQ2pCLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFDcEJGLEdBQUcsQ0FBQ00sT0FBTyxDQUFDRixXQUFXLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUN2RSxDQUFDO01BQ0QsTUFBTWdCLDJCQUEyQixHQUFHO1FBQ25DVixLQUFLLEVBQUUsQ0FDTjtVQUFFQyxJQUFJLEVBQUUsd0NBQXdDO1VBQUVVLEtBQUssRUFBRTtRQUFjLENBQUMsRUFDeEU7VUFBRVYsSUFBSSxFQUFFO1FBQTZDLENBQUMsQ0FDdEQ7UUFDREUsU0FBUyxFQUFFUztNQUNaLENBQUM7TUFFRCxNQUFNQyx1QkFBdUIsR0FBR04sR0FBRyxDQUFDaEIsTUFBTSxDQUFDQyxRQUFRLEVBQUVGLEdBQUcsQ0FBQ00sT0FBTyxDQUFDRixXQUFXLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0gsTUFBTW9CLHlCQUF5QixHQUFHO1FBQUUsR0FBR0o7TUFBNEIsQ0FBQztNQUVwRSxNQUFNSyxPQUFnQixHQUNyQkMsSUFBQSxDQUFDQyxPQUFPO1FBQ1BDLEtBQUssRUFBRSxJQUFJLENBQUM5QixnQ0FBZ0MsQ0FBQyxDQUFFO1FBQy9DK0IsVUFBVSxFQUFFLElBQUs7UUFDakJDLGlCQUFpQixFQUFFLEtBQU07UUFDekJDLEtBQUssRUFBRSxxQkFBc0I7UUFDN0JDLFNBQVMsRUFBRSxNQUFPO1FBQ2xCQyxTQUFTLEVBRVBQLElBQUEsQ0FBQ1EsTUFBTTtVQUNOQyxJQUFJLEVBQUUsb0JBQXFCO1VBQzNCQyxLQUFLLEVBQUVBLENBQUEsS0FBWTtZQUNsQixJQUFJLENBQUNDLFlBQVksRUFBRUMsS0FBSyxDQUFDLENBQUM7VUFDM0I7UUFBRSxDQUNGLENBRUY7UUFBQUMsUUFBQSxFQUVEQyxLQUFBLENBQUNDLElBQUk7VUFBQ1YsS0FBSyxFQUFFLHFCQUFzQjtVQUFBUSxRQUFBLEdBQ2xDYixJQUFBLENBQUNlLElBQUk7WUFBQ0MsT0FBTyxFQUFFMUIsMkJBQTRCO1lBQUF1QixRQUFBLEVBQzFDYixJQUFBLENBQUNpQixJQUFJO2NBQUNDLElBQUksRUFBRTFCO1lBQThCLENBQUU7VUFBQyxDQUN4QyxDQUFDLEVBQ1BRLElBQUEsQ0FBQ2UsSUFBSTtZQUFDQyxPQUFPLEVBQUV2Qix5QkFBMEI7WUFBQW9CLFFBQUEsRUFDeENiLElBQUEsQ0FBQ2lCLElBQUk7Y0FBQ0MsSUFBSSxFQUFFeEI7WUFBNEIsQ0FBRTtVQUFDLENBQ3RDLENBQUMsRUFDUG9CLEtBQUEsQ0FBQ0MsSUFBSTtZQUFDQyxPQUFPLEVBQUVuQix1QkFBd0I7WUFBQWdCLFFBQUEsR0FDdENiLElBQUEsQ0FBQ2lCLElBQUk7Y0FBQ0MsSUFBSSxFQUFFLElBQUksQ0FBQ3BDLGtDQUFrQyxDQUFDO1lBQUUsQ0FBRSxDQUFDLEVBQ3pEa0IsSUFBQSxDQUFDaUIsSUFBSTtjQUFDWixLQUFLLEVBQUUscUJBQXNCO2NBQUNhLElBQUksRUFBRXBCO1lBQTBCLENBQUUsQ0FBQztVQUFBLENBQ2xFLENBQUM7UUFBQSxDQUNGO01BQUMsQ0FDQyxDQUNFO01BRVpxQixXQUFXLENBQUNDLGFBQWEsQ0FBQy9CLE9BQU8sQ0FBQyxDQUFDZ0MsWUFBWSxDQUFDdEIsT0FBTyxDQUFDO01BQ3hELE9BQU9BLE9BQU87SUFDZjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF2RSxNQUFBLENBSUE4RixxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFDQyxLQUE4QixFQUFRO01BQzNELE1BQU1DLE1BQU0sR0FBR0QsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztNQUNoQyxNQUFNQyxjQUFjLEdBQUdGLE1BQU0sQ0FBQ0csaUJBQWlCLENBQUMsQ0FBbUI7TUFFbkUsSUFBSSxDQUFDaEIsWUFBWSxLQUFLLElBQUksQ0FBQ3ZCLGFBQWEsQ0FBQ29DLE1BQU0sQ0FBQztNQUVoRCxJQUFJLENBQUNiLFlBQVksQ0FBQ2lCLGlCQUFpQixDQUFDRixjQUFjLENBQUM7TUFDbkQsSUFBSSxDQUFDZixZQUFZLENBQUNrQixNQUFNLENBQUNMLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBaEcsTUFBQSxDQUlBc0csNkNBQTZDLEdBQTdDLFNBQUFBLDZDQUE2Q0EsQ0FBQSxFQUFxQztNQUNqRixNQUFNL0MsaUNBQWlDLEdBQUcsSUFBSSxDQUFDMUIsb0NBQW9DLENBQUMsQ0FBQztNQUVyRixNQUFNMEUsVUFBVSxHQUFHLEVBQUU7TUFDckIsSUFBSWhELGlDQUFpQyxFQUFFaEQsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEVBQUU7UUFDOUVnRyxVQUFVLENBQUM3QyxJQUFJLENBQUNSLFdBQVcsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO01BQ25GO01BQ0FxRCxVQUFVLENBQUM3QyxJQUFJLENBQUNSLFdBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO01BQ3ZFLElBQUlLLGlDQUFpQyxFQUFFaEQsUUFBUSxDQUFDLDhCQUE4QixDQUFDLEVBQUU7UUFDaEZnRyxVQUFVLENBQUM3QyxJQUFJLENBQUNSLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO01BQ3JGO01BQ0FxRCxVQUFVLENBQUM3QyxJQUFJLENBQUNSLFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO01BRXpFLE9BQU9MLE1BQU0sQ0FBU0UsTUFBTSxDQUFDSSxRQUFRLEVBQUVxRCxFQUFFLENBQUMsR0FBR0QsVUFBVSxDQUFDLEVBQXNDLEVBQUUsQ0FBQztJQUNsRzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF2RyxNQUFBLENBSUF5RyxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFBLEVBQWlCO01BQ3JDLElBQUksQ0FBQ3hELG9CQUFvQixHQUFJLElBQUksQ0FBQ3lELGVBQWUsQ0FBQyxDQUFDLEVBQUVDLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUM1R0MsT0FBTztNQUNWLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUM5RCxvQkFBb0IsR0FBRytELGdCQUFnQixDQUFDQyxPQUFPLEdBQUdELGdCQUFnQixDQUFDRSxLQUFLO01BQ25HLE1BQU16SSxJQUFJLEdBQUdvRSxNQUFNLENBQ2xCQyxHQUFHLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQ3BCK0QsYUFBYSxFQUNibEUsTUFBTSxDQUNMRSxNQUFNLENBQUNJLFFBQVEsRUFDZk4sTUFBTSxDQUNMSyxXQUFXLENBQUMseUNBQXlDLENBQUMsRUFDdEQ4RCxnQkFBZ0IsQ0FBQ0csUUFBUSxFQUN6QnRFLE1BQU0sQ0FBQ0ssV0FBVyxDQUFDLDJDQUEyQyxDQUFDLEVBQUU4RCxnQkFBZ0IsQ0FBQ0ksU0FBUyxFQUFFSixnQkFBZ0IsQ0FBQ0MsT0FBTyxDQUN0SCxDQUFDLEVBQ0RELGdCQUFnQixDQUFDSyxPQUNsQixDQUNELENBQUM7TUFFRCxNQUFNQyxVQUFVLEdBQUd6RSxNQUFNLENBQUNDLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDSSxRQUFRLENBQUMsRUFBRS9DLHNCQUFzQixDQUFDbUgsUUFBUSxFQUFFbkgsc0JBQXNCLENBQUNFLFdBQVcsQ0FBQztNQUVwSCxPQUNDa0UsSUFBQSxDQUFDZ0QsWUFBWTtRQUNaL0ksSUFBSSxFQUFFQSxJQUFLO1FBQ1h5RyxLQUFLLEVBQUUsSUFBSSxDQUFDWSxxQkFBcUIsQ0FBQzJCLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDN0NILFVBQVUsRUFBRUEsVUFBVztRQUN2QkksY0FBYyxFQUFFLElBQUksQ0FBQ3BCLDZDQUE2QyxDQUFDLENBQUU7UUFDckVxQixjQUFjLEVBQUUsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSSxDQUFDQSxjQUFjLEdBQUcsRUFBRztRQUMvRDlDLEtBQUssRUFBRSxJQUFJLENBQUNBO01BQU0sQ0FDbEIsQ0FBQztJQUVKOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdFLE1BQUEsQ0FJQTRILGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUEsRUFBaUI7TUFDbEMsTUFBTW5KLElBQUksR0FBR29FLE1BQU0sQ0FDbEJDLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFDcEJnRSxnQkFBZ0IsQ0FBQ0UsS0FBSyxFQUN0QnJFLE1BQU0sQ0FDTEUsTUFBTSxDQUFDSSxRQUFRLEVBQ2ZOLE1BQU0sQ0FDTCxDQUFDLENBQUMsSUFBSSxDQUFDZ0YscUJBQXFCLEVBQzVCYixnQkFBZ0IsQ0FBQ2MsTUFBTSxFQUN2QmpGLE1BQU0sQ0FBQ0ssV0FBVyxDQUFDLHlDQUF5QyxDQUFDLEVBQUU4RCxnQkFBZ0IsQ0FBQ2MsTUFBTSxFQUFFZCxnQkFBZ0IsQ0FBQ0MsT0FBTyxDQUNqSCxDQUFDLEVBQ0RELGdCQUFnQixDQUFDSyxPQUNsQixDQUNELENBQUM7TUFFRCxJQUFJN0IsT0FBTztNQUNYLElBQUksSUFBSSxDQUFDdUMsV0FBVyxLQUFLLElBQUksRUFBRTtRQUM5QnZDLE9BQU8sR0FBR2dCLEVBQUUsQ0FBQzFELEdBQUcsQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFBRWUsR0FBRyxDQUFDaEIsTUFBTSxDQUFDQyxRQUFRLEVBQUVELE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLENBQUM7TUFDMUUsQ0FBQyxNQUFNO1FBQ047UUFDQXFDLE9BQU8sR0FBR3pCLEdBQUcsQ0FDWmpCLEdBQUcsQ0FBQ00sT0FBTyxDQUFDTCxNQUFNLENBQUNJLFFBQVEsQ0FBQyxDQUFDLEVBQzdCTCxHQUFHLENBQUNrRixFQUFFLENBQUNDLFVBQVUsQ0FBQyxFQUNsQmxGLE1BQU0sQ0FBQ0ksUUFBUSxFQUNmTCxHQUFHLENBQUNJLFdBQVcsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUM5RCxDQUFDO01BQ0Y7TUFFQSxPQUNDc0IsSUFBQSxDQUFDZ0QsWUFBWTtRQUNaL0ksSUFBSSxFQUFFQSxJQUFLO1FBQ1h5RyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMyQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMvQixxQkFBcUIsQ0FBQzJCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBR1MsU0FBVTtRQUN2RlosVUFBVSxFQUFFbEgsc0JBQXNCLENBQUNDLFFBQVM7UUFDNUNtRixPQUFPLEVBQUVBLE9BQVE7UUFDakJtQyxjQUFjLEVBQUUsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSSxDQUFDQSxjQUFjLEdBQUcsRUFBRztRQUMvRDlDLEtBQUssRUFBRSxJQUFJLENBQUNBO01BQU0sQ0FDbEIsQ0FBQztJQUVKOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdFLE1BQUEsQ0FJQWlCLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFBLEVBQTZCO01BQ3pDLElBQUksSUFBSSxDQUFDb0Msa0JBQWtCLEtBQUtqRCxzQkFBc0IsQ0FBQ0UsV0FBVyxFQUFFO1FBQ25FLE9BQU8sSUFBSSxDQUFDbUcscUJBQXFCLENBQUMsQ0FBQztNQUNwQyxDQUFDLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQ21CLGtCQUFrQixDQUFDLENBQUM7TUFDakM7SUFDRCxDQUFDO0lBQUEsT0FBQXhKLGNBQUE7RUFBQSxFQWxYMEMrSixhQUFhLEdBQUEzSSxXQUFBLEdBQUE0SSx5QkFBQSxDQUFBbkosT0FBQSxDQUFBZ0IsU0FBQSxTQUFBMUIsS0FBQTtJQUFBOEosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUEvSSxZQUFBLEdBQUEySSx5QkFBQSxDQUFBbkosT0FBQSxDQUFBZ0IsU0FBQSx5QkFBQXZCLEtBQUE7SUFBQTJKLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BWTJDcEksc0JBQXNCLENBQUNFLFdBQVc7SUFBQTtFQUFBLElBQUFaLFlBQUEsR0FBQTBJLHlCQUFBLENBQUFuSixPQUFBLENBQUFnQixTQUFBLGtCQUFBdEIsS0FBQTtJQUFBMEosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE3SSxZQUFBLEdBQUF5SSx5QkFBQSxDQUFBbkosT0FBQSxDQUFBZ0IsU0FBQSxZQUFBcEIsS0FBQTtJQUFBd0osWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FXdEgsRUFBRTtJQUFBO0VBQUEsSUFBQTVJLFlBQUEsR0FBQXdJLHlCQUFBLENBQUFuSixPQUFBLENBQUFnQixTQUFBLGtCQUFBbkIsS0FBQTtJQUFBdUosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUEzSSxZQUFBLEdBQUF1SSx5QkFBQSxDQUFBbkosT0FBQSxDQUFBZ0IsU0FBQSw0QkFBQWxCLEtBQUE7SUFBQXNKLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdkosT0FBQSxNQUFBRCxNQUFBO0VBQUFjLFFBQUEsR0FBQTFCLGNBQUE7RUFBQSxPQUFBMEIsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdEluZGljYXRvciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsInJlcXVpcmVkIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJhbGxvd2VkVmFsdWVzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RHJhZnRJbmRpY2F0b3JUeXBlIiwiaW5kaWNhdG9yIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiSWNvbkFuZFRleHQiLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiRXJyb3IiLCJhZGRBcmlhTGFiZWxsZWRCeUZvckRyYWZ0SW5kaWNhdG9yIiwiZWxlbWVudCIsImFyaWFMYWJlbGxlZEJ5cyIsImNvbnRlbnQiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImFkZEFyaWFMYWJlbGxlZEJ5Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNyZWF0ZUNvbnRlbnQiLCJmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciIsImhhc0RyYWZ0RW50aXR5IiwiZHJhZnRJblByb2Nlc3NCeVVzZXIiLCJkcmFmdExhc3RDaGFuZ2VkQnlVc2VyIiwiZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjIiwiZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MiLCJtYWNyb1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidXNlckRlc2NyaXB0aW9uIiwiZ2V0VGV4dCIsImdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsIm1ldGFEYXRhIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZHJhZnRBZG1pbkVsZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJmaW5kIiwiYSIsIm5hbWUiLCJkcmFmdEFkbWluUHJvcGVydGllcyIsInRhcmdldFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwibWFwIiwib0RyYWZ0QWRtaW5Qcm9wZXJ0eSIsImdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaWZFbHNlIiwibm90IiwiRW50aXR5IiwiSXNBY3RpdmUiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsInBhdGhJbk1vZGVsIiwiSGFzRHJhZnQiLCJpc0VtcHR5IiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsInBhcnRzIiwicGF0aCIsInB1c2giLCJmb3JtYXR0ZXIiLCJjcmVhdGVQb3BvdmVyIiwiY29udHJvbCIsImlzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZyIsImFuZCIsImRyYWZ0V2l0aE5vQ2hhbmdlc1RleHRCaW5kaW5nIiwiaXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZyIsImRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyIsIm1vZGVsIiwiZm9ybWF0TWVzc2FnZSIsImlzQWN0aXZlSW5zdGFuY2VCaW5kaW5nIiwiYWN0aXZlSW5zdGFuY2VUZXh0QmluZGluZyIsInBvcG92ZXIiLCJfanN4IiwiUG9wb3ZlciIsInRpdGxlIiwic2hvd0hlYWRlciIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJlbmRCdXR0b24iLCJCdXR0b24iLCJpY29uIiwicHJlc3MiLCJkcmFmdFBvcG92ZXIiLCJjbG9zZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwidmlzaWJsZSIsIlRleHQiLCJ0ZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiYWRkRGVwZW5kZW50Iiwib25PYmplY3RNYXJrZXJQcmVzc2VkIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJvcGVuQnkiLCJnZXRJY29uQW5kVGV4dEFkZGl0aW9uYWxJbmZvQmluZGluZ0V4cHJlc3Npb24iLCJvckJpbmRpbmdzIiwib3IiLCJnZXRJY29uQW5kVGV4dENvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm9iak1hcmtlclR5cGUiLCJPYmplY3RNYXJrZXJUeXBlIiwiVW5zYXZlZCIsIkRyYWZ0IiwiTG9ja2VkQnkiLCJVbnNhdmVkQnkiLCJGbGFnZ2VkIiwidmlzaWJpbGl0eSIsIlRleHRPbmx5IiwiT2JqZWN0TWFya2VyIiwiYmluZCIsImFkZGl0aW9uYWxJbmZvIiwiYXJpYUxhYmVsbGVkQnkiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZ2V0SWNvbk9ubHlDb250ZW50IiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiTG9ja2VkIiwidXNlZEluVGFibGUiLCJVSSIsIklzRWRpdGFibGUiLCJ1bmRlZmluZWQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEcmFmdEluZGljYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGZvcm1hdE1lc3NhZ2UgZnJvbSBcInNhcC9iYXNlL3N0cmluZ3MvZm9ybWF0TWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgaWZFbHNlLCBpc0VtcHR5LCBub3QsIG9yLCBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgT2JqZWN0TWFya2VyJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vT2JqZWN0TWFya2VyXCI7XG5pbXBvcnQgT2JqZWN0TWFya2VyIGZyb20gXCJzYXAvbS9PYmplY3RNYXJrZXJcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclR5cGUsIE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIERyYWZ0SW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RHJhZnRJbmRpY2F0b3JcbiAqIGlkPVwiU29tZUlEXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZHJhZnRJbmRpY2F0b3IuRHJhZnRJbmRpY2F0b3JcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWZ0SW5kaWNhdG9yIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgRHJhZnRJbmRpY2F0b3Jcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBkcmFmdEluZGljYXRvclR5cGU/OiBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dCA9IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQ7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY2xhc3MgPSBcIlwiO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHVzZWRJblRhYmxlPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyB1c2VkSW5BbmFseXRpY2FsVGFibGU/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIklubGluZVwiLCBcIk92ZXJsYXlcIl0gfSlcblx0cmVhY3RpdmVBcmVhTW9kZT86IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIjtcblxuXHRkcmFmdFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgaXNIaWRkZW5EcmFmdEVuYWJsZWQ/OiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RHJhZnRJbmRpY2F0b3I+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdHNldERyYWZ0SW5kaWNhdG9yVHlwZShcblx0XHRpbmRpY2F0b3I6IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHkgfCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5UZXh0T25seVxuXHQpOiB2b2lkIHtcblx0XHRpZiAoW09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHRdLmluY2x1ZGVzKGluZGljYXRvcikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkcmFmdEluZGljYXRvclR5cGVcIiwgaW5kaWNhdG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbGxvd2VkIHZhbHVlICR7aW5kaWNhdG9yfSBkb2VzIG5vdCBtYXRjaGApO1xuXHRcdH1cblx0fVxuXG5cdGFkZEFyaWFMYWJlbGxlZEJ5Rm9yRHJhZnRJbmRpY2F0b3IoZWxlbWVudDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnlzID0gKHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIE9iamVjdE1hcmtlcik/LmdldEFyaWFMYWJlbGxlZEJ5KCkgPz8gW107XG5cdFx0aWYgKCFhcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoZWxlbWVudCkpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBPYmplY3RNYXJrZXIpPy5hZGRBcmlhTGFiZWxsZWRCeShlbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVudGltZSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBjb3JyZWN0IHRleHQgdGhhdCBkaXNwbGF5cyB0aGUgb3duZXIgb2YgYSBkcmFmdC5cblx0ICpcblx0ICogVGhpcyBpcyB1c2VkIGluIGNhc2UgdGhlIERyYWZ0SW5kaWNhdG9yIGlzIHNob3duIGZvciBhbiBhY3RpdmUgZW50aXR5IHRoYXQgaGFzIGEgZHJhZnQgb2YgYW5vdGhlciB1c2VyLlxuXHQgKiBAcGFyYW0gaGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdExhc3RDaGFuZ2VkQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2Ncblx0ICogQHBhcmFtIGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjXG5cdCAqIEByZXR1cm5zIFRleHQgdG8gZGlzcGxheVxuXHQgKi9cblx0c3RhdGljIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcblx0XHR0aGlzOiB2b2lkLFxuXHRcdGhhc0RyYWZ0RW50aXR5OiBib29sZWFuLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0ZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjogc3RyaW5nLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyRGVzYzogc3RyaW5nLFxuXHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBtYWNyb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIik7XG5cdFx0aWYgKCFtYWNyb1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0aWYgKGhhc0RyYWZ0RW50aXR5KSB7XG5cdFx0XHRjb25zdCB1c2VyRGVzY3JpcHRpb24gPVxuXHRcdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2MgfHwgZHJhZnRJblByb2Nlc3NCeVVzZXIgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjtcblxuXHRcdFx0aWYgKCF1c2VyRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuIG1hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklFTERfUlVOVElNRV9EUkFGVF9QT1BPVkVSX1VOU0FWRURfQ0hBTkdFU19CWV9VTktOT1dOXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdFx0XHRcdFx0PyBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9MT0NLRURfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pXG5cdFx0XHRcdFx0OiBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9VTlNBVkVEX0NIQU5HRVNfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUVMRF9SVU5USU1FX0RSQUZUX1BPUE9WRVJfTk9fREFUQV9URVhUXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZW50aXR5IGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gZW50aXR5IHNldFxuXHQgKlxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIHByb3BlcnR5IG5hbWVzXG5cdCAqL1xuXHRnZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFEYXRhOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCh0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBkcmFmdEFkbWluRWxlbWVudCA9IG1ldGFEYXRhPy50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKGEpID0+IGEubmFtZSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRjb25zdCBkcmFmdEFkbWluUHJvcGVydGllcyA9IGRyYWZ0QWRtaW5FbGVtZW50Py50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIGRyYWZ0QWRtaW5Qcm9wZXJ0aWVzPy5tYXAoKG9EcmFmdEFkbWluUHJvcGVydHkpID0+IG9EcmFmdEFkbWluUHJvcGVydHkubmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgYXMgdGl0bGUgb2YgdGhlIHBvcHVwLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRQb3BvdmVyVGl0bGVCaW5kaW5nRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4ge1xuXHRcdHJldHVybiBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0PyBwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdDogcGF0aEluTW9kZWwoXCJNX0NPTU1PTl9EUkFGVF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0bm90KGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIikpKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fQ09NTU9OX0RSQUZUX0xPQ0tFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0XG5cdFx0XHRcdFx0PyBcIiBcIlxuXHRcdFx0XHRcdDogcGF0aEluTW9kZWwoXCJDX0RSQUZUX1BPUE9WRVJfQURNSU5fREFUQV9EUkFGVElORk9fRkxBR0dFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgdG8gaWRlbnRpZnkgdGhlIGRyYWZ0IG93bmVyIGluIHRoZSBwb3B1cC5cblx0ICogVGhpcyBiaW5kaW5nIGlzIGNvbmZpZ3VyZWQgdG8gY2FsbCBmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciBhdCBydW50aW1lLlxuXHQgKlxuXHQgKiBXZSBjYW5ub3QgcmVmZXJlbmNlIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIGRpcmVjdGx5IGFzIHdlIG5lZWQgdG8gY29uZGl0aW9uYWxseSBwYXNzIHByb3BlcnRpZXMgdGhhdCBtaWdodCBleGlzdCBvciBub3QsXG5cdCAqIGFuZCByZWZlcnJpbmcgdG8gbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMgZmFpbHMgdGhlIGJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldERyYWZ0T3duZXJUZXh0QmluZGluZ0V4cHJlc3Npb24oKToge1xuXHRcdHBhcnRzOiB1bmtub3duW107XG5cdFx0Zm9ybWF0dGVyOiAoXG5cdFx0XHRoYXNEcmFmdEVudGl0eTogYm9vbGVhbixcblx0XHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdExhc3RDaGFuZ2VkQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2M6IHN0cmluZyxcblx0XHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0XHQpID0+IHN0cmluZztcblx0fSB7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzID0gdGhpcy5nZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTtcblxuXHRcdGNvbnN0IHBhcnRzID0gW1xuXHRcdFx0eyBwYXRoOiBcIkhhc0RyYWZ0RW50aXR5XCIsIHRhcmdldFR5cGU6IFwiYW55XCIgfSxcblx0XHRcdHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiB9LFxuXHRcdFx0eyBwYXRoOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCIgfVxuXHRcdF07XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvblwiKSkge1xuXHRcdFx0cGFydHMucHVzaCh7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIiB9KTtcblx0XHR9XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXJ0cy5wdXNoKHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIgfSk7XG5cdFx0fVxuXG5cdFx0Ly9wYXJ0cy5wdXNoKHtwYXRoOiBcInNhcC5mZS5pMThuPlwifSlcblxuXHRcdHJldHVybiB7IHBhcnRzLCBmb3JtYXR0ZXI6IERyYWZ0SW5kaWNhdG9yLmZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHBvcG92ZXIgY29udHJvbCB0byBkaXNwbGF5IGRyYWZ0IGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIHRoYXQgdGhlIHBvcG92ZXIgaXMgdG8gYmUgY3JlYXRlZCBmb3Jcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcG9wb3ZlciBjb250cm9sXG5cdCAqL1xuXHRjcmVhdGVQb3BvdmVyKGNvbnRyb2w6IENvbnRyb2wpOiBQb3BvdmVyIHtcblx0XHRjb25zdCBpc0RyYWZ0V2l0aE5vQ2hhbmdlc0JpbmRpbmcgPSBhbmQobm90KEVudGl0eS5Jc0FjdGl2ZSksIGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIikpKTtcblx0XHRjb25zdCBkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZyA9XG5cdFx0XHR0aGlzLmRyYWZ0SW5kaWNhdG9yVHlwZSA9PT0gT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dFxuXHRcdFx0XHQ/IHBhdGhJbk1vZGVsKFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0dFTkVSSUNfTE9DS0VEX09CSkVDVF9QT1BPVkVSX1RFWFRcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQ6IHBhdGhJbk1vZGVsKFwiQ19EUkFGVF9QT1BPVkVSX0FETUlOX0RBVEFfRFJBRlRJTkZPX1BPUE9WRVJfTk9fREFUQV9URVhUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cblx0XHRjb25zdCBpc0RyYWZ0V2l0aENoYW5nZXNCaW5kaW5nID0gYW5kKFxuXHRcdFx0bm90KEVudGl0eS5Jc0FjdGl2ZSksXG5cdFx0XHRub3QoaXNFbXB0eShwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiKSkpXG5cdFx0KTtcblx0XHRjb25zdCBkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmcgPSB7XG5cdFx0XHRwYXJ0czogW1xuXHRcdFx0XHR7IHBhdGg6IFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0xBU1RfQ0hBTkdFX1RFWFRcIiwgbW9kZWw6IFwic2FwLmZlLmkxOG5cIiB9LFxuXHRcdFx0XHR7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIgfVxuXHRcdFx0XSxcblx0XHRcdGZvcm1hdHRlcjogZm9ybWF0TWVzc2FnZVxuXHRcdH07XG5cblx0XHRjb25zdCBpc0FjdGl2ZUluc3RhbmNlQmluZGluZyA9IGFuZChFbnRpdHkuSXNBY3RpdmUsIG5vdChpc0VtcHR5KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIpKSkpO1xuXHRcdGNvbnN0IGFjdGl2ZUluc3RhbmNlVGV4dEJpbmRpbmcgPSB7IC4uLmRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyB9O1xuXG5cdFx0Y29uc3QgcG9wb3ZlcjogUG9wb3ZlciA9IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uKCl9XG5cdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1wiQXV0b1wifVxuXHRcdFx0XHRlbmRCdXR0b249e1xuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2RlY2xpbmVcIn1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyYWZ0UG9wb3Zlcj8uY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSBhcyBCdXR0b25cblx0XHRcdFx0fVxuXHRcdFx0PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZ30gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0PFZCb3ggdmlzaWJsZT17aXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmd9IC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzQWN0aXZlSW5zdGFuY2VCaW5kaW5nfT5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbigpfSAvPlxuXHRcdFx0XHRcdFx0PFRleHQgY2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcFwifSB0ZXh0PXthY3RpdmVJbnN0YW5jZVRleHRCaW5kaW5nfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3ZlcjtcblxuXHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdHJldHVybiBwb3BvdmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgcHJlc3Npbmcgb2YgdGhlIG9iamVjdCBtYXJrZXIgYnkgb3BlbmluZyBhIGNvcnJlc3BvbmRpbmcgcG9wb3Zlci5cblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgcHJlc3MgZXZlbnRcblx0ICovXG5cdG9uT2JqZWN0TWFya2VyUHJlc3NlZChldmVudDogT2JqZWN0TWFya2VyJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIgPz89IHRoaXMuY3JlYXRlUG9wb3Zlcihzb3VyY2UpO1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIuc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXHRcdHRoaXMuZHJhZnRQb3BvdmVyLm9wZW5CeShzb3VyY2UsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBcImFkZGl0aW9uYWxJbmZvXCIgYXR0cmlidXRlIGluIHRoZSBcIkljb25BbmRUZXh0XCIgY2FzZS5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0SWNvbkFuZFRleHRBZGRpdGlvbmFsSW5mb0JpbmRpbmdFeHByZXNzaW9uKCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0XHRjb25zdCBkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMgPSB0aGlzLmdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcygpO1xuXG5cdFx0Y29uc3Qgb3JCaW5kaW5ncyA9IFtdO1xuXHRcdGlmIChkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXM/LmluY2x1ZGVzKFwiSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uXCIpKTtcblx0XHR9XG5cdFx0b3JCaW5kaW5ncy5wdXNoKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKTtcblx0XHRpZiAoZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzPy5pbmNsdWRlcyhcIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpO1xuXHRcdH1cblx0XHRvckJpbmRpbmdzLnB1c2gocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSk7XG5cblx0XHRyZXR1cm4gaWZFbHNlPHN0cmluZz4oRW50aXR5Lkhhc0RyYWZ0LCBvciguLi5vckJpbmRpbmdzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uQW5kVGV4dFwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25BbmRUZXh0Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRjb25zdCBvYmpNYXJrZXJUeXBlID0gdGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA/IE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZCA6IE9iamVjdE1hcmtlclR5cGUuRHJhZnQ7XG5cdFx0Y29uc3QgdHlwZSA9IGlmRWxzZShcblx0XHRcdG5vdChFbnRpdHkuSXNBY3RpdmUpLFxuXHRcdFx0b2JqTWFya2VyVHlwZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiksXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWRCeSxcblx0XHRcdFx0XHRpZkVsc2UocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkQnksIE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZClcblx0XHRcdFx0KSxcblx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5GbGFnZ2VkXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBpZkVsc2Uobm90KEVudGl0eS5IYXNEcmFmdCksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuVGV4dE9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RNYXJrZXJcblx0XHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdFx0cHJlc3M9e3RoaXMub25PYmplY3RNYXJrZXJQcmVzc2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHZpc2liaWxpdHk9e3Zpc2liaWxpdHl9XG5cdFx0XHRcdGFkZGl0aW9uYWxJbmZvPXt0aGlzLmdldEljb25BbmRUZXh0QWRkaXRpb25hbEluZm9CaW5kaW5nRXhwcmVzc2lvbigpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuY2xhc3N9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e3RoaXMucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uT25seVwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25Pbmx5Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdGNvbnN0IHR5cGUgPSBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdE9iamVjdE1hcmtlclR5cGUuRHJhZnQsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdEVudGl0eS5IYXNEcmFmdCxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdCEhdGhpcy51c2VkSW5BbmFseXRpY2FsVGFibGUsXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWQsXG5cdFx0XHRcdFx0aWZFbHNlKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpLCBPYmplY3RNYXJrZXJUeXBlLkxvY2tlZCwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRPYmplY3RNYXJrZXJUeXBlLkZsYWdnZWRcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0bGV0IHZpc2libGU7XG5cdFx0aWYgKHRoaXMudXNlZEluVGFibGUgPT09IHRydWUpIHtcblx0XHRcdHZpc2libGUgPSBvcihub3QoRW50aXR5LklzQWN0aXZlKSwgYW5kKEVudGl0eS5Jc0FjdGl2ZSwgRW50aXR5Lkhhc0RyYWZ0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIEVudGl0eS5IYXNEcmFmdCBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gY29udGV4dCBhdCBhbGwsIHNvIGRvbid0IHNob3cgdGhlIGluZGljYXRvclxuXHRcdFx0dmlzaWJsZSA9IGFuZChcblx0XHRcdFx0bm90KGlzRW1wdHkoRW50aXR5Lkhhc0RyYWZ0KSksXG5cdFx0XHRcdG5vdChVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRub3QocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIikpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0TWFya2VyXG5cdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdHByZXNzPXshdGhpcy51c2VkSW5BbmFseXRpY2FsVGFibGUgPyB0aGlzLm9uT2JqZWN0TWFya2VyUHJlc3NlZC5iaW5kKHRoaXMpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR2aXNpYmlsaXR5PXtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5fVxuXHRcdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuY2xhc3N9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e3RoaXMucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCB0cmVlXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdE1hcmtlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJY29uQW5kVGV4dENvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0SWNvbk9ubHlDb250ZW50KCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFWQSxJQVlxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUs1REMsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdESCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEcsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREwsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBR0ROLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUdEUCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFPLEtBQUEsR0FHRFIsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxRQUFRO0lBQUVRLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTO0VB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
@@ -68,6 +68,9 @@ export default class DraftIndicator extends BuildingBlock<Control> {
68
68
  })
69
69
  public usedInAnalyticalTable?: boolean;
70
70
 
71
+ @property({ type: "string", allowedValues: ["Inline", "Overlay"] })
72
+ reactiveAreaMode?: "Inline" | "Overlay";
73
+
71
74
  draftPopover?: Popover;
72
75
 
73
76
  private isHiddenDraftEnabled?: boolean;
@@ -345,6 +348,7 @@ export default class DraftIndicator extends BuildingBlock<Control> {
345
348
  additionalInfo={this.getIconAndTextAdditionalInfoBindingExpression()}
346
349
  ariaLabelledBy={this.ariaLabelledBy ? this.ariaLabelledBy : []}
347
350
  class={this.class}
351
+ reactiveAreaMode={this.reactiveAreaMode}
348
352
  />
349
353
  ) as ObjectMarker;
350
354
  }
@@ -389,6 +393,7 @@ export default class DraftIndicator extends BuildingBlock<Control> {
389
393
  visible={visible}
390
394
  ariaLabelledBy={this.ariaLabelledBy ? this.ariaLabelledBy : []}
391
395
  class={this.class}
396
+ reactiveAreaMode={this.reactiveAreaMode}
392
397
  />
393
398
  ) as ObjectMarker;
394
399
  }
@@ -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/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper"], function (Log, CommonUtils, MetaModelConverter, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper", "../valuehelp/ValueHelpDelegate"], function (Log, CommonUtils, MetaModelConverter, Component, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper, ValueHelpDelegate) {
6
6
  "use strict";
7
7
 
8
8
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
@@ -198,17 +198,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
198
198
  * @param config Configuration Object
199
199
  * @returns Object containing description, key, and payload. If it is not available right now (must be requested), a <code>Promise</code> is returned
200
200
  */
201
- getItemForValue: function (field, valueHelp, config) {
201
+ getItemForValue: async function (field, valueHelp, config) {
202
202
  //BCP: 2270162887 . The MDC field should not try to get the item when the field is emptied
203
203
  // JIRA: FIORITECHP1-25361 - Improve the type-ahead behavior for missinng text annotation or constraints violations of the existing text annotation
204
204
  if (config.value === "") {
205
205
  return;
206
206
  }
207
207
  if (config.checkDescription) {
208
- const valuehelpPayload = valueHelp.getPayload();
209
- const descriptionPath = valuehelpPayload.valueHelpDescriptionPath;
210
- const maxLength = valuehelpPayload?.maxLength;
211
- const valueLength = config.value !== null && config.value !== undefined ? config.value.toString().length : 0;
208
+ const container = valueHelp.getTypeahead();
209
+ const payload = valueHelp.getPayload();
210
+ const selectedContent = container.getSelectedContent();
211
+ const contentId = selectedContent && selectedContent.getId();
212
+ // In cases where getItemForValue is called before showValueList, the description may not be available.
213
+ // Therefore, this retrieveContent method is used to update the description.
214
+ await ValueHelpDelegate.retrieveContent(valueHelp, container, contentId);
215
+ const maxLength = payload.maxLength;
216
+ const valueLength = config.value?.toString().length || 0;
217
+ const descriptionPath = payload.valueHelpDescriptionPath;
212
218
  if (descriptionPath === "") {
213
219
  // In case the property value help collection has no text annotation (descriptionPath is empty) the description check shouldn´t occur.
214
220
  // In such a case the method getDescription will be called by MDC and within this method a SideEffect is requested to retrieve the text from the text property of the main entity
@@ -256,7 +262,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
256
262
  * @param _type Type of the value
257
263
  * @returns Description for the key or object containing a description, key and payload. If the description is not available right away (it must be requested), a <code>Promise</code> is returned
258
264
  */
259
- getDescription: async function (field, valueHelp, key, _conditionIn, _conditionOut, bindingContext, _ConditionModel, _conditionModelName, conditionPayload, control, _type) {
265
+ getDescription: async function (field, valueHelp, key, _conditionIn, _conditionOut, bindingContext, _ConditionModel, _conditionModelName, conditionPayload, control, _type, emptyAllowed) {
260
266
  //JIRA: FIORITECHP1-22022 . The MDC field should not tries to determine description with the initial GET of the data.
261
267
  // it should rely on the data we already received from the backend
262
268
  // But The getDescription function is also called in the FilterField case if a variant is loaded.
@@ -272,6 +278,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
272
278
  }
273
279
  if (payload?.retrieveTextFromValueList === true || payload?.isFilterField === true) {
274
280
  const dataModel = valueHelp.getModel();
281
+ const owner = Component.getOwnerComponentFor(valueHelp);
282
+ // If neither dataModel nor owner is defined, the valueHelp cannot be an FE control.
283
+ // This occurs in cases of a standard MDC controls (e.g., default ValueHelp for boolean values).
284
+ if (!dataModel && !owner) {
285
+ return FieldBaseDelegate.getDescription(field, valueHelp, key, _conditionIn, _conditionOut, bindingContext, undefined, undefined, conditionPayload, control, _type, emptyAllowed);
286
+ }
275
287
  const metaModel = dataModel ? dataModel.getMetaModel() : CommonUtils.getAppComponent(valueHelp).getModel().getMetaModel();
276
288
  const valuehelpPayload = valueHelp.getPayload();
277
289
  const valuehelpConditionPayload = conditionPayload?.[valuehelpPayload.valueHelpQualifier];
@@ -350,4 +362,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
350
362
  }
351
363
  });
352
364
  }, false);
353
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImdldFBheWxvYWQiLCJkZXNjcmlwdGlvblBhdGgiLCJ2YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGgiLCJtYXhMZW5ndGgiLCJ2YWx1ZUxlbmd0aCIsInRvU3RyaW5nIiwiX2dldEZpbHRlckJhciIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsImdldENvbnRlbnQiLCJnZXREZXNjcmlwdGlvbiIsIl9jb25kaXRpb25JbiIsIl9jb25kaXRpb25PdXQiLCJfQ29uZGl0aW9uTW9kZWwiLCJfY29uZGl0aW9uTW9kZWxOYW1lIiwiY29udHJvbCIsIl90eXBlIiwiZ2V0RGlzcGxheSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJpc0ZpbHRlckZpZWxkIiwiZGF0YU1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhTW9kZWwiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsInZhbHVlSGVscFF1YWxpZmllciIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5RGVzY3JpcHRpb25QYXRoIiwidGV4dFByb3BlcnR5IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJmaWx0ZXJCYXIiLCJmaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyU3RhdGUiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ2YWx1ZUhlbHBQYXJhbWV0ZXJzIiwiRXJyb3IiLCJ0ZXh0QW5ub3RhdGlvbiIsIiRQYXRoIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsIiRzZWxlY3QiLCJjb250ZXh0cyIsInJlcXVlc3RDb250ZXh0cyIsImxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic2lkZUVmZmVjdFBhdGgiLCJzdWJzdHJpbmciLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJMb2ciLCJ3YXJuaW5nIiwiZXh0ZXJuYWxJZFBhdGgiLCJleHRlcm5hbElkRnVsbFBhdGgiLCJyZXBsYWNlIiwiZXh0ZXJuYWxJZE5hbWUiLCJleHRlcm5hbElkRGVzY3JpcHRpb25QYXRoIiwiZXJyb3IiLCJzdGF0dXMiLCJtZXNzYWdlIiwiU3RyaW5nIiwibXNnIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZEJhc2VEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsIFZhbHVlSGVscFBheWxvYWQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIHsgSXRlbUZvclZhbHVlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHsgdHlwZSBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb25kaXRpb25Nb2RlbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uTW9kZWxcIjtcbmltcG9ydCB0eXBlIEZpZWxkQmFzZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VcIjtcbmltcG9ydCBGaWVsZEJhc2VEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgU2ltcGxlVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL1NpbXBsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvblBheWxvYWRNYXAsIENvbmRpdGlvblBheWxvYWRUeXBlLCBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCIuLi92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIjtcblxuZXhwb3J0IHR5cGUgRmllbGRQYXlsb2FkID0ge1xuXHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0PzogYm9vbGVhbjtcblx0aXNGaWx0ZXJGaWVsZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVHlwZUluaXRpYWxpemF0aW9uID0ge1xuXHRiVHlwZUluaXRpYWxpemVkPzogYm9vbGVhbjtcblx0bUN1c3RvbVVuaXRzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xuXHR2YWx1ZTogVmFsdWU7XG5cdHBhcnNlZFZhbHVlOiBWYWx1ZTtcblx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdGNoZWNrS2V5OiBib29sZWFuO1xuXHRjaGVja0Rlc2NyaXB0aW9uOiBib29sZWFuO1xuXHRjb25kaXRpb25Nb2RlbD86IENvbmRpdGlvbk1vZGVsO1xuXHRjb25kaXRpb25Nb2RlbE5hbWU/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBGaWVsZEJhc2VEZWxlZ2F0ZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXG5cdC8qKlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSW4gVjQtdW5pdCBvciBjdXJyZW5jeSBjYXNlIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIFRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIHR5cGUgbGF0ZXIgb24sIHRoZSBjdXJyZW5jaWVzIG11c3QgYmUgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB2YWx1ZSBHaXZlbiB2YWx1ZVxuXHQgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBpbnRlcm5hbCB0eXBlIChuZWVkcyB0byBzZXQgYlR5cGVJbml0aWFsaXplZCB0byB0cnVlIGlmIGluaXRpYWxpemVkKVxuXHQgKi9cblx0aW5pdGlhbGl6ZVR5cGVGcm9tQmluZGluZzogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCwgdHlwZTogU2ltcGxlVHlwZSB8IHVuZGVmaW5lZCwgdmFsdWU6IFZhbHVlIHwgVmFsdWVbXSkge1xuXHRcdC8vIFY0IFVuaXQgYW5kIEN1cnJlbmN5IHR5cGVzIGhhdmUgYSBtYXAgd2l0aCB2YWxpZCB1bml0cyBhbmQgY3JlYXRlIGFuIGludGVybmFsIGN1c3RvbWl6aW5nIGZvciBpdC5cblx0XHQvLyBUaGUgRmllbGQgbmVlZHMgdG8ga2VlcCB0aGlzIGN1c3RvbWl6aW5nIGxvZ2ljIHdoZW4gY3JlYXRpbmcgdGhlIGludGVybmFsIHR5cGUuXG5cdFx0Ly8gKEFzIGV4dGVybmFsIFJBVyBiaW5kaW5nIGlzIHVzZWQgdGhlcmUgaXMgbm8gZm9ybWF0dGluZyBvbiBwYXJzaW5nLilcblxuXHRcdGNvbnN0IHJlc3VsdDogVHlwZUluaXRpYWxpemF0aW9uID0ge307XG5cdFx0aWYgKFxuXHRcdFx0dHlwZSAmJlxuXHRcdFx0dHlwZS5pc0EoW1wic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiLCBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCJdKSAmJlxuXHRcdFx0QXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+IDIgJiZcblx0XHRcdHZhbHVlWzJdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIGZvcm1hdCBvbmNlIHRvIHNldCBpbnRlcm5hbCBjdXN0b21pemluZy4gQWxsb3cgbnVsbCBhcyB2YWxpZCB2YWx1ZXMgZm9yIGN1c3RvbSB1bml0c1xuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZSh2YWx1ZSwgXCJzdHJpbmdcIik7XG5cdFx0XHRyZXN1bHQuYlR5cGVJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHRyZXN1bHQubUN1c3RvbVVuaXRzID0gdmFsdWVbMl0gYXMgc3RyaW5nOyAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHdheSB0byBwcm92aWRlIGN1c3RvbSB1bml0cyB0byBpbnRlcm5hbCB0eXBlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdW5pdCB0eXBlLlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSWYgdGhlIHR5cGUgaXMgYSBWNCB1bml0IG9yIGN1cnJlbmN5LCBpdCBtaWdodCBuZWVkIHRvIGJlIGZvcm1hdHRlZCBvbmNlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIGZyb20gYmluZGluZ1xuXHQgKiBAcGFyYW0gdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICovXG5cdGluaXRpYWxpemVJbnRlcm5hbFVuaXRUeXBlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlLCB0eXBlSW5pdGlhbGl6YXRpb24/OiBUeXBlSW5pdGlhbGl6YXRpb24pIHtcblx0XHRpZiAodHlwZUluaXRpYWxpemF0aW9uPy5tQ3VzdG9tVW5pdHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gaWYgYWxyZWFkeSBpbml0aWFsaXplZCBpbml0aWFsaXplIG5ldyB0eXBlIHRvby5cblx0XHRcdHR5cGUuZm9ybWF0VmFsdWUoW251bGwsIG51bGwsIHR5cGVJbml0aWFsaXphdGlvbi5tQ3VzdG9tVW5pdHNdLCBcInN0cmluZ1wiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gZW5oYW5jZXMgdGhlIHZhbHVlIHdpdGggdW5pdCBvciBjdXJyZW5jeSBpbmZvcm1hdGlvbiBpZiBuZWVkZWQgYnkgdGhlIGRhdGEgdHlwZS5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtICB2YWx1ZXMgVmFsdWVzXG5cdCAqIEBwYXJhbSAgdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICogQHJldHVybnMgVmFsdWVzXG5cdCAqL1xuXHRlbmhhbmNlVmFsdWVGb3JVbml0OiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZXM6IFZhbHVlW10sIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/LmJUeXBlSW5pdGlhbGl6ZWQgPT09IHRydWUgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dmFsdWVzLnB1c2godHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0cyk7XG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGljaCA8Y29kZT5WYWx1ZUhlbHBEZWxlZ2F0ZTwvY29kZT4gaXMgdXNlZFxuXHQgKiBpZiBhIGRlZmF1bHQgZmllbGQgaGVscCAoZm9yIGV4YW1wbGUsIGZvciBkZWZpbmluZyBjb25kaXRpb25zIGluIDwvY29kZT5GaWx0ZXJGaWVsZDwvY29kZT4pXG5cdCAqIGlzIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSBfZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBEZWxlZ2F0ZSBvYmplY3Qgd2l0aCBuYW1lIGFuZCBwYXlsb2FkXG5cdCAqL1xuXHRnZXREZWZhdWx0VmFsdWVIZWxwRGVsZWdhdGU6IGZ1bmN0aW9uIChfZmllbGQ6IEZpZWxkKSB7XG5cdFx0cmV0dXJuIHsgbmFtZTogXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1ZhbHVlSGVscERlbGVnYXRlXCIsIHBheWxvYWQ6IHt9IH07XG5cdH0sXG5cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGFsbCBwYXJhbWV0ZXJzIGluIGEgdmFsdWUgaGVscCB0aGF0IHVzZSBhIHNwZWNpZmljIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGFsbCBmb3VuZCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfZ2V0VmFsdWVMaXN0UGFyYW1ldGVyOiBmdW5jdGlvbiAodmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0Ly9kZXRlcm1pbmUgcGF0aCB0byB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdFx0XHRpZiAoZW50cnkuTG9jYWxEYXRhUHJvcGVydHkpIHtcblx0XHRcdFx0cmV0dXJuIGVudHJ5LkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEJ1aWxkIGZpbHRlcnMgZm9yIGVhY2ggcmVsZXZhbnQgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBQcm9wZXJ0eSBOYW1lIG9mIHRoZSB2YWx1ZSBoZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBrZXlWYWx1ZSBWYWx1ZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlaGVscFBheWxvYWQgUGF5bG9hZCBvZiB0aGUgdmFsdWUgaGVscFxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbmRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IG9mIHRoZSBmaWVsZFxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGZpbHRlcnNcblx0ICovXG5cdF9nZXRGaWx0ZXI6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlSGVscFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0a2V5VmFsdWU6IHN0cmluZyxcblx0XHR2YWx1ZWhlbHBQYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlW10gfCB1bmRlZmluZWQsXG5cdFx0YmluZGluZ0NvbnRleHQ/OiBDb250ZXh0LFxuXHRcdGZpbHRlckJhckNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT5cblx0KSB7XG5cdFx0bGV0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbiB8fFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUgJiYgcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSB2YWx1ZUhlbHBQcm9wZXJ0eSlcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuXHRcdFx0bGV0IGZpbHRlclZhbHVlO1xuXHRcdFx0aWYgKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0ga2V5VmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlaGVscFBheWxvYWQ/LmlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkUGF0aCA9IGBBUERfOjoke3BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRjb25zdCBhcGRGaWVsZCA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXBkRmllbGRQYXRoKSBhcyBGaWVsZDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBhcGRGaWVsZD8uZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGNvbnN0IGNvbmRpdGlvblBheWxvYWQgPSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkPy5bMF07XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gc291cmNlUGF0aCAmJiBjb25kaXRpb25QYXlsb2FkPy5bc291cmNlUGF0aF07XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZSBoZWxwIGlzIG5vdCB1c2VkIHRyeSBnZXR0aW5nIHRoZSBmaWx0ZXIgdmFsdWUgZnJvbSB0aGUgYmluZGluZyBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KHNvdXJjZVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwUGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IHZhbHVlaGVscFBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0Y29uc3QgbWF4TGVuZ3RoID0gdmFsdWVoZWxwUGF5bG9hZD8ubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWUgIT09IG51bGwgJiYgY29uZmlnLnZhbHVlICE9PSB1bmRlZmluZWQgPyBjb25maWcudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggOiAwO1xuXHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSBoZWxwIGNvbGxlY3Rpb24gaGFzIG5vIHRleHQgYW5ub3RhdGlvbiAoZGVzY3JpcHRpb25QYXRoIGlzIGVtcHR5KSB0aGUgZGVzY3JpcHRpb24gY2hlY2sgc2hvdWxkbsK0dCBvY2N1ci5cblx0XHRcdFx0Ly8gSW4gc3VjaCBhIGNhc2UgdGhlIG1ldGhvZCBnZXREZXNjcmlwdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBNREMgYW5kIHdpdGhpbiB0aGlzIG1ldGhvZCBhIFNpZGVFZmZlY3QgaXMgcmVxdWVzdGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgcHJvcGVydHkgb2YgdGhlIG1haW4gZW50aXR5XG5cdFx0XHRcdGNvbmZpZy5jaGVja0Rlc2NyaXB0aW9uID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG5cdFx0XHRcdC8vdmFsdWUgbGVuZ3RoIGlzID4gdGV4dCBwcm9lcGVydHkgbGVuZ3RoIGNvbnN0cmFpbnRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRCYXNlRGVsZWdhdGUuZ2V0SXRlbUZvclZhbHVlKGZpZWxkLCB2YWx1ZUhlbHAsIGNvbmZpZyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGJhciBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgYmFyIGluc3RhbmNlXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkIHwgbnVsbCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpbHRlckJhckFQSTtcblx0XHRpZiAoZmllbGQ/LmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChmaWVsZCkge1xuXHRcdFx0XHRpZiAoZmllbGQ/LmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJID0gZmllbGQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmllbGQgPSBmaWVsZD8uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWVsZDtcblx0XHRcdH1cblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmdldENvbnRlbnQoKT8uaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBrZXkuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgRmllbGQgaGVscCBhc3NpZ25lZCB0byB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IG9yIDxjb2RlPkZpbHRlckZpZWxkPC9jb2RlPiBjb250cm9sXG5cdCAqIEBwYXJhbSBrZXkgS2V5IHZhbHVlIG9mIHRoZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbkluIEluIHBhcmFtZXRlcnMgZm9yIHRoZSBrZXkgKG5vIGxvbmdlciBzdXBwb3J0ZWQpXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uT3V0IE91dCBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgPGNvZGU+QmluZGluZ0NvbnRleHQ8L2NvZGU+IG9mIHRoZSBjaGVja2VkIGZpZWxkLiBJbnNpZGUgYSB0YWJsZSwgdGhlIDxjb2RlPlZhbHVlSGVscDwvY29kZT4gZWxlbWVudCBjYW4gYmUgY29ubmVjdGVkIHRvIGEgZGlmZmVyZW50IHJvd1xuXHQgKiBAcGFyYW0gX0NvbmRpdGlvbk1vZGVsIENvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uTW9kZWxOYW1lIE5hbWUgb2YgdGhlIDxjb2RlPkNvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIGNhbGxpbmcgY29udHJvbFxuXHQgKiBAcGFyYW0gX3R5cGUgVHlwZSBvZiB0aGUgdmFsdWVcblx0ICogQHJldHVybnMgRGVzY3JpcHRpb24gZm9yIHRoZSBrZXkgb3Igb2JqZWN0IGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiwga2V5IGFuZCBwYXlsb2FkLiBJZiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IGF2YWlsYWJsZSByaWdodCBhd2F5IChpdCBtdXN0IGJlIHJlcXVlc3RlZCksIGEgPGNvZGU+UHJvbWlzZTwvY29kZT4gaXMgcmV0dXJuZWRcblx0ICovXG5cdGdldERlc2NyaXB0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0ZmllbGQ6IEZpZWxkIHwgbnVsbCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRrZXk6IHN0cmluZyxcblx0XHRfY29uZGl0aW9uSW46IG9iamVjdCxcblx0XHRfY29uZGl0aW9uT3V0OiBvYmplY3QsXG5cdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0X0NvbmRpdGlvbk1vZGVsOiBDb25kaXRpb25Nb2RlbCxcblx0XHRfY29uZGl0aW9uTW9kZWxOYW1lOiBzdHJpbmcsXG5cdFx0Y29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZE1hcCxcblx0XHRjb250cm9sOiBDb250cm9sLFxuXHRcdF90eXBlOiB1bmtub3duXG5cdCkge1xuXHRcdC8vSklSQTogRklPUklURUNIUDEtMjIwMjIgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgIHRyaWVzIHRvIGRldGVybWluZSBkZXNjcmlwdGlvbiB3aXRoIHRoZSBpbml0aWFsIEdFVCBvZiB0aGUgZGF0YS5cblx0XHQvLyBpdCBzaG91bGQgcmVseSBvbiB0aGUgZGF0YSB3ZSBhbHJlYWR5IHJlY2VpdmVkIGZyb20gdGhlIGJhY2tlbmRcblx0XHQvLyBCdXQgVGhlIGdldERlc2NyaXB0aW9uIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIHRoZSBGaWx0ZXJGaWVsZCBjYXNlIGlmIGEgdmFyaWFudCBpcyBsb2FkZWQuXG5cdFx0Ly8gQXMgdGhlIGRlc2NyaXB0aW9uIHRleHQgY291bGQgYmUgbGFuZ3VhZ2UgZGVwZW5kZW50IGl0IGlzIG5vdCBzdG9yZWQgaW4gdGhlIHZhcmlhbnQsIHNvIGl0IG5lZWRzIHRvIGJlIHJlYWQgb24gcmVuZGVyaW5nLlxuXG5cdFx0bGV0IHBheWxvYWQgPSBmaWVsZD8uZ2V0UGF5bG9hZCgpIGFzIEZpZWxkUGF5bG9hZDtcblxuXHRcdC8qIFJldHJpZXZlIHRleHQgZnJvbSB2YWx1ZSBoZWxwLCBpZiB2YWx1ZSB3YXMgc2V0IGJ5IG91dC1wYXJhbWV0ZXIgKEJDUCAyMjcwMTYwNjMzKSAqL1xuXHRcdGlmICghcGF5bG9hZCAmJiAoY29udHJvbCBhcyBGaWVsZEJhc2UpPy5nZXREaXNwbGF5KCkuaW5jbHVkZXMoXCJEZXNjcmlwdGlvblwiKSkge1xuXHRcdFx0cGF5bG9hZCA9IHtcblx0XHRcdFx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAocGF5bG9hZD8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9PT0gdHJ1ZSB8fCBwYXlsb2FkPy5pc0ZpbHRlckZpZWxkID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBkYXRhTW9kZWwgPSB2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gZGF0YU1vZGVsXG5cdFx0XHRcdD8gZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdDogQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwUGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQgPSBjb25kaXRpb25QYXlsb2FkPy5bdmFsdWVoZWxwUGF5bG9hZC52YWx1ZUhlbHBRdWFsaWZpZXJdO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCA9IHZhbHVlaGVscFBheWxvYWQ/LnByb3BlcnR5RGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0bGV0IHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvKiBSZXF1ZXN0IHZhbHVlIGhlbHAgbWV0YWRhdGEgKi9cblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhwcm9wZXJ0eVBhdGgsIHRydWUsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXIoZmllbGQpO1xuXHRcdFx0XHRsZXQgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyU3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnMgPSBmaWx0ZXJTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1Ac2FwdWkubmFtZWApIGFzIHN0cmluZztcblx0XHRcdFx0Ly8gdGFrZSB0aGUgZmlyc3QgdmFsdWUgbGlzdCBhbm5vdGF0aW9uIC0gYWx0ZXJuYXRpdmVseSB0YWtlIHRoZSBvbmUgd2l0aG91dCBxdWFsaWZpZXIgb3IgdGhlIGZpcnN0IG9uZVxuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUxpc3RJbmZvW09iamVjdC5rZXlzKHZhbHVlTGlzdEluZm8pWzBdXTtcblx0XHRcdFx0Y29uc3QgdmFsdWVIZWxwUGFyYW1ldGVycyA9IHRoaXMuX2dldFZhbHVlTGlzdFBhcmFtZXRlcih2YWx1ZUxpc3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFByb3BlcnR5ID0gdmFsdWVIZWxwUGFyYW1ldGVycz8uWzBdPy5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0aWYgKCF2YWx1ZUhlbHBQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHRocm93IEVycm9yKGBJbmNvbnNpc3RlbnQgdmFsdWUgaGVscCBhbm5vdGF0aW9uIGZvciAke3Byb3BlcnR5TmFtZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBnZXQgdGV4dCBhbm5vdGF0aW9uIGZvciB0aGlzIHZhbHVlIGxpc3QgcHJvcGVydHlcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0TW9kZWwgPSB2YWx1ZUxpc3QuJG1vZGVsO1xuXHRcdFx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IHZhbHVlTGlzdE1vZGVsXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE9iamVjdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS8ke3ZhbHVlSGVscFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdFx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHR0ZXh0UHJvcGVydHkgPSB0ZXh0QW5ub3RhdGlvbi4kUGF0aDtcblx0XHRcdFx0XHQvKiBCdWlsZCB0aGUgZmlsdGVyIGZvciB0aGUgcmVsZXZhbnQgcGFyYW1ldGVycyAqL1xuXHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9nZXRGaWx0ZXIoXG5cdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdHZhbHVlaGVscFBheWxvYWQsXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkLFxuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHt2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlcnMsIHtcblx0XHRcdFx0XHRcdCRzZWxlY3Q6IHRleHRQcm9wZXJ0eVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdC8qIFJlcXVlc3QgZGVzY3JpcHRpb24gZm9yIGdpdmVuIGtleSBmcm9tIHZhbHVlIGxpc3QgZW50aXR5ICovXG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRleHRzLmxlbmd0aCA/IGNvbnRleHRzWzBdLmdldE9iamVjdCh0ZXh0UHJvcGVydHkpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgcHJvcGVydHlEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBsYXN0SW5kZXggPSBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdFBhdGggPSBsYXN0SW5kZXggPiAwID8gcHJvcGVydHlEZXNjcmlwdGlvblBhdGguc3Vic3RyaW5nKDAsIGxhc3RJbmRleCkgOiBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmFsdWVIZWxwIGFzIHVua25vd24gYXMgQ29udHJvbCkuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbc2lkZUVmZmVjdFBhdGhdLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgUmVxdWVzdFNpZGVFZmZlY3RzIGlzIHRyaWdnZXJlZCBiZWNhdXNlIHRoZSB0ZXh0IGFubm90YXRpb24gZm9yICR7dmFsdWVIZWxwUHJvcGVydHl9IGlzIG5vdCBkZWZpbmVkIGF0IHRoZSBDb2xsZWN0aW9uUGF0aCBvZiB0aGUgdmFsdWUgaGVscGBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyogRVhURVJOQWxJRCAqL1xuXHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRQYXRoID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRgJHt2YWx1ZWhlbHBQYXlsb2FkLnByb3BlcnR5UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkV4dGVybmFsSURgXG5cdFx0XHRcdFx0KT8uJFBhdGg7XG5cdFx0XHRcdFx0aWYgKGV4dGVybmFsSWRQYXRoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkRnVsbFBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkLnByb3BlcnR5UGF0aC5yZXBsYWNlKHByb3BlcnR5TmFtZSwgZXh0ZXJuYWxJZFBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZE5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2V4dGVybmFsSWRGdWxsUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke2V4dGVybmFsSWRGdWxsUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKVxuXHRcdFx0XHRcdFx0XHQ/LiRQYXRoO1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBleHRlcm5hbElkTmFtZSwgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiBrZXkgfSkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHRcdCRzZWxlY3Q6IGAke2V4dGVybmFsSWROYW1lfSwke2V4dGVybmFsSWREZXNjcmlwdGlvblBhdGh9YFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAyKTtcblx0XHRcdFx0XHRcdGlmIChjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChleHRlcm5hbElkRGVzY3JpcHRpb25QYXRoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBUZXh0IEFubm90YXRpb24gZm9yICR7dmFsdWVIZWxwUHJvcGVydHl9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc3Qgc3RhdHVzID0gZXJyb3IgPyAoZXJyb3IgYXMgWE1MSHR0cFJlcXVlc3QpLnN0YXR1cyA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdFx0Y29uc3QgbXNnID0gc3RhdHVzID09PSA0MDQgPyBgTWV0YWRhdGEgbm90IGZvdW5kICgke3N0YXR1c30pIGZvciB2YWx1ZSBoZWxwIG9mIHByb3BlcnR5ICR7cHJvcGVydHlQYXRofWAgOiBtZXNzYWdlO1xuXHRcdFx0XHRMb2cuZXJyb3IobXNnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O1NBZ0RlQSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLEVBQUU7SUFDbkRDLFVBQVUsRUFBRSxDQUFDO0lBRWI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHlCQUF5QixFQUFFLFNBQUFBLENBQVVDLEtBQVksRUFBRUMsSUFBNEIsRUFBRUMsS0FBc0IsRUFBRTtNQUN4RztNQUNBO01BQ0E7O01BRUEsTUFBTUMsTUFBMEIsR0FBRyxDQUFDLENBQUM7TUFDckMsSUFDQ0YsSUFBSSxJQUNKQSxJQUFJLENBQUNHLEdBQUcsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLGtDQUFrQyxDQUFDLENBQUMsSUFDOUVDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixLQUFLLENBQUMsSUFDcEJBLEtBQUssQ0FBQ0ssTUFBTSxHQUFHLENBQUMsSUFDaEJMLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBS00sU0FBUyxFQUNyQjtRQUNEO1FBQ0FQLElBQUksQ0FBQ1EsV0FBVyxDQUFDUCxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQ2pDQyxNQUFNLENBQUNPLGdCQUFnQixHQUFHLElBQUk7UUFDOUJQLE1BQU0sQ0FBQ1EsWUFBWSxHQUFHVCxLQUFLLENBQUMsQ0FBQyxDQUFXLENBQUMsQ0FBQztNQUMzQztNQUVBLE9BQU9DLE1BQU07SUFDZCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDUywwQkFBMEIsRUFBRSxTQUFBQSxDQUFVWixLQUFZLEVBQUVDLElBQWdCLEVBQUVZLGtCQUF1QyxFQUFFO01BQzlHLElBQUlBLGtCQUFrQixFQUFFRixZQUFZLEtBQUtILFNBQVMsRUFBRTtRQUNuRDtRQUNBUCxJQUFJLENBQUNRLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUVJLGtCQUFrQixDQUFDRixZQUFZLENBQUMsRUFBRSxRQUFRLENBQUM7TUFDMUU7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0csbUJBQW1CLEVBQUUsU0FBQUEsQ0FBVWQsS0FBWSxFQUFFZSxNQUFlLEVBQUVGLGtCQUF1QyxFQUFFO01BQ3RHLElBQUlBLGtCQUFrQixFQUFFSCxnQkFBZ0IsS0FBSyxJQUFJLElBQUlLLE1BQU0sQ0FBQ1IsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6RVEsTUFBTSxDQUFDQyxJQUFJLENBQUNILGtCQUFrQixDQUFDRixZQUFZLENBQUM7UUFDNUMsT0FBT0ksTUFBTTtNQUNkO01BRUEsT0FBT1AsU0FBUztJQUNqQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ1MsMkJBQTJCLEVBQUUsU0FBQUEsQ0FBVUMsTUFBYSxFQUFFO01BQ3JELE9BQU87UUFBRUMsSUFBSSxFQUFFLHVDQUF1QztRQUFFQyxPQUFPLEVBQUUsQ0FBQztNQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVEQyxVQUFVLEVBQUUsU0FBQUEsQ0FBVUgsTUFBYSxFQUFFO01BQ3BDLE9BQU9JLE9BQU87SUFDZixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHNCQUFzQixFQUFFLFNBQUFBLENBQVVDLGFBQXNDLEVBQUVDLFlBQW9CLEVBQUU7TUFDL0Y7TUFDQSxPQUFPRCxhQUFhLENBQUNFLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDLFVBQVVDLEtBQUssRUFBRTtRQUN2RCxJQUFJQSxLQUFLLENBQUNDLGlCQUFpQixFQUFFO1VBQzVCLE9BQU9ELEtBQUssQ0FBQ0MsaUJBQWlCLENBQUNDLGFBQWEsS0FBS0wsWUFBWTtRQUM5RCxDQUFDLE1BQU07VUFDTixPQUFPLEtBQUs7UUFDYjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NNLFVBQVUsRUFBRSxTQUFBQSxDQUNYQyxTQUFrQyxFQUNsQ1AsWUFBb0IsRUFDcEJRLGlCQUF5QixFQUN6QkMsUUFBZ0IsRUFDaEJDLGdCQUFrQyxFQUNsQ0MseUJBQTZELEVBQzdEQyxjQUF3QixFQUN4QkMsbUJBQXVELEVBQ3REO01BQ0QsSUFBSUMsT0FBaUIsR0FBRyxFQUFFO01BQzFCLE1BQU1DLFVBQVUsR0FBR1IsU0FBUyxDQUFDTixVQUFVLENBQUNDLE1BQU0sQ0FBQyxVQUFVYyxTQUFTLEVBQUU7UUFDbkUsT0FDQ0EsU0FBUyxDQUFDQyxLQUFLLDBEQUErQyxJQUM5REQsU0FBUyxDQUFDQyxLQUFLLDZEQUFrRCxJQUNoRUQsU0FBUyxDQUFDWixpQkFBaUIsRUFBRUMsYUFBYSxLQUFLTCxZQUFZLElBQUlnQixTQUFTLENBQUNFLGlCQUFpQixLQUFLVixpQkFBa0I7TUFFcEgsQ0FBQyxDQUFDO01BQ0YsS0FBSyxNQUFNUSxTQUFTLElBQUlELFVBQVUsRUFBRTtRQUNuQyxJQUFJSSxXQUFXO1FBQ2YsSUFBSUgsU0FBUyxDQUFDWixpQkFBaUIsRUFBRUMsYUFBYSxLQUFLTCxZQUFZLEVBQUU7VUFDaEVtQixXQUFXLEdBQUdWLFFBQVE7UUFDdkIsQ0FBQyxNQUFNLElBQUlDLGdCQUFnQixFQUFFVSx1QkFBdUIsS0FBSyxJQUFJLEVBQUU7VUFDOUQsTUFBTUMsWUFBWSxHQUFHLFNBQVNMLFNBQVMsQ0FBQ1osaUJBQWlCLEVBQUVDLGFBQWEsRUFBRTtVQUMxRSxNQUFNaUIsUUFBUSxHQUFHQyxPQUFPLENBQUNDLGNBQWMsQ0FBQ0gsWUFBWSxDQUFVO1VBQzlERixXQUFXLEdBQUdHLFFBQVEsRUFBRUcsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxNQUFNLElBQUlkLHlCQUF5QixLQUFLNUIsU0FBUyxFQUFFO1VBQ25ELE1BQU0yQyxVQUFVLEdBQUdWLFNBQVMsQ0FBQ0UsaUJBQWlCO1VBQzlDLE1BQU1TLGdCQUFnQixHQUFHaEIseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO1VBQ3ZEUSxXQUFXLEdBQUdPLFVBQVUsSUFBSUMsZ0JBQWdCLEdBQUdELFVBQVUsQ0FBQztRQUMzRCxDQUFDLE1BQU0sSUFBSWQsY0FBYyxFQUFFO1VBQzFCO1VBQ0EsTUFBTWMsVUFBVSxHQUFHVixTQUFTLENBQUNaLGlCQUFpQixFQUFFQyxhQUFhO1VBQzdEYyxXQUFXLEdBQUdQLGNBQWMsQ0FBQ2dCLFNBQVMsQ0FBQ0YsVUFBVSxDQUFDO1FBQ25EO1FBRUEsSUFBSSxDQUFDUCxXQUFXLElBQUlOLG1CQUFtQixFQUFFO1VBQ3hDLE1BQU1nQixTQUFTLEdBQUdoQixtQkFBbUIsR0FBR0csU0FBUyxDQUFDRSxpQkFBaUIsQ0FBQztVQUNwRSxJQUFJVyxTQUFTLEVBQUUvQyxNQUFNLEtBQUssQ0FBQyxJQUFJK0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQy9EWCxXQUFXLEdBQUdVLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRXZDLE1BQU0sQ0FBQyxDQUFDLENBQUM7VUFDdEM7UUFDRDtRQUNBO1FBQ0EsSUFBSTZCLFdBQVcsS0FBSyxJQUFJLElBQUlBLFdBQVcsS0FBS3BDLFNBQVMsRUFBRTtVQUN0RCtCLE9BQU8sQ0FBQ3ZCLElBQUksQ0FBQyxJQUFJd0MsTUFBTSxDQUFDO1lBQUVDLElBQUksRUFBRWhCLFNBQVMsQ0FBQ0UsaUJBQWlCO1lBQUVZLFFBQVEsRUFBRSxJQUFJO1lBQUVHLE1BQU0sRUFBRWQ7VUFBWSxDQUFDLENBQUMsQ0FBQztRQUNyRztNQUNEO01BQ0EsSUFBSVIseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDbkM7UUFDQTtRQUNBRyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ29CLE1BQU0sQ0FBQyxJQUFJLENBQUNDLDRCQUE0QixDQUFDeEIseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUVKLFNBQVMsQ0FBQyxDQUFDO01BQ3JHO01BQ0EsT0FBT08sT0FBTztJQUNmLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ3FCLDRCQUE0QkEsQ0FBQ1IsZ0JBQXNDLEVBQUVwQixTQUFrQyxFQUFZO01BQ2xILE1BQU07UUFBRTZCLE1BQU0sRUFBRUMsY0FBYztRQUFFQyxjQUFjLEVBQUVDLGNBQWM7UUFBRXRDLFVBQVUsRUFBRWM7TUFBVyxDQUFDLEdBQUdSLFNBQVM7TUFDcEcsTUFBTWlDLFdBQVcsR0FBR0gsY0FBYyxDQUFDSSxZQUFZLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsSUFBSUgsY0FBYyxFQUFFLENBQUM7TUFDdEYsTUFBTUksVUFBVSxHQUFHQywyQkFBMkIsQ0FBQ0osV0FBVyxDQUFDLENBQUNLLGdCQUFnQjtNQUM1RSxNQUFNQyxzQkFBc0IsR0FBRy9CLFVBQVUsQ0FBQ2dDLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVoQyxTQUFTLEtBQUs7UUFDcEUsSUFBSUEsU0FBUyxDQUFDWixpQkFBaUIsRUFBRUMsYUFBYSxFQUFFO1VBQy9DMkMsR0FBRyxDQUFDekQsSUFBSSxDQUFDeUIsU0FBUyxDQUFDWixpQkFBaUIsQ0FBQ0MsYUFBYSxDQUFDO1FBQ3BEO1FBQ0EsT0FBTzJDLEdBQUc7TUFDWCxDQUFDLEVBQUUsRUFBYyxDQUFDO01BQ2xCLE1BQU1DLGdCQUFnQixHQUFHTixVQUFVLENBQUNPLElBQUksQ0FBQ0gsTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBQUcsSUFBQSxLQUF3QjtRQUFBLElBQXRCO1VBQUV6RCxJQUFJLEVBQUUwRDtRQUFRLENBQUMsR0FBQUQsSUFBQTtRQUN0RSxJQUFJLENBQUNMLHNCQUFzQixDQUFDTyxRQUFRLENBQUNELE9BQU8sQ0FBQyxJQUFJekIsZ0JBQWdCLENBQUMyQixjQUFjLENBQUNGLE9BQU8sQ0FBQyxFQUFFO1VBQzFGSixHQUFHLENBQUN6RCxJQUFJLENBQUM2RCxPQUFPLENBQUM7UUFDbEI7UUFDQSxPQUFPSixHQUFHO01BQ1gsQ0FBQyxFQUFFLEVBQWMsQ0FBQztNQUNsQixJQUFJQyxnQkFBZ0IsQ0FBQ25FLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDaEMsT0FBT21FLGdCQUFnQixDQUFDRixNQUFNLENBQUMsQ0FBQ2pDLE9BQWlCLEVBQUV5QyxHQUFXLEtBQWU7VUFDNUU7VUFDQSxNQUFNQyxVQUFVLEdBQUduQixjQUFjLENBQUNJLFlBQVksQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQyxJQUFJSCxjQUFjLElBQUlnQixHQUFHLEVBQUUsQ0FBQztVQUM1RixJQUFJRSxZQUFZLENBQUNDLG9CQUFvQixDQUFDRixVQUFVLEVBQUV6RSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbkUrQixPQUFPLENBQUN2QixJQUFJLENBQUMsSUFBSXdDLE1BQU0sQ0FBQztjQUFFQyxJQUFJLEVBQUV1QixHQUFHO2NBQUV6QixRQUFRLEVBQUUsSUFBSTtjQUFFRyxNQUFNLEVBQUVOLGdCQUFnQixDQUFDNEIsR0FBRztZQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ3ZGO1VBQ0EsT0FBT3pDLE9BQU87UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ1A7TUFDQSxPQUFPLEVBQUU7SUFDVixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQzZDLGVBQWUsRUFBRSxTQUFBQSxDQUFVcEYsS0FBWSxFQUFFcUYsU0FBb0IsRUFBRUMsTUFBaUMsRUFBRTtNQUNqRztNQUNBO01BQ0EsSUFBSUEsTUFBTSxDQUFDcEYsS0FBSyxLQUFLLEVBQUUsRUFBRTtRQUN4QjtNQUNEO01BRUEsSUFBSW9GLE1BQU0sQ0FBQ0MsZ0JBQWdCLEVBQUU7UUFDNUIsTUFBTXBELGdCQUFnQixHQUFHa0QsU0FBUyxDQUFDRyxVQUFVLENBQUMsQ0FBcUI7UUFDbkUsTUFBTUMsZUFBZSxHQUFHdEQsZ0JBQWdCLENBQUN1RCx3QkFBd0I7UUFDakUsTUFBTUMsU0FBUyxHQUFHeEQsZ0JBQWdCLEVBQUV3RCxTQUFTO1FBQzdDLE1BQU1DLFdBQVcsR0FBR04sTUFBTSxDQUFDcEYsS0FBSyxLQUFLLElBQUksSUFBSW9GLE1BQU0sQ0FBQ3BGLEtBQUssS0FBS00sU0FBUyxHQUFHOEUsTUFBTSxDQUFDcEYsS0FBSyxDQUFDMkYsUUFBUSxDQUFDLENBQUMsQ0FBQ3RGLE1BQU0sR0FBRyxDQUFDO1FBQzVHLElBQUlrRixlQUFlLEtBQUssRUFBRSxFQUFFO1VBQzNCO1VBQ0E7VUFDQUgsTUFBTSxDQUFDQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ2hDLENBQUMsTUFBTSxJQUFJSSxTQUFTLEtBQUtuRixTQUFTLElBQUlvRixXQUFXLEdBQUdELFNBQVMsRUFBRTtVQUM5RDtVQUNBO1FBQ0Q7TUFDRDtNQUNBLE9BQU85RixpQkFBaUIsQ0FBQ3VGLGVBQWUsQ0FBQ3BGLEtBQUssRUFBRXFGLFNBQVMsRUFBRUMsTUFBTSxDQUFDO0lBQ25FLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NRLGFBQWEsRUFBRSxTQUFBQSxDQUFVOUYsS0FBbUIsRUFBeUI7TUFDcEUsSUFBSStGLFlBQVk7TUFDaEIsSUFBSS9GLEtBQUssRUFBRUksR0FBRyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7UUFDekMsT0FBT0osS0FBSyxFQUFFO1VBQ2IsSUFBSUEsS0FBSyxFQUFFSSxHQUFHLENBQWUsc0NBQXNDLENBQUMsRUFBRTtZQUNyRTJGLFlBQVksR0FBRy9GLEtBQUs7WUFDcEI7VUFDRDtVQUNBQSxLQUFLLEdBQUdBLEtBQUssRUFBRWdHLFNBQVMsQ0FBQyxDQUFxQjtRQUMvQztRQUNBLElBQUlELFlBQVksRUFBRUUsVUFBVSxDQUFDLENBQUMsRUFBRTdGLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFO1VBQ3hFLE9BQU8yRixZQUFZLENBQUNFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDO01BQ0Q7TUFDQSxPQUFPekYsU0FBUztJQUNqQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MwRixjQUFjLEVBQUUsZUFBQUEsQ0FDZmxHLEtBQW1CLEVBQ25CcUYsU0FBb0IsRUFDcEJMLEdBQVcsRUFDWG1CLFlBQW9CLEVBQ3BCQyxhQUFxQixFQUNyQi9ELGNBQW1DLEVBQ25DZ0UsZUFBK0IsRUFDL0JDLG1CQUEyQixFQUMzQmxELGdCQUFxQyxFQUNyQ21ELE9BQWdCLEVBQ2hCQyxLQUFjLEVBQ2I7TUFDRDtNQUNBO01BQ0E7TUFDQTs7TUFFQSxJQUFJcEYsT0FBTyxHQUFHcEIsS0FBSyxFQUFFd0YsVUFBVSxDQUFDLENBQWlCOztNQUVqRDtNQUNBLElBQUksQ0FBQ3BFLE9BQU8sSUFBS21GLE9BQU8sRUFBZ0JFLFVBQVUsQ0FBQyxDQUFDLENBQUMzQixRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDN0UxRCxPQUFPLEdBQUc7VUFDVHNGLHlCQUF5QixFQUFFO1FBQzVCLENBQUM7TUFDRjtNQUVBLElBQUl0RixPQUFPLEVBQUVzRix5QkFBeUIsS0FBSyxJQUFJLElBQUl0RixPQUFPLEVBQUV1RixhQUFhLEtBQUssSUFBSSxFQUFFO1FBQ25GLE1BQU1DLFNBQVMsR0FBR3ZCLFNBQVMsQ0FBQ3dCLFFBQVEsQ0FBQyxDQUEyQjtRQUNoRSxNQUFNQyxTQUFTLEdBQUdGLFNBQVMsR0FDeEJBLFNBQVMsQ0FBQzFDLFlBQVksQ0FBQyxDQUFDLEdBQ3hCNkMsV0FBVyxDQUFDQyxlQUFlLENBQUMzQixTQUErQixDQUFDLENBQzNEd0IsUUFBUSxDQUFDLENBQUMsQ0FDVjNDLFlBQVksQ0FBQyxDQUFDO1FBQ2xCLE1BQU0vQixnQkFBZ0IsR0FBR2tELFNBQVMsQ0FBQ0csVUFBVSxDQUFDLENBQXFCO1FBQ25FLE1BQU1wRCx5QkFBeUIsR0FBR2dCLGdCQUFnQixHQUFHakIsZ0JBQWdCLENBQUM4RSxrQkFBa0IsQ0FBQztRQUN6RixNQUFNQyxZQUFZLEdBQUcvRSxnQkFBZ0IsQ0FBQytFLFlBQVk7UUFDbEQsTUFBTUMsdUJBQXVCLEdBQUdoRixnQkFBZ0IsRUFBRWdGLHVCQUF1QjtRQUN6RSxJQUFJQyxZQUFvQjtRQUV4QixJQUFJO1VBQ0g7VUFDQSxNQUFNNUYsYUFBYSxHQUFHLE1BQU1zRixTQUFTLENBQUNPLG9CQUFvQixDQUFDSCxZQUFZLEVBQUUsSUFBSSxFQUFFN0UsY0FBYyxDQUFDO1VBRTlGLE1BQU1pRixTQUFTLEdBQUcsSUFBSSxDQUFDeEIsYUFBYSxDQUFDOUYsS0FBSyxDQUFDO1VBQzNDLElBQUl1SCxnQkFBK0Q7VUFDbkUsSUFBSUQsU0FBUyxFQUFFO1lBQ2QsTUFBTUUsV0FBOEIsR0FBRyxNQUFNQyxTQUFTLENBQUNDLHFCQUFxQixDQUFDSixTQUFTLENBQUM7WUFDdkZDLGdCQUFnQixHQUFHQyxXQUFXLENBQUM3RixNQUFNO1VBQ3RDO1VBRUEsTUFBTUYsWUFBWSxHQUFHcUYsU0FBUyxDQUFDekQsU0FBUyxDQUFDLEdBQUc2RCxZQUFZLGFBQWEsQ0FBVztVQUNoRjtVQUNBLE1BQU1sRixTQUFTLEdBQUdSLGFBQWEsQ0FBQzdCLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQ25ELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzlELE1BQU1tRyxtQkFBbUIsR0FBRyxJQUFJLENBQUNwRyxzQkFBc0IsQ0FBQ1MsU0FBUyxFQUFFUCxZQUFZLENBQUM7VUFDaEYsTUFBTVEsaUJBQWlCLEdBQUcwRixtQkFBbUIsR0FBRyxDQUFDLENBQUMsRUFBRWhGLGlCQUFpQjtVQUNyRSxJQUFJLENBQUNWLGlCQUFpQixFQUFFO1lBQ3ZCLE1BQU0yRixLQUFLLENBQUMsMENBQTBDbkcsWUFBWSxFQUFFLENBQUM7VUFDdEU7VUFDQTtVQUNBLE1BQU1xQyxjQUFjLEdBQUc5QixTQUFTLENBQUM2QixNQUFNO1VBQ3ZDLE1BQU1nRSxjQUFjLEdBQUcvRCxjQUFjLENBQ25DSSxZQUFZLENBQUMsQ0FBQyxDQUNkYixTQUFTLENBQUMsSUFBSXJCLFNBQVMsQ0FBQytCLGNBQWMsSUFBSTlCLGlCQUFpQixzQ0FBc0MsQ0FBQztVQUNwRyxJQUFJNEYsY0FBYyxJQUFJQSxjQUFjLENBQUNDLEtBQUssRUFBRTtZQUMzQ1YsWUFBWSxHQUFHUyxjQUFjLENBQUNDLEtBQUs7WUFDbkM7WUFDQSxNQUFNdkYsT0FBTyxHQUFHLElBQUksQ0FBQ1IsVUFBVSxDQUM5QkMsU0FBUyxFQUNUUCxZQUFZLEVBQ1pRLGlCQUFpQixFQUNqQitDLEdBQUcsRUFDSDdDLGdCQUFnQixFQUNoQkMseUJBQXlCLEVBQ3pCQyxjQUFjLEVBQ2RrRixnQkFDRCxDQUFDO1lBQ0QsTUFBTVEsV0FBVyxHQUFHakUsY0FBYyxDQUFDa0UsUUFBUSxDQUFDLElBQUloRyxTQUFTLENBQUMrQixjQUFjLEVBQUUsRUFBRXZELFNBQVMsRUFBRUEsU0FBUyxFQUFFK0IsT0FBTyxFQUFFO2NBQzFHMEYsT0FBTyxFQUFFYjtZQUNWLENBQUMsQ0FBQztZQUNGO1lBQ0EsTUFBTWMsUUFBUSxHQUFHLE1BQU1ILFdBQVcsQ0FBQ0ksZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBT0QsUUFBUSxDQUFDM0gsTUFBTSxHQUFHMkgsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDN0UsU0FBUyxDQUFDK0QsWUFBWSxDQUFDLEdBQUc1RyxTQUFTO1VBQ3pFLENBQUMsTUFBTSxJQUFJNkIsY0FBYyxLQUFLN0IsU0FBUyxJQUFJMkcsdUJBQXVCLEVBQUU7WUFDbkUsTUFBTWlCLFNBQVMsR0FBR2pCLHVCQUF1QixDQUFDa0IsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxNQUFNQyxjQUFjLEdBQUdGLFNBQVMsR0FBRyxDQUFDLEdBQUdqQix1QkFBdUIsQ0FBQ29CLFNBQVMsQ0FBQyxDQUFDLEVBQUVILFNBQVMsQ0FBQyxHQUFHakIsdUJBQXVCO1lBQ2hILE1BQU1xQixrQkFBa0IsR0FBR3pCLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDM0IsU0FBK0IsQ0FBQyxDQUFDb0QscUJBQXFCLENBQUMsQ0FBQztZQUMvRyxNQUFNRCxrQkFBa0IsQ0FBQ0Usa0JBQWtCLENBQUMsQ0FBQ0osY0FBYyxDQUFDLEVBQUVqRyxjQUFjLENBQUM7WUFDN0VzRyxHQUFHLENBQUNDLE9BQU8sQ0FDVixtRUFBbUUzRyxpQkFBaUIseURBQ3JGLENBQUM7WUFDRCxPQUFPekIsU0FBUztVQUNqQixDQUFDLE1BQU07WUFDTjtZQUNBLE1BQU1xSSxjQUFjLEdBQUcvQixTQUFTLEVBQUV6RCxTQUFTLENBQzFDLEdBQUdsQixnQkFBZ0IsQ0FBQytFLFlBQVksNENBQ2pDLENBQUMsRUFBRVksS0FBSztZQUNSLElBQUllLGNBQWMsRUFBRTtjQUNuQixNQUFNQyxrQkFBa0IsR0FBRzNHLGdCQUFnQixDQUFDK0UsWUFBWSxDQUFDNkIsT0FBTyxDQUFDdEgsWUFBWSxFQUFFb0gsY0FBYyxDQUFDO2NBQzlGLE1BQU1HLGNBQWMsR0FBR2xDLFNBQVMsQ0FBQ3pELFNBQVMsQ0FBQyxHQUFHeUYsa0JBQWtCLGFBQWEsQ0FBQztjQUM5RSxNQUFNRyx5QkFBeUIsR0FBR25DLFNBQVMsRUFBRXpELFNBQVMsQ0FBQyxHQUFHeUYsa0JBQWtCLHNDQUFzQyxDQUFDLEVBQ2hIaEIsS0FBSztjQUNSLE1BQU12RixPQUFPLEdBQUcsRUFBRTtjQUNsQkEsT0FBTyxDQUFDdkIsSUFBSSxDQUFDLElBQUl3QyxNQUFNLENBQUM7Z0JBQUVDLElBQUksRUFBRXVGLGNBQWM7Z0JBQUV6RixRQUFRLEVBQUUsSUFBSTtnQkFBRUcsTUFBTSxFQUFFc0I7Y0FBSSxDQUFDLENBQUMsQ0FBQztjQUMvRSxNQUFNK0MsV0FBVyxHQUFHakUsY0FBYyxDQUFDa0UsUUFBUSxDQUFDLElBQUloRyxTQUFTLENBQUMrQixjQUFjLEVBQUUsRUFBRXZELFNBQVMsRUFBRUEsU0FBUyxFQUFFK0IsT0FBTyxFQUFFO2dCQUMxRzBGLE9BQU8sRUFBRSxHQUFHZSxjQUFjLElBQUlDLHlCQUF5QjtjQUN4RCxDQUFDLENBQUM7Y0FDRixNQUFNZixRQUFRLEdBQUcsTUFBTUgsV0FBVyxDQUFDSSxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUN4RCxJQUFJRCxRQUFRLENBQUMzSCxNQUFNLEVBQUU7Z0JBQ3BCLE9BQU8ySCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM3RSxTQUFTLENBQUM0Rix5QkFBeUIsQ0FBQztjQUN4RDtZQUNEO1lBQ0FOLEdBQUcsQ0FBQ08sS0FBSyxDQUFDLHVCQUF1QmpILGlCQUFpQixpQkFBaUIsQ0FBQztZQUNwRSxPQUFPekIsU0FBUztVQUNqQjtRQUNELENBQUMsQ0FBQyxPQUFPMEksS0FBSyxFQUFFO1VBQ2YsTUFBTUMsTUFBTSxHQUFHRCxLQUFLLEdBQUlBLEtBQUssQ0FBb0JDLE1BQU0sR0FBRzNJLFNBQVM7VUFDbkUsTUFBTTRJLE9BQU8sR0FBR0YsS0FBSyxZQUFZdEIsS0FBSyxHQUFHc0IsS0FBSyxDQUFDRSxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDO1VBQ3RFLE1BQU1JLEdBQUcsR0FBR0gsTUFBTSxLQUFLLEdBQUcsR0FBRyx1QkFBdUJBLE1BQU0sZ0NBQWdDakMsWUFBWSxFQUFFLEdBQUdrQyxPQUFPO1VBQ2xIVCxHQUFHLENBQUNPLEtBQUssQ0FBQ0ksR0FBRyxDQUFDO1FBQ2Y7TUFDRDtNQUNBLE9BQU85SSxTQUFTO0lBQ2pCO0VBQ0QsQ0FBQyxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
365
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImNvbnRhaW5lciIsImdldFR5cGVhaGVhZCIsImdldFBheWxvYWQiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJjb250ZW50SWQiLCJnZXRJZCIsIlZhbHVlSGVscERlbGVnYXRlIiwicmV0cmlldmVDb250ZW50IiwibWF4TGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJ0b1N0cmluZyIsImRlc2NyaXB0aW9uUGF0aCIsInZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCIsIl9nZXRGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRDb250ZW50IiwiZ2V0RGVzY3JpcHRpb24iLCJfY29uZGl0aW9uSW4iLCJfY29uZGl0aW9uT3V0IiwiX0NvbmRpdGlvbk1vZGVsIiwiX2NvbmRpdGlvbk1vZGVsTmFtZSIsImNvbnRyb2wiLCJfdHlwZSIsImVtcHR5QWxsb3dlZCIsImdldERpc3BsYXkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiaXNGaWx0ZXJGaWVsZCIsImRhdGFNb2RlbCIsImdldE1vZGVsIiwib3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm1ldGFNb2RlbCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwidmFsdWVIZWxwUXVhbGlmaWVyIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlEZXNjcmlwdGlvblBhdGgiLCJ0ZXh0UHJvcGVydHkiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsImZpbHRlckJhciIsImZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInZhbHVlSGVscFBhcmFtZXRlcnMiLCJFcnJvciIsInRleHRBbm5vdGF0aW9uIiwiJFBhdGgiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImNvbnRleHRzIiwicmVxdWVzdENvbnRleHRzIiwibGFzdEluZGV4IiwibGFzdEluZGV4T2YiLCJzaWRlRWZmZWN0UGF0aCIsInN1YnN0cmluZyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIkxvZyIsIndhcm5pbmciLCJleHRlcm5hbElkUGF0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInJlcGxhY2UiLCJleHRlcm5hbElkTmFtZSIsImV4dGVybmFsSWREZXNjcmlwdGlvblBhdGgiLCJlcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJTdHJpbmciLCJtc2ciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkQmFzZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgVmFsdWVIZWxwUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IEl0ZW1Gb3JWYWx1ZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB7IHR5cGUgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29uZGl0aW9uTW9kZWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvbk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgRmllbGRCYXNlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCIuLi9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwiLi4vZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25QYXlsb2FkTWFwLCBDb25kaXRpb25QYXlsb2FkVHlwZSwgRXh0ZXJuYWxTdGF0ZVR5cGUgfSBmcm9tIFwiLi4vdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCI7XG5pbXBvcnQgVmFsdWVIZWxwRGVsZWdhdGUgZnJvbSBcIi4uL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuXG5leHBvcnQgdHlwZSBGaWVsZFBheWxvYWQgPSB7XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q/OiBib29sZWFuO1xuXHRpc0ZpbHRlckZpZWxkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBUeXBlSW5pdGlhbGl6YXRpb24gPSB7XG5cdGJUeXBlSW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuXHRtQ3VzdG9tVW5pdHM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWcgPSB7XG5cdHZhbHVlOiBWYWx1ZTtcblx0cGFyc2VkVmFsdWU6IFZhbHVlO1xuXHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0Y2hlY2tLZXk6IGJvb2xlYW47XG5cdGNoZWNrRGVzY3JpcHRpb246IGJvb2xlYW47XG5cdGNvbmRpdGlvbk1vZGVsPzogQ29uZGl0aW9uTW9kZWw7XG5cdGNvbmRpdGlvbk1vZGVsTmFtZT86IHN0cmluZztcblx0Y29udHJvbD86IG9iamVjdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIEZpZWxkQmFzZURlbGVnYXRlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cblx0LyoqXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJbiBWNC11bml0IG9yIGN1cnJlbmN5IGNhc2UgaXQgbWlnaHQgbmVlZCB0byBiZSBmb3JtYXR0ZWQgb25jZS5cblx0ICogVG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgdHlwZSBsYXRlciBvbiwgdGhlIGN1cnJlbmNpZXMgbXVzdCBiZSByZXR1cm5lZC5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtIHR5cGUgVHlwZSBmcm9tIGJpbmRpbmdcblx0ICogQHBhcmFtIHZhbHVlIEdpdmVuIHZhbHVlXG5cdCAqIEByZXR1cm5zIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGUgKG5lZWRzIHRvIHNldCBiVHlwZUluaXRpYWxpemVkIHRvIHRydWUgaWYgaW5pdGlhbGl6ZWQpXG5cdCAqL1xuXHRpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlIHwgdW5kZWZpbmVkLCB2YWx1ZTogVmFsdWUgfCBWYWx1ZVtdKSB7XG5cdFx0Ly8gVjQgVW5pdCBhbmQgQ3VycmVuY3kgdHlwZXMgaGF2ZSBhIG1hcCB3aXRoIHZhbGlkIHVuaXRzIGFuZCBjcmVhdGUgYW4gaW50ZXJuYWwgY3VzdG9taXppbmcgZm9yIGl0LlxuXHRcdC8vIFRoZSBGaWVsZCBuZWVkcyB0byBrZWVwIHRoaXMgY3VzdG9taXppbmcgbG9naWMgd2hlbiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgdHlwZS5cblx0XHQvLyAoQXMgZXh0ZXJuYWwgUkFXIGJpbmRpbmcgaXMgdXNlZCB0aGVyZSBpcyBubyBmb3JtYXR0aW5nIG9uIHBhcnNpbmcuKVxuXG5cdFx0Y29uc3QgcmVzdWx0OiBUeXBlSW5pdGlhbGl6YXRpb24gPSB7fTtcblx0XHRpZiAoXG5cdFx0XHR0eXBlICYmXG5cdFx0XHR0eXBlLmlzQShbXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIsIFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIl0pICYmXG5cdFx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID4gMiAmJlxuXHRcdFx0dmFsdWVbMl0gIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Ly8gZm9ybWF0IG9uY2UgdG8gc2V0IGludGVybmFsIGN1c3RvbWl6aW5nLiBBbGxvdyBudWxsIGFzIHZhbGlkIHZhbHVlcyBmb3IgY3VzdG9tIHVuaXRzXG5cdFx0XHR0eXBlLmZvcm1hdFZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKTtcblx0XHRcdHJlc3VsdC5iVHlwZUluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRcdHJlc3VsdC5tQ3VzdG9tVW5pdHMgPSB2YWx1ZVsyXSBhcyBzdHJpbmc7IC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHByb3ZpZGUgY3VzdG9tIHVuaXRzIHRvIGludGVybmFsIHR5cGVcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB1bml0IHR5cGUuXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJZiB0aGUgdHlwZSBpcyBhIFY0IHVuaXQgb3IgY3VycmVuY3ksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKi9cblx0aW5pdGlhbGl6ZUludGVybmFsVW5pdFR5cGU6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHR5cGU6IFNpbXBsZVR5cGUsIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/Lm1DdXN0b21Vbml0cyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBpZiBhbHJlYWR5IGluaXRpYWxpemVkIGluaXRpYWxpemUgbmV3IHR5cGUgdG9vLlxuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZShbbnVsbCwgbnVsbCwgdHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0c10sIFwic3RyaW5nXCIpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBlbmhhbmNlcyB0aGUgdmFsdWUgd2l0aCB1bml0IG9yIGN1cnJlbmN5IGluZm9ybWF0aW9uIGlmIG5lZWRlZCBieSB0aGUgZGF0YSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gIHZhbHVlcyBWYWx1ZXNcblx0ICogQHBhcmFtICB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKiBAcmV0dXJucyBWYWx1ZXNcblx0ICovXG5cdGVuaGFuY2VWYWx1ZUZvclVuaXQ6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHZhbHVlczogVmFsdWVbXSwgdHlwZUluaXRpYWxpemF0aW9uPzogVHlwZUluaXRpYWxpemF0aW9uKSB7XG5cdFx0aWYgKHR5cGVJbml0aWFsaXphdGlvbj8uYlR5cGVJbml0aWFsaXplZCA9PT0gdHJ1ZSAmJiB2YWx1ZXMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0eXBlSW5pdGlhbGl6YXRpb24ubUN1c3RvbVVuaXRzKTtcblx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoaWNoIDxjb2RlPlZhbHVlSGVscERlbGVnYXRlPC9jb2RlPiBpcyB1c2VkXG5cdCAqIGlmIGEgZGVmYXVsdCBmaWVsZCBoZWxwIChmb3IgZXhhbXBsZSwgZm9yIGRlZmluaW5nIGNvbmRpdGlvbnMgaW4gPC9jb2RlPkZpbHRlckZpZWxkPC9jb2RlPilcblx0ICogaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIF9maWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIERlbGVnYXRlIG9iamVjdCB3aXRoIG5hbWUgYW5kIHBheWxvYWRcblx0ICovXG5cdGdldERlZmF1bHRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4geyBuYW1lOiBcInNhcC91aS9tZGMvb2RhdGEvdjQvVmFsdWVIZWxwRGVsZWdhdGVcIiwgcGF5bG9hZDoge30gfTtcblx0fSxcblxuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoX2ZpZWxkOiBGaWVsZCkge1xuXHRcdHJldHVybiBUeXBlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgYWxsIHBhcmFtZXRlcnMgaW4gYSB2YWx1ZSBoZWxwIHRoYXQgdXNlIGEgc3BlY2lmaWMgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIGZvdW5kIHBhcmFtZXRlcnNcblx0ICovXG5cdF9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXI6IGZ1bmN0aW9uICh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHQvL2RldGVybWluZSBwYXRoIHRvIHZhbHVlIGxpc3QgcHJvcGVydHlcblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAoZW50cnkpIHtcblx0XHRcdGlmIChlbnRyeS5Mb2NhbERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gZW50cnkuTG9jYWxEYXRhUHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQnVpbGQgZmlsdGVycyBmb3IgZWFjaCByZWxldmFudCBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlSGVscFByb3BlcnR5IE5hbWUgb2YgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHlcblx0ICogQHBhcmFtIGtleVZhbHVlIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwUGF5bG9hZCBQYXlsb2FkIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgb2YgdGhlIGZpZWxkXG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgZmlsdGVyc1xuXHQgKi9cblx0X2dldEZpbHRlcjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwUHJvcGVydHk6IHN0cmluZyxcblx0XHRrZXlWYWx1ZTogc3RyaW5nLFxuXHRcdHZhbHVlaGVscFBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZFR5cGVbXSB8IHVuZGVmaW5lZCxcblx0XHRiaW5kaW5nQ29udGV4dD86IENvbnRleHQsXG5cdFx0ZmlsdGVyQmFyQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPlxuXHQpIHtcblx0XHRsZXQgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gdmFsdWVMaXN0LlBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluIHx8XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHx8XG5cdFx0XHRcdChwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZSAmJiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IHZhbHVlSGVscFByb3BlcnR5KVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBrZXlWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwUGF5bG9hZD8uaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2cgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgYXBkRmllbGRQYXRoID0gYEFQRF86OiR7cGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChhcGRGaWVsZFBhdGgpIGFzIEZpZWxkO1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGFwZEZpZWxkPy5nZXRWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uUGF5bG9hZCA9IHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ/LlswXTtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBzb3VyY2VQYXRoICYmIGNvbmRpdGlvblBheWxvYWQ/Lltzb3VyY2VQYXRoXTtcblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlIGhlbHAgaXMgbm90IHVzZWQgdHJ5IGdldHRpbmcgdGhlIGZpbHRlciB2YWx1ZSBmcm9tIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3Qoc291cmNlUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBhc3luYyBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpO1xuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IGNvbnRhaW5lci5nZXRTZWxlY3RlZENvbnRlbnQoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnRJZCA9IHNlbGVjdGVkQ29udGVudCAmJiBzZWxlY3RlZENvbnRlbnQuZ2V0SWQoKTtcblx0XHRcdC8vIEluIGNhc2VzIHdoZXJlIGdldEl0ZW1Gb3JWYWx1ZSBpcyBjYWxsZWQgYmVmb3JlIHNob3dWYWx1ZUxpc3QsIHRoZSBkZXNjcmlwdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZS5cblx0XHRcdC8vIFRoZXJlZm9yZSwgdGhpcyByZXRyaWV2ZUNvbnRlbnQgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBkZXNjcmlwdGlvbi5cblx0XHRcdGF3YWl0IFZhbHVlSGVscERlbGVnYXRlLnJldHJpZXZlQ29udGVudCh2YWx1ZUhlbHAsIGNvbnRhaW5lciwgY29udGVudElkKTtcblx0XHRcdGNvbnN0IG1heExlbmd0aCA9IHBheWxvYWQubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoIHx8IDA7XG5cdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aDtcblx0XHRcdGlmIChkZXNjcmlwdGlvblBhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgcHJvcGVydHkgdmFsdWUgaGVscCBjb2xsZWN0aW9uIGhhcyBubyB0ZXh0IGFubm90YXRpb24gKGRlc2NyaXB0aW9uUGF0aCBpcyBlbXB0eSkgdGhlIGRlc2NyaXB0aW9uIGNoZWNrIHNob3VsZG7CtHQgb2NjdXIuXG5cdFx0XHRcdC8vIEluIHN1Y2ggYSBjYXNlIHRoZSBtZXRob2QgZ2V0RGVzY3JpcHRpb24gd2lsbCBiZSBjYWxsZWQgYnkgTURDIGFuZCB3aXRoaW4gdGhpcyBtZXRob2QgYSBTaWRlRWZmZWN0IGlzIHJlcXVlc3RlZCB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSB0ZXh0IHByb3BlcnR5IG9mIHRoZSBtYWluIGVudGl0eVxuXHRcdFx0XHRjb25maWcuY2hlY2tEZXNjcmlwdGlvbiA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZUxlbmd0aCA+IG1heExlbmd0aCkge1xuXHRcdFx0XHQvL3ZhbHVlIGxlbmd0aCBpcyA+IHRleHQgcHJvZXBlcnR5IGxlbmd0aCBjb25zdHJhaW50XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldEl0ZW1Gb3JWYWx1ZShmaWVsZCwgdmFsdWVIZWxwLCBjb25maWcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBiYXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGQgRmllbGQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyIGJhciBpbnN0YW5jZVxuXHQgKi9cblx0X2dldEZpbHRlckJhcjogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCB8IG51bGwpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaWx0ZXJCYXJBUEk7XG5cdFx0aWYgKGZpZWxkPy5pc0EoXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHR3aGlsZSAoZmllbGQpIHtcblx0XHRcdFx0aWYgKGZpZWxkPy5pc0E8RmlsdGVyQmFyQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSSA9IGZpZWxkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkID0gZmllbGQ/LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgRmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmlsdGVyQmFyQVBJPy5nZXRDb250ZW50KCk/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4ga2V5LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIEZpZWxkIGhlbHAgYXNzaWduZWQgdG8gdGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBvciA8Y29kZT5GaWx0ZXJGaWVsZDwvY29kZT4gY29udHJvbFxuXHQgKiBAcGFyYW0ga2V5IEtleSB2YWx1ZSBvZiB0aGUgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIF9jb25kaXRpb25JbiBJbiBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk91dCBPdXQgcGFyYW1ldGVycyBmb3IgdGhlIGtleSAobm8gbG9uZ2VyIHN1cHBvcnRlZClcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IDxjb2RlPkJpbmRpbmdDb250ZXh0PC9jb2RlPiBvZiB0aGUgY2hlY2tlZCBmaWVsZC4gSW5zaWRlIGEgdGFibGUsIHRoZSA8Y29kZT5WYWx1ZUhlbHA8L2NvZGU+IGVsZW1lbnQgY2FuIGJlIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCByb3dcblx0ICogQHBhcmFtIF9Db25kaXRpb25Nb2RlbCBDb25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk1vZGVsTmFtZSBOYW1lIG9mIHRoZSA8Y29kZT5Db25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIHRoaXMga2V5XG5cdCAqIEBwYXJhbSBjb250cm9sIEluc3RhbmNlIG9mIHRoZSBjYWxsaW5nIGNvbnRyb2xcblx0ICogQHBhcmFtIF90eXBlIFR5cGUgb2YgdGhlIHZhbHVlXG5cdCAqIEByZXR1cm5zIERlc2NyaXB0aW9uIGZvciB0aGUga2V5IG9yIG9iamVjdCBjb250YWluaW5nIGEgZGVzY3JpcHRpb24sIGtleSBhbmQgcGF5bG9hZC4gSWYgdGhlIGRlc2NyaXB0aW9uIGlzIG5vdCBhdmFpbGFibGUgcmlnaHQgYXdheSAoaXQgbXVzdCBiZSByZXF1ZXN0ZWQpLCBhIDxjb2RlPlByb21pc2U8L2NvZGU+IGlzIHJldHVybmVkXG5cdCAqL1xuXHRnZXREZXNjcmlwdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGZpZWxkOiBGaWVsZCB8IG51bGwsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0X2NvbmRpdGlvbkluOiBvYmplY3QsXG5cdFx0X2NvbmRpdGlvbk91dDogb2JqZWN0LFxuXHRcdGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdF9Db25kaXRpb25Nb2RlbDogQ29uZGl0aW9uTW9kZWwsXG5cdFx0X2NvbmRpdGlvbk1vZGVsTmFtZTogc3RyaW5nLFxuXHRcdGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRNYXAsXG5cdFx0Y29udHJvbDogQ29udHJvbCxcblx0XHRfdHlwZTogdW5rbm93bixcblx0XHRlbXB0eUFsbG93ZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0Ly9KSVJBOiBGSU9SSVRFQ0hQMS0yMjAyMiAuIFRoZSBNREMgZmllbGQgc2hvdWxkIG5vdCAgdHJpZXMgdG8gZGV0ZXJtaW5lIGRlc2NyaXB0aW9uIHdpdGggdGhlIGluaXRpYWwgR0VUIG9mIHRoZSBkYXRhLlxuXHRcdC8vIGl0IHNob3VsZCByZWx5IG9uIHRoZSBkYXRhIHdlIGFscmVhZHkgcmVjZWl2ZWQgZnJvbSB0aGUgYmFja2VuZFxuXHRcdC8vIEJ1dCBUaGUgZ2V0RGVzY3JpcHRpb24gZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgaW4gdGhlIEZpbHRlckZpZWxkIGNhc2UgaWYgYSB2YXJpYW50IGlzIGxvYWRlZC5cblx0XHQvLyBBcyB0aGUgZGVzY3JpcHRpb24gdGV4dCBjb3VsZCBiZSBsYW5ndWFnZSBkZXBlbmRlbnQgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUgdmFyaWFudCwgc28gaXQgbmVlZHMgdG8gYmUgcmVhZCBvbiByZW5kZXJpbmcuXG5cblx0XHRsZXQgcGF5bG9hZCA9IGZpZWxkPy5nZXRQYXlsb2FkKCkgYXMgRmllbGRQYXlsb2FkO1xuXG5cdFx0LyogUmV0cmlldmUgdGV4dCBmcm9tIHZhbHVlIGhlbHAsIGlmIHZhbHVlIHdhcyBzZXQgYnkgb3V0LXBhcmFtZXRlciAoQkNQIDIyNzAxNjA2MzMpICovXG5cdFx0aWYgKCFwYXlsb2FkICYmIChjb250cm9sIGFzIEZpZWxkQmFzZSk/LmdldERpc3BsYXkoKS5pbmNsdWRlcyhcIkRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXlsb2FkID0ge1xuXHRcdFx0XHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChwYXlsb2FkPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID09PSB0cnVlIHx8IHBheWxvYWQ/LmlzRmlsdGVyRmllbGQgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbCA9IHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih2YWx1ZUhlbHAgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdC8vIElmIG5laXRoZXIgZGF0YU1vZGVsIG5vciBvd25lciBpcyBkZWZpbmVkLCB0aGUgdmFsdWVIZWxwIGNhbm5vdCBiZSBhbiBGRSBjb250cm9sLlxuXHRcdFx0Ly8gVGhpcyBvY2N1cnMgaW4gY2FzZXMgb2YgYSBzdGFuZGFyZCBNREMgY29udHJvbHMgKGUuZy4sIGRlZmF1bHQgVmFsdWVIZWxwIGZvciBib29sZWFuIHZhbHVlcykuXG5cdFx0XHRpZiAoIWRhdGFNb2RlbCAmJiAhb3duZXIpIHtcblx0XHRcdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldERlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdGZpZWxkIGFzIEZpZWxkQmFzZSxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdF9jb25kaXRpb25Jbixcblx0XHRcdFx0XHRfY29uZGl0aW9uT3V0LFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXlsb2FkLFxuXHRcdFx0XHRcdGNvbnRyb2wsXG5cdFx0XHRcdFx0X3R5cGUsXG5cdFx0XHRcdFx0ZW1wdHlBbGxvd2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBkYXRhTW9kZWxcblx0XHRcdFx0PyBkYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0OiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmFsdWVIZWxwIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2YWx1ZWhlbHBQYXlsb2FkID0gdmFsdWVIZWxwLmdldFBheWxvYWQoKSBhcyBWYWx1ZUhlbHBQYXlsb2FkO1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCA9IGNvbmRpdGlvblBheWxvYWQ/Llt2YWx1ZWhlbHBQYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllcl07XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkLnByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gdmFsdWVoZWxwUGF5bG9hZD8ucHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRsZXQgdGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8qIFJlcXVlc3QgdmFsdWUgaGVscCBtZXRhZGF0YSAqL1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgbWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHByb3BlcnR5UGF0aCwgdHJ1ZSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXIoZmllbGQpO1xuXHRcdFx0XHRsZXQgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyU3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnMgPSBmaWx0ZXJTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdFx0XHRcdC8vIHRha2UgdGhlIGZpcnN0IHZhbHVlIGxpc3QgYW5ub3RhdGlvbiAtIGFsdGVybmF0aXZlbHkgdGFrZSB0aGUgb25lIHdpdGhvdXQgcXVhbGlmaWVyIG9yIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0SW5mb1tPYmplY3Qua2V5cyh2YWx1ZUxpc3RJbmZvKVswXV07XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFBhcmFtZXRlcnMgPSB0aGlzLl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIodmFsdWVMaXN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBQcm9wZXJ0eSA9IHZhbHVlSGVscFBhcmFtZXRlcnM/LlswXT8uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGlmICghdmFsdWVIZWxwUHJvcGVydHkpIHtcblx0XHRcdFx0XHR0aHJvdyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtwcm9wZXJ0eU5hbWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgYW5ub3RhdGlvbiBmb3IgdGhpcyB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdE1vZGVsID0gdmFsdWVMaXN0LiRtb2RlbDtcblx0XHRcdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSB2YWx1ZUxpc3RNb2RlbFxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHt2YWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHRcdFx0aWYgKHRleHRBbm5vdGF0aW9uICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0dGV4dFByb3BlcnR5ID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgKi9cblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5fZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUHJvcGVydHksXG5cdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBQYXlsb2FkLFxuXHRcdFx0XHRcdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCxcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHQkc2VsZWN0OiB0ZXh0UHJvcGVydHlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvKiBSZXF1ZXN0IGRlc2NyaXB0aW9uIGZvciBnaXZlbiBrZXkgZnJvbSB2YWx1ZSBsaXN0IGVudGl0eSAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdHJldHVybiBjb250ZXh0cy5sZW5ndGggPyBjb250ZXh0c1swXS5nZXRPYmplY3QodGV4dFByb3BlcnR5KSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RQYXRoID0gbGFzdEluZGV4ID4gMCA/IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpIDogcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RQYXRoXSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFJlcXVlc3RTaWRlRWZmZWN0cyBpcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgdGV4dCBhbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZCBhdCB0aGUgQ29sbGVjdGlvblBhdGggb2YgdGhlIHZhbHVlIGhlbHBgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qIEVYVEVSTkFsSUQgKi9cblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0YCR7dmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYFxuXHRcdFx0XHRcdCk/LiRQYXRoO1xuXHRcdFx0XHRcdGlmIChleHRlcm5hbElkUGF0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWREZXNjcmlwdGlvblBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YClcblx0XHRcdFx0XHRcdFx0Py4kUGF0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogZXh0ZXJuYWxJZE5hbWUsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMToga2V5IH0pKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0TW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBgJHtleHRlcm5hbElkTmFtZX0sJHtleHRlcm5hbElkRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3QoZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihgVGV4dCBBbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yID8gKGVycm9yIGFzIFhNTEh0dHBSZXF1ZXN0KS5zdGF0dXMgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblx0XHRcdFx0TG9nLmVycm9yKG1zZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztTQWtEZUEsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixFQUFFO0lBQ25EQyxVQUFVLEVBQUUsQ0FBQztJQUViO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxLQUFZLEVBQUVDLElBQTRCLEVBQUVDLEtBQXNCLEVBQUU7TUFDeEc7TUFDQTtNQUNBOztNQUVBLE1BQU1DLE1BQTBCLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLElBQ0NGLElBQUksSUFDSkEsSUFBSSxDQUFDRyxHQUFHLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxrQ0FB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