@sapui5/sap.fe.macros 1.138.0 → 1.139.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 (184) 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 +21 -4
  8. package/src/sap/fe/macros/Field.ts +21 -3
  9. package/src/sap/fe/macros/FooterContent.js +40 -10
  10. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  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/MultiValueField.js +17 -4
  14. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  15. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  16. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  17. package/src/sap/fe/macros/Share.js +73 -40
  18. package/src/sap/fe/macros/Share.tsx +29 -1
  19. package/src/sap/fe/macros/ValueHelp.js +3 -4
  20. package/src/sap/fe/macros/ValueHelp.tsx +2 -3
  21. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  22. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  23. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  24. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  25. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  26. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  27. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  28. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
  33. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  34. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  35. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  36. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  37. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  38. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  39. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  40. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  41. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  42. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  43. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  44. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  45. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  46. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  47. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  48. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  49. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  50. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  51. package/src/sap/fe/macros/field/FieldBaseDelegate.js +9 -3
  52. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  55. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  56. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  57. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  58. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  59. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  60. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  61. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  62. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  63. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  64. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  65. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  66. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  67. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  68. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  69. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  70. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  71. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  72. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  73. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  74. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  75. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  76. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  77. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  78. package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
  79. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
  80. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  81. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  82. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  83. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  84. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  85. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  86. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  87. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
  88. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
  89. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  90. package/src/sap/fe/macros/library.js +1 -1
  91. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  92. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  93. package/src/sap/fe/macros/messagebundle.properties +37 -29
  94. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  95. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  96. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  97. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  98. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  99. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  100. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  101. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  102. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  103. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  104. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  105. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  106. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  107. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  108. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  109. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  110. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  111. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  112. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  113. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  114. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  116. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  117. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  118. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  119. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  120. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  121. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  122. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  123. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  124. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  125. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  126. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  128. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  129. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  131. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  132. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  133. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  135. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  137. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  138. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  139. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  140. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  141. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  142. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  143. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  144. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  145. package/src/sap/fe/macros/table/Action.js +24 -2
  146. package/src/sap/fe/macros/table/Action.ts +13 -0
  147. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  148. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  149. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  150. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  151. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  152. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  153. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  154. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  155. package/src/sap/fe/macros/table/Column.js +3 -3
  156. package/src/sap/fe/macros/table/Column.ts +2 -2
  157. package/src/sap/fe/macros/table/MdcTableTemplate.js +18 -8
  158. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
  159. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  160. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  161. package/src/sap/fe/macros/table/Table.block.js +137 -108
  162. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  163. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  164. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  165. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  166. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  167. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  168. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  169. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
  170. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
  171. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  172. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  173. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  174. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  175. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  176. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  177. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  178. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  179. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
  180. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
  181. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  182. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  183. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  184. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -72,6 +72,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
72
72
  const rowHighlighting = function (criticalityValue, aFilteredMessages, hasActiveEntity, isActiveEntity, isDraftMode,
73
73
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
74
  contextPath, isInactive) {
75
+ // Sanitize string "undefined" values to actual undefined
76
+ aFilteredMessages = aFilteredMessages === "undefined" ? undefined : aFilteredMessages;
77
+ hasActiveEntity = hasActiveEntity === "undefined" ? undefined : hasActiveEntity;
78
+ isActiveEntity = isActiveEntity === "undefined" ? undefined : isActiveEntity;
79
+ isInactive = isInactive === "undefined" ? undefined : isInactive;
75
80
  let iHighestCriticalityValue = -1;
76
81
  if (aFilteredMessages && aFilteredMessages.length > 0) {
77
82
  const sCurrentContextPath = this.getBindingContext()?.getPath();
@@ -159,6 +164,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
159
164
  const unitOrTimezone = property.exportSettings?.unit || property.exportSettings?.timezone;
160
165
  columnWidth += unitOrTimezone ? SizeHelper.getButtonWidth(unitOrTimezone) : 0;
161
166
  if (editMode === FieldEditMode.Editable) {
167
+ const unitOrCurrencyProperty = property.exportSettings?.unitProperty; // the unitProperty attribute is used for currency and unit on the export settings
168
+ if (unitOrCurrencyProperty) {
169
+ columnWidth += 3;
170
+ }
162
171
  switch (property.typeConfig?.baseType) {
163
172
  case "Date":
164
173
  case "Time":
@@ -268,4 +277,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
268
277
  ObjectPath.set("sap.fe.macros.formatters.TableFormatter", tableFormatter);
269
278
  return tableFormatter;
270
279
  }, false);
271
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXNzYWdldHlwZU9yZGVyIiwibWVzc2FnZVR5cGUiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZmllbGRWYWxpZGl0eU9iamVjdCIsImZpZWxkS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJldmVyeSIsImtleSIsIl9fZnVuY3Rpb25OYW1lIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsImNvbHVtbk5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwic3RhdHVzVmlzaWJpbGl0eSIsInNDdXJyZW50Q29udGV4dFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0cyIsImluZGV4T2YiLCJyb3dIaWdobGlnaHRpbmciLCJjcml0aWNhbGl0eVZhbHVlIiwiaGFzQWN0aXZlRW50aXR5IiwiaXNBY3RpdmVFbnRpdHkiLCJpc0RyYWZ0TW9kZSIsImNvbnRleHRQYXRoIiwiaXNJbmFjdGl2ZSIsImlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIk5vbmUiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsIkxvZyIsImVycm9yIiwiaXNOZXdPYmplY3QiLCJuYXZpZ2F0ZWRSb3ciLCJkZWVwZXN0UGF0aCIsInNQYXRoIiwiZ2V0Q29sdW1uV2lkdGgiLCJlZGl0TW9kZSIsImlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlIiwicHJvcGVydHlOYW1lIiwidXNlUmVtVW5pdCIsImFyZ3VtZW50cyIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiaXNTb3J0YWJsZUNvbHVtbiIsImlzQ29sdW1uUmVxdWlyZWQiLCJtZGNUYWJsZSIsImdldFBhcmVudCIsInByb3BlcnRpZXMiLCJpc0EiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJjb2x1bW5XaWR0aCIsIlRhYmxlU2l6ZUhlbHBlciIsImdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5IiwidW5pdE9yVGltZXpvbmUiLCJleHBvcnRTZXR0aW5ncyIsInVuaXQiLCJ0aW1lem9uZSIsIlNpemVIZWxwZXIiLCJnZXRCdXR0b25XaWR0aCIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsInR5cGVDb25maWciLCJiYXNlVHlwZSIsImdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGUiLCJpc1RhcmdldFNtYWxsRGV2aWNlIiwiaXNTbWFsbERldmljZSIsIkNvbW1vblV0aWxzIiwid2l0aFVuaXQiLCJ0YWJsZUZvcm1hdHRlciIsImNhbGwiLCJEaXNwbGF5IiwiaXNSYXRpbmdJbmRpY2F0b3IiLCJvQ29udHJvbCIsInZDb250ZW50RGlzcGxheSIsIkFycmF5IiwiaXNBcnJheSIsImdldENvbnRlbnREaXNwbGF5IiwiX3VwZGF0ZVN0eWxlQ2xhc3NGb3JSYXRpbmdJbmRpY2F0b3IiLCJmaWVsZFdyYXBwZXIiLCJsYXN0IiwidkNvbnRlbnRFZGl0IiwiZ2V0Q29udGVudEVkaXQiLCJhZGRTdHlsZUNsYXNzIiwicmVtb3ZlU3R5bGVDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiYUl0ZW1zIiwiZ2V0SXRlbXMiLCJiTGFzdEVsZW1lbnRGb3VuZCIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImluZGV4Iiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4yIiwib0FyZ3MiLCJfa2V5MiIsImFwcGx5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVGb3JtYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwiLi4vY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5cbmNvbnN0IGdldE1lc3NhZ2V0eXBlT3JkZXIgPSBmdW5jdGlvbiAobWVzc2FnZVR5cGU6IHN0cmluZyk6IG51bWJlciB7XG5cdHN3aXRjaCAobWVzc2FnZVR5cGUpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiA0O1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gMztcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiAyO1xuXHRcdGNhc2UgXCJOb25lXCI6XG5cdFx0XHRyZXR1cm4gMTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIC0xO1xuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbGlkaXR5IG9mIGNyZWF0aW9uIHJvdyBmaWVsZHMuXG4gKiBAcGFyYW0gZmllbGRWYWxpZGl0eU9iamVjdCBPYmplY3QgaG9sZGluZyB0aGUgZmllbGRzXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIHRoZSBmaWVsZHMgaW4gdGhlIGNyZWF0aW9uIHJvdyBhcmUgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IHZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMgPSBmdW5jdGlvbiAoZmllbGRWYWxpZGl0eU9iamVjdD86IFJlY29yZDxzdHJpbmcsIHsgdmFsaWRpdHk6IGJvb2xlYW4gfT4pOiBib29sZWFuIHtcblx0aWYgKCFmaWVsZFZhbGlkaXR5T2JqZWN0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkVmFsaWRpdHlPYmplY3QpO1xuXHRyZXR1cm4gKFxuXHRcdGZpZWxkS2V5cy5sZW5ndGggPiAwICYmXG5cdFx0ZmllbGRLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBmaWVsZFZhbGlkaXR5T2JqZWN0W2tleV1bXCJ2YWxpZGl0eVwiXTtcblx0XHR9KVxuXHQpO1xufTtcbnZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciN2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzXCI7XG5cbi8qKlxuICogQHBhcmFtIHRoaXMgVGhlIG9iamVjdCBzdGF0dXMgY29udHJvbC5cbiAqIEBwYXJhbSBzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBkcmFmdCBpbmRpY2F0b3IuXG4gKiBAcGFyYW0gYUZpbHRlcmVkTWVzc2FnZXMgQXJyYXkgb2YgbWVzc2FnZXMuXG4gKiBAcGFyYW0gY29sdW1uTmFtZVxuICogQHBhcmFtIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgRmxhZyB3aGljaCBzYXlzIGlmIHNlbWFudGljIGtleSBpcyBhIHBhcnQgb2YgZmllbGQgZ3JvdXAuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIHRoZSB2aXNpYmlsaXR5IHByb3BlcnR5IG9mIHRoZSBvYmplY3Qgc3RhdHVzXG4gKi9cbmNvbnN0IGdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoXG5cdHRoaXM6IE1hbmFnZWRPYmplY3QsXG5cdHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0YUZpbHRlcmVkTWVzc2FnZXM6IE1lc3NhZ2VbXSxcblx0Y29sdW1uTmFtZTogc3RyaW5nLFxuXHRpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBzdGF0dXNWaXNpYmlsaXR5ID0gZmFsc2U7XG5cdGlmIChhRmlsdGVyZWRNZXNzYWdlcyAmJiBhRmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPiAwICYmIChpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIHx8IGNvbHVtbk5hbWUgPT09IHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IpKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRDb250ZXh0UGF0aCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSA/IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIDogdW5kZWZpbmVkO1xuXHRcdGFGaWx0ZXJlZE1lc3NhZ2VzLmZvckVhY2goKG9NZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAob01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgJiYgc0N1cnJlbnRDb250ZXh0UGF0aCAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihzQ3VycmVudENvbnRleHRQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRzdGF0dXNWaXNpYmlsaXR5ID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHN0YXR1c1Zpc2liaWxpdHk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHN0YXR1c1Zpc2liaWxpdHk7XG59O1xuZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlci5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyI2dldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcIjtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSByb3cgaGlnaGxpZ2h0aW5nIGJhc2VkIG9uIHRoZSBjcml0aWNhbGl0eSB2YWx1ZSBhbmQgdGhlIG1lc3NhZ2VzLlxuICogQHBhcmFtIGNyaXRpY2FsaXR5VmFsdWVcbiAqIEBwYXJhbSBhRmlsdGVyZWRNZXNzYWdlc1xuICogQHBhcmFtIGhhc0FjdGl2ZUVudGl0eVxuICogQHBhcmFtIGlzQWN0aXZlRW50aXR5XG4gKiBAcGFyYW0gaXNEcmFmdE1vZGVcbiAqIEBwYXJhbSBjb250ZXh0UGF0aFxuICogQHBhcmFtIGlzSW5hY3RpdmVcbiAqL1xuY29uc3Qgcm93SGlnaGxpZ2h0aW5nID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBNYW5hZ2VkT2JqZWN0LFxuXHRjcml0aWNhbGl0eVZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG5cdGFGaWx0ZXJlZE1lc3NhZ2VzOiBNZXNzYWdlW10sXG5cdGhhc0FjdGl2ZUVudGl0eTogYm9vbGVhbixcblx0aXNBY3RpdmVFbnRpdHk6IGJvb2xlYW4sXG5cdGlzRHJhZnRNb2RlOiBzdHJpbmcsXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0aXNJbmFjdGl2ZTogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgaUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gLTE7XG5cdGlmIChhRmlsdGVyZWRNZXNzYWdlcyAmJiBhRmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRDb250ZXh0UGF0aCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGFGaWx0ZXJlZE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0c0N1cnJlbnRDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmRleE9mKHNDdXJyZW50Q29udGV4dFBhdGgpID09PSAwICYmXG5cdFx0XHRcdGlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSA8IGdldE1lc3NhZ2V0eXBlT3JkZXIobWVzc2FnZS5nZXRUeXBlKCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gZ2V0TWVzc2FnZXR5cGVPcmRlcihtZXNzYWdlLmdldFR5cGUoKSk7XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlLmdldFR5cGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5VmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRzd2l0Y2ggKGNyaXRpY2FsaXR5VmFsdWUpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDU6XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShPYmplY3QudmFsdWVzKE1lc3NhZ2VUeXBlKSBhcyBzdHJpbmdbXSkuaW5jbHVkZXMoY3JpdGljYWxpdHlWYWx1ZSkpIHtcblx0XHRMb2cuZXJyb3IoYCcke2NyaXRpY2FsaXR5VmFsdWV9JyBpc24ndCBhIHZhbGlkIHZhbHVlIGZvciBhIHJvdyBoaWdobGlnaHQuYCk7XG5cdFx0cmV0dXJuIE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGNhbGN1bGF0ZWQgYSBjcml0aWNhbGl0eSA8PiBOb25lLCByZXR1cm4gaXRcblx0aWYgKGNyaXRpY2FsaXR5VmFsdWUgIT09IE1lc3NhZ2VUeXBlLk5vbmUpIHtcblx0XHRyZXR1cm4gY3JpdGljYWxpdHlWYWx1ZSBhcyBNZXNzYWdlVHlwZTtcblx0fVxuXG5cdC8vIElmIG5vdCwgd2Ugc2V0IGNyaXRpY2FsaXR5IHRvICdJbmZvcm1hdGlvbicgZm9yIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiBEcmFmdCBtb2RlLCBhbmQga2VlcCAnTm9uZScgb3RoZXJ3aXNlXG5cdGNvbnN0IGlzTmV3T2JqZWN0ID0gIWhhc0FjdGl2ZUVudGl0eSAmJiAhaXNBY3RpdmVFbnRpdHkgJiYgIWlzSW5hY3RpdmU7XG5cdHJldHVybiBpc0RyYWZ0TW9kZSA9PT0gXCJ0cnVlXCIgJiYgaXNOZXdPYmplY3QgPyBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA6IE1lc3NhZ2VUeXBlLk5vbmU7XG59O1xucm93SGlnaGxpZ2h0aW5nLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjcm93SGlnaGxpZ2h0aW5nXCI7XG5cbmNvbnN0IG5hdmlnYXRlZFJvdyA9IGZ1bmN0aW9uICh0aGlzOiBNYW5hZ2VkT2JqZWN0LCBkZWVwZXN0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHNQYXRoID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdGlmIChzUGF0aCAmJiBkZWVwZXN0UGF0aCkge1xuXHRcdHJldHVybiBkZWVwZXN0UGF0aC5pbmRleE9mKHNQYXRoKSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5uYXZpZ2F0ZWRSb3cuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNuYXZpZ2F0ZWRSb3dcIjtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBhbiBNRENDb2x1bW4gYmFzZWQgb24gdGhlIHByb3BlcnR5IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gdGhpcyBUaGUgTURDQ29sdW1uIG9iamVjdFxuICogQHBhcmFtIGVkaXRNb2RlIFRoZSBFZGl0TW9kZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSBJbmRpY2F0ZXMgaWYgdGhlIHByb3BlcnRpZXMgY2FjaGUgaXMgYXZhaWxhYmxlXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGhcbiAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGhlYWRlciBzaG91bGQgYmUgYSBwYXJ0IG9mIHRoZSB3aWR0aCBjYWxjdWxhdGlvbi5cbiAqIEBwYXJhbSBpc1NvcnRhYmxlQ29sdW1uIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKiBAcGFyYW0gaXNDb2x1bW5SZXF1aXJlZFxuICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgZ2V0Q29sdW1uV2lkdGggPSBmdW5jdGlvbiAoXG5cdHRoaXM6IENvbHVtbixcblx0ZWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUsXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dXNlUmVtVW5pdCA9IHRydWUsXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gZmFsc2UsXG5cdGlzU29ydGFibGVDb2x1bW4gPSBmYWxzZSxcblx0aXNDb2x1bW5SZXF1aXJlZCA9IGZhbHNlXG4pOiBzdHJpbmcgfCBudWxsIHwgbnVtYmVyIHtcblx0aWYgKCFpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0bGV0IHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXTtcblx0aWYgKG1kY1RhYmxlPy5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5NRENUYWJsZVwiKSkge1xuXHRcdHByb3BlcnRpZXMgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyh0aGlzLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlKSBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW107XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydGllcyA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHR9XG5cdGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLmtleSA9PT0gcHJvcGVydHlOYW1lKTtcblx0aWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG5cblx0bGV0IGNvbHVtbldpZHRoID0gVGFibGVTaXplSGVscGVyLmdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5KFxuXHRcdHByb3BlcnR5LFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsXG5cdFx0aXNTb3J0YWJsZUNvbHVtbixcblx0XHRpc0NvbHVtblJlcXVpcmVkXG5cdCk7XG5cdGNvbnN0IHVuaXRPclRpbWV6b25lID0gcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnVuaXQgfHwgcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lO1xuXHRjb2x1bW5XaWR0aCArPSB1bml0T3JUaW1lem9uZSA/IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodW5pdE9yVGltZXpvbmUpIDogMDtcblx0aWYgKGVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0c3dpdGNoIChwcm9wZXJ0eS50eXBlQ29uZmlnPy5iYXNlVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRhdGVcIjpcblx0XHRcdGNhc2UgXCJUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRGF0ZVRpbWVcIjpcblx0XHRcdFx0Y29sdW1uV2lkdGggKz0gMi44O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHR9XG5cdGlmICh1c2VSZW1Vbml0KSB7XG5cdFx0cmV0dXJuIGNvbHVtbldpZHRoICsgXCJyZW1cIjtcblx0fVxuXHRyZXR1cm4gY29sdW1uV2lkdGg7XG59O1xuZ2V0Q29sdW1uV2lkdGguX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aFwiO1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGFuIE1EQ0NvbHVtbiBmb3IgdmFsdWVIZWxwIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0aGlzIFRoZSBNRENDb2x1bW4gb2JqZWN0XG4gKiBAcGFyYW0gaXNQcm9wZXJ0aWVzQ2FjaGVBdmFpbGFibGUgSW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0aWVzIGNhY2hlIGlzIGF2YWlsYWJsZVxuICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoXG4gKiBAcGFyYW0gaXNUYXJnZXRTbWFsbERldmljZSBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIGhhcyBhIHNtYWxsIGRldmljZVxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG4gKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtblxuICovXG5jb25zdCBnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBDb2x1bW4sXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0aXNUYXJnZXRTbWFsbERldmljZTogYm9vbGVhbixcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPSBmYWxzZVxuKTogbnVsbCB8IG51bWJlciB7XG5cdGNvbnN0IGlzU21hbGxEZXZpY2UgPSBDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCk7XG5cdGNvbnN0IHdpdGhVbml0ID0gIWlzU21hbGxEZXZpY2U7XG5cblx0cmV0dXJuIChpc1NtYWxsRGV2aWNlICYmIGlzVGFyZ2V0U21hbGxEZXZpY2UpIHx8ICghaXNTbWFsbERldmljZSAmJiAhaXNUYXJnZXRTbWFsbERldmljZSlcblx0XHQ/ICh0YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRcdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHdpdGhVbml0LFxuXHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdCAgKSBhcyBudWxsIHwgbnVtYmVyKVxuXHRcdDogbnVsbDtcbn07XG5cbmdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlXCI7XG5cbnR5cGUgRmllbGRXcmFwcGVyRml4ZWQgPSBGaWVsZFdyYXBwZXIgJiB7IGdldENvbnRlbnREaXNwbGF5OiBGdW5jdGlvbjsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH07XG5mdW5jdGlvbiBpc1JhdGluZ0luZGljYXRvcihvQ29udHJvbDogRmllbGRXcmFwcGVyRml4ZWQpOiBib29sZWFuIHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpKSB7XG5cdFx0Y29uc3QgdkNvbnRlbnREaXNwbGF5ID0gQXJyYXkuaXNBcnJheShvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpKVxuXHRcdFx0PyBvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpWzBdXG5cdFx0XHQ6IG9Db250cm9sLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdFx0aWYgKHZDb250ZW50RGlzcGxheSAmJiB2Q29udGVudERpc3BsYXkuaXNBKFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlU3R5bGVDbGFzc0ZvclJhdGluZ0luZGljYXRvcihmaWVsZFdyYXBwZXI6IEZpZWxkV3JhcHBlckZpeGVkLCBsYXN0OiBib29sZWFuKTogdm9pZCB7XG5cdGNvbnN0IHZDb250ZW50RGlzcGxheSA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCkpXG5cdFx0PyBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKVswXVxuXHRcdDogZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdGNvbnN0IHZDb250ZW50RWRpdCA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KCkpID8gZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KClbMF0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblxuXHRpZiAobGFzdCkge1xuXHRcdHZDb250ZW50RGlzcGxheS5hZGRTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpbkJvdHRvbVwiKTtcblx0XHR2Q29udGVudERpc3BsYXkuYWRkU3R5bGVDbGFzcyhcInNhcFVpTm9NYXJnaW5Ub3BcIik7XG5cdFx0dkNvbnRlbnRFZGl0LnJlbW92ZVN0eWxlQ2xhc3MoXCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIik7XG5cdH0gZWxzZSB7XG5cdFx0dkNvbnRlbnREaXNwbGF5LmFkZFN0eWxlQ2xhc3MoXCJzYXBVaU5vTWFyZ2luQm90dG9tXCIpO1xuXHRcdHZDb250ZW50RGlzcGxheS5yZW1vdmVTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpblRvcFwiKTtcblx0XHR2Q29udGVudEVkaXQuYWRkU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VkJveFZpc2liaWxpdHkodGhpczogVGFibGUsIC4uLmFyZ3M6IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRjb25zdCBhSXRlbXMgPSB0aGlzLmdldEl0ZW1zKCkgYXMgdW5rbm93biBhcyBGaWVsZFdyYXBwZXJGaXhlZFtdO1xuXHRsZXQgYkxhc3RFbGVtZW50Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaW5kZXggPSBhSXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuXHRcdGlmICghYkxhc3RFbGVtZW50Rm91bmQpIHtcblx0XHRcdGlmIChhcmdzW2luZGV4XSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRiTGFzdEVsZW1lbnRGb3VuZCA9IHRydWU7XG5cdFx0XHRcdGlmIChpc1JhdGluZ0luZGljYXRvcihhSXRlbXNbaW5kZXhdKSkge1xuXHRcdFx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFJdGVtc1tpbmRleF0ucmVtb3ZlU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNSYXRpbmdJbmRpY2F0b3IoYUl0ZW1zW2luZGV4XSkpIHtcblx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YUl0ZW1zW2luZGV4XS5hZGRTdHlsZUNsYXNzKFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmdldFZCb3hWaXNpYmlsaXR5Ll9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjZ2V0VkJveFZpc2liaWxpdHlcIjtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVycyBmb3IgbW9yZSBkZXRhaWwgb24gdGhpcyB3ZWlyZCBzeW50YXhcbi8qKlxuICogQ29sbGVjdGlvbiBvZiB0YWJsZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgdGFibGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAodGhpczogb2JqZWN0LCBzTmFtZTogc3RyaW5nLCAuLi5vQXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG5cdGlmICh0YWJsZUZvcm1hdHRlci5oYXNPd25Qcm9wZXJ0eShzTmFtZSkpIHtcblx0XHRyZXR1cm4gKHRhYmxlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG50YWJsZUZvcm1hdHRlci52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzID0gdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcztcbnRhYmxlRm9ybWF0dGVyLnJvd0hpZ2hsaWdodGluZyA9IHJvd0hpZ2hsaWdodGluZztcbnRhYmxlRm9ybWF0dGVyLm5hdmlnYXRlZFJvdyA9IG5hdmlnYXRlZFJvdztcbnRhYmxlRm9ybWF0dGVyLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIgPSBnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyO1xudGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkgPSBnZXRWQm94VmlzaWJpbGl0eTtcbnRhYmxlRm9ybWF0dGVyLmlzUmF0aW5nSW5kaWNhdG9yID0gaXNSYXRpbmdJbmRpY2F0b3I7IC8vIGZvciB1bml0IHRlc3RzXG50YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aCA9IGdldENvbHVtbldpZHRoO1xudGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhGb3JWYWx1ZUhlbHBUYWJsZSA9IGdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGU7XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyXCIsIHRhYmxlRm9ybWF0dGVyKTtcblxuZXhwb3J0IGRlZmF1bHQgdGFibGVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFpQkEsTUFBTUEsbUJBQW1CLEdBQUcsU0FBQUEsQ0FBVUMsV0FBbUIsRUFBVTtJQUNsRSxRQUFRQSxXQUFXO01BQ2xCLEtBQUssT0FBTztRQUNYLE9BQU8sQ0FBQztNQUNULEtBQUssU0FBUztRQUNiLE9BQU8sQ0FBQztNQUNULEtBQUssYUFBYTtRQUNqQixPQUFPLENBQUM7TUFDVCxLQUFLLE1BQU07UUFDVixPQUFPLENBQUM7TUFDVDtRQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxTQUFBQSxDQUFVQyxtQkFBMkQsRUFBVztJQUNqSCxJQUFJLENBQUNBLG1CQUFtQixFQUFFO01BQ3pCLE9BQU8sS0FBSztJQUNiO0lBQ0EsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsbUJB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
280
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXNzYWdldHlwZU9yZGVyIiwibWVzc2FnZVR5cGUiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZmllbGRWYWxpZGl0eU9iamVjdCIsImZpZWxkS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJldmVyeSIsImtleSIsIl9fZnVuY3Rpb25OYW1lIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsImNvbHVtbk5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwic3RhdHVzVmlzaWJpbGl0eSIsInNDdXJyZW50Q29udGV4dFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0cyIsImluZGV4T2YiLCJyb3dIaWdobGlnaHRpbmciLCJjcml0aWNhbGl0eVZhbHVlIiwiaGFzQWN0aXZlRW50aXR5IiwiaXNBY3RpdmVFbnRpdHkiLCJpc0RyYWZ0TW9kZSIsImNvbnRleHRQYXRoIiwiaXNJbmFjdGl2ZSIsImlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIk5vbmUiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsIkxvZyIsImVycm9yIiwiaXNOZXdPYmplY3QiLCJuYXZpZ2F0ZWRSb3ciLCJkZWVwZXN0UGF0aCIsInNQYXRoIiwiZ2V0Q29sdW1uV2lkdGgiLCJlZGl0TW9kZSIsImlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlIiwicHJvcGVydHlOYW1lIiwidXNlUmVtVW5pdCIsImFyZ3VtZW50cyIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiaXNTb3J0YWJsZUNvbHVtbiIsImlzQ29sdW1uUmVxdWlyZWQiLCJtZGNUYWJsZSIsImdldFBhcmVudCIsInByb3BlcnRpZXMiLCJpc0EiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJjb2x1bW5XaWR0aCIsIlRhYmxlU2l6ZUhlbHBlciIsImdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5IiwidW5pdE9yVGltZXpvbmUiLCJleHBvcnRTZXR0aW5ncyIsInVuaXQiLCJ0aW1lem9uZSIsIlNpemVIZWxwZXIiLCJnZXRCdXR0b25XaWR0aCIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsInVuaXRPckN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJ0eXBlQ29uZmlnIiwiYmFzZVR5cGUiLCJnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlIiwiaXNUYXJnZXRTbWFsbERldmljZSIsImlzU21hbGxEZXZpY2UiLCJDb21tb25VdGlscyIsIndpdGhVbml0IiwidGFibGVGb3JtYXR0ZXIiLCJjYWxsIiwiRGlzcGxheSIsImlzUmF0aW5nSW5kaWNhdG9yIiwib0NvbnRyb2wiLCJ2Q29udGVudERpc3BsYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRDb250ZW50RGlzcGxheSIsIl91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yIiwiZmllbGRXcmFwcGVyIiwibGFzdCIsInZDb250ZW50RWRpdCIsImdldENvbnRlbnRFZGl0IiwiYWRkU3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJnZXRWQm94VmlzaWJpbGl0eSIsImFJdGVtcyIsImdldEl0ZW1zIiwiYkxhc3RFbGVtZW50Rm91bmQiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJpbmRleCIsInNOYW1lIiwiaGFzT3duUHJvcGVydHkiLCJfbGVuMiIsIm9BcmdzIiwiX2tleTIiLCJhcHBseSIsIk9iamVjdFBhdGgiLCJzZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuXG5jb25zdCBnZXRNZXNzYWdldHlwZU9yZGVyID0gZnVuY3Rpb24gKG1lc3NhZ2VUeXBlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gNDtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIDM7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gMjtcblx0XHRjYXNlIFwiTm9uZVwiOlxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAtMTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWxpZGl0eSBvZiBjcmVhdGlvbiByb3cgZmllbGRzLlxuICogQHBhcmFtIGZpZWxkVmFsaWRpdHlPYmplY3QgT2JqZWN0IGhvbGRpbmcgdGhlIGZpZWxkc1xuICogQHJldHVybnMgYHRydWVgIGlmIGFsbCB0aGUgZmllbGRzIGluIHRoZSBjcmVhdGlvbiByb3cgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZVxuICovXG5jb25zdCB2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzID0gZnVuY3Rpb24gKGZpZWxkVmFsaWRpdHlPYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCB7IHZhbGlkaXR5OiBib29sZWFuIH0+KTogYm9vbGVhbiB7XG5cdGlmICghZmllbGRWYWxpZGl0eU9iamVjdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhmaWVsZFZhbGlkaXR5T2JqZWN0KTtcblx0cmV0dXJuIChcblx0XHRmaWVsZEtleXMubGVuZ3RoID4gMCAmJlxuXHRcdGZpZWxkS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4gZmllbGRWYWxpZGl0eU9iamVjdFtrZXldW1widmFsaWRpdHlcIl07XG5cdFx0fSlcblx0KTtcbn07XG52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkc1wiO1xuXG4vKipcbiAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3Qgc3RhdHVzIGNvbnRyb2wuXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgZHJhZnQgaW5kaWNhdG9yLlxuICogQHBhcmFtIGFGaWx0ZXJlZE1lc3NhZ2VzIEFycmF5IG9mIG1lc3NhZ2VzLlxuICogQHBhcmFtIGNvbHVtbk5hbWVcbiAqIEBwYXJhbSBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIEZsYWcgd2hpY2ggc2F5cyBpZiBzZW1hbnRpYyBrZXkgaXMgYSBwYXJ0IG9mIGZpZWxkIGdyb3VwLlxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciB0aGUgdmlzaWJpbGl0eSBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHN0YXR1c1xuICovXG5jb25zdCBnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBNYW5hZ2VkT2JqZWN0LFxuXHRzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yOiBzdHJpbmcsXG5cdGFGaWx0ZXJlZE1lc3NhZ2VzOiBNZXNzYWdlW10sXG5cdGNvbHVtbk5hbWU6IHN0cmluZyxcblx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cD86IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRsZXQgc3RhdHVzVmlzaWJpbGl0eSA9IGZhbHNlO1xuXHRpZiAoYUZpbHRlcmVkTWVzc2FnZXMgJiYgYUZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID4gMCAmJiAoaXNTZW1hbnRpY0tleUluRmllbGRHcm91cCB8fCBjb2x1bW5OYW1lID09PSBzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yKSkge1xuXHRcdGNvbnN0IHNDdXJyZW50Q29udGV4dFBhdGggPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgPyB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA6IHVuZGVmaW5lZDtcblx0XHRhRmlsdGVyZWRNZXNzYWdlcy5mb3JFYWNoKChvTWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiICYmIHNDdXJyZW50Q29udGV4dFBhdGggJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yoc0N1cnJlbnRDb250ZXh0UGF0aCkgPT09IDApIHtcblx0XHRcdFx0c3RhdHVzVmlzaWJpbGl0eSA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBzdGF0dXNWaXNpYmlsaXR5O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzdGF0dXNWaXNpYmlsaXR5O1xufTtcbmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXCI7XG5cbi8qKlxuICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgcm93IGhpZ2hsaWdodGluZyBiYXNlZCBvbiB0aGUgY3JpdGljYWxpdHkgdmFsdWUgYW5kIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBjcml0aWNhbGl0eVZhbHVlXG4gKiBAcGFyYW0gYUZpbHRlcmVkTWVzc2FnZXNcbiAqIEBwYXJhbSBoYXNBY3RpdmVFbnRpdHlcbiAqIEBwYXJhbSBpc0FjdGl2ZUVudGl0eVxuICogQHBhcmFtIGlzRHJhZnRNb2RlXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEBwYXJhbSBpc0luYWN0aXZlXG4gKi9cbmNvbnN0IHJvd0hpZ2hsaWdodGluZyA9IGZ1bmN0aW9uIChcblx0dGhpczogTWFuYWdlZE9iamVjdCxcblx0Y3JpdGljYWxpdHlWYWx1ZTogc3RyaW5nIHwgbnVtYmVyLFxuXHRhRmlsdGVyZWRNZXNzYWdlczogTWVzc2FnZVtdIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRoYXNBY3RpdmVFbnRpdHk6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGlzQWN0aXZlRW50aXR5OiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0TW9kZTogc3RyaW5nLFxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdGlzSW5hY3RpdmU6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IE1lc3NhZ2VUeXBlIHtcblx0Ly8gU2FuaXRpemUgc3RyaW5nIFwidW5kZWZpbmVkXCIgdmFsdWVzIHRvIGFjdHVhbCB1bmRlZmluZWRcblx0YUZpbHRlcmVkTWVzc2FnZXMgPSBhRmlsdGVyZWRNZXNzYWdlcyA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IGFGaWx0ZXJlZE1lc3NhZ2VzO1xuXHRoYXNBY3RpdmVFbnRpdHkgPSBoYXNBY3RpdmVFbnRpdHkgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBoYXNBY3RpdmVFbnRpdHk7XG5cdGlzQWN0aXZlRW50aXR5ID0gaXNBY3RpdmVFbnRpdHkgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBpc0FjdGl2ZUVudGl0eTtcblx0aXNJbmFjdGl2ZSA9IGlzSW5hY3RpdmUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBpc0luYWN0aXZlO1xuXHRsZXQgaUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gLTE7XG5cdGlmIChhRmlsdGVyZWRNZXNzYWdlcyAmJiBhRmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRDb250ZXh0UGF0aCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdChhRmlsdGVyZWRNZXNzYWdlcyBhcyBNZXNzYWdlW10pLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0c0N1cnJlbnRDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmRleE9mKHNDdXJyZW50Q29udGV4dFBhdGgpID09PSAwICYmXG5cdFx0XHRcdGlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSA8IGdldE1lc3NhZ2V0eXBlT3JkZXIobWVzc2FnZS5nZXRUeXBlKCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gZ2V0TWVzc2FnZXR5cGVPcmRlcihtZXNzYWdlLmdldFR5cGUoKSk7XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlLmdldFR5cGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5VmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRzd2l0Y2ggKGNyaXRpY2FsaXR5VmFsdWUpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDU6XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShPYmplY3QudmFsdWVzKE1lc3NhZ2VUeXBlKSBhcyBzdHJpbmdbXSkuaW5jbHVkZXMoY3JpdGljYWxpdHlWYWx1ZSkpIHtcblx0XHRMb2cuZXJyb3IoYCcke2NyaXRpY2FsaXR5VmFsdWV9JyBpc24ndCBhIHZhbGlkIHZhbHVlIGZvciBhIHJvdyBoaWdobGlnaHQuYCk7XG5cdFx0cmV0dXJuIE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGNhbGN1bGF0ZWQgYSBjcml0aWNhbGl0eSA8PiBOb25lLCByZXR1cm4gaXRcblx0aWYgKGNyaXRpY2FsaXR5VmFsdWUgIT09IE1lc3NhZ2VUeXBlLk5vbmUpIHtcblx0XHRyZXR1cm4gY3JpdGljYWxpdHlWYWx1ZSBhcyBNZXNzYWdlVHlwZTtcblx0fVxuXG5cdC8vIElmIG5vdCwgd2Ugc2V0IGNyaXRpY2FsaXR5IHRvICdJbmZvcm1hdGlvbicgZm9yIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiBEcmFmdCBtb2RlLCBhbmQga2VlcCAnTm9uZScgb3RoZXJ3aXNlXG5cdGNvbnN0IGlzTmV3T2JqZWN0ID0gIWhhc0FjdGl2ZUVudGl0eSAmJiAhaXNBY3RpdmVFbnRpdHkgJiYgIWlzSW5hY3RpdmU7XG5cdHJldHVybiBpc0RyYWZ0TW9kZSA9PT0gXCJ0cnVlXCIgJiYgaXNOZXdPYmplY3QgPyBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA6IE1lc3NhZ2VUeXBlLk5vbmU7XG59O1xucm93SGlnaGxpZ2h0aW5nLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjcm93SGlnaGxpZ2h0aW5nXCI7XG5cbmNvbnN0IG5hdmlnYXRlZFJvdyA9IGZ1bmN0aW9uICh0aGlzOiBNYW5hZ2VkT2JqZWN0LCBkZWVwZXN0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHNQYXRoID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdGlmIChzUGF0aCAmJiBkZWVwZXN0UGF0aCkge1xuXHRcdHJldHVybiBkZWVwZXN0UGF0aC5pbmRleE9mKHNQYXRoKSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5uYXZpZ2F0ZWRSb3cuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNuYXZpZ2F0ZWRSb3dcIjtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBhbiBNRENDb2x1bW4gYmFzZWQgb24gdGhlIHByb3BlcnR5IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gdGhpcyBUaGUgTURDQ29sdW1uIG9iamVjdFxuICogQHBhcmFtIGVkaXRNb2RlIFRoZSBFZGl0TW9kZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSBJbmRpY2F0ZXMgaWYgdGhlIHByb3BlcnRpZXMgY2FjaGUgaXMgYXZhaWxhYmxlXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGhcbiAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGhlYWRlciBzaG91bGQgYmUgYSBwYXJ0IG9mIHRoZSB3aWR0aCBjYWxjdWxhdGlvbi5cbiAqIEBwYXJhbSBpc1NvcnRhYmxlQ29sdW1uIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKiBAcGFyYW0gaXNDb2x1bW5SZXF1aXJlZFxuICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgZ2V0Q29sdW1uV2lkdGggPSBmdW5jdGlvbiAoXG5cdHRoaXM6IENvbHVtbixcblx0ZWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUsXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dXNlUmVtVW5pdCA9IHRydWUsXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gZmFsc2UsXG5cdGlzU29ydGFibGVDb2x1bW4gPSBmYWxzZSxcblx0aXNDb2x1bW5SZXF1aXJlZCA9IGZhbHNlXG4pOiBzdHJpbmcgfCBudWxsIHwgbnVtYmVyIHtcblx0aWYgKCFpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0bGV0IHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXTtcblx0aWYgKG1kY1RhYmxlPy5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5NRENUYWJsZVwiKSkge1xuXHRcdHByb3BlcnRpZXMgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyh0aGlzLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlKSBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW107XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydGllcyA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHR9XG5cdGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLmtleSA9PT0gcHJvcGVydHlOYW1lKTtcblx0aWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG5cblx0bGV0IGNvbHVtbldpZHRoID0gVGFibGVTaXplSGVscGVyLmdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5KFxuXHRcdHByb3BlcnR5LFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsXG5cdFx0aXNTb3J0YWJsZUNvbHVtbixcblx0XHRpc0NvbHVtblJlcXVpcmVkXG5cdCk7XG5cdGNvbnN0IHVuaXRPclRpbWV6b25lID0gcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnVuaXQgfHwgcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lO1xuXHRjb2x1bW5XaWR0aCArPSB1bml0T3JUaW1lem9uZSA/IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodW5pdE9yVGltZXpvbmUpIDogMDtcblx0aWYgKGVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eSA9IHByb3BlcnR5LmV4cG9ydFNldHRpbmdzPy51bml0UHJvcGVydHk7IC8vIHRoZSB1bml0UHJvcGVydHkgYXR0cmlidXRlIGlzIHVzZWQgZm9yIGN1cnJlbmN5IGFuZCB1bml0IG9uIHRoZSBleHBvcnQgc2V0dGluZ3Ncblx0XHRpZiAodW5pdE9yQ3VycmVuY3lQcm9wZXJ0eSkge1xuXHRcdFx0Y29sdW1uV2lkdGggKz0gMztcblx0XHR9XG5cdFx0c3dpdGNoIChwcm9wZXJ0eS50eXBlQ29uZmlnPy5iYXNlVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRhdGVcIjpcblx0XHRcdGNhc2UgXCJUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRGF0ZVRpbWVcIjpcblx0XHRcdFx0Y29sdW1uV2lkdGggKz0gMi44O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHR9XG5cdGlmICh1c2VSZW1Vbml0KSB7XG5cdFx0cmV0dXJuIGNvbHVtbldpZHRoICsgXCJyZW1cIjtcblx0fVxuXHRyZXR1cm4gY29sdW1uV2lkdGg7XG59O1xuZ2V0Q29sdW1uV2lkdGguX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aFwiO1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGFuIE1EQ0NvbHVtbiBmb3IgdmFsdWVIZWxwIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0aGlzIFRoZSBNRENDb2x1bW4gb2JqZWN0XG4gKiBAcGFyYW0gaXNQcm9wZXJ0aWVzQ2FjaGVBdmFpbGFibGUgSW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0aWVzIGNhY2hlIGlzIGF2YWlsYWJsZVxuICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoXG4gKiBAcGFyYW0gaXNUYXJnZXRTbWFsbERldmljZSBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIGhhcyBhIHNtYWxsIGRldmljZVxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG4gKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtblxuICovXG5jb25zdCBnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBDb2x1bW4sXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0aXNUYXJnZXRTbWFsbERldmljZTogYm9vbGVhbixcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPSBmYWxzZVxuKTogbnVsbCB8IG51bWJlciB7XG5cdGNvbnN0IGlzU21hbGxEZXZpY2UgPSBDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCk7XG5cdGNvbnN0IHdpdGhVbml0ID0gIWlzU21hbGxEZXZpY2U7XG5cblx0cmV0dXJuIChpc1NtYWxsRGV2aWNlICYmIGlzVGFyZ2V0U21hbGxEZXZpY2UpIHx8ICghaXNTbWFsbERldmljZSAmJiAhaXNUYXJnZXRTbWFsbERldmljZSlcblx0XHQ/ICh0YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRcdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHdpdGhVbml0LFxuXHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdCAgKSBhcyBudWxsIHwgbnVtYmVyKVxuXHRcdDogbnVsbDtcbn07XG5cbmdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlXCI7XG5cbnR5cGUgRmllbGRXcmFwcGVyRml4ZWQgPSBGaWVsZFdyYXBwZXIgJiB7IGdldENvbnRlbnREaXNwbGF5OiBGdW5jdGlvbjsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH07XG5mdW5jdGlvbiBpc1JhdGluZ0luZGljYXRvcihvQ29udHJvbDogRmllbGRXcmFwcGVyRml4ZWQpOiBib29sZWFuIHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpKSB7XG5cdFx0Y29uc3QgdkNvbnRlbnREaXNwbGF5ID0gQXJyYXkuaXNBcnJheShvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpKVxuXHRcdFx0PyBvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpWzBdXG5cdFx0XHQ6IG9Db250cm9sLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdFx0aWYgKHZDb250ZW50RGlzcGxheSAmJiB2Q29udGVudERpc3BsYXkuaXNBKFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlU3R5bGVDbGFzc0ZvclJhdGluZ0luZGljYXRvcihmaWVsZFdyYXBwZXI6IEZpZWxkV3JhcHBlckZpeGVkLCBsYXN0OiBib29sZWFuKTogdm9pZCB7XG5cdGNvbnN0IHZDb250ZW50RGlzcGxheSA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCkpXG5cdFx0PyBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKVswXVxuXHRcdDogZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdGNvbnN0IHZDb250ZW50RWRpdCA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KCkpID8gZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KClbMF0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblxuXHRpZiAobGFzdCkge1xuXHRcdHZDb250ZW50RGlzcGxheS5hZGRTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpbkJvdHRvbVwiKTtcblx0XHR2Q29udGVudERpc3BsYXkuYWRkU3R5bGVDbGFzcyhcInNhcFVpTm9NYXJnaW5Ub3BcIik7XG5cdFx0dkNvbnRlbnRFZGl0LnJlbW92ZVN0eWxlQ2xhc3MoXCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIik7XG5cdH0gZWxzZSB7XG5cdFx0dkNvbnRlbnREaXNwbGF5LmFkZFN0eWxlQ2xhc3MoXCJzYXBVaU5vTWFyZ2luQm90dG9tXCIpO1xuXHRcdHZDb250ZW50RGlzcGxheS5yZW1vdmVTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpblRvcFwiKTtcblx0XHR2Q29udGVudEVkaXQuYWRkU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VkJveFZpc2liaWxpdHkodGhpczogVGFibGUsIC4uLmFyZ3M6IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRjb25zdCBhSXRlbXMgPSB0aGlzLmdldEl0ZW1zKCkgYXMgdW5rbm93biBhcyBGaWVsZFdyYXBwZXJGaXhlZFtdO1xuXHRsZXQgYkxhc3RFbGVtZW50Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaW5kZXggPSBhSXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuXHRcdGlmICghYkxhc3RFbGVtZW50Rm91bmQpIHtcblx0XHRcdGlmIChhcmdzW2luZGV4XSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRiTGFzdEVsZW1lbnRGb3VuZCA9IHRydWU7XG5cdFx0XHRcdGlmIChpc1JhdGluZ0luZGljYXRvcihhSXRlbXNbaW5kZXhdKSkge1xuXHRcdFx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFJdGVtc1tpbmRleF0ucmVtb3ZlU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNSYXRpbmdJbmRpY2F0b3IoYUl0ZW1zW2luZGV4XSkpIHtcblx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YUl0ZW1zW2luZGV4XS5hZGRTdHlsZUNsYXNzKFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmdldFZCb3hWaXNpYmlsaXR5Ll9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjZ2V0VkJveFZpc2liaWxpdHlcIjtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVycyBmb3IgbW9yZSBkZXRhaWwgb24gdGhpcyB3ZWlyZCBzeW50YXhcbi8qKlxuICogQ29sbGVjdGlvbiBvZiB0YWJsZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgdGFibGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAodGhpczogb2JqZWN0LCBzTmFtZTogc3RyaW5nLCAuLi5vQXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG5cdGlmICh0YWJsZUZvcm1hdHRlci5oYXNPd25Qcm9wZXJ0eShzTmFtZSkpIHtcblx0XHRyZXR1cm4gKHRhYmxlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG50YWJsZUZvcm1hdHRlci52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzID0gdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcztcbnRhYmxlRm9ybWF0dGVyLnJvd0hpZ2hsaWdodGluZyA9IHJvd0hpZ2hsaWdodGluZztcbnRhYmxlRm9ybWF0dGVyLm5hdmlnYXRlZFJvdyA9IG5hdmlnYXRlZFJvdztcbnRhYmxlRm9ybWF0dGVyLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIgPSBnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyO1xudGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkgPSBnZXRWQm94VmlzaWJpbGl0eTtcbnRhYmxlRm9ybWF0dGVyLmlzUmF0aW5nSW5kaWNhdG9yID0gaXNSYXRpbmdJbmRpY2F0b3I7IC8vIGZvciB1bml0IHRlc3RzXG50YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aCA9IGdldENvbHVtbldpZHRoO1xudGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhGb3JWYWx1ZUhlbHBUYWJsZSA9IGdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGU7XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyXCIsIHRhYmxlRm9ybWF0dGVyKTtcblxuZXhwb3J0IGRlZmF1bHQgdGFibGVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFpQkEsTUFBTUEsbUJBQW1CLEdBQUcsU0FBQUEsQ0FBVUMsV0FBbUIsRUFBVTtJQUNsRSxRQUFRQSxXQUFXO01BQ2xCLEtBQUssT0FBTztRQUNYLE9BQU8sQ0FBQztNQUNULEtBQUssU0FBUztRQUNiLE9BQU8sQ0FBQztNQUNULEtBQUssYUFBYTtRQUNqQixPQUFPLENBQUM7TUFDVCxLQUFLLE1BQU07UUFDVixPQUFPLENBQUM7TUFDVDtRQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxTQUFBQSxDQUFVQyxtQkFBMkQsRUFBVztJQUNqSCxJQUFJLENBQUNBLG1CQUFtQixFQUFFO01BQ3pCLE9BQU8sS0FBSztJQUNiO0lBQ0EsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsbUJBQW1CLENBQUM7SUFDbEQsT0FDQ0MsU0FBUyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxJQUNwQkgsU0FBUyxDQUFDSSxLQUFLLENBQUMsVUFBVUMsR0FBRyxFQUFFO01BQzlCLE9BQU9OLG1CQUFtQixDQUFDTSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDNUMsQ0FBQyxD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
@@ -91,18 +91,23 @@ getErrorStatusTextVisibilityFormatter.__functionName = "sap.fe.macros.formatters
91
91
  const rowHighlighting = function (
92
92
  this: ManagedObject,
93
93
  criticalityValue: string | number,
94
- aFilteredMessages: Message[],
95
- hasActiveEntity: boolean,
96
- isActiveEntity: boolean,
94
+ aFilteredMessages: Message[] | string | undefined,
95
+ hasActiveEntity: boolean | string | undefined,
96
+ isActiveEntity: boolean | string | undefined,
97
97
  isDraftMode: string,
98
98
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
99
99
  contextPath: string,
100
- isInactive: boolean | undefined
100
+ isInactive: boolean | string | undefined
101
101
  ): MessageType {
102
+ // Sanitize string "undefined" values to actual undefined
103
+ aFilteredMessages = aFilteredMessages === "undefined" ? undefined : aFilteredMessages;
104
+ hasActiveEntity = hasActiveEntity === "undefined" ? undefined : hasActiveEntity;
105
+ isActiveEntity = isActiveEntity === "undefined" ? undefined : isActiveEntity;
106
+ isInactive = isInactive === "undefined" ? undefined : isInactive;
102
107
  let iHighestCriticalityValue = -1;
103
108
  if (aFilteredMessages && aFilteredMessages.length > 0) {
104
109
  const sCurrentContextPath = this.getBindingContext()?.getPath();
105
- aFilteredMessages.forEach((message) => {
110
+ (aFilteredMessages as Message[]).forEach((message) => {
106
111
  if (
107
112
  sCurrentContextPath &&
108
113
  message.getTargets()[0].indexOf(sCurrentContextPath) === 0 &&
@@ -204,6 +209,10 @@ const getColumnWidth = function (
204
209
  const unitOrTimezone = property.exportSettings?.unit || property.exportSettings?.timezone;
205
210
  columnWidth += unitOrTimezone ? SizeHelper.getButtonWidth(unitOrTimezone) : 0;
206
211
  if (editMode === FieldEditMode.Editable) {
212
+ const unitOrCurrencyProperty = property.exportSettings?.unitProperty; // the unitProperty attribute is used for currency and unit on the export settings
213
+ if (unitOrCurrencyProperty) {
214
+ columnWidth += 3;
215
+ }
207
216
  switch (property.typeConfig?.baseType) {
208
217
  case "Date":
209
218
  case "Time":
@@ -511,7 +511,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
511
511
  /**
512
512
  * Triggers the inline edit discard.
513
513
  */;
514
- _proto.triggerInlineEditDiscard = function triggerInlineEditDiscard() {
514
+ _proto.triggerInlineEditDiscard = async function triggerInlineEditDiscard() {
515
+ if (this.hasPendingUserInput()) {
516
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
517
+ await new Promise(resolve => {
518
+ setTimeout(resolve, 200);
519
+ });
520
+ }
515
521
  this.getPageController()?.inlineEditFlow.inlineEditDiscard();
516
522
  }
517
523
 
@@ -519,7 +525,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
519
525
  * Triggers the inline edit save.
520
526
  * @returns The inlineEditFlow save promise.
521
527
  */;
522
- _proto.triggerInlineEditSave = function triggerInlineEditSave() {
528
+ _proto.triggerInlineEditSave = async function triggerInlineEditSave() {
529
+ if (this.hasPendingUserInput()) {
530
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
531
+ await new Promise(resolve => {
532
+ setTimeout(resolve, 200);
533
+ });
534
+ }
523
535
  return this.getPageController()?.inlineEditFlow.inlineEditSave();
524
536
  }
525
537
 
@@ -608,4 +620,4 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
608
620
  _exports = InlineEdit;
609
621
  return _exports;
610
622
  }, false);
611
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJpbmxpbmVFZGl0RGlzY2FyZCIsImlubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdFN0YXJ0IiwiaW5saW5lRWRpdENvbnRyb2xzIiwicHJvcGVydGllc0ZvcklubGluZUVkaXQiLCJiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0IiwiaW5jbHVkZXMiLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJwYXRoIiwic2V0UHJvcGVydHkiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJtb2RlbCIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHR0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdERpc2NhcmQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIGlubGluZUVkaXRGbG93IHNhdmUgcHJvbWlzZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0U2F2ZSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHRvIGFuIGlubGluZSBlZGl0IHN0YXJ0IG5vdGlmaWNhdGlvbiBmb3JtIHRoZSBpbmxpbmVFZGl0Rmxvdy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc0ZvcklubGluZUVkaXRcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXRcblx0ICovXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcImlubGluZUVkaXRGbG93XCIsIFwiaW5saW5lRWRpdFN0YXJ0XCIpXG5cdGlubGluZUVkaXRTdGFydChcblx0XHR0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LFxuXHRcdGlubGluZUVkaXRDb250cm9sczogQ29udHJvbFtdLFxuXHRcdHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0OiBzdHJpbmdbXSxcblx0XHRiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHRQYXRoID0gKHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0Q2Fub25pY2FsUGF0aCgpID8/IFwiXCI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSA9IHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSgpID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB8fCBiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0ICE9PSBiaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5BZGQpO1xuXHRcdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBwYXRoID0gYC8ke3RoaXMuZ2V0SWQoKX1gO1xuXHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShwYXRoLCB7IGlzRWRpdGFibGU6IHRydWUgfSk7XG5cdFx0XHR0aGlzLmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0XHRcdC8vSW4gY2FzZSBvZiBjb25uZWN0ZWQgZmllbGRzLCB3ZSBzZXQgdGhlIGZvY3VzIG9uIHRoZSBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWRcblx0XHRcdGlmICh0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UpIHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0Q29udGVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4pPy5nZXRDb250ZW50RWRpdCgpWzBdPy5mb2N1cygpO1xuXHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdH1cblx0XHRcdGlmICghaW5saW5lRWRpdENvbnRyb2xzLmluY2x1ZGVzKHRoaXMpKSB7XG5cdFx0XHRcdGlubGluZUVkaXRDb250cm9scy5wdXNoKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgaW5kaWNhdG9yIHBvcHVwLlxuXHQgKi9cblx0cmVzZXRJbmRpY2F0b3JQb3B1cCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKGZhbHNlKTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGFmdGVyIHNhdmUgb3IgZGlzY2FyZC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvbiBJZiB0aGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICovXG5cdGlubGluZUVkaXRFbmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVmcmVzaERlc2NyaXB0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRpZiAocmVmcmVzaERlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudG9nZ2xlSW5saW5lRWRpdEZpZWxkR3JvdXBJZChGaWVsZEdyb3VwSWRBY3Rpb24uUmVtb3ZlKTtcblx0XHRcdHRoaXMudW5iaW5kRWxlbWVudChcInVpXCIpO1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0U3RhdGUgPSBcIkNsb3NlZFwiO1xuXHRcdFx0dGhpcy5yZXNldEluZGljYXRvclBvcHVwKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmb3JjZSB0aGUgbW9kZWwgcmVmcmVzaCBmb3IgdGhlIGRlc2NyaXB0aW9uIGlmIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgdmlhICBhIGJpbmRpbmcgd2l0aCBhICQkbm9QYXRjaCBwYXJhbWV0ZXIuXG5cdCAqL1xuXHRyZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Ly8gd2hlbiB0aGUgZmllbGQgdXNlcyBhIG1kYyBmaWVsZCB0aGUgZGVzY3JpcHRpb24gaXMgdXBkYXRlZCB2aWEgdGhlIGFkZGl0aW9uYWxWYWx1ZSBiaW5kaW5nXG5cdFx0Ly8gdGhhdCBoYXMgYSBub1BhdGNoIHBhcmFtZXRlciBzbyBpdCBkb2Vzbid0IGdldCByZXZlcnRlZCBieWEgcmVzZXRDaGFuZ2VzXG5cdFx0aWYgKHRoaXMuaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ/LmlzQTxFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpXG5cdFx0XHRcdD8gdGhpcy5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF1cblx0XHRcdFx0OiBudWxsO1xuXHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5pc0E8TWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBjb250ZW50LmdldEJpbmRpbmcoXCJhZGRpdGlvbmFsVmFsdWVcIik/LmdldFBhdGgoKTtcblx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRcdCh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk/LnJlcXVlc3RTaWRlRWZmZWN0cyhbZGVzY3JpcHRpb25QYXRoXSwgXCIkYXV0b1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztNQW9CS0Esa0JBQWtCLDBCQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFBLE9BQWxCQSxrQkFBa0I7RUFBQSxFQUFsQkEsa0JBQWtCO0VBQUEsSUFLRkMsVUFBVSxJQUFBQyxJQUFBLEdBNGlCN0JDLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUFDLE1BQUE7SUFBQSxTQUFBSCxXQUFBO01BQUEsS0EzaUJ4REksZUFBZSxHQUE2QyxRQUFRO01BQUEsS0FRcEVDLG1CQUFtQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFOLFVBQUE7SUFBQSxJQUFBTyxNQUFBLEdBQUFQLFVBQUEsQ0FBQVEsU0FBQTtJQUVuQztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSUFFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxTQUFtQixFQUFRO01BQ3JDLE1BQU1DLG1CQUFtQixHQUFHRCxTQUFTLENBQUNGLFNBQVMsQ0FBQ0ksaUJBQWlCO01BQ2pFLE1BQU1DLHFCQUFxQixHQUFHSCxTQUFTLENBQUNGLFNBQVMsQ0FBQ00sbUJBQW1CO01BQ3JFLE1BQU1DLFdBQVcsR0FBR0wsU0FBUyxDQUFDRixTQUFTLENBQUNRLE9BQU87TUFFL0NOLFNBQVMsQ0FBQ0YsU0FBUyxDQUFDSSxpQkFBaUIsR0FBRyxZQUFrQjtRQUN6REQsbUJBQW1CLEVBQUVNLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUNDLGlCQUFpQixFQUFFO1VBQzNCLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztRQUN6QjtNQUNELENBQUM7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
623
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJoYXNQZW5kaW5nVXNlcklucHV0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiaW5saW5lRWRpdERpc2NhcmQiLCJpbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRTdGFydCIsImlubGluZUVkaXRDb250cm9scyIsInByb3BlcnRpZXNGb3JJbmxpbmVFZGl0IiwiYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdCIsImluY2x1ZGVzIiwidWlNb2RlbCIsImdldE1vZGVsIiwicGF0aCIsInNldFByb3BlcnR5IiwiaXNFZGl0YWJsZSIsImJpbmRFbGVtZW50IiwibW9kZWwiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlubGluZUVkaXREaXNjYXJkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IHNhdmUuXG5cdCAqIEByZXR1cm5zIFRoZSBpbmxpbmVFZGl0RmxvdyBzYXZlIHByb21pc2UuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdFNhdmUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZCB8IHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgdG8gYW4gaW5saW5lIGVkaXQgc3RhcnQgbm90aWZpY2F0aW9uIGZvcm0gdGhlIGlubGluZUVkaXRGbG93LlxuXHQgKiBAcGFyYW0gaW5saW5lRWRpdENvbnRyb2xzIFRoZSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdFxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdFxuXHQgKi9cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwiaW5saW5lRWRpdEZsb3dcIiwgXCJpbmxpbmVFZGl0U3RhcnRcIilcblx0aW5saW5lRWRpdFN0YXJ0KFxuXHRcdHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsXG5cdFx0aW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sXG5cdFx0cHJvcGVydGllc0ZvcklubGluZUVkaXQ6IHN0cmluZ1tdLFxuXHRcdGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQ6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dFBhdGggPSAodGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRDYW5vbmljYWxQYXRoKCkgPz8gXCJcIjtcblx0XHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCkgPz8gXCJcIjtcblx0XHRcdGlmICghcHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpIHx8IGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQgIT09IGJpbmRpbmdDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRvZ2dsZUlubGluZUVkaXRGaWVsZEdyb3VwSWQoRmllbGRHcm91cElkQWN0aW9uLkFkZCk7XG5cdFx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGNvbnN0IHBhdGggPSBgLyR7dGhpcy5nZXRJZCgpfWA7XG5cdFx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogdHJ1ZSB9KTtcblx0XHRcdHRoaXMuYmluZEVsZW1lbnQoeyBwYXRoLCBtb2RlbDogXCJ1aVwiIH0pO1xuXHRcdFx0Ly9JbiBjYXNlIG9mIGNvbm5lY3RlZCBmaWVsZHMsIHdlIHNldCB0aGUgZm9jdXMgb24gdGhlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZFxuXHRcdFx0aWYgKHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHQodGhpcy5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPik/LmdldENvbnRlbnRFZGl0KClbMF0/LmZvY3VzKCk7XG5cdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdFN0YXRlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpbmxpbmVFZGl0Q29udHJvbHMuaW5jbHVkZXModGhpcykpIHtcblx0XHRcdFx0aW5saW5lRWRpdENvbnRyb2xzLnB1c2godGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBpbmRpY2F0b3IgcG9wdXAuXG5cdCAqL1xuXHRyZXNldEluZGljYXRvclBvcHVwKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0RWRpdE1vZGUoZmFsc2UpO1xuXHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgYWZ0ZXIgc2F2ZSBvciBkaXNjYXJkLlxuXHQgKiBAcGFyYW0gcmVmcmVzaERlc2NyaXB0aW9uIElmIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKi9cblx0aW5saW5lRWRpdEVuZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIpIHtcblx0XHRcdGlmIChyZWZyZXNoRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5SZW1vdmUpO1xuXHRcdFx0dGhpcy51bmJpbmRFbGVtZW50KFwidWlcIik7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiQ2xvc2VkXCI7XG5cdFx0XHR0aGlzLnJlc2V0SW5kaWNhdG9yUG9wdXAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZvcmNlIHRoZSBtb2RlbCByZWZyZXNoIGZvciB0aGUgZGVzY3JpcHRpb24gaWYgaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCB2aWEgIGEgYmluZGluZyB3aXRoIGEgJCRub1BhdGNoIHBhcmFtZXRlci5cblx0ICovXG5cdHJlZnJlc2hEZXNjcmlwdGlvbklmTmVlZGVkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHQvLyB3aGVuIHRoZSBmaWVsZCB1c2VzIGEgbWRjIGZpZWxkIHRoZSBkZXNjcmlwdGlvbiBpcyB1cGRhdGVkIHZpYSB0aGUgYWRkaXRpb25hbFZhbHVlIGJpbmRpbmdcblx0XHQvLyB0aGF0IGhhcyBhIG5vUGF0Y2ggcGFyYW1ldGVyIHNvIGl0IGRvZXNuJ3QgZ2V0IHJldmVydGVkIGJ5YSByZXNldENoYW5nZXNcblx0XHRpZiAodGhpcy5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IHRoaXMuY29udGVudD8uaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWVsZFdyYXBwZXJcIilcblx0XHRcdFx0PyB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRpZiAoY29udGVudCAmJiBjb250ZW50LmlzQTxNZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IGNvbnRlbnQuZ2V0QmluZGluZyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoZGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KT8ucmVxdWVzdFNpZGVFZmZlY3RzKFtkZXNjcmlwdGlvblBhdGhdLCBcIiRhdXRvXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01Bb0JLQSxrQkFBa0IsMEJBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQUEsT0FBbEJBLGtCQUFrQjtFQUFBLEVBQWxCQSxrQkFBa0I7RUFBQSxJQUtGQyxVQUFVLElB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
@@ -561,7 +561,13 @@ export default class InlineEdit {
561
561
  /**
562
562
  * Triggers the inline edit discard.
563
563
  */
564
- triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): void {
564
+ async triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void> {
565
+ if (this.hasPendingUserInput()) {
566
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
567
+ await new Promise<void>((resolve) => {
568
+ setTimeout(resolve, 200);
569
+ });
570
+ }
565
571
  this.getPageController()?.inlineEditFlow.inlineEditDiscard();
566
572
  }
567
573
 
@@ -569,7 +575,13 @@ export default class InlineEdit {
569
575
  * Triggers the inline edit save.
570
576
  * @returns The inlineEditFlow save promise.
571
577
  */
572
- triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void> | undefined {
578
+ async triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void | undefined> {
579
+ if (this.hasPendingUserInput()) {
580
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
581
+ await new Promise<void>((resolve) => {
582
+ setTimeout(resolve, 200);
583
+ });
584
+ }
573
585
  return this.getPageController()?.inlineEditFlow.inlineEditSave();
574
586
  }
575
587