@sapui5/sap.fe.macros 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -49,7 +49,6 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
49
49
  visible: true,
50
50
  pressEdit: this.triggerInlineEdit.bind(this)
51
51
  });
52
- this._inlineEditFieldGroupId = "InlineEdit";
53
52
  this._inlineEditIndicator.attachEvent("mouseout", event => {
54
53
  this.closeInlineEditPopupMouseEvent(event.getParameter("relatedTarget"));
55
54
  });
@@ -542,6 +541,9 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
542
541
  * @param bindingContextPathForInlineEdit
543
542
  */;
544
543
  _proto.inlineEditStart = function inlineEditStart(inlineEditControls, propertiesForInlineEdit, bindingContextPathForInlineEdit) {
544
+ if (inlineEditControls.includes(this)) {
545
+ return; // already in inline edit mode
546
+ }
545
547
  if (this.hasInlineEdit) {
546
548
  const bindingContextPath = this.getBindingContext()?.getCanonicalPath() ?? "";
547
549
  const propertyFullyQualifiedName = this.getInlineEditPropertyName() ?? "";
@@ -568,9 +570,7 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
568
570
  if (propertiesForInlineEdit.includes(propertyFullyQualifiedName)) {
569
571
  this.inlineEditState = "Editable";
570
572
  }
571
- if (!inlineEditControls.includes(this)) {
572
- inlineEditControls.push(this);
573
- }
573
+ inlineEditControls.push(this);
574
574
  }
575
575
  }
576
576
 
@@ -620,4 +620,4 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
620
620
  _exports = InlineEdit;
621
621
  return _exports;
622
622
  }, false);
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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
623
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJhdHRhY2hFdmVudCIsImV2ZW50IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50IiwiZ2V0UGFyYW1ldGVyIiwiZWRpdEJ1dHRvbiIsImF0dGFjaEJyb3dzZXJFdmVudCIsImdldERvbVJlZiIsImNvbnRhaW5zIiwicmVsYXRlZFRhcmdldCIsImNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSIsInByZXNzVGFiS2V5IiwicHJlc3NTaGlmdEFuZFRhYktleSIsImdldENvbnRlbnQiLCJnZXRDb250ZW50RWRpdCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAiLCJQb3B1cCIsImlubGluZUVkaXRTYXZlRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdFNhdmUiLCJpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uIiwidHJpZ2dlcklubGluZUVkaXREaXNjYXJkIiwiYWRkRGVwZW5kZW50IiwiQ29tbWFuZEV4ZWN1dGlvbiIsImV4ZWN1dGUiLCJlbmFibGVkIiwiY29tbWFuZCIsInNldEZvbGxvd09mIiwicG9wdXBCZWhhdmlvdXIiLCJvcGVuSW5saW5lRWRpdFBvcHVwIiwiZm9jdXNFdmVudCIsImNvbnRlbnREaXNwbGF5Iiwia2V5ZG93bkV2ZW50IiwiX2V2ZW50IiwiZmllbGRHcm91cElkcyIsImZvckVhY2giLCJmaWVsZEdyb3VwSWQiLCJkZWxheWVkQ2FsbFRvU2F2ZSIsImlzT3BlbiIsIm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyIsInNldElubGluZUVkaXRGb2N1cyIsIm9uRGVzdHJveSIsInJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkiLCJnZXRMYWJlbENvbnRyb2xzIiwibGFiZWxDb250cm9sIiwiYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldElkRm9yTGFiZWwiLCJnZXREb21SZWZPZkZpZWxkIiwiZmllbGRXcmFwcGVyIiwiY29udGVudEVkaXQiLCJsZW5ndGgiLCJpc0EiLCJmaWxlVXBsb2FkZXIiLCJjdXJyZW50RmllbGQiLCJvdmVybGFwcGluZ0VsZW1lbnQiLCJnZXRPdmVybGFwcGluZ0VsZW1lbnQiLCJjbG9zZSIsInBvcHVwSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInBvcHVwSW50ZXJ2YWxsSGFuZGxlciIsInNldFBvc2l0aW9uIiwiRG9jayIsIkVuZFRvcCIsIkVuZEJvdHRvbSIsIl9zb3VyY2UiLCJkb2N1bWVudCIsImVsZW1lbnRGcm9tUG9pbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ4Iiwid2lkdGgiLCJ5IiwiaGVpZ2h0Iiwib3ZlcmxhcHBlZEVsZW1lbnQiLCJvcGVuIiwiY2xlYXJJbnRlcnZhbCIsImZvY3VzSGFuZGxpbmdJbmxpbmVFZGl0IiwicG90ZW50aWFsRm9jdXNPdXQiLCJmb2N1c0ZvcndhcmQiLCJmb2N1c2VkRWxlbWVudCIsImZpbmRUYWJiYWJsZSIsInNraXBDaGlsZCIsImZvcndhcmQiLCJlbGVtZW50IiwiZm9jdXMiLCJmb2N1c01lYXN1cmVGaWVsZCIsInJvb3RGaWVsZCIsIm1lYXN1cmVGaWVsZCIsImZvY3VzSGFuZGxpbmdNZWFzdXJlRmllbGQiLCJmb2N1c2FibGVFbGVtZW50IiwiYWN0aXZlRWxlbWVudCIsImdldFNhdmVCdXR0b24iLCJpbmxpbmVFZGl0S2V5ZG93biIsImRpc3BsYXllZEZpZWxkIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJzaGlmdEtleSIsInByZXNzVGFiS2V5T25GaWVsZCIsInByZXNzU2hpZnRUYWJLZXlPbkZpZWxkIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFZGl0QnV0dG9uIiwiZ2V0SWQiLCJnZXREaXNjYXJkQnV0dG9uIiwiY2hlY2tGb3JNZWFzdXJlRmllbGQiLCJjaGVja0ZvclNlbWFudGljT2JqZWN0IiwidG9nZ2xlSW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImFjdGlvbiIsInNob3VsZEFkZCIsIkFkZCIsIlNldCIsImdldEZpZWxkR3JvdXBJZHMiLCJhZGQiLCJkZWxldGUiLCJzZXRGaWVsZEdyb3VwSWRzIiwiQXJyYXkiLCJmcm9tIiwiY2hpbGRyZW5Db250cm9scyIsImNvbnRlbnQiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJtYW5hZ2VkT2JqZWN0IiwiY29udHJvbCIsImNoaWxkRmllbGRHcm91cElkcyIsImVkaXRNb2RlIiwicmVhZE9ubHkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0V2lkdGgiLCJ0YXJnZXRwcm9wZXJ0eSIsImdldElubGluZUVkaXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJDb21tb24iLCJTZW1hbnRpY09iamVjdCIsImdldEVkaXRNb2RlIiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSIsInNldEVkaXRNb2RlIiwiZm9jdXNIYW5kbGluZyIsImJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0Q2Fub25pY2FsUGF0aCIsInByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lIiwic3RhcnRJbmxpbmVFZGl0IiwiaGFzUGVuZGluZ1VzZXJJbnB1dCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImlubGluZUVkaXREaXNjYXJkIiwiaW5saW5lRWRpdFNhdmUiLCJpbmxpbmVFZGl0U3RhcnQiLCJpbmxpbmVFZGl0Q29udHJvbHMiLCJwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdCIsImJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQiLCJpbmNsdWRlcyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJzZXRQcm9wZXJ0eSIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwiaW52YWxpZGF0ZSIsInB1c2giLCJyZXNldEluZGljYXRvclBvcHVwIiwiaW5saW5lRWRpdEVuZCIsInJlZnJlc2hEZXNjcmlwdGlvbiIsInJlZnJlc2hEZXNjcmlwdGlvbklmTmVlZGVkIiwiUmVtb3ZlIiwidW5iaW5kRWxlbWVudCIsImRlc2NyaXB0aW9uUGF0aCIsImdldEJpbmRpbmciLCJnZXRQYXRoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW5saW5lRWRpdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBJbmxpbmVFZGl0SW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvY29udHJvbHMvaW5saW5lRWRpdC9JbmxpbmVFZGl0SW5kaWNhdG9yXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuaW1wb3J0IGZpbmRUYWJiYWJsZSBmcm9tIFwic2FwL3VpL2RvbS9maW5kVGFiYmFibGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZGNGaWVsZCB9IGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEZpbGVXcmFwcGVyIGZyb20gXCIuLi9jb250cm9scy9GaWxlV3JhcHBlclwiO1xuXG5lbnVtIEZpZWxkR3JvdXBJZEFjdGlvbiB7XG5cdEFkZCA9IFwiQWRkXCIsXG5cdFJlbW92ZSA9IFwiUmVtb3ZlXCJcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lRWRpdCB7XG5cdHByaXZhdGUgaW5saW5lRWRpdFN0YXRlOiBcIkVkaXRhYmxlXCIgfCBcIkRpc3BsYXlcIiB8IFwiQ2xvc2VkXCIgfCBcIlZIXCIgPSBcIkNsb3NlZFwiO1xuXG5cdHByaXZhdGUgX2lubGluZUVkaXRJbmRpY2F0b3I6IEVuaGFuY2VXaXRoVUk1PElubGluZUVkaXRJbmRpY2F0b3I+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cDogUG9wdXAgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfc291cmNlOiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgX2lzSW5saW5lRWRpdFNvdXJjZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBNaXhpbiB0byBlbmFibGUgaW5saW5lIGVkaXQgb24gYSBjb250cm9sLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBjbGFzcy5cblx0ICovXG5cdHNldHVwTWl4aW4oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdGNvbnN0IGJhc2VCZWZvcmVSZW5kZXJpbmcgPSBiYXNlQ2xhc3MucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nO1xuXHRcdGNvbnN0IGJhc2VNZXRhZGF0YUF2YWlsYWJsZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZTtcblx0XHRjb25zdCBiYXNlRGVzdHJveSA9IGJhc2VDbGFzcy5wcm90b3R5cGUuZGVzdHJveTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRiYXNlQmVmb3JlUmVuZGVyaW5nPy5jYWxsKHRoaXMpO1xuXHRcdFx0aWYgKHRoaXMuaW5saW5lRWRpdEVuYWJsZWQpIHtcblx0XHRcdFx0dGhpcy5hZGRBcmlhQXR0cmlidXRlcygpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRiYXNlQ2xhc3MucHJvdG90eXBlLm9uTWV0YWRhdGFBdmFpbGFibGUgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRiYXNlTWV0YWRhdGFBdmFpbGFibGU/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUlubGluZUVkaXRFbmFibGVkID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5pbmxpbmVFZGl0Rmxvdy5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQoXG5cdFx0XHRcdFx0dGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCkgPz8gXCJcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIXByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQpIHtcblx0XHRcdFx0XHQvL2xldCdzIG1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEgYmluZGluZyB1bm5lY2Vzc2FyaWx5XG5cdFx0XHRcdFx0dGhpcy51bmJpbmRQcm9wZXJ0eShcImhhc0lubGluZUVkaXRcIik7XG5cdFx0XHRcdFx0dGhpcy5oYXNJbmxpbmVFZGl0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yID0gbmV3IElubGluZUVkaXRJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0cHJlc3NFZGl0OiB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0LmJpbmQodGhpcylcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJtb3VzZW91dFwiLCAoZXZlbnQ6IFVJNUV2ZW50PHsgcmVsYXRlZFRhcmdldDogRWxlbWVudCB9PikgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LmdldFBhcmFtZXRlcihcInJlbGF0ZWRUYXJnZXRcIikpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5lZGl0QnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gaWYgZm9jdXMgaXMgc3RpbGwgb24gaW5saW5lIGVkaXRhYmxlIGZpZWxkIHRoZSBwb3B1cCBzaG91bGQgbm90IGJlIGNsb3NlZFxuXHRcdFx0XHRcdGlmICghdGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hdHRhY2hFdmVudChcInByZXNzVGFiXCIsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnByZXNzVGFiS2V5KCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1NoaWZ0VGFiXCIsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnByZXNzU2hpZnRBbmRUYWJLZXkodGhpcy5nZXRDb250ZW50KCkuZ2V0Q29udGVudEVkaXQoKVswXSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCA9IG5ldyBQb3B1cCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0Y29uc3QgaW5saW5lRWRpdFNhdmVGdW5jdGlvbiA9IHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlLmJpbmQodGhpcyk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0RGlzY2FyZC5iaW5kKHRoaXMpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0U2F2ZUZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIlNhdmVcIlxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRGVwZW5kZW50KFxuXHRcdFx0XHRcdG5ldyBDb21tYW5kRXhlY3V0aW9uKHtcblx0XHRcdFx0XHRcdGV4ZWN1dGU6IGlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24sXG5cdFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGNvbW1hbmQ6IFwiQ2FuY2VsXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmdW5jdGlvbiB0byBjaGVjayBmb2xsb3dpbmcgYmVoYXZpb3VyIG9mIHBvcHVwXG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cC5zZXRGb2xsb3dPZigoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wb3B1cEJlaGF2aW91cigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJkYmxjbGlja1wiLCB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0LmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3ZlclwiLCB0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBFbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZm9jdXNcIiwgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0V2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImtleWRvd25cIiwgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5rZXlkb3duRXZlbnQoZXZlbnQsIHRoaXMuZ2V0Q29udGVudCgpLmNvbnRlbnREaXNwbGF5Py5nZXREb21SZWYoKSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXCJ2YWxpZGF0ZUZpZWxkR3JvdXBcIiwgKF9ldmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBfZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmllbGRHcm91cElkc1wiKTtcblx0XHRcdFx0XHRmaWVsZEdyb3VwSWRzPy5mb3JFYWNoKChmaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdFx0XHRcdGlmIChmaWVsZEdyb3VwSWQgPT09IFwiSW5saW5lRWRpdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuZGVsYXllZENhbGxUb1NhdmUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZm9jdXNpblwiLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcblx0XHRcdFx0XHQvLyBvbmx5IGdvZXMgaW50byBjb25kaXRpb24gZm9yIGN1cnJlbnRseSBlZGl0YWJsZSBmaWVsZHMsIGUuZy4gY29ubmVjdGVkIGZpZWxkc1xuXHRcdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiICYmICF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMub3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzKGV2ZW50KTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0SW5saW5lRWRpdEZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkRlc3Ryb3kgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmRlc3Ryb3koKTtcblx0XHRcdGJhc2VEZXN0cm95Py5jYWxsKHRoaXMpO1xuXHRcdH07XG5cdH1cblxuXHQvKlxuXHQgKiBBZGRzIGFyaWEgYXR0cmlidXRlcyB0byB0aGUgaW5saW5lIGVkaXQgaW5kaWNhdG9yLlxuXHQgKiBAcGFyYW0gdGhpcyBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG5cdCAqL1xuXHRhZGRBcmlhQXR0cmlidXRlcyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IucmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSgpO1xuXHRcdFx0Ly8gYWRkIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0XHRcdHRoaXMuZ2V0TGFiZWxDb250cm9scygpLmZvckVhY2goKGxhYmVsQ29udHJvbDogTGFiZWwpID0+IHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeShsYWJlbENvbnRyb2wpO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBhZGQgdGhlIGZpZWxkIGl0c2VsZlxuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5KHRoaXMuZ2V0SWRGb3JMYWJlbCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBET00gcmVmZXJlbmNlIG9mIHRoZSBmaWVsZCBhc3NvY2lhdGVkIHdpdGggdGhlIGlubGluZSBlZGl0LlxuXHQgKiBAcmV0dXJucyBUaGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRnZXREb21SZWZPZkZpZWxkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0Y29uc3QgZmllbGRXcmFwcGVyID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmllbGRXcmFwcGVyO1xuXHRcdGlmIChmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0Py5sZW5ndGggPiAwICYmIGZpZWxkV3JhcHBlcj8uY29udGVudEVkaXRbMF0/LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnRFZGl0WzBdLmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RGlzcGxheSAmJiBmaWVsZFdyYXBwZXIuY29udGVudERpc3BsYXkuZ2V0RG9tUmVmKCkpIHtcblx0XHRcdHJldHVybiBmaWVsZFdyYXBwZXIuY29udGVudERpc3BsYXkuZ2V0RG9tUmVmKCk7XG5cdFx0fSBlbHNlIGlmIChmaWVsZFdyYXBwZXI/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdHJldHVybiAoZmllbGRXcmFwcGVyIGFzIEZpbGVXcmFwcGVyKS5maWxlVXBsb2FkZXIuZ2V0RG9tUmVmKCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCByZWxhdGl2ZSB0byBpdHMgYXNzb2NpYXRlZCBmaWVsZC5cblx0ICovXG5cdHBvcHVwQmVoYXZpb3VyKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50RmllbGQgPSB0aGlzLmdldERvbVJlZk9mRmllbGQoKTtcblx0XHRpZiAoY3VycmVudEZpZWxkKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBlbGVtZW50IGlzIG9ic2N1cmVkIGJ5IG90aGVyIHNlY3Rpb24vZWxlbWVudFxuXHRcdFx0Y29uc3Qgb3ZlcmxhcHBpbmdFbGVtZW50ID0gdGhpcy5nZXRPdmVybGFwcGluZ0VsZW1lbnQoY3VycmVudEZpZWxkKTtcblx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGlzIG9ic2N1cmVkIGJ5IGFub3RoZXIgZWxlbWVudC9zZWN0aW9uLCBjbG9zZSBpdCBhbmQgc2V0IHVwIGFuIGludGVydmFsIHRvIGNoZWNrIGV2ZXJ5IDIwMCBtcyBpZiBpdCByZW1haW5zIG9ic2N1cmVkXG5cdFx0XHRpZiAob3ZlcmxhcHBpbmdFbGVtZW50ICE9PSBjdXJyZW50RmllbGQgJiYgIWN1cnJlbnRGaWVsZC5jb250YWlucyhvdmVybGFwcGluZ0VsZW1lbnQpKSB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHRcdFx0Ly8gb25seSBpZiBpdCBpcyBlZGl0YWJsZSwgd2Ugc2V0IHVwIHRoZSBpbnRlcnZhbCwgb3RoZXJ3aXNlIHdlIGNsb3NlIHRoZSBwb3B1cCBpZiBpdCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0aWYgKHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIpIHtcblx0XHRcdFx0XHRjb25zdCBwb3B1cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wb3B1cEludGVydmFsbEhhbmRsZXIoY3VycmVudEZpZWxkLCBwb3B1cEludGVydmFsKTtcblx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBibG9ja2VkIGJ5IGFub3RoZXIgc2VjdGlvbi9lbGVtZW50LCB1cGRhdGUgaXRzIHBvc2l0aW9uIHRvIGFsaWduIHdpdGggdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIElubGluZSBFZGl0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LnNldFBvc2l0aW9uKFBvcHVwLkRvY2suRW5kVG9wLCBQb3B1cC5Eb2NrLkVuZEJvdHRvbSwgdGhpcy5fc291cmNlLCBcIjAgLTRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBlbGVtZW50IGxvY2F0ZWQgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudEZpZWxkLlxuXHQgKiBJZiB0aGUgY3VycmVudEZpZWxkIGlzIG92ZXJsYXBwZWQsIGl0IHJldHVybnMgdGhlIG92ZXJsYXBwaW5nIGVsZW1lbnQgaW5zdGVhZC5cblx0ICogQHBhcmFtIGN1cnJlbnRGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGlubGluZSBlZGl0IHBvcHVwIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVGhlIGVsZW1lbnQgZGV0ZXJtaW5lZCB0byBiZSBhdCB0aGUgbG93ZXN0IHZlcnRpY2FsIHBvaW50IG9mIHRoZSBjdXJyZW50IGZpZWxkLlxuXHQgKi9cblx0Z2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54ICsgY3VycmVudEZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gMixcblx0XHRcdC8vIFdlIHRha2UgYSBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBmaWVsZCBhbmQgMi8zIG9mIHRoZSBoZWlnaHQgdG8gcmV0cmlldmUgdGhlIG92ZXJsYXBwaW5nRWxlbWVudFxuXHRcdFx0Y3VycmVudEZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkgKyAwLjY2ICogY3VycmVudEZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJ2YWwgaGFuZGxlciBmb3IgbWFuYWdpbmcgdGhlIGludGVydmFsIHdoZW4gdGhlIHBvcHVwIGlzIG92ZXJsYXBwZWQgYnkgYW4gZWxlbWVudC5cblx0ICogQHBhcmFtIGN1cnJlbnRGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGlubGluZSBlZGl0IHBvcHVwIGlzIG9wZW5lZC5cblx0ICogQHBhcmFtIHBvcHVwSW50ZXJ2YWwgVGhlIGludGVydmFsIGNvbnN0YW50LlxuXHQgKi9cblx0cG9wdXBJbnRlcnZhbGxIYW5kbGVyKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGN1cnJlbnRGaWVsZDogRWxlbWVudCwgcG9wdXBJbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQpOiB2b2lkIHtcblx0XHQvLyBDaGVjayBpZiBlbGVtZW50IGlzIHN0aWxsIG9ic2N1cmVkIGJ5IG90aGVyIHNlY3Rpb24vZWxlbWVudFxuXHRcdGNvbnN0IG92ZXJsYXBwZWRFbGVtZW50ID0gdGhpcy5nZXRPdmVybGFwcGluZ0VsZW1lbnQoY3VycmVudEZpZWxkKTtcblx0XHRpZiAob3ZlcmxhcHBlZEVsZW1lbnQgPT09IGN1cnJlbnRGaWVsZCB8fCBjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBlZEVsZW1lbnQpKSB7XG5cdFx0XHQvLyBJZiBlbGVtZW50IGlzIHZpc2libGUgYWdhaW4sIG9wZW4gUG9wdXBcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8ub3BlbigwLCBQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMpO1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwb3B1cEludGVydmFsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgaW5saW5lIGVkaXQuXG5cdCAqIEBwYXJhbSBwb3RlbnRpYWxGb2N1c091dCBQb3RlbnRpYWwgZm9jdXMgb3V0LiBBcHBsaWVzIGZvciBTaGlmdCArIFRhYiBvbiBmaWVsZCBhbmQgVGFiIG9uIGRpc2NhcmQgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9jdXNGb3J3YXJkIElmIGZvY3VzIHNob3VsZCBiZSBzZXQgZm9yd2FyZCBvciBiYWNrd2FyZC5cblx0ICovXG5cdGZvY3VzSGFuZGxpbmdJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIHBvdGVudGlhbEZvY3VzT3V0OiBib29sZWFuLCBmb2N1c0ZvcndhcmQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNlZEVsZW1lbnQgPSBmaW5kVGFiYmFibGUodGhpcy5nZXREb21SZWYoKSwge1xuXHRcdFx0c2tpcENoaWxkOiB0cnVlLFxuXHRcdFx0Zm9yd2FyZDogZm9jdXNGb3J3YXJkXG5cdFx0fSk7XG5cdFx0Zm9jdXNlZEVsZW1lbnQ/LmVsZW1lbnQuZm9jdXMoKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0aWYgKHBvdGVudGlhbEZvY3VzT3V0KSB7XG5cdFx0XHQvLyBvbmx5IGNsb3NlcyB0aGUgaW5saW5lIGVkaXQgY29tcGxldGVseSBpZiB0aGUgZm9jdXMgaXMgbm90IG9uIHRoZSBzYW1lIGlubGluZSBlZGl0IGFueW1vcmVcblx0XHRcdC8vIGNvbm5lY3RlZCBmaWVsZHMgd29uJ3QgYmUgY2xvc2VkIGlmIHN3aXRjaGluZyBmb2N1cyBiZXR3ZWVuIHRoZW1cblx0XHRcdGlmICh0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VySW5saW5lRWRpdFNhdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIG1lYXN1cmUgZmllbGQgb2YgYSBmaWVsZC5cblx0ICovXG5cdGZvY3VzTWVhc3VyZUZpZWxkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRjb25zdCByb290RmllbGQgPSBmaW5kVGFiYmFibGUodGhpcy5nZXREb21SZWYoKSwge1xuXHRcdFx0c2tpcENoaWxkOiBmYWxzZSxcblx0XHRcdGZvcndhcmQ6IHRydWVcblx0XHR9KTtcblx0XHRjb25zdCBtZWFzdXJlRmllbGQgPSBmaW5kVGFiYmFibGUocm9vdEZpZWxkLmVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IHRydWVcblx0XHR9KTtcblx0XHRtZWFzdXJlRmllbGQ/LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW1wbGVtZW50IGZvY3VzIGhhbmRsaW5nIGZvciBmaWVsZHMgd2l0aCBtZWFzdXJlIGZpZWxkcyB3aGVuIG5hdmlnYXRpbmcgdmlhIHRhYiBvciBzaGlmdC10YWIgd2l0aGluIGFuIGlubGluZSBlZGl0YWJsZSBmaWVsZC5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nTWVhc3VyZUZpZWxkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGZvY3VzRm9yd2FyZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzYWJsZUVsZW1lbnQgPSBmaW5kVGFiYmFibGUoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCwge1xuXHRcdFx0c2tpcENoaWxkOiB0cnVlLFxuXHRcdFx0Zm9yd2FyZDogZm9jdXNGb3J3YXJkXG5cdFx0fSk7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG5leHQvcHJldmlvdXMgZm9jdXNhYmxlIGVsZW1lbnQgaXMgd2l0aGluIHRoZSBpbmxpbmUgZWRpdCBwb3B1cFxuXHRcdGlmICh0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQpKSB7XG5cdFx0XHQvLyBJZiBpdCBpcywgZm9jdXMgb24gdGhlIG5leHQvcHJldmlvdXMgZm9jdXNhYmxlIGVsZW1lbnRcblx0XHRcdGZvY3VzYWJsZUVsZW1lbnQuZWxlbWVudD8uZm9jdXMoKTtcblx0XHR9XG5cblx0XHQvLyBJZiBuZXh0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiBjdXJyZW50IGlubGluZSBlZGl0YWJsZSBmaWVsZCBhbmQgZm9jdXMgaXMgc2V0IGZvcndhcmQsIGZvY3VzIG9uIHRoZSBzYXZlIGJ1dHRvblxuXHRcdGVsc2UgaWYgKGZvY3VzRm9yd2FyZCkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIElmIGZvY3VzIGlzIHNldCBiYWNrd2FyZCwgZm9jdXMgb24gdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0ZWxzZSB7XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3NlcyBrZXlkb3duIGV2ZW50cyBmb3IgdGhlIGlubGluZSBlZGl0IGNvbXBvbmVudCwgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3MsIGxpa2UgVGFiIG9yIEVzY2FwZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBrZXlkb3duIGV2ZW50IHRyaWdnZXJlZCB3aXRoaW4gdGhlIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGlubGluZUVkaXRLZXlkb3duKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQoKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnByZXNzVGFiS2V5T25GaWVsZChkaXNwbGF5ZWRGaWVsZCwgZXZlbnQpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1NoaWZ0VGFiS2V5T25GaWVsZChkaXNwbGF5ZWRGaWVsZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIFRhYiBrZXkgcHJlc3MgZXZlbnQgd2hlbiBmb2N1cyBpcyBvbiB0aGUgZWRpdCwgc2F2ZSwgb3IgZGlzY2FyZCBidXR0b25zLlxuXHQgKi9cblx0cHJlc3NUYWJLZXkodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHRzd2l0Y2ggKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldERpc2NhcmRCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldERpc2NhcmRCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmdJbmxpbmVFZGl0KHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICogQHBhcmFtIHJvb3RGaWVsZCBUaGUgZWxlbWVudCB3aXRoIGlubGluZSBlZGl0aW5nIGVuYWJsZWQuXG5cdCAqL1xuXHRwcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIHJvb3RGaWVsZDogVUk1RWxlbWVudCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHRzd2l0Y2ggKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHRpZiAodGhpcy5jaGVja0Zvck1lYXN1cmVGaWVsZCgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzTWVhc3VyZUZpZWxkKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJvb3RGaWVsZC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIHRoZSBUYWIga2V5IG9uIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBDdXJyZW50IGtleWJvYXJkIGV2ZW50LlxuXHQgKi9cblx0cHJlc3NUYWJLZXlPbkZpZWxkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGRpc3BsYXllZEZpZWxkOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBDaGVjayB0aGF0IHRoZSBmb2N1cyBvZiB0aGUgZmllbGQgaXMgb24gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkKSB7XG5cdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5jaGVja0Zvck1lYXN1cmVGaWVsZCgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nTWVhc3VyZUZpZWxkKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiICsgU2hpZnQga2V5IG9uIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRwcmVzc1NoaWZ0VGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcblx0XHQvLyBDaGVjayB0aGF0IHRoZSBmb2N1cyBvZiB0aGUgZmllbGQgaXMgb24gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkKSB7XG5cdFx0XHQvLyBmb2N1cyB0byB0aGUgcHJldmlvdXMgaW50ZXJhY3RpdmUgZWxlbWVudFxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5jaGVja0Zvck1lYXN1cmVGaWVsZCgpKSB7XG5cdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmdJbmxpbmVFZGl0KHRydWUsIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nTWVhc3VyZUZpZWxkKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgZm9jdXMgZXZlbnQgZm9yIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzIGV2ZW50IGZvciB0aGUgZmllbGRcblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRmb2N1c0V2ZW50KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGV2ZW50OiBGb2N1c0V2ZW50LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QsIHdlIGRvbid0IHdhbnQgdG8gZm9jdXMgb24gdGhlIGVkaXQgYnV0dG9uIG9mIHRoZSBmaWVsZFxuXHRcdFx0XHQvLyBidXQgb250byB0aGUgY29udGVudERpc3BsYXlcblx0XHRcdFx0ZGlzcGxheWVkRmllbGQuZm9jdXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMub3BlbklubGluZUVkaXRQb3B1cChldmVudCk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBrZXlkb3duIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBLZXlib2FyZCBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0a2V5ZG93bkV2ZW50KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiB8fCAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZGlzcGxheWVkRmllbGQgJiYgdGhpcy5jaGVja0ZvclNlbWFudGljT2JqZWN0KCkpKSAmJlxuXHRcdFx0dGhpcy5oYXNJbmxpbmVFZGl0XG5cdFx0KSB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRLZXlkb3duKGV2ZW50LCBkaXNwbGF5ZWRGaWVsZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGZpZWxkIGdyb3VwIGlkcyBvZiB0aGUgY29udHJvbCB0byBpbmNsdWRlIG9yIHJlbW92ZSB0aGUgaW5saW5lIGVkaXQgZmllbGQgZ3JvdXAgaWQuXG5cdCAqIEBwYXJhbSBhY3Rpb24gQWRkIG9yIFJlbW92ZSB0aGUgaWRcblx0ICovXG5cdHRvZ2dsZUlubGluZUVkaXRGaWVsZEdyb3VwSWQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgYWN0aW9uOiBGaWVsZEdyb3VwSWRBY3Rpb24pOiB2b2lkIHtcblx0XHRjb25zdCBzaG91bGRBZGQgPSBhY3Rpb24gPT09IEZpZWxkR3JvdXBJZEFjdGlvbi5BZGQ7XG5cdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IG5ldyBTZXQodGhpcy5nZXRGaWVsZEdyb3VwSWRzKCkpO1xuXG5cdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0ZmllbGRHcm91cElkcy5hZGQoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWVsZEdyb3VwSWRzLmRlbGV0ZShcIklubGluZUVkaXRcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oZmllbGRHcm91cElkcykpO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW5Db250cm9scyA9XG5cdFx0XHQodGhpcy5jb250ZW50Py5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG1hbmFnZWRPYmplY3Q6IE1hbmFnZWRPYmplY3QpID0+XG5cdFx0XHRcdG1hbmFnZWRPYmplY3QuaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKVxuXHRcdFx0KSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQpID8/IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNoaWxkcmVuQ29udHJvbHMpIHtcblx0XHRcdGNvbnN0IGNoaWxkRmllbGRHcm91cElkcyA9IG5ldyBTZXQoY29udHJvbC5nZXRGaWVsZEdyb3VwSWRzKCkpO1xuXG5cdFx0XHRpZiAoc2hvdWxkQWRkKSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5hZGQoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRGaWVsZEdyb3VwSWRzLmRlbGV0ZShcIklubGluZUVkaXRcIik7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sLnNldEZpZWxkR3JvdXBJZHMoQXJyYXkuZnJvbShjaGlsZEZpZWxkR3JvdXBJZHMpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LlxuXHQgKi9cblx0b3BlbklubGluZUVkaXRQb3B1cCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNJbmxpbmVFZGl0ICYmIHRoaXMuaW5saW5lRWRpdFN0YXRlICE9PSBcIkVkaXRhYmxlXCIgJiYgdGhpcy5lZGl0TW9kZSA9PT0gXCJEaXNwbGF5XCIgJiYgIXRoaXMucmVhZE9ubHkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8ub3BlbigwLCBQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHR0aGlzLl9zb3VyY2UgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQ7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRXaWR0aCgoZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50KT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBtb3VzZSBldmVudHMuXG5cdCAqIEBwYXJhbSByZWxhdGVkVGFyZ2V0IFRoZSByZWxhdGVkIHRhcmdldC5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByZWxhdGVkVGFyZ2V0OiBFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0cmVsYXRlZFRhcmdldCAmJlxuXHRcdFx0IXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSAmJlxuXHRcdFx0IXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGZpZWxkIGhhcyBhIG1lYXN1cmUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIG1lYXN1cmUgZmllbGQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGNoZWNrRm9yTWVhc3VyZUZpZWxkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljIE9iamVjdCBpZiBjbGlja2luZyBvbiBpdC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWNPYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGNoZWNrRm9yU2VtYW50aWNPYmplY3QodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhcmdldHByb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5KCk7XG5cdFx0cmV0dXJuICEhdGFyZ2V0cHJvcGVydHk/LmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNPYmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIHRoYXQgYXJlIG5vdCBpbiBlZGl0IG1vZGUuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdE1vZGUoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmaWVsZHMgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZvY3VzIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gZXZlbnQgRm9jdXNpbiBldmVudCBmb3IgdGhlIGZpZWxkLlxuXHQgKi9cblx0b3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8ub3Blbihcblx0XHRcdDAsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZFRvcCxcblx0XHRcdFBvcHVwLkRvY2suRW5kQm90dG9tLFxuXHRcdFx0KGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCkgfHwgdGhpcy5fc291cmNlLFxuXHRcdFx0XCIwIC00XCJcblx0XHQpO1xuXHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxpbmcgZm9yIGNvbm5lY3RlZCBmaWVsZHMuXG5cdCAqL1xuXHRzZXRJbmxpbmVFZGl0Rm9jdXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuZm9jdXNIYW5kbGluZyh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgYW5kIGNhbGxzIHRoZSB0b2dnbGVDb250cm9sTG9jYWxFZGl0IG1ldGhvZCB0byBzZXQgdGhlIGNvbnRyb2wgdG8gZWRpdCBtb2RlLlxuXHQgKi9cblx0dHJpZ2dlcklubGluZUVkaXQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pbmxpbmVFZGl0RW5hYmxlZCB8fCB0aGlzLmVkaXRNb2RlICE9PSBcIkRpc3BsYXlcIiB8fCB0aGlzLnJlYWRPbmx5IHx8ICF0aGlzLmhhc0lubGluZUVkaXQpIHtcblx0XHRcdC8vIGlmIHRoZSBmaWVsZCBpcyBhbHJlYWR5IGluIGVkaXQgbW9kZSBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IHRydWU7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0RWRpdE1vZGUodHJ1ZSk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHRQYXRoID0gKHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0Q2Fub25pY2FsUGF0aCgpID8/IFwiXCI7XG5cdFx0Y29uc3QgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKTtcblx0XHRpZiAocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpIHtcblx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuc3RhcnRJbmxpbmVFZGl0KHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lLCBiaW5kaW5nQ29udGV4dFBhdGgsIHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgZGlzY2FyZC5cblx0ICovXG5cdGFzeW5jIHRyaWdnZXJJbmxpbmVFZGl0RGlzY2FyZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaGFzUGVuZGluZ1VzZXJJbnB1dCgpKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBwZW5kaW5nIHVzZXIgaW5wdXQgd2UgZGVsYXkgdGhlIHNhdmUgdG8gYWxsb3cgaW5uZXIgY2hhbmdlcyBmcm9tIHRoZSBtZGMgY29uZGl0aW9ucyB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBtb2RlbFxuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dChyZXNvbHZlLCAyMDApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdERpc2NhcmQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIGlubGluZUVkaXRGbG93IHNhdmUgcHJvbWlzZS5cblx0ICovXG5cdGFzeW5jIHRyaWdnZXJJbmxpbmVFZGl0U2F2ZSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogUHJvbWlzZTx2b2lkIHwgdW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaGFzUGVuZGluZ1VzZXJJbnB1dCgpKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBwZW5kaW5nIHVzZXIgaW5wdXQgd2UgZGVsYXkgdGhlIHNhdmUgdG8gYWxsb3cgaW5uZXIgY2hhbmdlcyBmcm9tIHRoZSBtZGMgY29uZGl0aW9ucyB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBtb2RlbFxuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dChyZXNvbHZlLCAyMDApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogSG9vayB0byByZWFjdCB0byBhbiBpbmxpbmUgZWRpdCBzdGFydCBub3RpZmljYXRpb24gZm9ybSB0aGUgaW5saW5lRWRpdEZsb3cuXG5cdCAqIEBwYXJhbSBpbmxpbmVFZGl0Q29udHJvbHMgVGhlIGZpZWxkcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gaW5saW5lIGVkaXQgbW9kZS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0XG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0XG5cdCAqL1xuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJpbmxpbmVFZGl0Rmxvd1wiLCBcImlubGluZUVkaXRTdGFydFwiKVxuXHRpbmxpbmVFZGl0U3RhcnQoXG5cdFx0dGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCxcblx0XHRpbmxpbmVFZGl0Q29udHJvbHM6IENvbnRyb2xbXSxcblx0XHRwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdDogc3RyaW5nW10sXG5cdFx0YmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdDogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGlmIChpbmxpbmVFZGl0Q29udHJvbHMuaW5jbHVkZXModGhpcykpIHtcblx0XHRcdHJldHVybjsgLy8gYWxyZWFkeSBpbiBpbmxpbmUgZWRpdCBtb2RlXG5cdFx0fVxuXHRcdGlmICh0aGlzLmhhc0lubGluZUVkaXQpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiO1xuXHRcdFx0aWYgKCFwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdC5pbmNsdWRlcyhwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSkgfHwgYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdCAhPT0gYmluZGluZ0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMudG9nZ2xlSW5saW5lRWRpdEZpZWxkR3JvdXBJZChGaWVsZEdyb3VwSWRBY3Rpb24uQWRkKTtcblx0XHRcdGNvbnN0IHVpTW9kZWwgPSB0aGlzLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0Y29uc3QgcGF0aCA9IGAvJHt0aGlzLmdldElkKCl9YDtcblx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkocGF0aCwgeyBpc0VkaXRhYmxlOiB0cnVlIH0pO1xuXHRcdFx0dGhpcy5iaW5kRWxlbWVudCh7IHBhdGgsIG1vZGVsOiBcInVpXCIgfSk7XG5cdFx0XHQvL0luIGNhc2Ugb2YgY29ubmVjdGVkIGZpZWxkcywgd2Ugc2V0IHRoZSBmb2N1cyBvbiB0aGUgZWxlbWVudCB0aGF0IHdhcyBjbGlja2VkXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdCh0aGlzLmdldENvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+KT8uZ2V0Q29udGVudEVkaXQoKVswXT8uZm9jdXMoKTtcblx0XHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdC5pbmNsdWRlcyhwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0U3RhdGUgPSBcIkVkaXRhYmxlXCI7XG5cdFx0XHR9XG5cdFx0XHRpbmxpbmVFZGl0Q29udHJvbHMucHVzaCh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIGluZGljYXRvciBwb3B1cC5cblx0ICovXG5cdHJlc2V0SW5kaWNhdG9yUG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZShmYWxzZSk7XG5cdFx0dGhpcy5faXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBhZnRlciBzYXZlIG9yIGRpc2NhcmQuXG5cdCAqIEBwYXJhbSByZWZyZXNoRGVzY3JpcHRpb24gSWYgdGhlIGRlc2NyaXB0aW9uIHNob3VsZCBiZSByZWZyZXNoZWQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0RW5kKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIHJlZnJlc2hEZXNjcmlwdGlvbj86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIikge1xuXHRcdFx0aWYgKHJlZnJlc2hEZXNjcmlwdGlvbikge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hEZXNjcmlwdGlvbklmTmVlZGVkKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRvZ2dsZUlubGluZUVkaXRGaWVsZEdyb3VwSWQoRmllbGRHcm91cElkQWN0aW9uLlJlbW92ZSk7XG5cdFx0XHR0aGlzLnVuYmluZEVsZW1lbnQoXCJ1aVwiKTtcblx0XHRcdHRoaXMuaW5saW5lRWRpdFN0YXRlID0gXCJDbG9zZWRcIjtcblx0XHRcdHRoaXMucmVzZXRJbmRpY2F0b3JQb3B1cCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZm9yY2UgdGhlIG1vZGVsIHJlZnJlc2ggZm9yIHRoZSBkZXNjcmlwdGlvbiBpZiBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHZpYSAgYSBiaW5kaW5nIHdpdGggYSAkJG5vUGF0Y2ggcGFyYW1ldGVyLlxuXHQgKi9cblx0cmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdC8vIHdoZW4gdGhlIGZpZWxkIHVzZXMgYSBtZGMgZmllbGQgdGhlIGRlc2NyaXB0aW9uIGlzIHVwZGF0ZWQgdmlhIHRoZSBhZGRpdGlvbmFsVmFsdWUgYmluZGluZ1xuXHRcdC8vIHRoYXQgaGFzIGEgbm9QYXRjaCBwYXJhbWV0ZXIgc28gaXQgZG9lc24ndCBnZXQgcmV2ZXJ0ZWQgYnlhIHJlc2V0Q2hhbmdlc1xuXHRcdGlmICh0aGlzLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50Py5pc0E8RW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpZWxkV3JhcHBlclwiKVxuXHRcdFx0XHQ/IHRoaXMuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdXG5cdFx0XHRcdDogbnVsbDtcblx0XHRcdGlmIChjb250ZW50ICYmIGNvbnRlbnQuaXNBPE1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gY29udGVudC5nZXRCaW5kaW5nKFwiYWRkaXRpb25hbFZhbHVlXCIpPy5nZXRQYXRoKCk7XG5cdFx0XHRcdGlmIChkZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0XHQodGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpPy5yZXF1ZXN0U2lkZUVmZmVjdHMoW2Rlc2NyaXB0aW9uUGF0aF0sIFwiJGF1dG9cIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7TUFvQktBLGtCQUFrQiwwQkFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBQSxPQUFsQkEsa0JBQWtCO0VBQUEsRUFBbEJBLGtCQUFrQjtFQUFBLElBS0ZDLFVBQVUsSUFBQUMsSUFBQSxHQXVqQjdCQywwQkFBMEIsQ0FBQyxnQkFBZ0IsRUFBRSxp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
@@ -66,7 +66,6 @@ export default class InlineEdit {
66
66
  visible: true,
67
67
  pressEdit: this.triggerInlineEdit.bind(this)
68
68
  });
69
- this._inlineEditFieldGroupId = "InlineEdit";
70
69
  this._inlineEditIndicator.attachEvent("mouseout", (event: UI5Event<{ relatedTarget: Element }>) => {
71
70
  this.closeInlineEditPopupMouseEvent(event.getParameter("relatedTarget"));
72
71
  });
@@ -598,6 +597,9 @@ export default class InlineEdit {
598
597
  propertiesForInlineEdit: string[],
599
598
  bindingContextPathForInlineEdit: string
600
599
  ): void {
600
+ if (inlineEditControls.includes(this)) {
601
+ return; // already in inline edit mode
602
+ }
601
603
  if (this.hasInlineEdit) {
602
604
  const bindingContextPath = (this.getBindingContext() as Context | undefined)?.getCanonicalPath() ?? "";
603
605
  const propertyFullyQualifiedName = this.getInlineEditPropertyName() ?? "";
@@ -619,9 +621,7 @@ export default class InlineEdit {
619
621
  if (propertiesForInlineEdit.includes(propertyFullyQualifiedName)) {
620
622
  this.inlineEditState = "Editable";
621
623
  }
622
- if (!inlineEditControls.includes(this)) {
623
- inlineEditControls.push(this);
624
- }
624
+ inlineEditControls.push(this);
625
625
  }
626
626
  }
627
627
 
@@ -62,7 +62,8 @@ sap.ui.define(["sap/ui/VersionInfo", "sap/ui/core/Lib"], function (VersionInfo,
62
62
  url: `${SERVICE_HOST}${requestParameters.serviceUrl}$batch`,
63
63
  method: "POST",
64
64
  headers: {
65
- "X-CSRF-Token": "{{csrfTokens.token1}}"
65
+ "X-CSRF-Token": "{{csrfTokens.token1}}",
66
+ "Accept": "multipart/mixed"
66
67
  },
67
68
  batch: {
68
69
  response: {
@@ -434,4 +435,4 @@ sap.ui.define(["sap/ui/VersionInfo", "sap/ui/core/Lib"], function (VersionInfo,
434
435
  _exports.getCardManifest = getCardManifest;
435
436
  return _exports;
436
437
  }, false);
437
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfVEFCTEVfUkVDT1JEUyIsIlNFUlZJQ0VfSE9TVCIsImlzQW5hbHl0aWNhbCIsInR5cGUiLCJjb250ZW50IiwiZ2V0Q2FyZERhdGEiLCJfcmVmIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJxdWVyeVVybCIsImluY2x1ZGVzIiwic2VydmljZVVybCIsInNwbGl0IiwicmVxdWVzdCIsInVybCIsIm1ldGhvZCIsImhlYWRlcnMiLCJiYXRjaCIsInJlc3BvbnNlIiwiQWNjZXB0IiwiZ2V0Q2FyZEhlYWRlciIsImluc2lnaHRzUGFyYW1zIiwiY2FyZEhlYWRlciIsInRpdGxlIiwiY2FyZFRpdGxlIiwiYWN0aW9ucyIsInBhcmFtZXRlcnMiLCJzdGF0dXMiLCJ0ZXh0IiwiZ2V0QWN0aW9uT2JqZWN0IiwibmF2VGFyZ2V0IiwiaWJuUGFyYW1zIiwic2Vuc2l0aXZlUHJvcHMiLCJuaEh5YnJpZElBcHBTdGF0ZUtleSIsImlBcHBTdGF0ZUtleSIsImFwcFZhcmlhbnRJZCIsImFjdGlvblBhcmFtcyIsImliblRhcmdldCIsImludGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyIsIm1hbmRhdG9yeUZpbHRlcnMiLCJmaWx0ZXJzIiwibmF2aWdhdGlvbiIsImVudGl0eVNldFBhdGgiLCJjb250ZW50VXJsIiwic29ydFF1ZXJ5IiwiY2FyZENvbmZpZ1BhcmFtcyIsInN0YXRlIiwidmFsdWUiLCJfcmVsZXZhbnRPRGF0YUZpbHRlcnMiLCJfcmVsZXZhbnRPRGF0YVBhcmFtZXRlcnMiLCJfbWFuZGF0b3J5T0RhdGFGaWx0ZXJzIiwiX21hbmRhdG9yeU9EYXRhUGFyYW1ldGVycyIsIl9lbnRpdHlTZXQiLCJfY29udGVudERhdGFVcmwiLCJfSGVhZGVyRGF0YVVybCIsIl9jb250ZW50VG9wUXVlcnkiLCJfaGVhZGVyVG9wUXVlcnkiLCJfY29udGVudFNraXBRdWVyeSIsIl9oZWFkZXJTa2lwUXVlcnkiLCJfY29udGVudFNvcnRRdWVyeSIsIl9oZWFkZXJTb3J0UXVlcnkiLCJmaWx0ZXIiLCJwdXNoIiwicGFyYW1ldGVyIiwiZ2V0Q2FyZENvbmZpZyIsImNhcmRDb25maWd1cmF0aW9uIiwiZGVzdGluYXRpb25zIiwic2VydmljZSIsIm5hbWUiLCJkZWZhdWx0VXJsIiwiY3NyZlRva2VucyIsInRva2VuMSIsImRhdGEiLCJvRGF0YVBhcmFtZXRlcnMiLCJnZXRJbnRlZ3JhdGlvbkNhcmRNYW5pZmVzdCIsImNhcmRDb25maWciLCJjb25maWd1cmF0aW9uIiwiaGVhZGVyIiwiZ2V0QW5hbHl0aWNhbENhcmRDb250ZW50IiwiZ2V0VGFibGVDYXJkQ29udGVudCIsImV4dGVuc2lvbiIsIl9yZWYyIiwiY2FyZENvbnRlbnQiLCJwYXRoIiwibWF4SXRlbXMiLCJyb3ciLCJoaWdobGlnaHQiLCJyb3dDcml0aWNhbGl0eSIsInVuZGVmaW5lZCIsImNvbHVtbnMiLCJpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImdyb3VwQnkiLCJncm91cENvbmRpdGlvbk5hbWUiLCJwcm9wZXJ0eSIsImdyb3VwRGVzY2VuZGluZyIsImRlc2NlbmRpbmciLCJncm91cCIsIm9yZGVyIiwiZGlyIiwiaXNOYXZpZ2F0aW9uRW5hYmxlZCIsImNoYXJ0VHlwZSIsImNoYXJ0UHJvcGVydGllcyIsImRpbWVuc2lvbnMiLCJtZWFzdXJlcyIsImZlZWRzIiwiYWN0aW9uYWJsZUFyZWEiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0U2FwSW5zaWdodHMiLCJfcmVmMyIsInBhcmVudEFwcE1hbmlmZXN0IiwidWk1VmVyc2lvbiIsIlZlcnNpb25JbmZvIiwibG9hZCIsIm1hbmlmZXN0UGFyYW1zIiwicGFyZW50QXBwSWQiLCJpZCIsImNhcmRUeXBlIiwidmVyc2lvbnMiLCJ1aTUiLCJ2ZXJzaW9uIiwiYnVpbGRUaW1lc3RhbXAiLCJmaWx0ZXJFbnRpdHlTZXQiLCJhbGxvd2VkQ2hhcnRUeXBlcyIsImNyZWF0ZUNhcmRNYW5pZmVzdCIsImFwcE1hbmlmZXN0IiwidWk1TWFuaWZlc3QiLCJkZWZhdWx0TW9kZWwiLCJtb2RlbHMiLCJkYXRhU291cmNlU2VydmljZSIsImRhdGFTb3VyY2UiLCJpbnNpZ2h0c0NhcmRNYW5pZmVzdCIsIkRhdGUiLCJub3ciLCJkYXRhU291cmNlcyIsImZpbHRlclNlcnZpY2UiLCJjb250ZW50RGVuc2l0aWVzIiwiZGVwZW5kZW5jaWVzIiwibGlicyIsImxhenkiLCJjb21wb25lbnROYW1lIiwic2hvd0luc2lnaHRzQ2FyZFByZXZpZXciLCJjYXJkQ3JlYXRpb25EaWFsb2dXYXJuaW5nIiwiZGVmYXVsdCIsImNhcmRIZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiY2FyZEhlbHBlckluc3RhbmNlIiwiZ2V0U2VydmljZUFzeW5jIiwiY2FyZCIsInNob3dDYXJkUHJldmlldyIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3IiwiY21JbnN0YW5jZSIsImJ1dHRvblRleHQiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiZXZlbnQiLCJjYXJkTWFuaWZlc3QiLCJnZXRQYXJhbWV0ZXIiLCJnZXRTb3VyY2UiLCJnZXRNYW5pZmVzdCIsInB1Ymxpc2hDYXJkIiwiZ2V0Q2FyZE1hbmlmZXN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnNpZ2h0c1NlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250ZW50RGVuc2l0aWVzVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUGFyYW1ldGVyVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbXMsXG5cdENhcmRDb25maWdQYXJhbWV0ZXJzLFxuXHRDYXJkQ29uZmlndXJhdGlvbixcblx0Q2FyZERhdGEsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUeXBlLFxuXHRDaGFydENhcmRDb250ZW50LFxuXHRUYWJsZUNhcmRDb2x1bW4sXG5cdFRhYmxlQ2FyZENvbnRlbnRcbn0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDb250ZW50ID0gUGljazxDaGFydENhcmRDb250ZW50LCBcImRpbWVuc2lvbnNcIiB8IFwiZmVlZHNcIiB8IFwibWVhc3VyZXNcIiB8IFwiY2hhcnRUeXBlXCIgfCBcImNoYXJ0UHJvcGVydGllc1wiPiAmIHtcblx0Y2FyZFRpdGxlOiBzdHJpbmc7XG5cdGxlZ2VuZFZpc2libGU6IGJvb2xlYW47XG5cdGFsbG93ZWRDaGFydFR5cGVzOiBDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl1bXCJhbGxvd2VkQ2hhcnRUeXBlc1wiXTtcbn07XG5cbnR5cGUgSW5zaWdodFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuXHQvLyBhbGwgcGFyYW1ldGVycyByZWxhdGVkIHRvIHJlcXVlc3QgZm9yIHRoZSBkYXRhXG5cdHNlcnZpY2VVcmw6IHN0cmluZztcblx0cXVlcnlVcmw6IHN0cmluZztcblx0Z3JvdXBCeT86IHtcblx0XHRwcm9wZXJ0eTogc3RyaW5nO1xuXHRcdGRlc2NlbmRpbmc/OiBib29sZWFuO1xuXHR9O1xuXHRzb3J0UXVlcnk6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udGVudCA9IHtcblx0cm93Q3JpdGljYWxpdHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y2FyZFRpdGxlOiBzdHJpbmc7XG5cdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zOiBUYWJsZUNhcmRDb2x1bW5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEluc2lnaHRzUGFyYW1zPEMgPSBUYWJsZUNvbnRlbnQgfCBDaGFydENvbnRlbnQ+ID0ge1xuXHRuYXZpZ2F0aW9uOiB7XG5cdFx0aUFwcFN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aW50ZW50OiBQYXJzZWRIYXNoO1xuXHRcdGFwcFZhcmlhbnRJZD86IHN0cmluZztcblx0fTtcblx0dHlwZTogQ2FyZFR5cGU7XG5cdHJlcXVlc3RQYXJhbWV0ZXJzOiBJbnNpZ2h0UmVxdWVzdFBhcmFtZXRlcnM7XG5cdGNvbnRlbnQ6IEM7XG5cdHBhcmVudEFwcE1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQ7XG5cdHBhcmFtZXRlcnM6IHtcblx0XHRtYW5kYXRvcnlGaWx0ZXJzPzogc3RyaW5nW107XG5cdFx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+O1xuXHRcdG9EYXRhUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+O1xuXHRcdHNlbnNpdGl2ZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHRpc05hdmlnYXRpb25FbmFibGVkPzogYm9vbGVhbjtcblx0fTtcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nO1xufTtcblxuY29uc3QgTUFYX1RBQkxFX1JFQ09SRFMgPSAxNTtcbmNvbnN0IFNFUlZJQ0VfSE9TVCA9IFwie3tkZXN0aW5hdGlvbnMuc2VydmljZX19XCI7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhcmFtZXRlcnMgaGF2ZSBhbmFseXRpY2FsIG9yIHRhYmxlIGNvbnRlbnQuXG4gKiBAcGFyYW0gdHlwZSBDYXJkIHR5cGVcbiAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgdGhhdCBpcyB0byBiZSB0eXBlZFxuICogQHJldHVybnMgVHlwZSBjaGVja2VkIHRydWUgaWYgdGhlIHBhcmFtZXRlcnMgY29udGFpbiBjb250ZW50IGZvciBhbiBhbmFseXRpY2FsIGNhcmRcbiAqL1xuZnVuY3Rpb24gaXNBbmFseXRpY2FsKHR5cGU6IHN0cmluZywgY29udGVudDogVGFibGVDb250ZW50IHwgQ2hhcnRDb250ZW50KTogY29udGVudCBpcyBDaGFydENvbnRlbnQge1xuXHRyZXR1cm4gdHlwZSA9PT0gXCJBbmFseXRpY2FsXCI7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyB0aGUgcmVxdWVzdCBvYmplY3QgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy50eXBlXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXMucmVxdWVzdFBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSByZXF1ZXN0IGRhdGEgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICovXG5mdW5jdGlvbiBnZXRDYXJkRGF0YSh7IHR5cGUsIHJlcXVlc3RQYXJhbWV0ZXJzIH06IEluc2lnaHRzUGFyYW1zPHVua25vd24+KTogQ2FyZERhdGEge1xuXHQvLyBtYW5pcHVsYXRlIHRoZSBxdWVyeSB1cmwgYmFzZWQgb24gY2FyZCB0eXBlIGFuZCBzZXJ2aWNlIHVybFxuXHRsZXQgcXVlcnlVcmwgPSByZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybDtcblx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnF1ZXJ5VXJsLmluY2x1ZGVzKHJlcXVlc3RQYXJhbWV0ZXJzLnNlcnZpY2VVcmwpKSB7XG5cdFx0cXVlcnlVcmwgPSByZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybC5zcGxpdChyZXF1ZXN0UGFyYW1ldGVycy5zZXJ2aWNlVXJsKVsxXTtcblx0fVxuXHRpZiAodHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0Ly8gZmV0Y2ggb25seSB0aGUgZmlyc3QgMTUgcmVjb3Jkc1xuXHRcdHF1ZXJ5VXJsID0gYCR7cXVlcnlVcmx9JiR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRyZXF1ZXN0OiB7XG5cdFx0XHR1cmw6IGAke1NFUlZJQ0VfSE9TVH0ke3JlcXVlc3RQYXJhbWV0ZXJzLnNlcnZpY2VVcmx9JGJhdGNoYCxcblx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFwiWC1DU1JGLVRva2VuXCI6IFwie3tjc3JmVG9rZW5zLnRva2VuMX19XCJcblx0XHRcdH0sXG5cdFx0XHRiYXRjaDoge1xuXHRcdFx0XHRyZXNwb25zZToge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHF1ZXJ5VXJsLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyB0aGUgY2FyZCBoZWFkZXIgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogSW5jbHVkZXMgdGhlIHN0YXR1cyB0byBiZSBzaG93biBhbmQgdGhlIG5hdmlnYXRpb24gYWN0aW9uIHRvIGJlIGNvbmZpZ3VyZWQgb24gdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEByZXR1cm5zIFRoZSBjYXJkIGhlYWRlclxuICovXG5mdW5jdGlvbiBnZXRDYXJkSGVhZGVyKGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IENhcmRIZWFkZXIge1xuXHRjb25zdCBjYXJkSGVhZGVyOiBDYXJkSGVhZGVyID0ge1xuXHRcdHRpdGxlOiBpbnNpZ2h0c1BhcmFtcy5jb250ZW50LmNhcmRUaXRsZSxcblx0XHRhY3Rpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRwYXJhbWV0ZXJzOiBcIns9IGV4dGVuc2lvbi5mb3JtYXR0ZXJzLmdldE5hdmlnYXRpb25Db250ZXh0KCR7cGFyYW1ldGVycz4vc3RhdGUvdmFsdWV9KX1cIlxuXHRcdFx0fVxuXHRcdF1cblx0fTtcblx0aWYgKGluc2lnaHRzUGFyYW1zLnR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdGNhcmRIZWFkZXIuc3RhdHVzID0ge1xuXHRcdFx0dGV4dDogXCJ7L3Jlc3BvbnNlL0BvZGF0YS5jb3VudH1cIiAvLyBudW1iZXIgb2YgcmVjb3JkcyBvbiBMUiByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gY2FyZEhlYWRlcjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIGFjdGlvbiBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBieSB0aGUgaW5zaWdodHMgY2FyZC5cbiAqIFRoaXMgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIG5hdmlnYXRpb24gZnJvbSB0aGUgY2FyZCB0byB0aGUgc291cmNlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIG5hdlRhcmdldFxuICogQHJldHVybnMgVGhlIGFjdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uT2JqZWN0KG5hdlRhcmdldDogSW5zaWdodHNQYXJhbXNbXCJuYXZpZ2F0aW9uXCJdKTogc3RyaW5nIHtcblx0bGV0IGliblBhcmFtcyA9IHtcblx0XHRzZW5zaXRpdmVQcm9wczogW10sXG5cdFx0bmhIeWJyaWRJQXBwU3RhdGVLZXk6IG5hdlRhcmdldC5pQXBwU3RhdGVLZXlcblx0fVxuXHRpZiAobmF2VGFyZ2V0LmFwcFZhcmlhbnRJZCkge1xuXHRcdGliblBhcmFtcyA9IHsuLi5pYm5QYXJhbXMsIC4uLntcInNhcC1hcHB2YXItaWRcIjogbmF2VGFyZ2V0LmFwcFZhcmlhbnRJZH19O1xuXHR9XG5cdGNvbnN0IGFjdGlvblBhcmFtczogQWN0aW9uUGFyYW1zID0ge1xuXHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdGliblRhcmdldDogbmF2VGFyZ2V0LmludGVudCxcblx0XHRcdGliblBhcmFtczogaWJuUGFyYW1zXG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWN0aW9uUGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIGNhcmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogVGhpcyBpbmNsdWRlcyBmaWx0ZXJzLCBwYXJhbWV0ZXJzLCBzZW5zaXRpdmUgcHJvcGVydGllcyBhbmQgdGhlIGFjdGlvbiBvYmplY3QgZm9yIHRoZSBuYXZpZ2F0aW9uLlxuICogQHBhcmFtIG1hbmRhdG9yeUZpbHRlcnMgTGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyc1xuICogQHBhcmFtIGZpbHRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uIE5hdmlnYXRpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtIGVudGl0eVNldFBhdGggRW50aXR5IHNldCBwYXRoXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBDb2xsZWN0aW9uIG9mIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb250ZW50VXJsIFVSTCB0byBmZXRjaCB0aGUgY29udGVudFxuICogQHBhcmFtIHNvcnRRdWVyeSBTb3J0IHF1ZXJ5XG4gKiBAcGFyYW0gdHlwZSBDYXJkIHR5cGVcbiAqIEByZXR1cm5zIFRoZSBjYXJkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyhcblx0bWFuZGF0b3J5RmlsdGVyczogc3RyaW5nW10sXG5cdGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+LFxuXHRuYXZpZ2F0aW9uOiBJbnNpZ2h0c1BhcmFtc1tcIm5hdmlnYXRpb25cIl0sXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyUGFyYW1ldGVyVHlwZT4sXG5cdGNvbnRlbnRVcmw6IHN0cmluZyxcblx0c29ydFF1ZXJ5OiBzdHJpbmcsXG5cdHR5cGU6IENhcmRUeXBlXG4pOiBDYXJkQ29uZmlnUGFyYW1ldGVycyB7XG5cdGNvbnN0IGNhcmRDb25maWdQYXJhbXM6IENhcmRDb25maWdQYXJhbWV0ZXJzID0ge1xuXHRcdHN0YXRlOiB7XG5cdFx0XHR2YWx1ZTogZ2V0QWN0aW9uT2JqZWN0KG5hdmlnYXRpb24pXG5cdFx0fSxcblx0XHRfcmVsZXZhbnRPRGF0YUZpbHRlcnM6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0X3JlbGV2YW50T0RhdGFQYXJhbWV0ZXJzOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdF9tYW5kYXRvcnlPRGF0YUZpbHRlcnM6IHtcblx0XHRcdHZhbHVlOiBtYW5kYXRvcnlGaWx0ZXJzXG5cdFx0fSxcblx0XHRfbWFuZGF0b3J5T0RhdGFQYXJhbWV0ZXJzOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdHNlbnNpdGl2ZVByb3BzOiBbXSxcblx0XHRfZW50aXR5U2V0OiB7XG5cdFx0XHR2YWx1ZTogZW50aXR5U2V0UGF0aFxuXHRcdH0sXG5cdFx0X2NvbnRlbnREYXRhVXJsOiB7XG5cdFx0XHR2YWx1ZTogY29udGVudFVybFxuXHRcdH0sXG5cdFx0X0hlYWRlckRhdGFVcmw6IHtcblx0XHRcdHZhbHVlOiBjb250ZW50VXJsXG5cdFx0fSxcblx0XHRfY29udGVudFRvcFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogdHlwZSA9PT0gXCJUYWJsZVwiID8gYCR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gIDogXCJcIlxuXHRcdH0sXG5cdFx0X2hlYWRlclRvcFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogdHlwZSA9PT0gXCJUYWJsZVwiID8gYCR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gIDogXCJcIlxuXHRcdH0sXG5cdFx0X2NvbnRlbnRTa2lwUXVlcnk6IHtcblx0XHRcdHZhbHVlOiB0eXBlID09PSBcIlRhYmxlXCIgPyBcIiRza2lwPTBcIiA6IFwiXCJcblx0XHR9LFxuXHRcdF9oZWFkZXJTa2lwUXVlcnk6IHtcblx0XHRcdHZhbHVlOiB0eXBlID09PSBcIlRhYmxlXCIgPyBcIiRza2lwPTBcIiA6IFwiXCJcblx0XHR9LFxuXHRcdF9jb250ZW50U29ydFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogc29ydFF1ZXJ5ID09PSBcIlwiID8gXCJcIiA6IGAkb3JkZXJieT0ke3NvcnRRdWVyeX1gXG5cdFx0fSxcblx0XHRfaGVhZGVyU29ydFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogc29ydFF1ZXJ5ID09PSBcIlwiID8gXCJcIiA6IGAkb3JkZXJieT0ke3NvcnRRdWVyeX1gXG5cdFx0fVxuXHR9O1xuXHRmb3IgKGNvbnN0IGZpbHRlciBpbiBmaWx0ZXJzKSB7XG5cdFx0Y2FyZENvbmZpZ1BhcmFtcy5fcmVsZXZhbnRPRGF0YUZpbHRlcnMudmFsdWUucHVzaChmaWx0ZXIpO1xuXHRcdGNhcmRDb25maWdQYXJhbXNbZmlsdGVyXSA9IHtcblx0XHRcdHZhbHVlOiBmaWx0ZXJzW2ZpbHRlcl0udmFsdWUsXG5cdFx0XHR0eXBlOiBmaWx0ZXJzW2ZpbHRlcl0udHlwZVxuXHRcdH07XG5cdH1cblx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykge1xuXHRcdGNhcmRDb25maWdQYXJhbXMuX3JlbGV2YW50T0RhdGFQYXJhbWV0ZXJzLnZhbHVlLnB1c2gocGFyYW1ldGVyKTtcblx0XHRjYXJkQ29uZmlnUGFyYW1zLl9tYW5kYXRvcnlPRGF0YVBhcmFtZXRlcnMudmFsdWUucHVzaChwYXJhbWV0ZXIpO1xuXHRcdGNhcmRDb25maWdQYXJhbXNbcGFyYW1ldGVyXSA9IHtcblx0XHRcdHZhbHVlOiBwYXJhbWV0ZXJzW3BhcmFtZXRlcl0udmFsdWUsXG5cdFx0XHR0eXBlOiBwYXJhbWV0ZXJzW3BhcmFtZXRlcl0udHlwZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGNhcmRDb25maWdQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5zaWdodHMgY2FyZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FyZENvbmZpZyhpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMpOiBDYXJkQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IGNhcmRDb25maWd1cmF0aW9uOiBDYXJkQ29uZmlndXJhdGlvbiA9IHt9O1xuXHRjb25zdCBzZXJ2aWNlVXJsID0gaW5zaWdodHNQYXJhbXMucmVxdWVzdFBhcmFtZXRlcnMuc2VydmljZVVybDtcblx0Y2FyZENvbmZpZ3VyYXRpb24uZGVzdGluYXRpb25zID0geyBzZXJ2aWNlOiB7IG5hbWU6IFwiKGRlZmF1bHQpXCIsIGRlZmF1bHRVcmw6IFwiL1wiIH0gfTtcblx0Y2FyZENvbmZpZ3VyYXRpb24uY3NyZlRva2VucyA9IHtcblx0XHR0b2tlbjE6IHtcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdHVybDogYCR7U0VSVklDRV9IT1NUfSR7c2VydmljZVVybH1gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJIRUFEXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0XCJYLUNTUkYtVG9rZW5cIjogXCJGZXRjaFwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNhcmRDb25maWd1cmF0aW9uLnBhcmFtZXRlcnMgPSBnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyhcblx0XHRpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLm1hbmRhdG9yeUZpbHRlcnMgPz8gW10sXG5cdFx0aW5zaWdodHNQYXJhbXMucGFyYW1ldGVycy5maWx0ZXJzID8/IHt9LFxuXHRcdGluc2lnaHRzUGFyYW1zLm5hdmlnYXRpb24sXG5cdFx0aW5zaWdodHNQYXJhbXMuZW50aXR5U2V0UGF0aCxcblx0XHRpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLm9EYXRhUGFyYW1ldGVycyA/PyB7fSxcblx0XHRpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybCxcblx0XHRpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVycy5zb3J0UXVlcnksXG5cdFx0aW5zaWdodHNQYXJhbXMudHlwZVxuXHQpO1xuXHRyZXR1cm4gY2FyZENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoZSBtYW5pZmVzdCBlbnRyeSBmb3Igc2FwLmNhcmQgbmFtZXNwYWNlIG9mIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBtYW5pZmVzdCBlbnRyeSBmb3IgdGhlIHNhcC5jYXJkIG5hbWVzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRJbnRlZ3JhdGlvbkNhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMpOiBDYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXSB7XG5cdGNvbnN0IGNhcmRDb25maWc6IFBhcnRpYWw8Q2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0+ID0ge1xuXHRcdHR5cGU6IGluc2lnaHRzUGFyYW1zLnR5cGVcblx0fTtcblx0Y2FyZENvbmZpZy5jb25maWd1cmF0aW9uID0gZ2V0Q2FyZENvbmZpZyhpbnNpZ2h0c1BhcmFtcyk7XG5cdGNhcmRDb25maWcuaGVhZGVyID0gZ2V0Q2FyZEhlYWRlcihpbnNpZ2h0c1BhcmFtcyk7XG5cdGNhcmRDb25maWcuZGF0YSA9IGdldENhcmREYXRhKGluc2lnaHRzUGFyYW1zKTtcblx0aWYgKGlzQW5hbHl0aWNhbChpbnNpZ2h0c1BhcmFtcy50eXBlLCBpbnNpZ2h0c1BhcmFtcy5jb250ZW50KSkge1xuXHRcdGNhcmRDb25maWcuY29udGVudCA9IGdldEFuYWx5dGljYWxDYXJkQ29udGVudChpbnNpZ2h0c1BhcmFtcy5jb250ZW50KTtcblx0fSBlbHNlIHtcblx0XHRjYXJkQ29uZmlnLmNvbnRlbnQgPSBnZXRUYWJsZUNhcmRDb250ZW50KGluc2lnaHRzUGFyYW1zIGFzIEluc2lnaHRzUGFyYW1zPFRhYmxlQ29udGVudD4pO1xuXHR9XG5cdGNhcmRDb25maWcuZXh0ZW5zaW9uID0gXCJtb2R1bGU6c2FwL2ZlL2NvcmUvSW5zaWdodHNGb3JtYXR0ZXJzRXh0ZW5zaW9uXCI7XG5cdHJldHVybiBjYXJkQ29uZmlnIGFzIENhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgdGhlIGNhcmQgY29udGVudCBmb3IgdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBJbmNsdWRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIG5hdmlnYXRpb24gYWN0aW9uIGFuZCB0aGUgY3JlYXRpb24gb2YgYmluZGluZ3MgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXNwb25zZSBvZiB0aGUgYmFjayBlbmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVyc1xuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zLmNvbnRlbnRcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBjb250ZW50IGZvciB0aGUgaW5zaWdodHMgY2FyZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDYXJkQ29udGVudCh7IHJlcXVlc3RQYXJhbWV0ZXJzLCBjb250ZW50LCBwYXJhbWV0ZXJzIH06IEluc2lnaHRzUGFyYW1zPFRhYmxlQ29udGVudD4pOiBUYWJsZUNhcmRDb250ZW50IHtcblx0Y29uc3QgY2FyZENvbnRlbnQ6IFRhYmxlQ2FyZENvbnRlbnQgPSB7XG5cdFx0ZGF0YToge1xuXHRcdFx0cGF0aDogXCIvcmVzcG9uc2UvdmFsdWVcIlxuXHRcdH0sXG5cdFx0bWF4SXRlbXM6IE1BWF9UQUJMRV9SRUNPUkRTLFxuXHRcdHJvdzoge1xuXHRcdFx0aGlnaGxpZ2h0OiBjb250ZW50LnJvd0NyaXRpY2FsaXR5ID8gY29udGVudC5yb3dDcml0aWNhbGl0eSA6IHVuZGVmaW5lZCxcblx0XHRcdGNvbHVtbnM6IGNvbnRlbnQuaW5zaWdodHNSZWxldmFudENvbHVtbnNcblx0XHR9XG5cdH07XG5cdGlmIChyZXF1ZXN0UGFyYW1ldGVycy5ncm91cEJ5KSB7XG5cdFx0Y29uc3QgZ3JvdXBDb25kaXRpb25OYW1lID0gcmVxdWVzdFBhcmFtZXRlcnMuZ3JvdXBCeS5wcm9wZXJ0eTtcblx0XHRjb25zdCBncm91cERlc2NlbmRpbmcgPSByZXF1ZXN0UGFyYW1ldGVycy5ncm91cEJ5LmRlc2NlbmRpbmc7XG5cdFx0Y2FyZENvbnRlbnQuZ3JvdXAgPSB7XG5cdFx0XHR0aXRsZTogXCJ7XCIgKyBncm91cENvbmRpdGlvbk5hbWUgKyBcIn1cIixcblx0XHRcdG9yZGVyOiB7XG5cdFx0XHRcdHBhdGg6IGdyb3VwQ29uZGl0aW9uTmFtZSxcblx0XHRcdFx0ZGlyOiBncm91cERlc2NlbmRpbmcgPT09IHRydWUgPyBcIkRFU0NcIiA6IFwiQVNDXCJcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGlmIChwYXJhbWV0ZXJzLmlzTmF2aWdhdGlvbkVuYWJsZWQgPT09IHRydWUpIHtcblx0XHRjYXJkQ29udGVudC5yb3cuYWN0aW9ucyA9IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IFwiez0gZXh0ZW5zaW9uLmZvcm1hdHRlcnMuZ2V0TmF2aWdhdGlvbkNvbnRleHQoJHtwYXJhbWV0ZXJzPi9zdGF0ZS92YWx1ZX0sICR7fSl9XCJcblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cdHJldHVybiBjYXJkQ29udGVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBjaGFydCBjYXJkIGNvbnRlbnQgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBjb25maWd1cmF0aW9uIGZvciBhbiBhbmFseXRpY2FsIGNhcmRcbiAqIEByZXR1cm5zIFRoZSBjaGFydCBjYXJkIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuYWx5dGljYWxDYXJkQ29udGVudChjb250ZW50OiBDaGFydENvbnRlbnQpOiBDaGFydENhcmRDb250ZW50IHtcblx0cmV0dXJuIHtcblx0XHRjaGFydFR5cGU6IGNvbnRlbnQuY2hhcnRUeXBlLFxuXHRcdGNoYXJ0UHJvcGVydGllczogY29udGVudC5jaGFydFByb3BlcnRpZXMgYXMgbmV2ZXIsXG5cdFx0ZGF0YTogeyBwYXRoOiBcIi9yZXNwb25zZS92YWx1ZVwiIH0sXG5cdFx0ZGltZW5zaW9uczogY29udGVudC5kaW1lbnNpb25zLFxuXHRcdG1lYXN1cmVzOiBjb250ZW50Lm1lYXN1cmVzLFxuXHRcdGZlZWRzOiBjb250ZW50LmZlZWRzLFxuXHRcdGFjdGlvbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IFwiez0gZXh0ZW5zaW9uLmZvcm1hdHRlcnMuZ2V0TmF2aWdhdGlvbkNvbnRleHQoJHtwYXJhbWV0ZXJzPi9zdGF0ZS92YWx1ZX0sICR7fSl9XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdGFjdGlvbmFibGVBcmVhOiBcIkNoYXJ0XCJcblx0fTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIG1hbmlmZXN0IGVudHJ5IGZvciBzYXAuaW5zaWdodHMgbmFtZXNwYWNlIG9mIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5wYXJlbnRBcHBNYW5pZmVzdCBNYW5pZmVzdCBvZiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gcGFyYW1zLmVudGl0eVNldFBhdGggRW50aXR5IHNldCB0byBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcbiAqIEBwYXJhbSBwYXJhbXMudHlwZSBDYXJkIHR5cGVcbiAqIEBwYXJhbSBwYXJhbXMuY29udGVudCBDb250ZW50IHNwZWNpZmljIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjYXJkIG1hbmlmZXN0IGVudHJ5IGZvciB0aGUgc2FwLmluc2lnaHRzIG5hbWVzcGFjZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYW5pZmVzdFNhcEluc2lnaHRzKHtcblx0cGFyZW50QXBwTWFuaWZlc3QsXG5cdGVudGl0eVNldFBhdGgsXG5cdHR5cGUsXG5cdGNvbnRlbnRcbn06IEluc2lnaHRzUGFyYW1zKTogUHJvbWlzZTxDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl0+IHtcblx0Y29uc3QgdWk1VmVyc2lvbiA9IGF3YWl0IFZlcnNpb25JbmZvLmxvYWQoKTtcblx0Y29uc3QgbWFuaWZlc3RQYXJhbXM6IENhcmRNYW5pZmVzdFtcInNhcC5pbnNpZ2h0c1wiXSA9IHtcblx0XHRwYXJlbnRBcHBJZDogcGFyZW50QXBwTWFuaWZlc3RbXCJzYXAuYXBwXCJdLmlkLFxuXHRcdGNhcmRUeXBlOiBcIlJUXCIsXG5cdFx0dmVyc2lvbnM6IHtcblx0XHRcdHVpNTogdWk1VmVyc2lvbi52ZXJzaW9uICsgXCItXCIgKyB1aTVWZXJzaW9uLmJ1aWxkVGltZXN0YW1wXG5cdFx0fSxcblx0XHRmaWx0ZXJFbnRpdHlTZXQ6IGVudGl0eVNldFBhdGhcblx0fTtcblx0aWYgKGlzQW5hbHl0aWNhbCh0eXBlLCBjb250ZW50KSkge1xuXHRcdG1hbmlmZXN0UGFyYW1zLmFsbG93ZWRDaGFydFR5cGVzID0gY29udGVudC5hbGxvd2VkQ2hhcnRUeXBlcztcblx0fVxuXHRyZXR1cm4gbWFuaWZlc3RQYXJhbXM7XG59XG4vKipcbiAqIENyZWF0ZXMgdGhlIGNhcmQgbWFuaWZlc3QgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgaW5zaWdodHMgY2FyZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdGNvbnN0IGFwcE1hbmlmZXN0ID0geyAuLi5pbnNpZ2h0c1BhcmFtcy5wYXJlbnRBcHBNYW5pZmVzdFtcInNhcC5hcHBcIl0gfTtcblx0Y29uc3QgdWk1TWFuaWZlc3QgPSB7IC4uLmluc2lnaHRzUGFyYW1zLnBhcmVudEFwcE1hbmlmZXN0W1wic2FwLnVpNVwiXSB9O1xuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSB1aTVNYW5pZmVzdC5tb2RlbHNbXCJcIl07XG5cdGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gZGVmYXVsdE1vZGVsLmRhdGFTb3VyY2UgPyBkZWZhdWx0TW9kZWwuZGF0YVNvdXJjZSA6IFwiXCI7XG5cdGNvbnN0IGluc2lnaHRzQ2FyZE1hbmlmZXN0OiBQYXJ0aWFsPENhcmRNYW5pZmVzdD4gPSB7fTtcblx0YXBwTWFuaWZlc3QuaWQgPSBgdXNlci4ke2FwcE1hbmlmZXN0LmlkfS4ke0RhdGUubm93KCl9YDtcblx0YXBwTWFuaWZlc3QudHlwZSA9IFwiY2FyZFwiO1xuXHRhcHBNYW5pZmVzdC5kYXRhU291cmNlcy5maWx0ZXJTZXJ2aWNlID0geyAuLi5hcHBNYW5pZmVzdC5kYXRhU291cmNlc1tkYXRhU291cmNlU2VydmljZV0gfTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuYXBwXCJdID0gYXBwTWFuaWZlc3QgYXMgQ2FyZE1hbmlmZXN0W1wic2FwLmFwcFwiXTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXSA9IGdldEludGVncmF0aW9uQ2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zKTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl0gPSBhd2FpdCBnZXRNYW5pZmVzdFNhcEluc2lnaHRzKGluc2lnaHRzUGFyYW1zKTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAudWk1XCJdID0ge1xuXHRcdGNvbnRlbnREZW5zaXRpZXM6IHVpNU1hbmlmZXN0LmNvbnRlbnREZW5zaXRpZXMgYXMgQ29udGVudERlbnNpdGllc1R5cGUsXG5cdFx0ZGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRsaWJzOiB7XG5cdFx0XHRcdFwic2FwLmluc2lnaHRzXCI6IHtcblx0XHRcdFx0XHRsYXp5OiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjb21wb25lbnROYW1lOiBpbnNpZ2h0c0NhcmRNYW5pZmVzdFtcInNhcC5hcHBcIl0uaWRcblx0fTtcblx0cmV0dXJuIGluc2lnaHRzQ2FyZE1hbmlmZXN0IGFzIENhcmRNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIG1hbmlmZXN0IG9mIHRoZSBpbnNpZ2h0cyBjYXJkIGFuZCBzaG93IGEgcHJldmlldyBvZiB0aGUgY2FyZCB0aGF0IGlzIGNyZWF0ZWQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBjYXJkQ3JlYXRpb25EaWFsb2dXYXJuaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93SW5zaWdodHNDYXJkUHJldmlldyhpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMsIGNhcmRDcmVhdGlvbkRpYWxvZ1dhcm5pbmc/OiBDYXJkTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IGRlZmF1bHQ6IGNhcmRIZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9pbnNpZ2h0cy9DYXJkSGVscGVyXCIpO1xuXHRjb25zdCBjYXJkSGVscGVySW5zdGFuY2UgPSBhd2FpdCBjYXJkSGVscGVyLmdldFNlcnZpY2VBc3luYyhcIlVJU2VydmljZVwiKTtcblx0Y29uc3QgY2FyZCA9IGF3YWl0IGNyZWF0ZUNhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyk7XG5cdGF3YWl0IGNhcmRIZWxwZXJJbnN0YW5jZS5zaG93Q2FyZFByZXZpZXcoY2FyZCwgdHJ1ZSwgY2FyZENyZWF0aW9uRGlhbG9nV2FybmluZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBtYW5pZmVzdCBvZiB0aGUgaW5zaWdodHMgY2FyZCBhbmQgc2hvdyBhIHByZXZpZXcgb2YgdGhlIGNhcmQgdGhhdCBpcyBjcmVhdGVkIGZvciBjb2xsYWJvcmF0aW9uIG1hbmFnZXIuXG4gKiBAcGFyYW0gY2FyZCBUaGUgY2FyZCBtYW5pZmVzdCB0byBiZSB1c2VkIGZvciB0aGUgY2FsbGJhY2tcbiAqIEBwYXJhbSBjbUluc3RhbmNlIFRoZSBjdXJyZW50IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSBpbnN0YW5jZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXcoY2FyZDogQ2FyZE1hbmlmZXN0LCBjbUluc3RhbmNlOiBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgeyBkZWZhdWx0OiBjYXJkSGVscGVyIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvaW5zaWdodHMvQ2FyZEhlbHBlclwiKTtcblx0Y29uc3QgY2FyZEhlbHBlckluc3RhbmNlID0gYXdhaXQgY2FyZEhlbHBlci5nZXRTZXJ2aWNlQXN5bmMoXCJVSVNlcnZpY2VcIik7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKT8uZ2V0VGV4dChcIkNfU0VORF9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJcIik7XG5cdGF3YWl0IGNhcmRIZWxwZXJJbnN0YW5jZS5zaG93Q2FyZFByZXZpZXcoY2FyZCwgdHJ1ZSwgeyB0eXBlOiBcIk5vbmVcIiB9LCBidXR0b25UZXh0LCAoZXZlbnQpID0+IHtcblx0XHQvLyBXZSBuZWVkIHRvIGludHJvZHVjZSB0aGlzIGNoZWNrIGFzIHRoZXJlIHNlZW1zIHRvIGJlIGEgcmVncmVzc2lvbiB0aGF0IHRoZSAnbWFuaWZlc3QnIHBhcmFtZXRlcnMgaXMgbm90IGZpbGxlZCBpbiBzb21lIHZlcnNpb25zXG5cdFx0Y29uc3QgY2FyZE1hbmlmZXN0ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwibWFuaWZlc3RcIikgPz8gZXZlbnQuZ2V0U291cmNlKCkuZ2V0TWFuaWZlc3QoKTtcblx0XHRjbUluc3RhbmNlLnB1Ymxpc2hDYXJkKGNhcmRNYW5pZmVzdCk7XG5cdH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdHJldHVybiBjcmVhdGVDYXJkTWFuaWZlc3QoaW5zaWdodHNQYXJhbXMpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBK0RBLE1BQU1BLGlCQUFpQixHQUFHLEVBQUU7RUFDNUIsTUFBTUMsWUFBWSxHQUFHLDBCQUEwQjs7RUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsSUFBWSxFQUFFQyxPQUFvQyxFQUEyQjtJQUNsRyxPQUFPRCxJQUFJLEtBQUssWUFBWTtFQUM3Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNFLFdBQVdBLENBQUFDLElBQUEsRUFBaUU7SUFBQSxJQUFoRTtNQUFFSCxJQUFJO01BQUVJ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
438
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfVEFCTEVfUkVDT1JEUyIsIlNFUlZJQ0VfSE9TVCIsImlzQW5hbHl0aWNhbCIsInR5cGUiLCJjb250ZW50IiwiZ2V0Q2FyZERhdGEiLCJfcmVmIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJxdWVyeVVybCIsImluY2x1ZGVzIiwic2VydmljZVVybCIsInNwbGl0IiwicmVxdWVzdCIsInVybCIsIm1ldGhvZCIsImhlYWRlcnMiLCJiYXRjaCIsInJlc3BvbnNlIiwiQWNjZXB0IiwiZ2V0Q2FyZEhlYWRlciIsImluc2lnaHRzUGFyYW1zIiwiY2FyZEhlYWRlciIsInRpdGxlIiwiY2FyZFRpdGxlIiwiYWN0aW9ucyIsInBhcmFtZXRlcnMiLCJzdGF0dXMiLCJ0ZXh0IiwiZ2V0QWN0aW9uT2JqZWN0IiwibmF2VGFyZ2V0IiwiaWJuUGFyYW1zIiwic2Vuc2l0aXZlUHJvcHMiLCJuaEh5YnJpZElBcHBTdGF0ZUtleSIsImlBcHBTdGF0ZUtleSIsImFwcFZhcmlhbnRJZCIsImFjdGlvblBhcmFtcyIsImliblRhcmdldCIsImludGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyIsIm1hbmRhdG9yeUZpbHRlcnMiLCJmaWx0ZXJzIiwibmF2aWdhdGlvbiIsImVudGl0eVNldFBhdGgiLCJjb250ZW50VXJsIiwic29ydFF1ZXJ5IiwiY2FyZENvbmZpZ1BhcmFtcyIsInN0YXRlIiwidmFsdWUiLCJfcmVsZXZhbnRPRGF0YUZpbHRlcnMiLCJfcmVsZXZhbnRPRGF0YVBhcmFtZXRlcnMiLCJfbWFuZGF0b3J5T0RhdGFGaWx0ZXJzIiwiX21hbmRhdG9yeU9EYXRhUGFyYW1ldGVycyIsIl9lbnRpdHlTZXQiLCJfY29udGVudERhdGFVcmwiLCJfSGVhZGVyRGF0YVVybCIsIl9jb250ZW50VG9wUXVlcnkiLCJfaGVhZGVyVG9wUXVlcnkiLCJfY29udGVudFNraXBRdWVyeSIsIl9oZWFkZXJTa2lwUXVlcnkiLCJfY29udGVudFNvcnRRdWVyeSIsIl9oZWFkZXJTb3J0UXVlcnkiLCJmaWx0ZXIiLCJwdXNoIiwicGFyYW1ldGVyIiwiZ2V0Q2FyZENvbmZpZyIsImNhcmRDb25maWd1cmF0aW9uIiwiZGVzdGluYXRpb25zIiwic2VydmljZSIsIm5hbWUiLCJkZWZhdWx0VXJsIiwiY3NyZlRva2VucyIsInRva2VuMSIsImRhdGEiLCJvRGF0YVBhcmFtZXRlcnMiLCJnZXRJbnRlZ3JhdGlvbkNhcmRNYW5pZmVzdCIsImNhcmRDb25maWciLCJjb25maWd1cmF0aW9uIiwiaGVhZGVyIiwiZ2V0QW5hbHl0aWNhbENhcmRDb250ZW50IiwiZ2V0VGFibGVDYXJkQ29udGVudCIsImV4dGVuc2lvbiIsIl9yZWYyIiwiY2FyZENvbnRlbnQiLCJwYXRoIiwibWF4SXRlbXMiLCJyb3ciLCJoaWdobGlnaHQiLCJyb3dDcml0aWNhbGl0eSIsInVuZGVmaW5lZCIsImNvbHVtbnMiLCJpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImdyb3VwQnkiLCJncm91cENvbmRpdGlvbk5hbWUiLCJwcm9wZXJ0eSIsImdyb3VwRGVzY2VuZGluZyIsImRlc2NlbmRpbmciLCJncm91cCIsIm9yZGVyIiwiZGlyIiwiaXNOYXZpZ2F0aW9uRW5hYmxlZCIsImNoYXJ0VHlwZSIsImNoYXJ0UHJvcGVydGllcyIsImRpbWVuc2lvbnMiLCJtZWFzdXJlcyIsImZlZWRzIiwiYWN0aW9uYWJsZUFyZWEiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0U2FwSW5zaWdodHMiLCJfcmVmMyIsInBhcmVudEFwcE1hbmlmZXN0IiwidWk1VmVyc2lvbiIsIlZlcnNpb25JbmZvIiwibG9hZCIsIm1hbmlmZXN0UGFyYW1zIiwicGFyZW50QXBwSWQiLCJpZCIsImNhcmRUeXBlIiwidmVyc2lvbnMiLCJ1aTUiLCJ2ZXJzaW9uIiwiYnVpbGRUaW1lc3RhbXAiLCJmaWx0ZXJFbnRpdHlTZXQiLCJhbGxvd2VkQ2hhcnRUeXBlcyIsImNyZWF0ZUNhcmRNYW5pZmVzdCIsImFwcE1hbmlmZXN0IiwidWk1TWFuaWZlc3QiLCJkZWZhdWx0TW9kZWwiLCJtb2RlbHMiLCJkYXRhU291cmNlU2VydmljZSIsImRhdGFTb3VyY2UiLCJpbnNpZ2h0c0NhcmRNYW5pZmVzdCIsIkRhdGUiLCJub3ciLCJkYXRhU291cmNlcyIsImZpbHRlclNlcnZpY2UiLCJjb250ZW50RGVuc2l0aWVzIiwiZGVwZW5kZW5jaWVzIiwibGlicyIsImxhenkiLCJjb21wb25lbnROYW1lIiwic2hvd0luc2lnaHRzQ2FyZFByZXZpZXciLCJjYXJkQ3JlYXRpb25EaWFsb2dXYXJuaW5nIiwiZGVmYXVsdCIsImNhcmRIZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiY2FyZEhlbHBlckluc3RhbmNlIiwiZ2V0U2VydmljZUFzeW5jIiwiY2FyZCIsInNob3dDYXJkUHJldmlldyIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3IiwiY21JbnN0YW5jZSIsImJ1dHRvblRleHQiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiZXZlbnQiLCJjYXJkTWFuaWZlc3QiLCJnZXRQYXJhbWV0ZXIiLCJnZXRTb3VyY2UiLCJnZXRNYW5pZmVzdCIsInB1Ymxpc2hDYXJkIiwiZ2V0Q2FyZE1hbmlmZXN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnNpZ2h0c1NlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250ZW50RGVuc2l0aWVzVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUGFyYW1ldGVyVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbXMsXG5cdENhcmRDb25maWdQYXJhbWV0ZXJzLFxuXHRDYXJkQ29uZmlndXJhdGlvbixcblx0Q2FyZERhdGEsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUeXBlLFxuXHRDaGFydENhcmRDb250ZW50LFxuXHRUYWJsZUNhcmRDb2x1bW4sXG5cdFRhYmxlQ2FyZENvbnRlbnRcbn0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDb250ZW50ID0gUGljazxDaGFydENhcmRDb250ZW50LCBcImRpbWVuc2lvbnNcIiB8IFwiZmVlZHNcIiB8IFwibWVhc3VyZXNcIiB8IFwiY2hhcnRUeXBlXCIgfCBcImNoYXJ0UHJvcGVydGllc1wiPiAmIHtcblx0Y2FyZFRpdGxlOiBzdHJpbmc7XG5cdGxlZ2VuZFZpc2libGU6IGJvb2xlYW47XG5cdGFsbG93ZWRDaGFydFR5cGVzOiBDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl1bXCJhbGxvd2VkQ2hhcnRUeXBlc1wiXTtcbn07XG5cbnR5cGUgSW5zaWdodFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuXHQvLyBhbGwgcGFyYW1ldGVycyByZWxhdGVkIHRvIHJlcXVlc3QgZm9yIHRoZSBkYXRhXG5cdHNlcnZpY2VVcmw6IHN0cmluZztcblx0cXVlcnlVcmw6IHN0cmluZztcblx0Z3JvdXBCeT86IHtcblx0XHRwcm9wZXJ0eTogc3RyaW5nO1xuXHRcdGRlc2NlbmRpbmc/OiBib29sZWFuO1xuXHR9O1xuXHRzb3J0UXVlcnk6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udGVudCA9IHtcblx0cm93Q3JpdGljYWxpdHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y2FyZFRpdGxlOiBzdHJpbmc7XG5cdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zOiBUYWJsZUNhcmRDb2x1bW5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEluc2lnaHRzUGFyYW1zPEMgPSBUYWJsZUNvbnRlbnQgfCBDaGFydENvbnRlbnQ+ID0ge1xuXHRuYXZpZ2F0aW9uOiB7XG5cdFx0aUFwcFN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aW50ZW50OiBQYXJzZWRIYXNoO1xuXHRcdGFwcFZhcmlhbnRJZD86IHN0cmluZztcblx0fTtcblx0dHlwZTogQ2FyZFR5cGU7XG5cdHJlcXVlc3RQYXJhbWV0ZXJzOiBJbnNpZ2h0UmVxdWVzdFBhcmFtZXRlcnM7XG5cdGNvbnRlbnQ6IEM7XG5cdHBhcmVudEFwcE1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQ7XG5cdHBhcmFtZXRlcnM6IHtcblx0XHRtYW5kYXRvcnlGaWx0ZXJzPzogc3RyaW5nW107XG5cdFx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+O1xuXHRcdG9EYXRhUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+O1xuXHRcdHNlbnNpdGl2ZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHRpc05hdmlnYXRpb25FbmFibGVkPzogYm9vbGVhbjtcblx0fTtcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nO1xufTtcblxuY29uc3QgTUFYX1RBQkxFX1JFQ09SRFMgPSAxNTtcbmNvbnN0IFNFUlZJQ0VfSE9TVCA9IFwie3tkZXN0aW5hdGlvbnMuc2VydmljZX19XCI7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhcmFtZXRlcnMgaGF2ZSBhbmFseXRpY2FsIG9yIHRhYmxlIGNvbnRlbnQuXG4gKiBAcGFyYW0gdHlwZSBDYXJkIHR5cGVcbiAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgdGhhdCBpcyB0byBiZSB0eXBlZFxuICogQHJldHVybnMgVHlwZSBjaGVja2VkIHRydWUgaWYgdGhlIHBhcmFtZXRlcnMgY29udGFpbiBjb250ZW50IGZvciBhbiBhbmFseXRpY2FsIGNhcmRcbiAqL1xuZnVuY3Rpb24gaXNBbmFseXRpY2FsKHR5cGU6IHN0cmluZywgY29udGVudDogVGFibGVDb250ZW50IHwgQ2hhcnRDb250ZW50KTogY29udGVudCBpcyBDaGFydENvbnRlbnQge1xuXHRyZXR1cm4gdHlwZSA9PT0gXCJBbmFseXRpY2FsXCI7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyB0aGUgcmVxdWVzdCBvYmplY3QgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy50eXBlXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXMucmVxdWVzdFBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSByZXF1ZXN0IGRhdGEgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICovXG5mdW5jdGlvbiBnZXRDYXJkRGF0YSh7IHR5cGUsIHJlcXVlc3RQYXJhbWV0ZXJzIH06IEluc2lnaHRzUGFyYW1zPHVua25vd24+KTogQ2FyZERhdGEge1xuXHQvLyBtYW5pcHVsYXRlIHRoZSBxdWVyeSB1cmwgYmFzZWQgb24gY2FyZCB0eXBlIGFuZCBzZXJ2aWNlIHVybFxuXHRsZXQgcXVlcnlVcmwgPSByZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybDtcblx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnF1ZXJ5VXJsLmluY2x1ZGVzKHJlcXVlc3RQYXJhbWV0ZXJzLnNlcnZpY2VVcmwpKSB7XG5cdFx0cXVlcnlVcmwgPSByZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybC5zcGxpdChyZXF1ZXN0UGFyYW1ldGVycy5zZXJ2aWNlVXJsKVsxXTtcblx0fVxuXHRpZiAodHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0Ly8gZmV0Y2ggb25seSB0aGUgZmlyc3QgMTUgcmVjb3Jkc1xuXHRcdHF1ZXJ5VXJsID0gYCR7cXVlcnlVcmx9JiR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRyZXF1ZXN0OiB7XG5cdFx0XHR1cmw6IGAke1NFUlZJQ0VfSE9TVH0ke3JlcXVlc3RQYXJhbWV0ZXJzLnNlcnZpY2VVcmx9JGJhdGNoYCxcblx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFwiWC1DU1JGLVRva2VuXCI6IFwie3tjc3JmVG9rZW5zLnRva2VuMX19XCIsXG5cdFx0XHRcdFwiQWNjZXB0XCI6IFwibXVsdGlwYXJ0L21peGVkXCJcblx0XHRcdH0sXG5cdFx0XHRiYXRjaDoge1xuXHRcdFx0XHRyZXNwb25zZToge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHF1ZXJ5VXJsLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyB0aGUgY2FyZCBoZWFkZXIgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogSW5jbHVkZXMgdGhlIHN0YXR1cyB0byBiZSBzaG93biBhbmQgdGhlIG5hdmlnYXRpb24gYWN0aW9uIHRvIGJlIGNvbmZpZ3VyZWQgb24gdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEByZXR1cm5zIFRoZSBjYXJkIGhlYWRlclxuICovXG5mdW5jdGlvbiBnZXRDYXJkSGVhZGVyKGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IENhcmRIZWFkZXIge1xuXHRjb25zdCBjYXJkSGVhZGVyOiBDYXJkSGVhZGVyID0ge1xuXHRcdHRpdGxlOiBpbnNpZ2h0c1BhcmFtcy5jb250ZW50LmNhcmRUaXRsZSxcblx0XHRhY3Rpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRwYXJhbWV0ZXJzOiBcIns9IGV4dGVuc2lvbi5mb3JtYXR0ZXJzLmdldE5hdmlnYXRpb25Db250ZXh0KCR7cGFyYW1ldGVycz4vc3RhdGUvdmFsdWV9KX1cIlxuXHRcdFx0fVxuXHRcdF1cblx0fTtcblx0aWYgKGluc2lnaHRzUGFyYW1zLnR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdGNhcmRIZWFkZXIuc3RhdHVzID0ge1xuXHRcdFx0dGV4dDogXCJ7L3Jlc3BvbnNlL0BvZGF0YS5jb3VudH1cIiAvLyBudW1iZXIgb2YgcmVjb3JkcyBvbiBMUiByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gY2FyZEhlYWRlcjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIGFjdGlvbiBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBieSB0aGUgaW5zaWdodHMgY2FyZC5cbiAqIFRoaXMgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIG5hdmlnYXRpb24gZnJvbSB0aGUgY2FyZCB0byB0aGUgc291cmNlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIG5hdlRhcmdldFxuICogQHJldHVybnMgVGhlIGFjdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uT2JqZWN0KG5hdlRhcmdldDogSW5zaWdodHNQYXJhbXNbXCJuYXZpZ2F0aW9uXCJdKTogc3RyaW5nIHtcblx0bGV0IGliblBhcmFtcyA9IHtcblx0XHRzZW5zaXRpdmVQcm9wczogW10sXG5cdFx0bmhIeWJyaWRJQXBwU3RhdGVLZXk6IG5hdlRhcmdldC5pQXBwU3RhdGVLZXlcblx0fVxuXHRpZiAobmF2VGFyZ2V0LmFwcFZhcmlhbnRJZCkge1xuXHRcdGliblBhcmFtcyA9IHsuLi5pYm5QYXJhbXMsIC4uLntcInNhcC1hcHB2YXItaWRcIjogbmF2VGFyZ2V0LmFwcFZhcmlhbnRJZH19O1xuXHR9XG5cdGNvbnN0IGFjdGlvblBhcmFtczogQWN0aW9uUGFyYW1zID0ge1xuXHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdGliblRhcmdldDogbmF2VGFyZ2V0LmludGVudCxcblx0XHRcdGliblBhcmFtczogaWJuUGFyYW1zXG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWN0aW9uUGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIGNhcmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogVGhpcyBpbmNsdWRlcyBmaWx0ZXJzLCBwYXJhbWV0ZXJzLCBzZW5zaXRpdmUgcHJvcGVydGllcyBhbmQgdGhlIGFjdGlvbiBvYmplY3QgZm9yIHRoZSBuYXZpZ2F0aW9uLlxuICogQHBhcmFtIG1hbmRhdG9yeUZpbHRlcnMgTGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyc1xuICogQHBhcmFtIGZpbHRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uIE5hdmlnYXRpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtIGVudGl0eVNldFBhdGggRW50aXR5IHNldCBwYXRoXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBDb2xsZWN0aW9uIG9mIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb250ZW50VXJsIFVSTCB0byBmZXRjaCB0aGUgY29udGVudFxuICogQHBhcmFtIHNvcnRRdWVyeSBTb3J0IHF1ZXJ5XG4gKiBAcGFyYW0gdHlwZSBDYXJkIHR5cGVcbiAqIEByZXR1cm5zIFRoZSBjYXJkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyhcblx0bWFuZGF0b3J5RmlsdGVyczogc3RyaW5nW10sXG5cdGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclBhcmFtZXRlclR5cGU+LFxuXHRuYXZpZ2F0aW9uOiBJbnNpZ2h0c1BhcmFtc1tcIm5hdmlnYXRpb25cIl0sXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyUGFyYW1ldGVyVHlwZT4sXG5cdGNvbnRlbnRVcmw6IHN0cmluZyxcblx0c29ydFF1ZXJ5OiBzdHJpbmcsXG5cdHR5cGU6IENhcmRUeXBlXG4pOiBDYXJkQ29uZmlnUGFyYW1ldGVycyB7XG5cdGNvbnN0IGNhcmRDb25maWdQYXJhbXM6IENhcmRDb25maWdQYXJhbWV0ZXJzID0ge1xuXHRcdHN0YXRlOiB7XG5cdFx0XHR2YWx1ZTogZ2V0QWN0aW9uT2JqZWN0KG5hdmlnYXRpb24pXG5cdFx0fSxcblx0XHRfcmVsZXZhbnRPRGF0YUZpbHRlcnM6IHtcblx0XHRcdHZhbHVlOiBbXVxuXHRcdH0sXG5cdFx0X3JlbGV2YW50T0RhdGFQYXJhbWV0ZXJzOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdF9tYW5kYXRvcnlPRGF0YUZpbHRlcnM6IHtcblx0XHRcdHZhbHVlOiBtYW5kYXRvcnlGaWx0ZXJzXG5cdFx0fSxcblx0XHRfbWFuZGF0b3J5T0RhdGFQYXJhbWV0ZXJzOiB7XG5cdFx0XHR2YWx1ZTogW11cblx0XHR9LFxuXHRcdHNlbnNpdGl2ZVByb3BzOiBbXSxcblx0XHRfZW50aXR5U2V0OiB7XG5cdFx0XHR2YWx1ZTogZW50aXR5U2V0UGF0aFxuXHRcdH0sXG5cdFx0X2NvbnRlbnREYXRhVXJsOiB7XG5cdFx0XHR2YWx1ZTogY29udGVudFVybFxuXHRcdH0sXG5cdFx0X0hlYWRlckRhdGFVcmw6IHtcblx0XHRcdHZhbHVlOiBjb250ZW50VXJsXG5cdFx0fSxcblx0XHRfY29udGVudFRvcFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogdHlwZSA9PT0gXCJUYWJsZVwiID8gYCR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gIDogXCJcIlxuXHRcdH0sXG5cdFx0X2hlYWRlclRvcFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogdHlwZSA9PT0gXCJUYWJsZVwiID8gYCR0b3A9JHtNQVhfVEFCTEVfUkVDT1JEU31gIDogXCJcIlxuXHRcdH0sXG5cdFx0X2NvbnRlbnRTa2lwUXVlcnk6IHtcblx0XHRcdHZhbHVlOiB0eXBlID09PSBcIlRhYmxlXCIgPyBcIiRza2lwPTBcIiA6IFwiXCJcblx0XHR9LFxuXHRcdF9oZWFkZXJTa2lwUXVlcnk6IHtcblx0XHRcdHZhbHVlOiB0eXBlID09PSBcIlRhYmxlXCIgPyBcIiRza2lwPTBcIiA6IFwiXCJcblx0XHR9LFxuXHRcdF9jb250ZW50U29ydFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogc29ydFF1ZXJ5ID09PSBcIlwiID8gXCJcIiA6IGAkb3JkZXJieT0ke3NvcnRRdWVyeX1gXG5cdFx0fSxcblx0XHRfaGVhZGVyU29ydFF1ZXJ5OiB7XG5cdFx0XHR2YWx1ZTogc29ydFF1ZXJ5ID09PSBcIlwiID8gXCJcIiA6IGAkb3JkZXJieT0ke3NvcnRRdWVyeX1gXG5cdFx0fVxuXHR9O1xuXHRmb3IgKGNvbnN0IGZpbHRlciBpbiBmaWx0ZXJzKSB7XG5cdFx0Y2FyZENvbmZpZ1BhcmFtcy5fcmVsZXZhbnRPRGF0YUZpbHRlcnMudmFsdWUucHVzaChmaWx0ZXIpO1xuXHRcdGNhcmRDb25maWdQYXJhbXNbZmlsdGVyXSA9IHtcblx0XHRcdHZhbHVlOiBmaWx0ZXJzW2ZpbHRlcl0udmFsdWUsXG5cdFx0XHR0eXBlOiBmaWx0ZXJzW2ZpbHRlcl0udHlwZVxuXHRcdH07XG5cdH1cblx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykge1xuXHRcdGNhcmRDb25maWdQYXJhbXMuX3JlbGV2YW50T0RhdGFQYXJhbWV0ZXJzLnZhbHVlLnB1c2gocGFyYW1ldGVyKTtcblx0XHRjYXJkQ29uZmlnUGFyYW1zLl9tYW5kYXRvcnlPRGF0YVBhcmFtZXRlcnMudmFsdWUucHVzaChwYXJhbWV0ZXIpO1xuXHRcdGNhcmRDb25maWdQYXJhbXNbcGFyYW1ldGVyXSA9IHtcblx0XHRcdHZhbHVlOiBwYXJhbWV0ZXJzW3BhcmFtZXRlcl0udmFsdWUsXG5cdFx0XHR0eXBlOiBwYXJhbWV0ZXJzW3BhcmFtZXRlcl0udHlwZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGNhcmRDb25maWdQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5zaWdodHMgY2FyZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FyZENvbmZpZyhpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMpOiBDYXJkQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IGNhcmRDb25maWd1cmF0aW9uOiBDYXJkQ29uZmlndXJhdGlvbiA9IHt9O1xuXHRjb25zdCBzZXJ2aWNlVXJsID0gaW5zaWdodHNQYXJhbXMucmVxdWVzdFBhcmFtZXRlcnMuc2VydmljZVVybDtcblx0Y2FyZENvbmZpZ3VyYXRpb24uZGVzdGluYXRpb25zID0geyBzZXJ2aWNlOiB7IG5hbWU6IFwiKGRlZmF1bHQpXCIsIGRlZmF1bHRVcmw6IFwiL1wiIH0gfTtcblx0Y2FyZENvbmZpZ3VyYXRpb24uY3NyZlRva2VucyA9IHtcblx0XHR0b2tlbjE6IHtcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRcdHVybDogYCR7U0VSVklDRV9IT1NUfSR7c2VydmljZVVybH1gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJIRUFEXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0XCJYLUNTUkYtVG9rZW5cIjogXCJGZXRjaFwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNhcmRDb25maWd1cmF0aW9uLnBhcmFtZXRlcnMgPSBnZXRDYXJkQ29uZmlnUGFyYW1ldGVycyhcblx0XHRpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLm1hbmRhdG9yeUZpbHRlcnMgPz8gW10sXG5cdFx0aW5zaWdodHNQYXJhbXMucGFyYW1ldGVycy5maWx0ZXJzID8/IHt9LFxuXHRcdGluc2lnaHRzUGFyYW1zLm5hdmlnYXRpb24sXG5cdFx0aW5zaWdodHNQYXJhbXMuZW50aXR5U2V0UGF0aCxcblx0XHRpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLm9EYXRhUGFyYW1ldGVycyA/PyB7fSxcblx0XHRpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVycy5xdWVyeVVybCxcblx0XHRpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVycy5zb3J0UXVlcnksXG5cdFx0aW5zaWdodHNQYXJhbXMudHlwZVxuXHQpO1xuXHRyZXR1cm4gY2FyZENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoZSBtYW5pZmVzdCBlbnRyeSBmb3Igc2FwLmNhcmQgbmFtZXNwYWNlIG9mIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBtYW5pZmVzdCBlbnRyeSBmb3IgdGhlIHNhcC5jYXJkIG5hbWVzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRJbnRlZ3JhdGlvbkNhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMpOiBDYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXSB7XG5cdGNvbnN0IGNhcmRDb25maWc6IFBhcnRpYWw8Q2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0+ID0ge1xuXHRcdHR5cGU6IGluc2lnaHRzUGFyYW1zLnR5cGVcblx0fTtcblx0Y2FyZENvbmZpZy5jb25maWd1cmF0aW9uID0gZ2V0Q2FyZENvbmZpZyhpbnNpZ2h0c1BhcmFtcyk7XG5cdGNhcmRDb25maWcuaGVhZGVyID0gZ2V0Q2FyZEhlYWRlcihpbnNpZ2h0c1BhcmFtcyk7XG5cdGNhcmRDb25maWcuZGF0YSA9IGdldENhcmREYXRhKGluc2lnaHRzUGFyYW1zKTtcblx0aWYgKGlzQW5hbHl0aWNhbChpbnNpZ2h0c1BhcmFtcy50eXBlLCBpbnNpZ2h0c1BhcmFtcy5jb250ZW50KSkge1xuXHRcdGNhcmRDb25maWcuY29udGVudCA9IGdldEFuYWx5dGljYWxDYXJkQ29udGVudChpbnNpZ2h0c1BhcmFtcy5jb250ZW50KTtcblx0fSBlbHNlIHtcblx0XHRjYXJkQ29uZmlnLmNvbnRlbnQgPSBnZXRUYWJsZUNhcmRDb250ZW50KGluc2lnaHRzUGFyYW1zIGFzIEluc2lnaHRzUGFyYW1zPFRhYmxlQ29udGVudD4pO1xuXHR9XG5cdGNhcmRDb25maWcuZXh0ZW5zaW9uID0gXCJtb2R1bGU6c2FwL2ZlL2NvcmUvSW5zaWdodHNGb3JtYXR0ZXJzRXh0ZW5zaW9uXCI7XG5cdHJldHVybiBjYXJkQ29uZmlnIGFzIENhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgdGhlIGNhcmQgY29udGVudCBmb3IgdGhlIGluc2lnaHRzIGNhcmQuXG4gKiBJbmNsdWRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIG5hdmlnYXRpb24gYWN0aW9uIGFuZCB0aGUgY3JlYXRpb24gb2YgYmluZGluZ3MgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXNwb25zZSBvZiB0aGUgYmFjayBlbmQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy5yZXF1ZXN0UGFyYW1ldGVyc1xuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zLmNvbnRlbnRcbiAqIEBwYXJhbSBpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY2FyZCBjb250ZW50IGZvciB0aGUgaW5zaWdodHMgY2FyZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDYXJkQ29udGVudCh7IHJlcXVlc3RQYXJhbWV0ZXJzLCBjb250ZW50LCBwYXJhbWV0ZXJzIH06IEluc2lnaHRzUGFyYW1zPFRhYmxlQ29udGVudD4pOiBUYWJsZUNhcmRDb250ZW50IHtcblx0Y29uc3QgY2FyZENvbnRlbnQ6IFRhYmxlQ2FyZENvbnRlbnQgPSB7XG5cdFx0ZGF0YToge1xuXHRcdFx0cGF0aDogXCIvcmVzcG9uc2UvdmFsdWVcIlxuXHRcdH0sXG5cdFx0bWF4SXRlbXM6IE1BWF9UQUJMRV9SRUNPUkRTLFxuXHRcdHJvdzoge1xuXHRcdFx0aGlnaGxpZ2h0OiBjb250ZW50LnJvd0NyaXRpY2FsaXR5ID8gY29udGVudC5yb3dDcml0aWNhbGl0eSA6IHVuZGVmaW5lZCxcblx0XHRcdGNvbHVtbnM6IGNvbnRlbnQuaW5zaWdodHNSZWxldmFudENvbHVtbnNcblx0XHR9XG5cdH07XG5cdGlmIChyZXF1ZXN0UGFyYW1ldGVycy5ncm91cEJ5KSB7XG5cdFx0Y29uc3QgZ3JvdXBDb25kaXRpb25OYW1lID0gcmVxdWVzdFBhcmFtZXRlcnMuZ3JvdXBCeS5wcm9wZXJ0eTtcblx0XHRjb25zdCBncm91cERlc2NlbmRpbmcgPSByZXF1ZXN0UGFyYW1ldGVycy5ncm91cEJ5LmRlc2NlbmRpbmc7XG5cdFx0Y2FyZENvbnRlbnQuZ3JvdXAgPSB7XG5cdFx0XHR0aXRsZTogXCJ7XCIgKyBncm91cENvbmRpdGlvbk5hbWUgKyBcIn1cIixcblx0XHRcdG9yZGVyOiB7XG5cdFx0XHRcdHBhdGg6IGdyb3VwQ29uZGl0aW9uTmFtZSxcblx0XHRcdFx0ZGlyOiBncm91cERlc2NlbmRpbmcgPT09IHRydWUgPyBcIkRFU0NcIiA6IFwiQVNDXCJcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGlmIChwYXJhbWV0ZXJzLmlzTmF2aWdhdGlvbkVuYWJsZWQgPT09IHRydWUpIHtcblx0XHRjYXJkQ29udGVudC5yb3cuYWN0aW9ucyA9IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IFwiez0gZXh0ZW5zaW9uLmZvcm1hdHRlcnMuZ2V0TmF2aWdhdGlvbkNvbnRleHQoJHtwYXJhbWV0ZXJzPi9zdGF0ZS92YWx1ZX0sICR7fSl9XCJcblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cdHJldHVybiBjYXJkQ29udGVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBjaGFydCBjYXJkIGNvbnRlbnQgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBjb25maWd1cmF0aW9uIGZvciBhbiBhbmFseXRpY2FsIGNhcmRcbiAqIEByZXR1cm5zIFRoZSBjaGFydCBjYXJkIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuYWx5dGljYWxDYXJkQ29udGVudChjb250ZW50OiBDaGFydENvbnRlbnQpOiBDaGFydENhcmRDb250ZW50IHtcblx0cmV0dXJuIHtcblx0XHRjaGFydFR5cGU6IGNvbnRlbnQuY2hhcnRUeXBlLFxuXHRcdGNoYXJ0UHJvcGVydGllczogY29udGVudC5jaGFydFByb3BlcnRpZXMgYXMgbmV2ZXIsXG5cdFx0ZGF0YTogeyBwYXRoOiBcIi9yZXNwb25zZS92YWx1ZVwiIH0sXG5cdFx0ZGltZW5zaW9uczogY29udGVudC5kaW1lbnNpb25zLFxuXHRcdG1lYXN1cmVzOiBjb250ZW50Lm1lYXN1cmVzLFxuXHRcdGZlZWRzOiBjb250ZW50LmZlZWRzLFxuXHRcdGFjdGlvbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IFwiez0gZXh0ZW5zaW9uLmZvcm1hdHRlcnMuZ2V0TmF2aWdhdGlvbkNvbnRleHQoJHtwYXJhbWV0ZXJzPi9zdGF0ZS92YWx1ZX0sICR7fSl9XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdGFjdGlvbmFibGVBcmVhOiBcIkNoYXJ0XCJcblx0fTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIG1hbmlmZXN0IGVudHJ5IGZvciBzYXAuaW5zaWdodHMgbmFtZXNwYWNlIG9mIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5wYXJlbnRBcHBNYW5pZmVzdCBNYW5pZmVzdCBvZiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gcGFyYW1zLmVudGl0eVNldFBhdGggRW50aXR5IHNldCB0byBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcbiAqIEBwYXJhbSBwYXJhbXMudHlwZSBDYXJkIHR5cGVcbiAqIEBwYXJhbSBwYXJhbXMuY29udGVudCBDb250ZW50IHNwZWNpZmljIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjYXJkIG1hbmlmZXN0IGVudHJ5IGZvciB0aGUgc2FwLmluc2lnaHRzIG5hbWVzcGFjZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYW5pZmVzdFNhcEluc2lnaHRzKHtcblx0cGFyZW50QXBwTWFuaWZlc3QsXG5cdGVudGl0eVNldFBhdGgsXG5cdHR5cGUsXG5cdGNvbnRlbnRcbn06IEluc2lnaHRzUGFyYW1zKTogUHJvbWlzZTxDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl0+IHtcblx0Y29uc3QgdWk1VmVyc2lvbiA9IGF3YWl0IFZlcnNpb25JbmZvLmxvYWQoKTtcblx0Y29uc3QgbWFuaWZlc3RQYXJhbXM6IENhcmRNYW5pZmVzdFtcInNhcC5pbnNpZ2h0c1wiXSA9IHtcblx0XHRwYXJlbnRBcHBJZDogcGFyZW50QXBwTWFuaWZlc3RbXCJzYXAuYXBwXCJdLmlkLFxuXHRcdGNhcmRUeXBlOiBcIlJUXCIsXG5cdFx0dmVyc2lvbnM6IHtcblx0XHRcdHVpNTogdWk1VmVyc2lvbi52ZXJzaW9uICsgXCItXCIgKyB1aTVWZXJzaW9uLmJ1aWxkVGltZXN0YW1wXG5cdFx0fSxcblx0XHRmaWx0ZXJFbnRpdHlTZXQ6IGVudGl0eVNldFBhdGhcblx0fTtcblx0aWYgKGlzQW5hbHl0aWNhbCh0eXBlLCBjb250ZW50KSkge1xuXHRcdG1hbmlmZXN0UGFyYW1zLmFsbG93ZWRDaGFydFR5cGVzID0gY29udGVudC5hbGxvd2VkQ2hhcnRUeXBlcztcblx0fVxuXHRyZXR1cm4gbWFuaWZlc3RQYXJhbXM7XG59XG4vKipcbiAqIENyZWF0ZXMgdGhlIGNhcmQgbWFuaWZlc3QgZm9yIHRoZSBpbnNpZ2h0cyBjYXJkLlxuICogQHBhcmFtIGluc2lnaHRzUGFyYW1zXG4gKiBAcmV0dXJucyBUaGUgaW5zaWdodHMgY2FyZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdGNvbnN0IGFwcE1hbmlmZXN0ID0geyAuLi5pbnNpZ2h0c1BhcmFtcy5wYXJlbnRBcHBNYW5pZmVzdFtcInNhcC5hcHBcIl0gfTtcblx0Y29uc3QgdWk1TWFuaWZlc3QgPSB7IC4uLmluc2lnaHRzUGFyYW1zLnBhcmVudEFwcE1hbmlmZXN0W1wic2FwLnVpNVwiXSB9O1xuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSB1aTVNYW5pZmVzdC5tb2RlbHNbXCJcIl07XG5cdGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gZGVmYXVsdE1vZGVsLmRhdGFTb3VyY2UgPyBkZWZhdWx0TW9kZWwuZGF0YVNvdXJjZSA6IFwiXCI7XG5cdGNvbnN0IGluc2lnaHRzQ2FyZE1hbmlmZXN0OiBQYXJ0aWFsPENhcmRNYW5pZmVzdD4gPSB7fTtcblx0YXBwTWFuaWZlc3QuaWQgPSBgdXNlci4ke2FwcE1hbmlmZXN0LmlkfS4ke0RhdGUubm93KCl9YDtcblx0YXBwTWFuaWZlc3QudHlwZSA9IFwiY2FyZFwiO1xuXHRhcHBNYW5pZmVzdC5kYXRhU291cmNlcy5maWx0ZXJTZXJ2aWNlID0geyAuLi5hcHBNYW5pZmVzdC5kYXRhU291cmNlc1tkYXRhU291cmNlU2VydmljZV0gfTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuYXBwXCJdID0gYXBwTWFuaWZlc3QgYXMgQ2FyZE1hbmlmZXN0W1wic2FwLmFwcFwiXTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXSA9IGdldEludGVncmF0aW9uQ2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zKTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAuaW5zaWdodHNcIl0gPSBhd2FpdCBnZXRNYW5pZmVzdFNhcEluc2lnaHRzKGluc2lnaHRzUGFyYW1zKTtcblx0aW5zaWdodHNDYXJkTWFuaWZlc3RbXCJzYXAudWk1XCJdID0ge1xuXHRcdGNvbnRlbnREZW5zaXRpZXM6IHVpNU1hbmlmZXN0LmNvbnRlbnREZW5zaXRpZXMgYXMgQ29udGVudERlbnNpdGllc1R5cGUsXG5cdFx0ZGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRsaWJzOiB7XG5cdFx0XHRcdFwic2FwLmluc2lnaHRzXCI6IHtcblx0XHRcdFx0XHRsYXp5OiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjb21wb25lbnROYW1lOiBpbnNpZ2h0c0NhcmRNYW5pZmVzdFtcInNhcC5hcHBcIl0uaWRcblx0fTtcblx0cmV0dXJuIGluc2lnaHRzQ2FyZE1hbmlmZXN0IGFzIENhcmRNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIG1hbmlmZXN0IG9mIHRoZSBpbnNpZ2h0cyBjYXJkIGFuZCBzaG93IGEgcHJldmlldyBvZiB0aGUgY2FyZCB0aGF0IGlzIGNyZWF0ZWQuXG4gKiBAcGFyYW0gaW5zaWdodHNQYXJhbXNcbiAqIEBwYXJhbSBjYXJkQ3JlYXRpb25EaWFsb2dXYXJuaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93SW5zaWdodHNDYXJkUHJldmlldyhpbnNpZ2h0c1BhcmFtczogSW5zaWdodHNQYXJhbXMsIGNhcmRDcmVhdGlvbkRpYWxvZ1dhcm5pbmc/OiBDYXJkTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IGRlZmF1bHQ6IGNhcmRIZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9pbnNpZ2h0cy9DYXJkSGVscGVyXCIpO1xuXHRjb25zdCBjYXJkSGVscGVySW5zdGFuY2UgPSBhd2FpdCBjYXJkSGVscGVyLmdldFNlcnZpY2VBc3luYyhcIlVJU2VydmljZVwiKTtcblx0Y29uc3QgY2FyZCA9IGF3YWl0IGNyZWF0ZUNhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyk7XG5cdGF3YWl0IGNhcmRIZWxwZXJJbnN0YW5jZS5zaG93Q2FyZFByZXZpZXcoY2FyZCwgdHJ1ZSwgY2FyZENyZWF0aW9uRGlhbG9nV2FybmluZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBtYW5pZmVzdCBvZiB0aGUgaW5zaWdodHMgY2FyZCBhbmQgc2hvdyBhIHByZXZpZXcgb2YgdGhlIGNhcmQgdGhhdCBpcyBjcmVhdGVkIGZvciBjb2xsYWJvcmF0aW9uIG1hbmFnZXIuXG4gKiBAcGFyYW0gY2FyZCBUaGUgY2FyZCBtYW5pZmVzdCB0byBiZSB1c2VkIGZvciB0aGUgY2FsbGJhY2tcbiAqIEBwYXJhbSBjbUluc3RhbmNlIFRoZSBjdXJyZW50IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSBpbnN0YW5jZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXcoY2FyZDogQ2FyZE1hbmlmZXN0LCBjbUluc3RhbmNlOiBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgeyBkZWZhdWx0OiBjYXJkSGVscGVyIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvaW5zaWdodHMvQ2FyZEhlbHBlclwiKTtcblx0Y29uc3QgY2FyZEhlbHBlckluc3RhbmNlID0gYXdhaXQgY2FyZEhlbHBlci5nZXRTZXJ2aWNlQXN5bmMoXCJVSVNlcnZpY2VcIik7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKT8uZ2V0VGV4dChcIkNfU0VORF9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJcIik7XG5cdGF3YWl0IGNhcmRIZWxwZXJJbnN0YW5jZS5zaG93Q2FyZFByZXZpZXcoY2FyZCwgdHJ1ZSwgeyB0eXBlOiBcIk5vbmVcIiB9LCBidXR0b25UZXh0LCAoZXZlbnQpID0+IHtcblx0XHQvLyBXZSBuZWVkIHRvIGludHJvZHVjZSB0aGlzIGNoZWNrIGFzIHRoZXJlIHNlZW1zIHRvIGJlIGEgcmVncmVzc2lvbiB0aGF0IHRoZSAnbWFuaWZlc3QnIHBhcmFtZXRlcnMgaXMgbm90IGZpbGxlZCBpbiBzb21lIHZlcnNpb25zXG5cdFx0Y29uc3QgY2FyZE1hbmlmZXN0ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwibWFuaWZlc3RcIikgPz8gZXZlbnQuZ2V0U291cmNlKCkuZ2V0TWFuaWZlc3QoKTtcblx0XHRjbUluc3RhbmNlLnB1Ymxpc2hDYXJkKGNhcmRNYW5pZmVzdCk7XG5cdH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zOiBJbnNpZ2h0c1BhcmFtcyk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdHJldHVybiBjcmVhdGVDYXJkTWFuaWZlc3QoaW5zaWdodHNQYXJhbXMpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBK0RBLE1BQU1BLGlCQUFpQixHQUFHLEVBQUU7RUFDNUIsTUFBTUMsWUFBWSxHQUFHLDBCQUEwQjs7RUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsSUFBWSxFQUFFQyxPQUFvQyxFQUEyQjtJQUNsRyxPQUFPRCxJQUFJLEtBQUssWUFBWTtFQUM3Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNFLFdBQVdBLENB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
@@ -97,7 +97,8 @@ function getCardData({ type, requestParameters }: InsightsParams<unknown>): Card
97
97
  url: `${SERVICE_HOST}${requestParameters.serviceUrl}$batch`,
98
98
  method: "POST",
99
99
  headers: {
100
- "X-CSRF-Token": "{{csrfTokens.token1}}"
100
+ "X-CSRF-Token": "{{csrfTokens.token1}}",
101
+ "Accept": "multipart/mixed"
101
102
  },
102
103
  batch: {
103
104
  response: {