@sapui5/sap.fe.macros 1.138.0 → 1.139.1

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 (210) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  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/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  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/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -511,7 +511,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
511
511
  /**
512
512
  * Triggers the inline edit discard.
513
513
  */;
514
- _proto.triggerInlineEditDiscard = function triggerInlineEditDiscard() {
514
+ _proto.triggerInlineEditDiscard = async function triggerInlineEditDiscard() {
515
+ if (this.hasPendingUserInput()) {
516
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
517
+ await new Promise(resolve => {
518
+ setTimeout(resolve, 200);
519
+ });
520
+ }
515
521
  this.getPageController()?.inlineEditFlow.inlineEditDiscard();
516
522
  }
517
523
 
@@ -519,7 +525,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
519
525
  * Triggers the inline edit save.
520
526
  * @returns The inlineEditFlow save promise.
521
527
  */;
522
- _proto.triggerInlineEditSave = function triggerInlineEditSave() {
528
+ _proto.triggerInlineEditSave = async function triggerInlineEditSave() {
529
+ if (this.hasPendingUserInput()) {
530
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
531
+ await new Promise(resolve => {
532
+ setTimeout(resolve, 200);
533
+ });
534
+ }
523
535
  return this.getPageController()?.inlineEditFlow.inlineEditSave();
524
536
  }
525
537
 
@@ -608,4 +620,4 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
608
620
  _exports = InlineEdit;
609
621
  return _exports;
610
622
  }, false);
611
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJpbmxpbmVFZGl0RGlzY2FyZCIsImlubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdFN0YXJ0IiwiaW5saW5lRWRpdENvbnRyb2xzIiwicHJvcGVydGllc0ZvcklubGluZUVkaXQiLCJiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0IiwiaW5jbHVkZXMiLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJwYXRoIiwic2V0UHJvcGVydHkiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJtb2RlbCIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHR0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdERpc2NhcmQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIGlubGluZUVkaXRGbG93IHNhdmUgcHJvbWlzZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0U2F2ZSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHRvIGFuIGlubGluZSBlZGl0IHN0YXJ0IG5vdGlmaWNhdGlvbiBmb3JtIHRoZSBpbmxpbmVFZGl0Rmxvdy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc0ZvcklubGluZUVkaXRcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXRcblx0ICovXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcImlubGluZUVkaXRGbG93XCIsIFwiaW5saW5lRWRpdFN0YXJ0XCIpXG5cdGlubGluZUVkaXRTdGFydChcblx0XHR0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LFxuXHRcdGlubGluZUVkaXRDb250cm9sczogQ29udHJvbFtdLFxuXHRcdHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0OiBzdHJpbmdbXSxcblx0XHRiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHRQYXRoID0gKHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0Q2Fub25pY2FsUGF0aCgpID8/IFwiXCI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSA9IHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSgpID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB8fCBiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0ICE9PSBiaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5BZGQpO1xuXHRcdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBwYXRoID0gYC8ke3RoaXMuZ2V0SWQoKX1gO1xuXHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShwYXRoLCB7IGlzRWRpdGFibGU6IHRydWUgfSk7XG5cdFx0XHR0aGlzLmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0XHRcdC8vSW4gY2FzZSBvZiBjb25uZWN0ZWQgZmllbGRzLCB3ZSBzZXQgdGhlIGZvY3VzIG9uIHRoZSBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWRcblx0XHRcdGlmICh0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UpIHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0Q29udGVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4pPy5nZXRDb250ZW50RWRpdCgpWzBdPy5mb2N1cygpO1xuXHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdH1cblx0XHRcdGlmICghaW5saW5lRWRpdENvbnRyb2xzLmluY2x1ZGVzKHRoaXMpKSB7XG5cdFx0XHRcdGlubGluZUVkaXRDb250cm9scy5wdXNoKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgaW5kaWNhdG9yIHBvcHVwLlxuXHQgKi9cblx0cmVzZXRJbmRpY2F0b3JQb3B1cCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKGZhbHNlKTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGFmdGVyIHNhdmUgb3IgZGlzY2FyZC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvbiBJZiB0aGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICovXG5cdGlubGluZUVkaXRFbmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVmcmVzaERlc2NyaXB0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRpZiAocmVmcmVzaERlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudG9nZ2xlSW5saW5lRWRpdEZpZWxkR3JvdXBJZChGaWVsZEdyb3VwSWRBY3Rpb24uUmVtb3ZlKTtcblx0XHRcdHRoaXMudW5iaW5kRWxlbWVudChcInVpXCIpO1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0U3RhdGUgPSBcIkNsb3NlZFwiO1xuXHRcdFx0dGhpcy5yZXNldEluZGljYXRvclBvcHVwKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmb3JjZSB0aGUgbW9kZWwgcmVmcmVzaCBmb3IgdGhlIGRlc2NyaXB0aW9uIGlmIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgdmlhICBhIGJpbmRpbmcgd2l0aCBhICQkbm9QYXRjaCBwYXJhbWV0ZXIuXG5cdCAqL1xuXHRyZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Ly8gd2hlbiB0aGUgZmllbGQgdXNlcyBhIG1kYyBmaWVsZCB0aGUgZGVzY3JpcHRpb24gaXMgdXBkYXRlZCB2aWEgdGhlIGFkZGl0aW9uYWxWYWx1ZSBiaW5kaW5nXG5cdFx0Ly8gdGhhdCBoYXMgYSBub1BhdGNoIHBhcmFtZXRlciBzbyBpdCBkb2Vzbid0IGdldCByZXZlcnRlZCBieWEgcmVzZXRDaGFuZ2VzXG5cdFx0aWYgKHRoaXMuaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ/LmlzQTxFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpXG5cdFx0XHRcdD8gdGhpcy5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF1cblx0XHRcdFx0OiBudWxsO1xuXHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5pc0E8TWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBjb250ZW50LmdldEJpbmRpbmcoXCJhZGRpdGlvbmFsVmFsdWVcIik/LmdldFBhdGgoKTtcblx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRcdCh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk/LnJlcXVlc3RTaWRlRWZmZWN0cyhbZGVzY3JpcHRpb25QYXRoXSwgXCIkYXV0b1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztNQW9CS0Esa0JBQWtCLDBCQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFBLE9BQWxCQSxrQkFBa0I7RUFBQSxFQUFsQkEsa0JBQWtCO0VBQUEsSUFLRkMsVUFBVSxJQUFBQyxJQUFBLEdBNGlCN0JDLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUFDLE1BQUE7SUFBQSxTQUFBSCxXQUFBO01BQUEsS0EzaUJ4REksZUFBZSxHQUE2QyxRQUFRO01BQUEsS0FRcEVDLG1CQUFtQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFOLFVBQUE7SUFBQSxJQUFBTyxNQUFBLEdBQUFQLFVBQUEsQ0FBQVEsU0FBQTtJQUVuQztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSUFFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxTQUFtQixFQUFRO01BQ3JDLE1BQU1DLG1CQUFtQixHQUFHRCxTQUFTLENBQUNGLFNBQVMsQ0FBQ0ksaUJBQWlCO01BQ2pFLE1BQU1DLHFCQUFxQixHQUFHSCxTQUFTLENBQUNGLFNBQVMsQ0FBQ00sbUJBQW1CO01BQ3JFLE1BQU1DLFdBQVcsR0FBR0wsU0FBUyxDQUFDRixTQUFTLENBQUNRLE9BQU87TUFFL0NOLFNBQVMsQ0FBQ0YsU0FBUyxDQUFDSSxpQkFBaUIsR0FBRyxZQUFrQjtRQUN6REQsbUJBQW1CLEVBQUVNLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUNDLGlCQUFpQixFQUFFO1VBQzNCLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztRQUN6QjtNQUNELENBQUM7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
623
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJoYXNQZW5kaW5nVXNlcklucHV0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiaW5saW5lRWRpdERpc2NhcmQiLCJpbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRTdGFydCIsImlubGluZUVkaXRDb250cm9scyIsInByb3BlcnRpZXNGb3JJbmxpbmVFZGl0IiwiYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdCIsImluY2x1ZGVzIiwidWlNb2RlbCIsImdldE1vZGVsIiwicGF0aCIsInNldFByb3BlcnR5IiwiaXNFZGl0YWJsZSIsImJpbmRFbGVtZW50IiwibW9kZWwiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlubGluZUVkaXREaXNjYXJkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IHNhdmUuXG5cdCAqIEByZXR1cm5zIFRoZSBpbmxpbmVFZGl0RmxvdyBzYXZlIHByb21pc2UuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdFNhdmUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZCB8IHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgdG8gYW4gaW5saW5lIGVkaXQgc3RhcnQgbm90aWZpY2F0aW9uIGZvcm0gdGhlIGlubGluZUVkaXRGbG93LlxuXHQgKiBAcGFyYW0gaW5saW5lRWRpdENvbnRyb2xzIFRoZSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdFxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdFxuXHQgKi9cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwiaW5saW5lRWRpdEZsb3dcIiwgXCJpbmxpbmVFZGl0U3RhcnRcIilcblx0aW5saW5lRWRpdFN0YXJ0KFxuXHRcdHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsXG5cdFx0aW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sXG5cdFx0cHJvcGVydGllc0ZvcklubGluZUVkaXQ6IHN0cmluZ1tdLFxuXHRcdGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQ6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dFBhdGggPSAodGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRDYW5vbmljYWxQYXRoKCkgPz8gXCJcIjtcblx0XHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCkgPz8gXCJcIjtcblx0XHRcdGlmICghcHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpIHx8IGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQgIT09IGJpbmRpbmdDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRvZ2dsZUlubGluZUVkaXRGaWVsZEdyb3VwSWQoRmllbGRHcm91cElkQWN0aW9uLkFkZCk7XG5cdFx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGNvbnN0IHBhdGggPSBgLyR7dGhpcy5nZXRJZCgpfWA7XG5cdFx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogdHJ1ZSB9KTtcblx0XHRcdHRoaXMuYmluZEVsZW1lbnQoeyBwYXRoLCBtb2RlbDogXCJ1aVwiIH0pO1xuXHRcdFx0Ly9JbiBjYXNlIG9mIGNvbm5lY3RlZCBmaWVsZHMsIHdlIHNldCB0aGUgZm9jdXMgb24gdGhlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZFxuXHRcdFx0aWYgKHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHQodGhpcy5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPik/LmdldENvbnRlbnRFZGl0KClbMF0/LmZvY3VzKCk7XG5cdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdFN0YXRlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpbmxpbmVFZGl0Q29udHJvbHMuaW5jbHVkZXModGhpcykpIHtcblx0XHRcdFx0aW5saW5lRWRpdENvbnRyb2xzLnB1c2godGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBpbmRpY2F0b3IgcG9wdXAuXG5cdCAqL1xuXHRyZXNldEluZGljYXRvclBvcHVwKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0RWRpdE1vZGUoZmFsc2UpO1xuXHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgYWZ0ZXIgc2F2ZSBvciBkaXNjYXJkLlxuXHQgKiBAcGFyYW0gcmVmcmVzaERlc2NyaXB0aW9uIElmIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKi9cblx0aW5saW5lRWRpdEVuZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIpIHtcblx0XHRcdGlmIChyZWZyZXNoRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5SZW1vdmUpO1xuXHRcdFx0dGhpcy51bmJpbmRFbGVtZW50KFwidWlcIik7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiQ2xvc2VkXCI7XG5cdFx0XHR0aGlzLnJlc2V0SW5kaWNhdG9yUG9wdXAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZvcmNlIHRoZSBtb2RlbCByZWZyZXNoIGZvciB0aGUgZGVzY3JpcHRpb24gaWYgaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCB2aWEgIGEgYmluZGluZyB3aXRoIGEgJCRub1BhdGNoIHBhcmFtZXRlci5cblx0ICovXG5cdHJlZnJlc2hEZXNjcmlwdGlvbklmTmVlZGVkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHQvLyB3aGVuIHRoZSBmaWVsZCB1c2VzIGEgbWRjIGZpZWxkIHRoZSBkZXNjcmlwdGlvbiBpcyB1cGRhdGVkIHZpYSB0aGUgYWRkaXRpb25hbFZhbHVlIGJpbmRpbmdcblx0XHQvLyB0aGF0IGhhcyBhIG5vUGF0Y2ggcGFyYW1ldGVyIHNvIGl0IGRvZXNuJ3QgZ2V0IHJldmVydGVkIGJ5YSByZXNldENoYW5nZXNcblx0XHRpZiAodGhpcy5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IHRoaXMuY29udGVudD8uaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWVsZFdyYXBwZXJcIilcblx0XHRcdFx0PyB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRpZiAoY29udGVudCAmJiBjb250ZW50LmlzQTxNZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IGNvbnRlbnQuZ2V0QmluZGluZyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoZGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KT8ucmVxdWVzdFNpZGVFZmZlY3RzKFtkZXNjcmlwdGlvblBhdGhdLCBcIiRhdXRvXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01Bb0JLQSxrQkFBa0IsMEJBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQUEsT0FBbEJBLGtCQUFrQjtFQUFBLEVBQWxCQSxrQkFBa0I7RUFBQSxJQUtGQyxVQUFVLElB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
@@ -561,7 +561,13 @@ export default class InlineEdit {
561
561
  /**
562
562
  * Triggers the inline edit discard.
563
563
  */
564
- triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): void {
564
+ async triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void> {
565
+ if (this.hasPendingUserInput()) {
566
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
567
+ await new Promise<void>((resolve) => {
568
+ setTimeout(resolve, 200);
569
+ });
570
+ }
565
571
  this.getPageController()?.inlineEditFlow.inlineEditDiscard();
566
572
  }
567
573
 
@@ -569,7 +575,13 @@ export default class InlineEdit {
569
575
  * Triggers the inline edit save.
570
576
  * @returns The inlineEditFlow save promise.
571
577
  */
572
- triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void> | undefined {
578
+ async triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void | undefined> {
579
+ if (this.hasPendingUserInput()) {
580
+ // If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
581
+ await new Promise<void>((resolve) => {
582
+ setTimeout(resolve, 200);
583
+ });
584
+ }
573
585
  return this.getPageController()?.inlineEditFlow.inlineEditSave();
574
586
  }
575
587
 
@@ -266,6 +266,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
266
266
  active: this.hasQuickView,
267
267
  press: FieldRuntimeHelper.pressLink,
268
268
  ariaLabelledBy: this.ariaLabelledBy,
269
+ reactiveAreaMode: this.formatOptions?.reactiveAreaMode,
269
270
  children: {
270
271
  dependents: this.createDependents()
271
272
  }
@@ -380,4 +381,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
380
381
  _exports = DataPoint;
381
382
  return _exports;
382
383
  }, false);
383
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiUXVpY2tJbmZvIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsIlRhcmdldFZhbHVlIiwiZ2V0VmFsdWUiLCJnZXRUZXh0IiwiZ2V0TnVtYmVyIiwiZ2V0RGlzcGxheVZhbHVlIiwidG9TdHJpbmciLCJnZXRQcm9wZXJ0eSIsInNldFZhbHVlIiwic2V0VGV4dCIsInNldE51bWJlciIsIkxvZyIsImVycm9yIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVBvaW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBWaXN1YWxpemF0aW9uVHlwZSwgdHlwZSBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yLCBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Dcml0aWNhbGl0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzQ3VycmVuY3ksIGhhc1VuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUV4cHJlc3Npb24sIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB7XG5cdGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yRGlzcGxheVZhbHVlLFxuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvclBlcmNlbnRWYWx1ZSxcblx0YnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uLFxuXHRnZXRWYWx1ZUZvcm1hdHRlZFxufSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0RhdGFQb2ludFRlbXBsYXRpbmdcIjtcbmltcG9ydCBRdWlja1ZpZXcgZnJvbSBcInNhcC9mZS9tYWNyb3MvcXVpY2tWaWV3L1F1aWNrVmlld1wiO1xuaW1wb3J0IE9iamVjdE51bWJlciBmcm9tIFwic2FwL20vT2JqZWN0TnVtYmVyXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgUHJvZ3Jlc3NJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1Byb2dyZXNzSW5kaWNhdG9yXCI7XG5pbXBvcnQgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBNZGNMaW5rIGZyb20gXCJzYXAvdWkvbWRjL0xpbmtcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuaW1wb3J0IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vRGF0YVBvaW50Rm9ybWF0T3B0aW9uc1wiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YVBvaW50IGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBQcmVmaXggYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBJRCBvZiB0aGUgZmllbGRcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWRQcmVmaXg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGRhdGFQb2ludC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRwdWJsaWMgbWV0YVBhdGghOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50Rm9ybWF0T3B0aW9uc1wiLCBtdWx0aXBsZTogZmFsc2UsIGRlZmF1bHRDbGFzczogRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyB9KVxuXHRmb3JtYXRPcHRpb25zITogRGF0YVBvaW50Rm9ybWF0T3B0aW9ucztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IGFuIGV4dGVybmFsIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBvRGF0YSBtb2RlbFxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGlzQmluZGluZ0luZm86IHRydWVcblx0fSlcblx0cHVibGljIHZhbHVlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgdGhlIHZpc3VhbGl6YXRpb24gdHlwZVxuXHQgKi9cblx0cHJpdmF0ZSB2aXN1YWxpemF0aW9uPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgdGhlIHZpc2liaWxpdHlcblx0ICovXG5cdHByaXZhdGUgdmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBwcm9wZXJ0eSBpZiB0aGUgcHJvcGVydHkgaGFzIGEgUXVpY2t2aWV3XG5cdCAqL1xuXHRwcml2YXRlIGhhc1F1aWNrVmlldyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgZGF0YU1vZGVsUGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT47XG5cblx0cHJpdmF0ZSB2YWx1ZURhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPERhdGFQb2ludD4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzLCBvdGhlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFRlbXBsYXRpbmdPYmplY3RzKCk7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBnZXQgdGhlIHRlbXBsYXRpbmcgb2JqZWN0cy5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGVtcGxhdGluZ09iamVjdHMoKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxEYXRhTW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxEYXRhUG9pbnRUeXBlPih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRpZiAoIWludGVybmFsRGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGg7XG5cdFx0dGhpcy52aXNpYmxlID0gZ2V0VmlzaWJsZUV4cHJlc3Npb24oaW50ZXJuYWxEYXRhTW9kZWxQYXRoKTtcblx0XHRpZiAoaW50ZXJuYWxEYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlPy5wYXRoKSB7XG5cdFx0XHRpbnRlcm5hbFZhbHVlRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRpbnRlcm5hbERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlLnBhdGhcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRhTW9kZWxQYXRoID0gaW50ZXJuYWxEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoID0gaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdGhhdCBjYWxjdWxhdGVzIHRoZSB2aXN1YWxpemF0aW9uIHR5cGUgZm9yIHRoaXMgRGF0YVBvaW50LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKi9cblx0cHJpdmF0ZSBnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiB2b2lkIHtcblx0XHRpZiAoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlZpc3VhbGl6YXRpb24gPT09IFZpc3VhbGl6YXRpb25UeXBlLlJhdGluZykge1xuXHRcdFx0dGhpcy52aXN1YWxpemF0aW9uID0gXCJSYXRpbmdcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5Qcm9ncmVzcykge1xuXHRcdFx0dGhpcy52aXN1YWxpemF0aW9uID0gXCJQcm9ncmVzc1wiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZVByb3BlcnR5ID0gdGhpcy52YWx1ZURhdGFNb2RlbFBhdGggJiYgdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdC8vY2hlY2sgd2hldGhlciB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIHNob3VsZCBiZSBhbiBvYmplY3QgbnVtYmVyIGluIGNhc2Ugb25lIG9mIHRoZSBpZiBjb25kaXRpb25zIG1ldFxuXHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gKHZhbHVlUHJvcGVydHkgJiYgaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyhkYXRhTW9kZWxQYXRoLCB2YWx1ZVByb3BlcnR5KSkgPz8gZmFsc2U7XG5cdFx0aWYgKHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0KHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoKSkge1xuXHRcdFx0dGhpcy5oYXNRdWlja1ZpZXcgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAodGhpcy5oYXNRdWlja1ZpZXcgIT09IHRydWUpIHtcblx0XHRcdGlmIChpc1Byb3BlcnR5KHZhbHVlUHJvcGVydHkpICYmIChoYXNVbml0KHZhbHVlUHJvcGVydHkpIHx8IGhhc0N1cnJlbmN5KHZhbHVlUHJvcGVydHkpKSkge1xuXHRcdFx0XHQvLyB3ZSBvbmx5IHNob3cgYW4gb2JqZWN0TnVtYmVyIGlmIHRoZXJlIGlzIG5vIHF1aWNrdmlldyBhbmQgYSB1bml0IG9yIGEgY3VycmVuY3lcblx0XHRcdFx0dGhpcy52aXN1YWxpemF0aW9uID0gXCJPYmplY3ROdW1iZXJcIjtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vZGVmYXVsdCBjYXNlIHRvIGhhbmRsZSB0aGlzIGFzIG9iamVjdFN0YXR1cyB0eXBlXG5cdFx0dGhpcy52aXN1YWxpemF0aW9uID0gXCJPYmplY3RTdGF0dXNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGRhdGFQb2ludC5cblx0ICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSB3aXRoIHRoZSBlbmFibGVtZW50IHN0YXRlXG5cdCAqL1xuXHRnZXRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldEFjdGl2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhcG9pbnQuXG5cdCAqIEBwYXJhbSBlbmFibGVkXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGFwb2ludCByZWZlcmVuY2Vcblx0ICovXG5cdHNldEVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IENvbnRyb2wge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0UHJvcGVydHkoXCJhY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IFwic2V0RW5hYmxlZCBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBSYXRpbmdJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUmF0aW5nSW5kaWNhdG9yXG5cdCAqL1xuXHRjcmVhdGVSYXRpbmdJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IFJhdGluZ0luZGljYXRvciB7XG5cdFx0Y29uc3QgZGF0YVBvaW50VGFyZ2V0ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLmdldFRhcmdldFZhbHVlQmluZGluZyhkYXRhTW9kZWxQYXRoKTtcblxuXHRcdGNvbnN0IGRhdGFQb2ludFZhbHVlID0gZGF0YVBvaW50VGFyZ2V0Py5WYWx1ZSB8fCBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IGRhdGFQb2ludFZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXG5cdFx0bGV0IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblx0XHRpZiAocHJvcGVydHlUeXBlID09PSBcIkVkbS5EZWNpbWFsXCIgJiYgZGF0YVBvaW50VGFyZ2V0Py5WYWx1ZUZvcm1hdCkge1xuXHRcdFx0aWYgKGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpIHtcblx0XHRcdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gZGF0YVBvaW50VGFyZ2V0LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSBnZXRWYWx1ZUZvcm1hdHRlZCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCwgZGF0YVBvaW50VmFsdWUsIHByb3BlcnR5VHlwZSwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmF0aW5nSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUmF0aW5nSW5kaWNhdG9yLUZpZWxkLWRpc3BsYXlcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtYXhWYWx1ZT17dGFyZ2V0VmFsdWV9XG5cdFx0XHRcdHZhbHVlPXt0aGlzLnZhbHVlID8/IGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlKX1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUb29sdGlwVmFsdWUoZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGljb25TaXplPXt0aGlzLmZvcm1hdE9wdGlvbnM/Lmljb25TaXplfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5zaG93TGFiZWxzID8/IGZhbHNlID8gXCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZWRpdGFibGU9XCJmYWxzZVwiXG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBQcm9ncmVzc0luZGljYXRvciBjb250cm9sLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBQcm9ncmVzc0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IFByb2dyZXNzSW5kaWNhdG9yIHtcblx0XHRjb25zdCBjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHQ/IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGRhdGFNb2RlbFBhdGgpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkaXNwbGF5VmFsdWUgPSBidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZShkYXRhTW9kZWxQYXRoKTtcblx0XHRjb25zdCBwZXJjZW50VmFsdWUgPSBidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvclBlcmNlbnRWYWx1ZShkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UHJvZ3Jlc3NJbmRpY2F0b3Jcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJQcm9ncmVzc0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZGlzcGxheVZhbHVlPXtkaXNwbGF5VmFsdWV9XG5cdFx0XHRcdHBlcmNlbnRWYWx1ZT17cGVyY2VudFZhbHVlfVxuXHRcdFx0XHRzdGF0ZT17Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIE9iamVjdE51bWJlciBjb250cm9sLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBPYmplY3ROdW1iZXJcblx0ICovXG5cdGNyZWF0ZU9iamVjdE51bWJlcihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogT2JqZWN0TnVtYmVyIHtcblx0XHRjb25zdCBjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHQ/IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGRhdGFNb2RlbFBhdGgpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBlbXB0eUluZGljYXRvck1vZGUgPSB0aGlzLmZvcm1hdE9wdGlvbnM/LnNob3dFbXB0eUluZGljYXRvciA/PyBmYWxzZSA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvYmplY3RTdGF0dXNOdW1iZXIgPSBidWlsZEZpZWxkQmluZGluZ0V4cHJlc3Npb24oZGF0YU1vZGVsUGF0aCwgdGhpcy5mb3JtYXRPcHRpb25zLCB0cnVlKTtcblx0XHRjb25zdCBsaW1pdFNob3dEZWNpbWFscyA9IHRoaXMuZ2V0TWFuaWZlc3RXcmFwcGVyKCk/LmdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uKCk/LmFwcD8uc2hvd09ubHlVbml0RGVjaW1hbHMgPT09IHRydWU7XG5cdFx0Y29uc3QgdW5pdCA9XG5cdFx0XHR0aGlzLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJIaWRkZW5cIlxuXHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIHRydWUsIGxpbWl0U2hvd0RlY2ltYWxzKSk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdE51bWJlclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIk9iamVjdE51bWJlci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRudW1iZXI9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzTnVtYmVyfVxuXHRcdFx0XHR1bml0PXt1bml0fVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnZpc2libGV9XG5cdFx0XHRcdGVtcGhhc2l6ZWQ9XCJmYWxzZVwiXG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3ROdW1iZXJMYXJnZVwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVwZW5kZW50LlxuXHQgKiBAcmV0dXJucyBEZXBlbmRlbnQgZWl0aGVyIHdpdGggdGhlIFF1aWNrVmlldyBvciBhbiBlbXB0eSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZURlcGVuZGVudHMoKTogTWRjTGluayB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRyZXR1cm4gbmV3IFF1aWNrVmlldyhcblx0XHRcdFx0dGhpcy52YWx1ZURhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHRcdHRoaXMuY29udGV4dFBhdGggPz8gXCJcIlxuXHRcdFx0KS5jcmVhdGVDb250ZW50KCkgYXMgTWRjTGluaztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIE9iamVjdFN0YXR1cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBPYmplY3RTdGF0dXNcblx0ICovXG5cdGNyZWF0ZU9iamVjdFN0YXR1cyhkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogT2JqZWN0U3RhdHVzIHtcblx0XHRsZXQgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID09PSBcIk5vbmVcIiAmJiB0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSB0aGlzLmhhc1F1aWNrVmlldyA/IFwiSW5mb3JtYXRpb25cIiA6IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRjb25zdCBlbXB0eUluZGljYXRvck1vZGUgPSB0aGlzLmZvcm1hdE9wdGlvbnM/LnNob3dFbXB0eUluZGljYXRvciA/PyBmYWxzZSA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvYmplY3RTdGF0dXNUZXh0ID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgZmFsc2UpO1xuXHRcdGNvbnN0IGljb25FeHByZXNzaW9uID1cblx0XHRcdHRoaXMuZm9ybWF0T3B0aW9ucz8uZGF0YVBvaW50U3R5bGUgPT09IFwibGFyZ2VcIiB8fCAhZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3RTdGF0dXMtRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3RTdGF0dXNMYXJnZSBzYXBNT2JqZWN0U3RhdHVzTG9uZ1RleHRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0aWNvbj17aWNvbkV4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRzdGF0ZT17Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHRleHQ9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzVGV4dH1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjdGl2ZT17dGhpcy5oYXNRdWlja1ZpZXd9XG5cdFx0XHRcdHByZXNzPXtGaWVsZFJ1bnRpbWVIZWxwZXIucHJlc3NMaW5rIGFzIHVua25vd24gYXMgKG9FdmVudDogT2JqZWN0U3RhdHVzJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IHRoaXMuY3JlYXRlRGVwZW5kZW50cygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXIgbWV0aG9kIHRvIGdldCBhIHBvc3NpYmxlIHRvb2x0aXAgdGV4dC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdGFyZ2V0IHZhbHVlIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUYXJnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdFN0YXR1cyB8IE9iamVjdE51bWJlciB8IFJhdGluZ0luZGljYXRvciB8IFByb2dyZXNzSW5kaWNhdG9yIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dGhpcy5nZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0c3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb24pIHtcblx0XHRcdGNhc2UgXCJSYXRpbmdcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSYXRpbmdJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJQcm9ncmVzc1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiT2JqZWN0TnVtYmVyXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0TnVtYmVyKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU9iamVjdFN0YXR1cyh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludFxuXHQgKi9cblx0Z2V0VmFsdWUoKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXROdW1iZXIoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldERpc3BsYXlWYWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRWYWx1ZSgpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJvcGVydHkoXCJ2YWx1ZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBmaWVsZCByZWZlcmVuY2Vcblx0ICovXG5cdHNldFZhbHVlKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogQ29udHJvbCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFRleHQodmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdE51bWJlcj4oXCJzYXAubS5PYmplY3ROdW1iZXJcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXROdW1iZXIodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJzZXRWYWx1ZSBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlIHlldFwiKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFJhdGluZ0luZGljYXRvcj4oXCJzYXAubS5SYXRpbmdJbmRpY2F0b3JcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYWx1ZSh2YWx1ZSBhcyBudW1iZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW1DcUJBLFNBQVMsSUFBQUMsSUFBQSxHQUQ3QkMsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLEVBQUFDLEtBQUEsR0FLakRDLFdBQVcsQ0FBQztJQUNaQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1EQyxRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFFLFFBQVE7SUFDZEcsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREYsUUFBUSxDQUFDO0lBQ1RGLElBQUksRUFBRTtFQUNQ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MkIsQ0FBQztNQUNsRCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN4QyxPQUFPLEVBQUV5QixHQUFHLENBQWUsb0JBQW9CLENBQUMsRUFBRTtRQUNqRSxJQUFJLENBQUN6QixPQUFPLENBQUNrSCxTQUFTLENBQUMxRSxLQUFlLENBQUM7TUFDeEMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDeEMsT0FBTyxFQUFFeUIsR0FBRyxDQUFvQix5QkFBeUIsQ0FBQyxFQUFFO1FBQzNFMEYsR0FBRyxDQUFDQyxLQUFLLENBQUMsb0RBQW9ELENBQUM7TUFDaEUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDcEgsT0FBTyxFQUFFeUIsR0FBRyxDQUFrQix1QkFBdUIsQ0FBQyxFQUFFO1FBQ3ZFLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ2dILFFBQVEsQ0FBQ3hFLEtBQWUsQ0FBQztNQUN2QztNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFBQSxPQUFBN0UsU0FBQTtFQUFBLEVBbFhxQzBKLGFBQWEsR0FBQWpJLFdBQUEsR0FBQWtJLHlCQUFBLENBQUF6SSxPQUFBLENBQUFnQixTQUFBLGVBQUEvQixLQUFBO0lBQUF5SixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXJJLFlBQUEsR0FBQWlJLHlCQUFBLENBQUF6SSxPQUFBLENBQUFnQixTQUFBLGVBQUE1QixLQUFBO0lBQUFzSixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXBJLFlBQUEsR0FBQWdJLHlCQUFBLENBQUF6SSxPQUFBLENBQUFnQixTQUFBLGtCQUFBekIsS0FBQTtJQUFBbUosWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFuSSxZQUFBLEdBQUErSCx5QkFBQSxDQUFBekksT0FBQSxDQUFBZ0IsU0FBQSxvQkFBQXhCLEtBQUE7SUFBQWtKLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbEksWUFBQSxHQUFBOEgseUJBQUEsQ0FBQXpJLE9BQUEsQ0FBQWdCLFNBQUEsWUFBQW5CLEtBQUE7SUFBQTZJLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBN0ksT0FBQSxNQUFBRCxNQUFBO0VBQUFjLFFBQUEsR0FBQS9CLFNBQUE7RUFBQSxPQUFBK0IsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
384
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsInJlYWN0aXZlQXJlYU1vZGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlF1aWNrSW5mbyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJUYXJnZXRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0VGV4dCIsImdldE51bWJlciIsImdldERpc3BsYXlWYWx1ZSIsInRvU3RyaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWYWx1ZSIsInNldFRleHQiLCJzZXROdW1iZXIiLCJMb2ciLCJlcnJvciIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgVmlzdWFsaXphdGlvblR5cGUsIHR5cGUgRGF0YVBvaW50VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciwgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uLCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUsXG5cdGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVGb3JtYXR0ZWRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9EYXRhUG9pbnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tWaWV3IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdcIjtcbmltcG9ydCBPYmplY3ROdW1iZXIgZnJvbSBcInNhcC9tL09iamVjdE51bWJlclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RTdGF0dXMkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFByb2dyZXNzSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9Qcm9ncmVzc0luZGljYXRvclwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0RhdGFQb2ludEZvcm1hdE9wdGlvbnNcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb2ludCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhUG9pbnQuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludEZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucyE6IERhdGFQb2ludEZvcm1hdE9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgb0RhdGEgbW9kZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXN1YWxpemF0aW9uIHR5cGVcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXphdGlvbj86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXNpYmlsaXR5XG5cdCAqL1xuXHRwcml2YXRlIHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgcHJvcGVydHkgaWYgdGhlIHByb3BlcnR5IGhhcyBhIFF1aWNrdmlld1xuXHQgKi9cblx0cHJpdmF0ZSBoYXNRdWlja1ZpZXcgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+O1xuXG5cdHByaXZhdGUgdmFsdWVEYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxEYXRhUG9pbnQ+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUZW1wbGF0aW5nT2JqZWN0cygpO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZW1wbGF0aW5nIG9iamVjdHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YVBvaW50VHlwZT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFpbnRlcm5hbERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKGludGVybmFsRGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKGludGVybmFsRGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdFx0aW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdGludGVybmFsRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aDtcblx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIGZvciB0aGlzIERhdGFQb2ludC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogdm9pZCB7XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5SYXRpbmcpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUmF0aW5nXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUHJvZ3Jlc3NcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVQcm9wZXJ0eSA9IHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0XHQvL2NoZWNrIHdoZXRoZXIgdGhlIHZpc3VhbGl6YXRpb24gdHlwZSBzaG91bGQgYmUgYW4gb2JqZWN0IG51bWJlciBpbiBjYXNlIG9uZSBvZiB0aGUgaWYgY29uZGl0aW9ucyBtZXRcblx0XHR0aGlzLmhhc1F1aWNrVmlldyA9ICh2YWx1ZVByb3BlcnR5ICYmIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgdmFsdWVQcm9wZXJ0eSkpID8/IGZhbHNlO1xuXHRcdGlmICh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCAmJiBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkpIHtcblx0XHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoaXNQcm9wZXJ0eSh2YWx1ZVByb3BlcnR5KSAmJiAoaGFzVW5pdCh2YWx1ZVByb3BlcnR5KSB8fCBoYXNDdXJyZW5jeSh2YWx1ZVByb3BlcnR5KSkpIHtcblx0XHRcdFx0Ly8gd2Ugb25seSBzaG93IGFuIG9iamVjdE51bWJlciBpZiB0aGVyZSBpcyBubyBxdWlja3ZpZXcgYW5kIGEgdW5pdCBvciBhIGN1cnJlbmN5XG5cdFx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0TnVtYmVyXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2RlZmF1bHQgY2FzZSB0byBoYW5kbGUgdGhpcyBhcyBvYmplY3RTdGF0dXMgdHlwZVxuXHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhUG9pbnQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRBY3RpdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhcG9pbnQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFByb3BlcnR5KFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUmF0aW5nSW5kaWNhdG9yIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIFJhdGluZ0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUmF0aW5nSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBSYXRpbmdJbmRpY2F0b3Ige1xuXHRcdGNvbnN0IGRhdGFQb2ludFRhcmdldCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRUYXJnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludFRhcmdldD8uVmFsdWUgfHwgXCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBkYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblxuXHRcdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGVjaW1hbFwiICYmIGRhdGFQb2ludFRhcmdldD8uVmFsdWVGb3JtYXQpIHtcblx0XHRcdGlmIChkYXRhUG9pbnRUYXJnZXQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gZ2V0VmFsdWVGb3JtYXR0ZWQodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIGRhdGFQb2ludFZhbHVlLCBwcm9wZXJ0eVR5cGUsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIlJhdGluZ0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWF4VmFsdWU9e3RhcmdldFZhbHVlfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZSA/PyBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSl9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRpY29uU2l6ZT17dGhpcy5mb3JtYXRPcHRpb25zPy5pY29uU2l6ZX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0xhYmVscyA/PyBmYWxzZSA/IFwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGVkaXRhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUHJvZ3Jlc3NJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUHJvZ3Jlc3NJbmRpY2F0b3Jcblx0ICovXG5cdGNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBQcm9ncmVzc0luZGljYXRvciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGlzcGxheVZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgcGVyY2VudFZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFByb2dyZXNzSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUHJvZ3Jlc3NJbmRpY2F0b3ItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfVxuXHRcdFx0XHRwZXJjZW50VmFsdWU9e3BlcmNlbnRWYWx1ZX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3ROdW1iZXIgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0TnVtYmVyXG5cdCAqL1xuXHRjcmVhdGVPYmplY3ROdW1iZXIoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdE51bWJlciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzTnVtYmVyID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgbGltaXRTaG93RGVjaW1hbHMgPSB0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnNob3dPbmx5VW5pdERlY2ltYWxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHVuaXQgPVxuXHRcdFx0dGhpcy5mb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCJcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBjb21waWxlRXhwcmVzc2lvbihVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLCB0cnVlLCBsaW1pdFNob3dEZWNpbWFscykpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3ROdW1iZXJcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3ROdW1iZXItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHN0YXRlPXtjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbn1cblx0XHRcdFx0bnVtYmVyPXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c051bWJlcn1cblx0XHRcdFx0dW5pdD17dW5pdH1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy52aXNpYmxlfVxuXHRcdFx0XHRlbXBoYXNpemVkPVwiZmFsc2VcIlxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0TnVtYmVyTGFyZ2VcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUb29sdGlwVmFsdWUoZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRlcGVuZGVudC5cblx0ICogQHJldHVybnMgRGVwZW5kZW50IGVpdGhlciB3aXRoIHRoZSBRdWlja1ZpZXcgb3IgYW4gZW1wdHkgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVEZXBlbmRlbnRzKCk6IE1kY0xpbmsgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmhhc1F1aWNrVmlldykge1xuXHRcdFx0cmV0dXJuIG5ldyBRdWlja1ZpZXcoXG5cdFx0XHRcdHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoID8/IFwiXCJcblx0XHRcdCkuY3JlYXRlQ29udGVudCgpIGFzIE1kY0xpbms7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3RTdGF0dXMgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0U3RhdHVzXG5cdCAqL1xuXHRjcmVhdGVPYmplY3RTdGF0dXMoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdFN0YXR1cyB7XG5cdFx0bGV0IGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZGF0YU1vZGVsUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiA9PT0gXCJOb25lXCIgJiYgdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgpIHtcblx0XHRcdGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gdGhpcy5oYXNRdWlja1ZpZXcgPyBcIkluZm9ybWF0aW9uXCIgOiBcIk5vbmVcIjtcblx0XHR9XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzVGV4dCA9IGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbihkYXRhTW9kZWxQYXRoLCB0aGlzLmZvcm1hdE9wdGlvbnMsIGZhbHNlKTtcblx0XHRjb25zdCBpY29uRXhwcmVzc2lvbiA9XG5cdFx0XHR0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgfHwgIWRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiT2JqZWN0U3RhdHVzLUZpZWxkLWRpc3BsYXlcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0U3RhdHVzTGFyZ2Ugc2FwTU9iamVjdFN0YXR1c0xvbmdUZXh0XCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGljb249e2ljb25FeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c1RleHR9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY3RpdmU9e3RoaXMuaGFzUXVpY2tWaWV3fVxuXHRcdFx0XHRwcmVzcz17RmllbGRSdW50aW1lSGVscGVyLnByZXNzTGluayBhcyB1bmtub3duIGFzIChvRXZlbnQ6IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17dGhpcy5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IHRoaXMuY3JlYXRlRGVwZW5kZW50cygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXIgbWV0aG9kIHRvIGdldCBhIHBvc3NpYmxlIHRvb2x0aXAgdGV4dC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdGFyZ2V0IHZhbHVlIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUYXJnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdFN0YXR1cyB8IE9iamVjdE51bWJlciB8IFJhdGluZ0luZGljYXRvciB8IFByb2dyZXNzSW5kaWNhdG9yIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dGhpcy5nZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0c3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb24pIHtcblx0XHRcdGNhc2UgXCJSYXRpbmdcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSYXRpbmdJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJQcm9ncmVzc1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiT2JqZWN0TnVtYmVyXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0TnVtYmVyKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU9iamVjdFN0YXR1cyh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludFxuXHQgKi9cblx0Z2V0VmFsdWUoKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXROdW1iZXIoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldERpc3BsYXlWYWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRWYWx1ZSgpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJvcGVydHkoXCJ2YWx1ZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBmaWVsZCByZWZlcmVuY2Vcblx0ICovXG5cdHNldFZhbHVlKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogQ29udHJvbCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFRleHQodmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdE51bWJlcj4oXCJzYXAubS5PYmplY3ROdW1iZXJcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXROdW1iZXIodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJzZXRWYWx1ZSBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlIHlldFwiKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFJhdGluZ0luZGljYXRvcj4oXCJzYXAubS5SYXRpbmdJbmRpY2F0b3JcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYWx1ZSh2YWx1ZSBhcyBudW1iZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW1DcUJBLFNBQVMsSUFBQUMsSUFBQSxHQUQ3QkMsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLEVBQUFDLEtBQUEsR0FLakRDLFdBQVcsQ0FBQztJQUNaQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1EQyxRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFF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
@@ -315,6 +315,7 @@ export default class DataPoint extends BuildingBlock<Control> {
315
315
  active={this.hasQuickView}
316
316
  press={FieldRuntimeHelper.pressLink as unknown as (oEvent: ObjectStatus$PressEvent) => void}
317
317
  ariaLabelledBy={this.ariaLabelledBy}
318
+ reactiveAreaMode={this.formatOptions?.reactiveAreaMode}
318
319
  >
319
320
  {{
320
321
  dependents: this.createDependents()