@sapui5/sap.fe.macros 1.138.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -229,14 +229,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
229
229
  /**
230
230
  * This is used to optionally provide an external value that comes from a different model than the OData model.
231
231
  * It is designed to work with a field with value help, and without support for complex value help (currency / unit).
232
- * @experimental
233
232
  * @public
234
233
  */
235
234
  _initializerDefineProperty(_this, "value", _descriptor17, _this);
236
235
  /**
237
236
  * This is used to optionally provide an external description that comes from a different model than the oData model.
238
237
  * This should be used in conjunction with the value property.
239
- * @experimental
240
238
  * @public
241
239
  */
242
240
  _initializerDefineProperty(_this, "description", _descriptor18, _this);
@@ -394,8 +392,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
394
392
  // From this point, we will always send a collaboration message (UNLOCK or CHANGE), so we retain
395
393
  // a potential UNLOCK that would be sent in handleFocusOut, to make sure it's sent after the CHANGE message
396
394
  controller?.collaborativeDraft.retainAsyncMessages(data);
397
- const isDataUpdated = binding.hasPendingChanges();
398
- if (isDataUpdated) {
395
+ const sendCollaborationMessagesAfterPatchCompleted = () => {
399
396
  // The value has been changed by the user --> wait until it's sent to the server before sending a notification to other users
400
397
  binding.attachEventOnce("patchCompleted", function () {
401
398
  controller?.collaborativeDraft.send({
@@ -404,10 +401,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
404
401
  });
405
402
  controller?.collaborativeDraft.releaseAsyncMessages(data);
406
403
  });
404
+ };
405
+ const isDataUpdated = binding.hasPendingChanges();
406
+ if (isDataUpdated) {
407
+ sendCollaborationMessagesAfterPatchCompleted();
407
408
  }
408
409
  const updateCollaboration = () => {
409
410
  if (!isDataUpdated) {
410
- controller?.collaborativeDraft.releaseAsyncMessages(data);
411
+ // We need to check again if the binding has some pending changes, since it may have been updated once the Field value is resolved
412
+ if (binding.hasPendingChanges()) {
413
+ sendCollaborationMessagesAfterPatchCompleted();
414
+ } else {
415
+ controller?.collaborativeDraft.releaseAsyncMessages(data);
416
+ }
411
417
  }
412
418
  };
413
419
  if (source.isA("sap.ui.mdc.Field") || source.isA("sap.ui.mdc.MultiValueField")) {
@@ -448,8 +454,25 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
448
454
  // we ensure it is passed to its inner controls
449
455
  this._setAriaLabelledBy(this.content);
450
456
  };
457
+ _proto.getInnerControl = function getInnerControl(source) {
458
+ if (source?.isA("sap.fe.macros.controls.FieldWrapper") && !source?.isA("sap.fe.macros.controls.FileWrapper")) {
459
+ const fieldWrapper = source;
460
+ const controls = fieldWrapper.getContentEdit();
461
+ let innerControl;
462
+ if (controls.length >= 1) {
463
+ innerControl = controls[0];
464
+ }
465
+ if (innerControl?.isA("sap.m.HBox")) {
466
+ innerControl = innerControl.getItems()[0];
467
+ }
468
+ return innerControl;
469
+ }
470
+ };
451
471
  _proto.onAfterRendering = function onAfterRendering() {
452
- if (this.collaborationEnabled && !this.focusHandlersAttached) {
472
+ const editControl = this.getInnerControl(this.content);
473
+ const notLockControls = ["sap.m.CheckBox"];
474
+ const canLock = !notLockControls.includes(editControl?.getMetadata().getName() ?? "");
475
+ if (this.collaborationEnabled && !this.focusHandlersAttached && canLock) {
453
476
  // The event delegate doesn't work on the Field, we need to put it on its content (FieldWrapper)
454
477
  this.content?.addEventDelegate({
455
478
  onfocusin: evt => {
@@ -477,6 +500,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
477
500
  }
478
501
  }
479
502
 
503
+ /**
504
+ * Method to determine if the field has some Mdc field with pending user input.
505
+ * @returns True if the field has pending user input, false otherwise
506
+ */;
507
+ _proto.hasPendingUserInput = function hasPendingUserInput() {
508
+ const targetControl = Field.getControlInFieldWrapper(this.getContent());
509
+ return !!(targetControl && targetControl.isA("sap.ui.mdc.Field") && targetControl.hasPendingUserInput());
510
+ }
511
+
480
512
  /**
481
513
  * Returns the label controls of the field
482
514
  * when being referenced by the 'labelFor' attribute on the label or when in a form.
@@ -602,60 +634,54 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
602
634
  */;
603
635
  _proto.getEnabled = function getEnabled() {
604
636
  let control = Field.getControlInFieldWrapper(this.content);
605
- if (control !== null && control !== undefined && !control?.isA("sap.m.Text")) {
606
- //check needed for file wrapper which does not have a content
607
- if (this.collaborationEnabled && control.isA("sap.m.HBox")) {
608
- // for chaining reasons, let´s keep it like that
609
- control = control.getItems()[0];
610
- }
611
- if (control.isA("sap.m.VBox")) {
612
- // for chaining reasons, let´s keep it like that
613
- control = control.getItems()[0];
614
- }
637
+ if (control === null || control === undefined || control?.isA("sap.m.Text")) {
638
+ return true;
639
+ }
615
640
 
616
- // we need to call the getProperty in the following examples
617
- // otherwise we end up in a max call stack size
618
- if (control.isA("sap.m.CheckBox")) {
619
- return control.getProperty("enabled");
620
- } else if (control.isA("sap.m.InputBase")) {
621
- return control.getProperty("enabled");
622
- } else if (control.isA("sap.m.Link")) {
623
- return control.getProperty("enabled");
624
- } else if (control.isA("sap.m.Button")) {
625
- return control.getProperty("enabled");
626
- } else if (control.isA("sap.m.ObjectStatus")) {
627
- return true;
628
- } else if (control.isA("sap.m.ObjectIdentifier")) {
629
- return true;
630
- } else if (control.isA("sap.fe.core.controls.FormElementWrapper")) {
631
- // It is for a Draft Indicator
632
- return true;
633
- } else if (control.isA("sap.fe.macros.internal.DataPoint")) {
634
- return control.getEnabled();
635
- } else if (control.isA("sap.fe.macros.contact.Email")) {
636
- return control.getProperty("linkEnabled");
637
- } else if (control.isA("sap.fe.macros.contact.Contact")) {
638
- return control.getEnabled();
639
- } else if (control.isA("sap.m.ExpandableText")) {
640
- // otherwise show more would be inactive
641
- return true;
642
- } else if (control.isA("sap.ui.mdc.Field")) {
643
- const editMode = control.getEditMode();
644
- // The mdc field does not have a direct property "enabled", therefore we map
645
- // the internal disabled setting of the edit mode in this graceful pattern
646
- return editMode !== FieldEditMode.Disabled;
647
- } else if (control.isA("sap.fe.macros.controls.FileWrapper")) {
648
- // The file wrapper could contain a link or an avatar with a delete button,
649
- // we must ensure the enablement in both cases
650
- return control.link ? control.link.getProperty("enabled") : true;
651
- } else if (control.isA("sap.fe.macros.controls.ConditionalWrapper") || control.isA("sap.fe.macros.controls.TextLink")) {
652
- return true;
653
- } else {
654
- return false;
655
- }
656
- } else {
641
+ // Handle collaboration-enabled HBox
642
+ if (this.collaborationEnabled && control.isA("sap.m.HBox")) {
643
+ control = control.getItems()[0];
644
+ }
645
+
646
+ // Handle VBox wrapper
647
+ if (control.isA("sap.m.VBox")) {
648
+ control = control.getItems()[0];
649
+ }
650
+
651
+ // Handle property-based controls that use "enabled" property
652
+ if (control.isA("sap.m.CheckBox") || control.isA("sap.m.InputBase") || control.isA("sap.m.Link") || control.isA("sap.m.Button")) {
653
+ return control.getProperty("enabled");
654
+ }
655
+
656
+ // Handle controls that are always enabled
657
+ if (control.isA("sap.m.ObjectStatus") || control.isA("sap.m.ObjectIdentifier") || control.isA("sap.fe.core.controls.FormElementWrapper") || control.isA("sap.m.ExpandableText") || control.isA("sap.fe.macros.controls.ConditionalWrapper") || control.isA("sap.fe.macros.controls.TextLink")) {
657
658
  return true;
658
659
  }
660
+
661
+ // Handle special property cases
662
+ if (control.isA("sap.fe.macros.internal.DataPoint") || control.isA("sap.fe.macros.contact.Contact")) {
663
+ return control.getEnabled();
664
+ }
665
+ if (control.isA("sap.fe.macros.contact.Email")) {
666
+ return control.getProperty("linkEnabled");
667
+ }
668
+
669
+ // Handle MDC Field special case
670
+ if (control.isA("sap.ui.mdc.Field")) {
671
+ const editMode = control.getEditMode();
672
+ return editMode !== FieldEditMode.Disabled;
673
+ }
674
+
675
+ // Handle FileWrapper special case
676
+ if (control.isA("sap.fe.macros.controls.FileWrapper")) {
677
+ return control.link ? control.link.getProperty("enabled") : true;
678
+ }
679
+
680
+ // Handle HBox with SituationsIndicator at item[1]
681
+ if (control.isA?.("sap.m.HBox") && control.getItems()[1]?.isA("sap.fe.macros.situations.SituationsIndicator")) {
682
+ return true;
683
+ }
684
+ return false;
659
685
  }
660
686
 
661
687
  /**
@@ -824,6 +850,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
824
850
  preparedProperties.isDynamicInstantiation = true;
825
851
  if (preparedProperties.mainPropertyRelativePath) this.mainPropertyRelativePath = preparedProperties.mainPropertyRelativePath;
826
852
  if (preparedProperties.collaborationEnabled) this.collaborationEnabled = preparedProperties.collaborationEnabled;
853
+ if (preparedProperties.displayStyle === "File") preparedProperties.fileUploaderVisible = !this.readOnly && preparedProperties.editableExpression;
827
854
  return preparedProperties;
828
855
  }
829
856
 
@@ -1151,4 +1178,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
1151
1178
  }), _applyDecoratedDescriptor(_class2.prototype, "handleChange", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "handleChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleLiveChange", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "handleLiveChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onValidateFieldGroup", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "onValidateFieldGroup"), _class2.prototype), _class2)) || _class) || _class);
1152
1179
  return Field;
1153
1180
  }, false);
1154
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMiIsIl9kZWMzMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY29tYmluZWRQcm9wcyIsImlkIiwiX2ZsZXhJZCIsInZoSWRQcmVmaXgiLCJpZFByZWZpeCIsIl9hcGlJZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGUiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJmb2N1c0hhbmRsZXJzQXR0YWNoZWQiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJpc0RhdGFVcGRhdGVkIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJhdHRhY2hFdmVudE9uY2UiLCJzZW5kIiwiYWN0aW9uIiwiQWN0aXZpdHkiLCJDaGFuZ2UiLCJjb250ZW50IiwicmVsZWFzZUFzeW5jTWVzc2FnZXMiLCJ1cGRhdGVDb2xsYWJvcmF0aW9uIiwiaGFuZGxlTGl2ZUNoYW5nZSIsIl9ldmVudCIsIm9uVmFsaWRhdGVGaWVsZEdyb3VwIiwic291cmNlRmllbGQiLCJ2aWV3IiwiZ2V0Q29udHJvbGxlciIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfc2V0QXJpYUxhYmVsbGVkQnkiLCJvQ29udGVudCIsImFkZEFyaWFMYWJlbGxlZEJ5IiwiYUFyaWFMYWJlbGxlZEJ5IiwiYXJpYUxhYmVsbGVkQnkiLCJzSWQiLCJhQXJpYUxhYmVsbGVkQnlzIiwiZ2V0QXJpYUxhYmVsbGVkQnkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmZvY3VzaW4iLCJldnQiLCJoYW5kbGVDb250ZW50Rm9jdXNJbiIsImdldENvbnRyb2xJbkZpZWxkV3JhcHBlciIsImNvbnRyb2wiLCJmaWVsZFdyYXBwZXIiLCJjb250cm9scyIsImdldEVkaXRNb2RlIiwiZ2V0Q29udGVudERpc3BsYXkiLCJnZXRDb250ZW50RWRpdCIsImxlbmd0aCIsImdldExhYmVsQ29udHJvbHMiLCJyZWZlcmVuY2luZ0xhYmVscyIsIl9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMiLCJfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcyIsImxhYmVsSWRzIiwiTGFiZWxFbmFibGVtZW50IiwiZ2V0UmVmZXJlbmNpbmdMYWJlbHMiLCJsYWJlbENvbnRyb2xzIiwiZ2V0VmlldyIsImZvckVhY2giLCJsYWJlbElkIiwibGFiZWxDb250cm9sIiwiYnlJZCIsInB1c2giLCJnZXRJZCIsImdldFBhcmVudCIsImdldExhYmVsQ29udHJvbCIsIm9Db250cm9sIiwiZ2V0SXRlbXMiLCJnZXRTZWxlY3RlZCIsImdldFRleHQiLCJnZXRUaXRsZSIsIkVycm9yIiwiZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIiwibWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIiwic2V0VmFsdWUiLCJzZXRTZWxlY3RlZCIsInNldFRleHQiLCJnZXRFbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNhYmxlZCIsImxpbmsiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsImVkaXRNb2RlVHlwZSIsIkVkaXRhYmxlIiwic2V0RWRpdE1vZGUiLCJzZXRMaW5rRW5hYmxlZCIsImFkZE1lc3NhZ2UiLCJwYXJhbWV0ZXJzIiwibXNnTWFuYWdlciIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0UmVzb2x2ZWRQYXRoIiwib01lc3NhZ2UiLCJNZXNzYWdlIiwidGFyZ2V0IiwibWVzc2FnZSIsInByb2Nlc3NvciIsImRlc2NyaXB0aW9uIiwicGVyc2lzdGVudCIsImFkZE1lc3NhZ2VzIiwicmVtb3ZlTWVzc2FnZSIsImFyciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJyZXN1bHQiLCJmaW5kIiwiZSIsInJlbW92ZU1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsInByZXBhcmVkUHJvcGVydGllcyIsInByZXBhcmVQcm9wZXJ0aWVzIiwiY3JlYXRlQ29udGVudCIsIm1ldGFDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoT2JqZWN0IiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsIm93bmVyIiwiX2dldE93bmVyIiwiaW5wdXRGaWVsZFByb3BlcnRpZXMiLCJnZXRQcm9wZXJ0eUJhZyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwicmVhZE9ubHkiLCJiaW5kU3RhdGUiLCJzZW1hbnRpY09iamVjdCIsImNvbXBpbGVFeHByZXNzaW9uIiwib25MaXZlQ2hhbmdlIiwiaGFzTGlzdGVuZXJzIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsIm9kYXRhTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29tcHV0ZWRDb250ZXh0UGF0aCIsImdldE1ldGFDb250ZXh0IiwiZ2V0Q29tcHV0ZWRDb250ZXh0UGF0aCIsImNvbXB1dGVkTWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzUHJvcGVydHlJbml0aWFsIiwidmlzaWJsZSIsInNldFVwRmllbGQiLCJtb2RlbHMiLCJ2aWV3RGF0YSIsIkpTT05Nb2RlbCIsImdldFZpZXdEYXRhIiwiaW50ZXJuYWwiLCJnZXRBcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJzZXRPckJpbmRQcm9wZXJ0eSIsImlubGluZUVkaXRFbmFibGVkIiwiaGFzSW5saW5lRWRpdCIsImlzRHluYW1pY0luc3RhbnRpYXRpb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJjb21wdXRlZEVkaXRNb2RlIiwiZXZlbnRIYW5kbGVycyIsImNoYW5nZSIsImxpdmVDaGFuZ2UiLCJ2YWxpZGF0ZUZpZWxkR3JvdXAiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwib25IYW5kbGVUeXBlTWlzc21hdGNoIiwiYmluZCIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwib25IYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwiZXYiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwidXBsb2FkU3RyZWFtIiwib25VcGxvYWRTdHJlYW0iLCJyZW1vdmVTdHJlYW0iLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJvbkhhbmRsZU9wZW5VcGxvYWRlciIsImhhbmRsZUNsb3NlVXBsb2FkZXIiLCJvbkhhbmRsZUNsb3NlVXBsb2FkZXIiLCJvcGVuRXh0ZXJuYWxMaW5rIiwib25PcGVuRXh0ZXJuYWxMaW5rIiwib25Gb2N1c091dCIsImxpbmtQcmVzc2VkIiwib25MaW5rUHJlc3NlZCIsIm9uRGF0YUZpZWxkV2l0aElCTiIsIm9EYXRhRmllbGQiLCJnZXRPYmplY3QiLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiIsIm9UaGlzIiwic0ludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsIiRFbnVtTWVtYmVyIiwiYklzTmF2aWdhYmxlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImVudGl0aWVzIiwic3BsaXQiLCJlbnRpdHlTZXROYW1lIiwib1BhcmFtcyIsImNvbnRleHRzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiaW52b2tlQWN0aW9uIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsIkZpZWxkUnVudGltZSIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRNZXRhUGF0aCIsIiRUeXBlIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJUYXJnZXQiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwidmFsdWVIZWxwSWQiLCJGaWVsZFN0cnVjdHVyZSIsImdldFBvc3NpYmxlVmFsdWVIZWxwVGVtcGxhdGVJZCIsImdldEZpZWxkU3RydWN0dXJlVGVtcGxhdGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicHJlc3NMaW5rIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0Iiwic2V0dGluZ3MiLCJwcm9wZXJ0aWVzIiwiZ2V0TWV0YWRhdGEiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiYWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwicHJvcGVydHlOYW1lIiwiY3VycmVudFByb3BlcnR5VmFsdWUiLCJhZ2dyZWdhdGlvbk5hbWUiLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkcmVuQXJyYXkiLCJtYW5hZ2VkT2JqZWN0IiwibUJpbmRpbmdJbmZvcyIsImdldElubGluZUVkaXRQcm9wZXJ0eSIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwidGFyZ2V0UHJvcGVydHkiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJ0YXJnZXRPYmplY3QiLCJnZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiTWFjcm9BUEkiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBtaXhpbiwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBYTUxQcmVwcm9jZXNzb3JDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHR5cGUgRm9ybUVsZW1lbnRXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Gb3JtRWxlbWVudFdyYXBwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRhY3QgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udGFjdC9Db250YWN0XCI7XG5pbXBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHkgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBUZXh0TGluayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9UZXh0TGlua1wiO1xuaW1wb3J0IEZpZWxkUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVcIjtcbmltcG9ydCB7IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgRGF0YVBvaW50IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL0RhdGFQb2ludFwiO1xuaW1wb3J0ICogYXMgRmllbGRTdHJ1Y3R1cmUgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMsIElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHsgc2V0VXBGaWVsZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBBdmF0YXIgZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBDaGVja0JveCBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tCb3gkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIEV4cGFuZGFibGVUZXh0IGZyb20gXCJzYXAvbS9FeHBhbmRhYmxlVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRCYXNlJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIE9iamVjdElkZW50aWZpZXIgZnJvbSBcInNhcC9tL09iamVjdElkZW50aWZpZXJcIjtcbmltcG9ydCB0eXBlIE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgdHlwZSBSYXRpbmdJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMYWJlbEVuYWJsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0xhYmVsRW5hYmxlbWVudFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZCRDaGFuZ2VFdmVudCwgZGVmYXVsdCBhcyBtZGNGaWVsZCB9IGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIFY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRW1haWwgZnJvbSBcIi4vY29udGFjdC9FbWFpbFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4vZmllbGQvRmllbGRSdW50aW1lSGVscGVyXCI7XG5pbXBvcnQgSW5saW5lRWRpdCBmcm9tIFwiLi9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcblxudHlwZSBDb250cm9sV2l0aEFjY2Vzc2liaWxpdHkgPSBDb250cm9sICYgeyBhZGRBcmlhTGFiZWxsZWRCeT86IChpZDogc3RyaW5nKSA9PiB2b2lkOyBnZXRBcmlhTGFiZWxsZWRCeTogKCkgPT4gc3RyaW5nW10gfTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBmaWVsZCBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBmaWVsZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIFdoZW4gY3JlYXRpbmcgYSBGaWVsZCBidWlsZGluZyBibG9jaywgeW91IG11c3QgcHJvdmlkZSBhbiBJRCB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWVsZCBpZD1cIk15RmllbGRcIiBtZXRhUGF0aD1cIk15UHJvcGVydHlcIiAvJmd0O1xuICogPC9wcmU+XG4gKiA8YSBocmVmPVwiL3NhcHVpNS1zZGstaW50ZXJuYWwvdGVzdC1yZXNvdXJjZXMvc2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvYnVpbGRpbmdCbG9ja092ZXJ2aWV3XCIgdGFyZ2V0PVwiX2JsYW5rXCIgPk92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrczwvYT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpZWxkXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwge1xuXHRyZXR1cm5UeXBlczogW1xuXHRcdFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIgLyosIG5vdCBzdXJlIGkgd2FudCB0byBhZGQgdGhvc2UgeWV0IFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiLCBcInNhcC5tLkhCb3hcIiwgXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiLCBcInNhcC5tLkJ1dHRvblwiKi9cblx0XVxufSlcbkBtaXhpbihJbmxpbmVFZGl0KVxuY2xhc3MgRmllbGQgZXh0ZW5kcyBNYWNyb0FQSTx7IHJlYWRPbmx5OiBib29sZWFuOyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH0+IHtcblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGVkaXRhYmxlIHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYWdlIGlzIGN1cnJlbnRseSBlZGl0YWJsZS5cblx0ICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90IHNldCBhIGZpZWxkIHRvIGVkaXRhYmxlIGlmIGl0IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYXMgbm90IGVkaXRhYmxlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRhYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgYmluZFRvU3RhdGU6IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHJlYWRPbmx5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiUHJvcGVydHlcIl1cblx0fSlcblx0cHVibGljIHJlYWRvbmx5IG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBXcmFwIGZpZWxkXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSB3cmFwPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0Y2hhbmdlITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpZWxkIGdldCB0aGUgZm9jdXMuXG5cdCAqXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmb2N1c2luITogRXZlbnRIYW5kbGVyO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBjb250YWluaW5nIGRldGFpbHMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpcyBsaXZlIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2UhOiBFdmVudEhhbmRsZXI7XG5cblx0QGFzc29jaWF0aW9uKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBpZFByZWZpeD86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIHZoSWRQcmVmaXghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFjdGlvbiB3aWxsIG5hdmlnYXRlIGFmdGVyIGV4ZWN1dGlvblxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF2aWdhdGVBZnRlckFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkRm9ybWF0T3B0aW9uc1wiIH0pXG5cdHB1YmxpYyByZWFkb25seSBmb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgX2ZsZXhJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogRWRpdCBNb2RlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogSWYgdGhlIGVkaXRNb2RlIGlzIHVuZGVmaW5lZCB0aGVuIHdlIGNvbXB1dGUgaXQgYmFzZWQgb24gdGhlIG1ldGFkYXRhXG5cdCAqIE90aGVyd2lzZSB3ZSB1c2UgdGhlIHZhbHVlIHByb3ZpZGVkIGhlcmUuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1kYy5lbnVtcy5GaWVsZEVkaXRNb2RlXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGVkaXRNb2RlPzogRmllbGRFZGl0TW9kZSB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBPcHRpb24gdG8gYWRkIHNlbWFudGljIG9iamVjdHMgZm9yIGEgZmllbGQuXG5cdCAqIFRoaXMgcGFyYW1ldGVyIG92ZXJ3cml0ZXMgdGhlIHNlbWFudGljIG9iamVjdHMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zLlxuXHQgKiBWYWxpZCBvcHRpb25zIGFyZSBlaXRoZXIgYSBzaW5nbGUgc2VtYW50aWMgb2JqZWN0LCBhIHN0cmluZ2lmaWVkIGFycmF5IG9mIHNlbWFudGljIG9iamVjdHMsXG5cdCAqIGEgZm9ybWF0dGVyIG9yIGEgc2luZ2xlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXR1cm5pbmcgZWl0aGVyIGEgc2luZ2xlIHNlbWFudGljIG9iamVjdCBvciBhbiBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3RzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBiaW5kVG9TdGF0ZTogdHJ1ZSB9KVxuXHRwdWJsaWMgcmVhZG9ubHkgc2VtYW50aWNPYmplY3QhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZXh0ZXJuYWwgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IG1vZGVsIHRoYW4gdGhlIE9EYXRhIG1vZGVsLlxuXHQgKiBJdCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggYSBmaWVsZCB3aXRoIHZhbHVlIGhlbHAsIGFuZCB3aXRob3V0IHN1cHBvcnQgZm9yIGNvbXBsZXggdmFsdWUgaGVscCAoY3VycmVuY3kgLyB1bml0KS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIGRlc2NyaXB0aW9uIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBvRGF0YSBtb2RlbC5cblx0ICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZSBwcm9wZXJ0eS5cblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5UZXh0QWxpZ25cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dEFsaWduPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNob3dFcnJvck9iamVjdFN0YXR1cz86IG9iamVjdCB8IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29sbGFib3JhdGlvbkVuYWJsZWQ/OiBib29sZWFuOyAvLyBOZWVkIHRvIGJlIGNvbXB1dGVkIG9uIGRlbWFuZFxuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aD86IHN0cmluZzsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdGN1c3RvbVZhbHVlQmluZGluZz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGlubGluZUVkaXRFbmFibGVkPyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc0lubGluZUVkaXQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgZm9jdXNIYW5kbGVyc0F0dGFjaGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjb21wdXRlZE1ldGFQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbXB1dGVkQ29udGV4dFBhdGg/OiBDb250ZXh0O1xuXG5cdHByaXZhdGUgb2RhdGFNZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdF9hcGlJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaGVscCByZXF1aXJlcyB2YWxpZGF0aW9uIG9yIG5vdC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9yZXF1aXJlc1ZhbGlkYXRpb24/OiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmVwcm9jZXNzb3JDb250ZXh0ITogWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyB1c2VkIGZvciBjb2xsYWJvcmF0aW9uIG5vdGlmaWNhdGlvbnMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZ1xuXHQgKi9cblx0Z2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoZmllbGQ6IENvbnRyb2wpOiBPRGF0YUxpc3RCaW5kaW5nIHwgT0RhdGFDb250ZXh0QmluZGluZyB7XG5cdFx0bGV0IGJpbmRpbmcgPSAoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQpLmdldEJpbmRpbmcoKTtcblxuXHRcdGlmICghYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBkYXRhIGZyb20gYSBjaGFuZ2UgZXZlbnQgZm9yIHVzYWdlIGluIHRoZSBoYW5kbGVDaGFuZ2UgbWV0aG9kLlxuXHQgKiBAcGFyYW0gY2hhbmdlRXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZGV0YWlsc1xuXHQgKi9cblx0cHJpdmF0ZSBleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHtcblx0XHRzb3VyY2U6IG1kY0ZpZWxkO1xuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRcdGlzVHJhbnNpZW50OiBib29sZWFuO1xuXHRcdHZhbHVlUmVzb2x2ZWQ6IFByb21pc2U8dm9pZD47XG5cdFx0dmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbjtcblx0XHRjdXN0b21WYWx1ZUJpbmRpbmc6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvIHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBzb3VyY2UgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdC8vIElmIHRoZSBmaWVsZCBpcyBib3VuZCB0byBhIEpTT04gbW9kZWwsIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIHJldHVybnMgdW5kZWZpbmVkLlxuXHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIGNhbm5vdCBjYWxsIGlzVHJhbnNpZW50IG9uIGl0LiBEZWZhdWx0aW5nIHRvIGZhbHNlLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpZW50ID0gYmluZGluZ0NvbnRleHQgPyAoYmluZGluZ0NvbnRleHQgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpIDogZmFsc2U7XG5cdFx0Y29uc3QgdmFsdWVSZXNvbHZlZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0Y29uc3QgdmFsaWQgPSBjaGFuZ2VFdmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKTtcblx0XHRjb25zdCBmaWVsZFZhbGlkaXR5ID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShjaGFuZ2VFdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0XHRjb25zdCBjdXN0b21WYWx1ZUJpbmRpbmcgPSB0aGlzPy5jdXN0b21WYWx1ZUJpbmRpbmc7XG5cblx0XHRyZXR1cm4geyBzb3VyY2UsIGNvbnRyb2xsZXIsIGlzVHJhbnNpZW50LCB2YWx1ZVJlc29sdmVkLCB2YWxpZCwgZmllbGRWYWxpZGl0eSwgY3VzdG9tVmFsdWVCaW5kaW5nIH07XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlQ2hhbmdlKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHsgc291cmNlLCBjb250cm9sbGVyLCBpc1RyYW5zaWVudCwgdmFsdWVSZXNvbHZlZCwgdmFsaWQsIGZpZWxkVmFsaWRpdHksIGN1c3RvbVZhbHVlQmluZGluZyB9ID1cblx0XHRcdHRoaXMuZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhjaGFuZ2VFdmVudCk7XG5cblx0XHRpZiAoY3VzdG9tVmFsdWVCaW5kaW5nKSB7XG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cdFx0XHRjb25zdCB2YWx1ZU1vZGVsID0gc291cmNlPy5nZXRNb2RlbChjdXN0b21WYWx1ZUJpbmRpbmcubW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgQ2hlY2tCb3gkU2VsZWN0RXZlbnQpLmdldFBhcmFtZXRlcihcInNlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgSW5wdXRCYXNlJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlTW9kZWw/LnNldFByb3BlcnR5KGN1c3RvbVZhbHVlQmluZGluZy5wYXRoLCBuZXdWYWx1ZSk7XG5cdFx0XHR2YWx1ZU1vZGVsPy51cGRhdGVCaW5kaW5ncyh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIEZFIENvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgZXh0ZW5zaW9uQVBJIHRvIGFjY2VzcyBpbnRlcm5hbCBGRSBjb250cm9sbGVyc1xuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgPyBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEN1cnJlbnRseSB3ZSBoYXZlIHVuZGVmaW5lZCBhbmQgdHJ1ZS4uLiBhbmQgb3VyIGNyZWF0aW9uIHJvdyBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhpcy5cblx0XHQvLyBJIHdvdWxkIG1vdmUgdGhpcyBsb2dpYyB0byB0aGlzIHBsYWNlIGFzIGl0J3MgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBmaWVsZCBjb25zdW1lclxuXHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gVGhlIGV2ZW50IGlzIGdvbmUuIEZvciBub3cgd2UnbGwganVzdCByZWNyZWF0ZSBpdCBhZ2FpblxuXHRcdFx0XHQoY2hhbmdlRXZlbnQgYXMgeyBvU291cmNlPzogbWRjRmllbGQgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IG1kY0ZpZWxkIH0pLm9Tb3VyY2UgPSBzb3VyY2U7XG5cdFx0XHRcdChjaGFuZ2VFdmVudCBhcyB7IG1QYXJhbWV0ZXJzPzogeyB2YWxpZD86IGJvb2xlYW4gfSB9KS5tUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHR2YWxpZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0TG9nLmRlYnVnKFwiUHJlcmVxdWlzaXRlcyBvbiBGaWVsZCBmb3IgdGhlIFNpZGVFZmZlY3RzIGFuZCBSZWNvbW1lbmRhdGlvbnMgaGF2ZSBiZWVuIHJlamVjdGVkXCIpO1xuXHRcdFx0XHQvLyBhcyB0aGUgVUkgbWlnaHQgbmVlZCB0byByZWFjdCBvbi4gV2UgY291bGQgcHJvdmlkZSBhIHBhcmFtZXRlciB0byBpbmZvcm0gaWYgdmFsaWRhdGlvblxuXHRcdFx0XHQvLyB3YXMgc3VjY2Vzc2Z1bD9cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgeyB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLCBpc1ZhbGlkOiB2YWxpZCA/PyBmYWxzZSB9KTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gRm9yIHRoZSBFZGl0RmxvdyBzeW5jaHJvbml6YXRpb24sIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgUEFUQ0ggcmVxdWVzdCB0byBiZSBzZW50IChvciBhbiBlcnJvciB0byBiZSBkZXRlY3RlZCksIG90aGVyd2lzZSB0aGVyZSBjb3VsZCBiZSBlLmcuIGFjdGlvbiBvciBzYXZlIGludm9rZWQgaW4gcGFyYWxsZWwgd2l0aCB0aGUgUEFUQ0ggcmVxdWVzdC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgd2l0aCBhIDAtdGltZW91dCwgdG8gYWxsb3cgZm9yIHRoZSAncGF0Y2hTZW50JyBldmVudCB0byBiZSBzZW50IGJ5IHRoZSBiaW5kaW5nICh0aGVuIHRoZSBpbnRlcm5hbCBlZGl0IGZsb3cgc3luY2hyb25pemF0aW9uIGtpY2tzIGluIHdpdGggRWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50KS5cblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50ID0gdmFsdWVSZXNvbHZlZFxuXHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGZlQ29udHJvbGxlcj8uZWRpdEZsb3cuc3luY1Rhc2sodmFsdWVSZXNvbHZlZEFuZFBhdGNoU2VudCk7XG5cblx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQsIGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdvdWxkIGZhaWwgYW55d2F5IGFzIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QgaW4gcmVhbGl0eVxuXHRcdC8vIFNob3VsZCB0aGUgcmVxdWVzdCBiZSBtYWRlIGluIGZ1dHVyZSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQ/XG5cdFx0aWYgKGlzVHJhbnNpZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChjaGFuZ2VFdmVudCwgISFmaWVsZFZhbGlkaXR5LCB2YWx1ZVJlc29sdmVkKTtcblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblxuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoc291cmNlKTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtcblx0XHRcdFx0Li4uKChzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSB8fCBzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJzZWxlY3RlZFwiKSk/LnBhcnRzIHx8IFtdKSxcblx0XHRcdFx0Li4uKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8ucGFydHMgfHwgW10pXG5cdFx0XHRdXG5cdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcGFydD8ucGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhcnQucGF0aC5pbmRleE9mKFwiQEBcIikgPCAwOyAvLyBSZW1vdmUgYmluZGluZyBwYXJ0cyB3aXRoIEBAIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IgY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uIChwYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7cGFydC5wYXRofWA7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGcm9tIHRoaXMgcG9pbnQsIHdlIHdpbGwgYWx3YXlzIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgKFVOTE9DSyBvciBDSEFOR0UpLCBzbyB3ZSByZXRhaW5cblx0XHRcdC8vIGEgcG90ZW50aWFsIFVOTE9DSyB0aGF0IHdvdWxkIGJlIHNlbnQgaW4gaGFuZGxlRm9jdXNPdXQsIHRvIG1ha2Ugc3VyZSBpdCdzIHNlbnQgYWZ0ZXIgdGhlIENIQU5HRSBtZXNzYWdlXG5cdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmV0YWluQXN5bmNNZXNzYWdlcyhkYXRhKTtcblxuXHRcdFx0Y29uc3QgaXNEYXRhVXBkYXRlZCA9IGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKTtcblx0XHRcdGlmIChpc0RhdGFVcGRhdGVkKSB7XG5cdFx0XHRcdC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIC0tPiB3YWl0IHVudGlsIGl0J3Mgc2VudCB0byB0aGUgc2VydmVyIGJlZm9yZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzXG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdXBkYXRlQ29sbGFib3JhdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCFpc0RhdGFVcGRhdGVkKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHNvdXJjZS5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpIHx8IChzb3VyY2UgYXMgQ29udHJvbCkuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0dmFsdWVSZXNvbHZlZFxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdHVwZGF0ZUNvbGxhYm9yYXRpb24oKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZUxpdmVDaGFuZ2UoX2V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblZhbGlkYXRlRmllbGRHcm91cChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2VGaWVsZCA9IF9ldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNvdXJjZUZpZWxkKSxcblx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKGNvbnRyb2xsZXIpO1xuXHRcdGZlQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShfZXZlbnQpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IocHJvcHM/OiBQcm9wZXJ0aWVzT2Y8RmllbGQsIFwiY2hhbmdlXCIgfCBcImxpdmVDaGFuZ2VcIiB8IFwiZm9jdXNpblwiPiwgb3RoZXJzPzogUHJvcGVydGllc09mPEZpZWxkPikge1xuXHRcdGxldCBjb21iaW5lZFByb3BzO1xuXG5cdFx0aWYgKHByb3BzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHByb3BzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMgPSB7IC4uLm90aGVycywgaWQ6IHByb3BzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMgPSB7IC4uLnByb3BzLCAuLi5vdGhlcnMgfSBhcyBQcm9wZXJ0aWVzT2Y8RmllbGQ+O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB7IF9mbGV4SWQsIHZoSWRQcmVmaXgsIGlkUHJlZml4LCBpZCwgX2FwaUlkIH0gPSBjb21iaW5lZFByb3BzO1xuXG5cdFx0XHRpZiAoX2ZsZXhJZCAmJiAhX2ZsZXhJZC5pbmNsdWRlcyhcIi1jb250ZW50XCIpKSB7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2FwaUlkID0gX2ZsZXhJZDtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5fZmxleElkID0gYCR7X2ZsZXhJZH0tY29udGVudGA7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdmhJZFByZWZpeCkge1xuXHRcdFx0XHQvL25vIHZoSWRQcmVmaXggbWVhbnMgXCJwdWJsaWMgdXNlIGNhc2VcIlxuXHRcdFx0XHRjb21iaW5lZFByb3BzLnZoSWRQcmVmaXggPSBcIkZpZWxkVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2ZsZXhJZCA9IGlkO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLmlkUHJlZml4ID0gaWRQcmVmaXggfHwgaWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlkKSB7XG5cdFx0XHRcdGlmIChjb21iaW5lZFByb3BzLl9hcGlJZCkge1xuXHRcdFx0XHRcdGNvbWJpbmVkUHJvcHMuaWQgPSBjb21iaW5lZFByb3BzLl9hcGlJZDtcblx0XHRcdFx0fSBlbHNlIGlmIChpZFByZWZpeCkge1xuXHRcdFx0XHRcdGNvbWJpbmVkUHJvcHMuaWQgPSBnZW5lcmF0ZShbaWRQcmVmaXgsIFwiRmllbGRcIl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHN1cGVyKGNvbWJpbmVkUHJvcHMpO1xuXHR9XG5cblx0X3NldEFyaWFMYWJlbGxlZEJ5KG9Db250ZW50PzogQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmFkZEFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRjb25zdCBhQXJpYUxhYmVsbGVkQnkgPSB0aGlzLmFyaWFMYWJlbGxlZEJ5O1xuXG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBhQXJpYUxhYmVsbGVkQnkpIHtcblx0XHRcdFx0Y29uc3QgYUFyaWFMYWJlbGxlZEJ5cyA9IG9Db250ZW50LmdldEFyaWFMYWJlbGxlZEJ5KCkgfHwgW107XG5cdFx0XHRcdGlmICghYUFyaWFMYWJlbGxlZEJ5cy5pbmNsdWRlcyhzSWQpKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuYWRkQXJpYUxhYmVsbGVkQnkoc0lkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdC8vIGJlZm9yZSBjYWxsaW5nIHRoZSByZW5kZXJlciBvZiB0aGUgRmllbGQgcGFyZW50IGNvbnRyb2wgbWF5IGhhdmUgc2V0IGFyaWFMYWJlbGxlZEJ5XG5cdFx0Ly8gd2UgZW5zdXJlIGl0IGlzIHBhc3NlZCB0byBpdHMgaW5uZXIgY29udHJvbHNcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBDb250cm9sV2l0aEFjY2Vzc2liaWxpdHkpO1xuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiAhdGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQpIHtcblx0XHRcdC8vIFRoZSBldmVudCBkZWxlZ2F0ZSBkb2Vzbid0IHdvcmsgb24gdGhlIEZpZWxkLCB3ZSBuZWVkIHRvIHB1dCBpdCBvbiBpdHMgY29udGVudCAoRmllbGRXcmFwcGVyKVxuXHRcdFx0dGhpcy5jb250ZW50Py5hZGRFdmVudERlbGVnYXRlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b25mb2N1c2luOiAoZXZ0OiBGb2N1c0V2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0LmhhbmRsZUNvbnRlbnRGb2N1c0luKHRoaXMsIGV2dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmZvY3VzSGFuZGxlcnNBdHRhY2hlZCA9IHRydWU7IC8vIFRvIGF2b2lkIGF0dGFjaGluZyBldmVudHMgdHdpY2Vcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZmlyc3QgdmlzaWJsZSBjb250cm9sIGluIHRoZSBGaWVsZFdyYXBwZXIuXG5cdCAqIEBwYXJhbSBjb250cm9sIEZpZWxkV3JhcHBlclxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgdmlzaWJsZSBjb250cm9sXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWVsZFdyYXBwZXJcIikgJiYgIWNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPjtcblx0XHRcdGNvbnN0IGNvbnRyb2xzID0gZmllbGRXcmFwcGVyLmdldEVkaXRNb2RlKCkgPT09IFwiRGlzcGxheVwiID8gW2ZpZWxkV3JhcHBlci5nZXRDb250ZW50RGlzcGxheSgpXSA6IGZpZWxkV3JhcHBlci5nZXRDb250ZW50RWRpdCgpO1xuXHRcdFx0aWYgKGNvbnRyb2xzLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sc1swXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxhYmVsIGNvbnRyb2xzIG9mIHRoZSBmaWVsZFxuXHQgKiB3aGVuIGJlaW5nIHJlZmVyZW5jZWQgYnkgdGhlICdsYWJlbEZvcicgYXR0cmlidXRlIG9uIHRoZSBsYWJlbCBvciB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRMYWJlbENvbnRyb2xzKCk6IExhYmVsW10ge1xuXHRcdGNvbnN0IHJlZmVyZW5jaW5nTGFiZWxzID0gdGhpcy5fZ2V0TGFiZWxzRnJvbVJlZmVyZW5jaW5nTGFiZWxzKCk7XG5cdFx0cmV0dXJuIHJlZmVyZW5jaW5nTGFiZWxzLmxlbmd0aCA+IDAgPyByZWZlcmVuY2luZ0xhYmVscyA6IHRoaXMuX2dldExhYmVsc0ZvckZvcm1GaWVsZHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGQgd2hlbiByZWZlcmVuY2VkIGJ5IGEgbGFiZWwuXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0X2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCBsYWJlbElkcyA9IExhYmVsRW5hYmxlbWVudC5nZXRSZWZlcmVuY2luZ0xhYmVscyh0aGlzKTtcblx0XHRjb25zdCBsYWJlbENvbnRyb2xzOiBMYWJlbFtdID0gW107XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCk7XG5cdFx0bGFiZWxJZHMuZm9yRWFjaCgobGFiZWxJZCkgPT4ge1xuXHRcdFx0Y29uc3QgbGFiZWxDb250cm9sID0gdmlldy5ieUlkKGxhYmVsSWQpO1xuXHRcdFx0aWYgKGxhYmVsQ29udHJvbCkge1xuXHRcdFx0XHRsYWJlbENvbnRyb2xzLnB1c2gobGFiZWxDb250cm9sIGFzIExhYmVsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbGFiZWxDb250cm9scztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGQgb3IgY29ubmVjdGVkIGZpZWxkIHdoZW4gaW4gYSBmb3JtLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk6IExhYmVsW10ge1xuXHRcdC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgaW4gYSBmb3JtLCB3ZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCF0aGlzLmdldElkKCkuaW5jbHVkZXMoXCJGb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgY29udHJvbCA9IHRoaXMgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0Ly8gc2VhcmNoIHRoZSBwYXJlbnRzIG9mIHRoZSBjb250cm9sIHVudGlsIHdlIGZpbmQgYSBzYXAudWkubGF5b3V0LmZvcm0uRm9ybUVsZW1lbnRcblx0XHQvLyBvciB3ZSByZWFjaCB0aGUgcm9vdCBjb250cm9sXG5cdFx0d2hpbGUgKGNvbnRyb2wgJiYgIWNvbnRyb2wuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XCIpKSB7XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgTWFuYWdlZE9iamVjdCk/LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udHJvbCA/IFsoY29udHJvbCBhcyBGb3JtRWxlbWVudCkuZ2V0TGFiZWxDb250cm9sKCkgYXMgTGFiZWxdIDogW107XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGRcblx0ICovXG5cdGdldFZhbHVlKCk6IGJvb2xlYW4gfCBzdHJpbmcgfCBmbG9hdCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Db250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuY29udGVudCk7XG5cdFx0aWYgKCFvQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgb0NvbnRyb2w/LmlzQShcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdG9Db250cm9sID0gKG9Db250cm9sIGFzIEhCb3gpLmdldEl0ZW1zKClbMF07XG5cdFx0fVxuXHRcdGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgQ2hlY2tCb3gpLmdldFNlbGVjdGVkKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIFJhdGluZ0luZGljYXRvcikuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgSW5wdXRCYXNlKS5nZXRWYWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkxpbmtcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgTGluaykuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkxhYmVsXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExhYmVsKS5nZXRUZXh0KCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uVGV4dFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBUZXh0KS5nZXRUZXh0KGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0E8RW5oYW5jZVdpdGhVSTU8VGV4dExpbms+PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuVGV4dExpbmtcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRUZXh0KCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdFN0YXR1cykuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdElkZW50aWZpZXJcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgT2JqZWN0SWRlbnRpZmllcikuZ2V0VGl0bGUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7IC8vIEZpZWxkV3JhcHBlclxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvQ29udHJvbD8uaXNBPERhdGFQb2ludD4oXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludFwiKSB8fFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxFbWFpbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRhY3QuRW1haWxcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8Q29udGFjdD4oXCJzYXAuZmUubWFjcm9zLmNvbnRhY3QuQ29udGFjdFwiKVxuXHRcdCkge1xuXHRcdFx0Ly8gdGhpcyBpcyBhIEJCdjQgdW5kZXJuZWF0aCwgY2FsbCB0aGUgbWV0aG9kIG9uIHRoZSBCQlY0XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZ2V0dGluZyB2YWx1ZSBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGlzIGZpZWxkIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gdmFsdWVcblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBmaWVsZCByZWZlcmVuY2Vcblx0ICovXG5cdHNldFZhbHVlKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKTogQ29udHJvbCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdH1cblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2w/LmlzQShcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdGNvbnRyb2wgPSAoY29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAoY29udHJvbD8uaXNBPENoZWNrQm94PihcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFNlbGVjdGVkKHZhbHVlIGFzIGJvb2xlYW4pO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPElucHV0QmFzZT4oXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdGNvbnRyb2wuc2V0VmFsdWUodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxUZXh0PihcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdGNvbnRyb2wuc2V0VGV4dCh2YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSB3aXRoIHRoZSBlbmFibGVtZW50IHN0YXRlXG5cdCAqL1xuXHRnZXRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGxldCBjb250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuY29udGVudCk7XG5cdFx0aWYgKGNvbnRyb2wgIT09IG51bGwgJiYgY29udHJvbCAhPT0gdW5kZWZpbmVkICYmICFjb250cm9sPy5pc0EoXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHQvL2NoZWNrIG5lZWRlZCBmb3IgZmlsZSB3cmFwcGVyIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBjb250ZW50XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sLmlzQTxIQm94PihcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYWluaW5nIHJlYXNvbnMsIGxldMK0cyBrZWVwIGl0IGxpa2UgdGhhdFxuXHRcdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRJdGVtcygpWzBdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBPFZCb3g+KFwic2FwLm0uVkJveFwiKSkge1xuXHRcdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldEl0ZW1zKClbMF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgZ2V0UHJvcGVydHkgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIGVuZCB1cCBpbiBhIG1heCBjYWxsIHN0YWNrIHNpemVcblx0XHRcdGlmIChjb250cm9sLmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPElucHV0QmFzZT4oXCJzYXAubS5JbnB1dEJhc2VcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZ2V0UHJvcGVydHkoXCJlbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZ2V0UHJvcGVydHkoXCJlbmFibGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwiZW5hYmxlZFwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxGb3JtRWxlbWVudFdyYXBwZXI+KFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIpKSB7XG5cdFx0XHRcdC8vIEl0IGlzIGZvciBhIERyYWZ0IEluZGljYXRvclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmdldFByb3BlcnR5KFwibGlua0VuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxFeHBhbmRhYmxlVGV4dD4oXCJzYXAubS5FeHBhbmRhYmxlVGV4dFwiKSkge1xuXHRcdFx0XHQvLyBvdGhlcndpc2Ugc2hvdyBtb3JlIHdvdWxkIGJlIGluYWN0aXZlXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlID0gY29udHJvbC5nZXRFZGl0TW9kZSgpO1xuXHRcdFx0XHQvLyBUaGUgbWRjIGZpZWxkIGRvZXMgbm90IGhhdmUgYSBkaXJlY3QgcHJvcGVydHkgXCJlbmFibGVkXCIsIHRoZXJlZm9yZSB3ZSBtYXBcblx0XHRcdFx0Ly8gdGhlIGludGVybmFsIGRpc2FibGVkIHNldHRpbmcgb2YgdGhlIGVkaXQgbW9kZSBpbiB0aGlzIGdyYWNlZnVsIHBhdHRlcm5cblx0XHRcdFx0cmV0dXJuIGVkaXRNb2RlICE9PSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxGaWxlV3JhcHBlcj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRcdC8vIFRoZSBmaWxlIHdyYXBwZXIgY291bGQgY29udGFpbiBhIGxpbmsgb3IgYW4gYXZhdGFyIHdpdGggYSBkZWxldGUgYnV0dG9uLFxuXHRcdFx0XHQvLyB3ZSBtdXN0IGVuc3VyZSB0aGUgZW5hYmxlbWVudCBpbiBib3RoIGNhc2VzXG5cdFx0XHRcdHJldHVybiBjb250cm9sLmxpbmsgPyBjb250cm9sLmxpbmsuZ2V0UHJvcGVydHkoXCJlbmFibGVkXCIpIDogdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5Db25kaXRpb25hbFdyYXBwZXJcIikgfHxcblx0XHRcdFx0KGNvbnRyb2wgYXMgQ29udHJvbCkuaXNBPFRleHRMaW5rPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuVGV4dExpbmtcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBlbmFibGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2w/LmlzQTxIQm94PihcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldEl0ZW1zKClbMF07XG5cdFx0fVxuXG5cdFx0Ly8gd2UgbmVlZCB0byBjYWxsIHRoZSBzZXRQcm9wZXJ0eSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGVuZCB1cCBpbiBhIG1heCBjYWxsIHN0YWNrIHNpemVcblx0XHRpZiAoY29udHJvbD8uaXNBPENoZWNrQm94PihcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImFjdGl2ZVwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RJZGVudGlmaWVyPihcInNhcC5tLk9iamVjdElkZW50aWZpZXJcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwidGl0bGVBY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHQvLyB0aGUgZW5hYmxlZCBwcm9wZXJ0eSB0byB0aGUgcmVzcGVjdGl2ZSBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGVcblx0XHRcdC8vIHdpdGggdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRsZXQgZWRpdE1vZGVUeXBlO1xuXHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0ZWRpdE1vZGVUeXBlID0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sLnNldEVkaXRNb2RlKGVkaXRNb2RlVHlwZSk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldExpbmtFbmFibGVkKGVuYWJsZWQpO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldEVuYWJsZWQoZW5hYmxlZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IFwic2V0RW5hYmxlZCBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIFR5cGUgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblxuXHRcdGxldCBwYXRoOyAvL3RhcmdldCBmb3Igb01lc3NhZ2Vcblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRwYXRoID0gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRCaW5kaW5nKFwic2VsZWN0ZWRcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBJbnB1dEJhc2UpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UmVzb2x2ZWRQYXRoKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHBhdGggPSBvQ29udHJvbC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBwYXRoLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvQ29udHJvbD8uZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IGFyciA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGFyci5maW5kKChlOiBNZXNzYWdlKSA9PiBlPy5nZXRJZD8uKCkgPT09IGlkKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRtc2dNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlc3VsdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWVzc2FnZU1hbmFnZXIoKTogTWVzc2FnaW5nIHtcblx0XHRyZXR1cm4gTWVzc2FnaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gdGhpcy5wcmVwYXJlUHJvcGVydGllcygpO1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcykge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZXMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbWV0YSBwYXRoIGFuZCBjb250ZXh0IHBhdGgsIHNldHMgdXAgdGhlIGlucHV0IGZpZWxkIHByb3BlcnRpZXMsXG5cdCAqIGFuZCBjYWxscyB0aGUgc2V0VXBGaWVsZCBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEFkZGl0aW9uYWxseSwgaXQgc2V0cyB0aGUgbWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIGFuZCBjb2xsYWJvcmF0aW9uRW5hYmxlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLCBvciB1bmRlZmluZWQgaWYgdGhlIHByZXByb2Nlc3NvciBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUuXG5cdCAqL1xuXHRwcmVwYXJlUHJvcGVydGllcygpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gdGhpcy5nZXRNZXRhUGF0aE9iamVjdCh0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblxuXHRcdGlmICghbWV0YUNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0Y29uc3QgaW5wdXRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5QmFnKCkgYXMgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRGaWVsZFByb3BlcnRpZXMsIFwidmFsdWVcIiwge1xuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEZpZWxkUHJvcGVydGllcywgXCJkZXNjcmlwdGlvblwiLCB7XG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5yZWFkT25seSA9IHRoaXMuYmluZFN0YXRlKFwicmVhZE9ubHlcIik7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgYSBiaW5kaW5nIGZvciB0aGUgcHJvcGVydHkgc2VtYW50aWNPYmplY3Qgd2Ugd2lsbCByZWx5IG9uIHRoZSBiaW5kaW5nIHRvIHRoZSBzdGF0ZSB0byBlbnN1cmVcblx0XHQvLyBiaW5kaW5nIG1hbmlwdWxhdGlvbiBpcyBwb3NzaWJsZVxuXHRcdGlmICh0aGlzLmdldEJpbmRpbmdJbmZvKFwic2VtYW50aWNPYmplY3RcIikpIHtcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnNlbWFudGljT2JqZWN0ID0gY29tcGlsZUV4cHJlc3Npb24odGhpcy5iaW5kU3RhdGUoXCJzZW1hbnRpY09iamVjdFwiKSk7XG5cdFx0fVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnZoSWRQcmVmaXggPSB0aGlzLnZoSWRQcmVmaXg7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuaWRQcmVmaXggPSB0aGlzLmlkUHJlZml4O1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLl9mbGV4SWQgPSB0aGlzLl9mbGV4SWQ7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMub25MaXZlQ2hhbmdlID0gdGhpcy5oYXNMaXN0ZW5lcnMoXCJsaXZlQ2hhbmdlXCIpID8gXCJTb21ldGhpbmdcIiA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dCA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0O1xuXHRcdHRoaXMub2RhdGFNZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aCA9IHRoaXMub2RhdGFNZXRhTW9kZWw/LmdldE1ldGFDb250ZXh0KHRoaXMuZ2V0Q29tcHV0ZWRDb250ZXh0UGF0aCh0aGlzLmNvbnRleHRQYXRoKSk7XG5cblx0XHR0aGlzLmNvbXB1dGVkTWV0YVBhdGggPSB0aGlzLm9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0UGF0aCgpKSBhcyBDb250ZXh0O1xuXG5cdFx0Ly8gU29tZSBjb2RlIHJlbHkgb24gdXMgY2hlY2tpbmcgaWYgdmlzaWJsZSBpcyBkZWZpbmVkIG9yIG5vdCwgdGhlIG9ubHkgd2F5IHRvIGRvIGl0IGlzIHRocm91Z2ggdGhlIGlzUHJvcGVydHlJbml0aWFsIG1ldGhvZFxuXHRcdGlmICh0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwidmlzaWJsZVwiKSkge1xuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMudmlzaWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2lmICh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQpIHtcblx0XHQvLyBJZiB0aGUgSUQgaXMgbm90IHNldCBieSB0aGUgY29uc3VtZXIsIHVzZSB0aGUgSUQgcHJvdmlkZWQgYnkgVUk1LlxuXHRcdC8vIChUaGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIHZhbHVlIGhlbHAgcmVsaWVzIG9uIGFsd2F5cyBoYXZpbmcgYW4gSUQuKVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkID0gaW5wdXRGaWVsZFByb3BlcnRpZXMuaWQgPz8gdGhpcy5nZXRJZCgpO1xuXG5cdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gc2V0VXBGaWVsZChcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0e30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy52aWV3RGF0YSBhcyBKU09OTW9kZWwpID8/IG5ldyBKU09OTW9kZWwodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGE/LigpID8/IHt9KSxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy5pbnRlcm5hbCBhcyBKU09OTW9kZWwpID8/IHRoaXMuX2dldE93bmVyKCkhLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHR0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/LmFwcENvbXBvbmVudCA/PyB0aGlzLl9nZXRPd25lcigpIS5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHRoaXMuaXNQcm9wZXJ0eUluaXRpYWwoXCJyZWFkT25seVwiKSxcblx0XHRcdHRoaXMuY29tcHV0ZWRNZXRhUGF0aCxcblx0XHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImlubGluZUVkaXRFbmFibGVkXCIsIHByZXBhcmVkUHJvcGVydGllcy5pbmxpbmVFZGl0RW5hYmxlZCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImhhc0lubGluZUVkaXRcIiwgY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmhhc0lubGluZUVkaXQpKTtcblxuXHRcdHByZXBhcmVkUHJvcGVydGllcy5pc0R5bmFtaWNJbnN0YW50aWF0aW9uID0gdHJ1ZTtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCkgdGhpcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGggPSBwcmVwYXJlZFByb3BlcnRpZXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoO1xuXHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSBwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0cmV0dXJuIHByZXBhcmVkUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjb250ZW50IGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcHJlcGFyZWQgcHJvcGVydGllcyB0byBjcmVhdGUgYW5kIHJldHVybiB0aGUgY29udGVudCBjb250cm9sIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEBwYXJhbSBwcmVwYXJlZFByb3BlcnRpZXMgVGhlIHByZXBhcmVkIHByb3BlcnRpZXMgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgY29udGVudCBjb250cm9sLlxuXHQgKi9cblx0Y3JlYXRlQ29udGVudChwcmVwYXJlZFByb3BlcnRpZXM6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29udHJvbCB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHQvLyBXZSBoYXZlIHRvIHNldCAob3IgYmluZCkgc29tZSBwcm9wZXJ0aWVzIHRvIHRoZSBGaWVsZCBzbyB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBieSBjb25zdW1lcnMvVUk1XG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcInJlcXVpcmVkXCIsIHByZXBhcmVkUHJvcGVydGllcy5yZXF1aXJlZEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImVkaXRhYmxlXCIsIHByZXBhcmVkUHJvcGVydGllcy5lZGl0YWJsZUV4cHJlc3Npb24pO1xuXG5cdFx0XHR0aGlzLnNldE9yQmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMudmlzaWJsZSk7XG5cdFx0XHRpZiAodHlwZW9mIHByZXBhcmVkUHJvcGVydGllcy52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR0aGlzLmN1c3RvbVZhbHVlQmluZGluZyA9IHByZXBhcmVkUHJvcGVydGllcy52YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5jb21wdXRlZEVkaXRNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImVkaXRNb2RlXCIsIHByZXBhcmVkUHJvcGVydGllcy5lZGl0TW9kZSA/PyBjb21waWxlRXhwcmVzc2lvbihwcmVwYXJlZFByb3BlcnRpZXMuY29tcHV0ZWRFZGl0TW9kZSkpO1xuXHRcdFx0fVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuY2hhbmdlID0gKEZpZWxkIGFzIHVua25vd24gYXMgeyBoYW5kbGVDaGFuZ2U6IEV2ZW50SGFuZGxlciB9KS5oYW5kbGVDaGFuZ2U7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlID0gKEZpZWxkIGFzIHVua25vd24gYXMgeyBoYW5kbGVMaXZlQ2hhbmdlOiBFdmVudEhhbmRsZXIgfSkuaGFuZGxlTGl2ZUNoYW5nZTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCA9IChcblx0XHRcdFx0RmllbGQgYXMgdW5rbm93biBhcyB7IG9uVmFsaWRhdGVGaWVsZEdyb3VwOiBFdmVudEhhbmRsZXIgfVxuXHRcdFx0KS5vblZhbGlkYXRlRmllbGRHcm91cDtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZVR5cGVNaXNzbWF0Y2ggPSB0aGlzLm9uSGFuZGxlVHlwZU1pc3NtYXRjaC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuaGFuZGxlRmlsZVNpemVFeGNlZWQgPSB0aGlzLm9uSGFuZGxlRmlsZVNpemVFeGNlZWQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZVVwbG9hZENvbXBsZXRlID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVVcGxvYWRDb21wbGV0ZShcblx0XHRcdFx0XHRldixcblx0XHRcdFx0XHR7IHBhdGg6IHByZXBhcmVkUHJvcGVydGllcy5maWxlRmlsZW5hbWVFeHByZXNzaW9uIH0sXG5cdFx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMudXBsb2FkU3RyZWFtID0gdGhpcy5vblVwbG9hZFN0cmVhbS5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMucmVtb3ZlU3RyZWFtID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5yZW1vdmVTdHJlYW0oXG5cdFx0XHRcdFx0ZXYgYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBVSTVFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdFx0eyBwYXRoOiBwcmVwYXJlZFByb3BlcnRpZXMuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiB9LFxuXHRcdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZU9wZW5VcGxvYWRlciA9IHRoaXMub25IYW5kbGVPcGVuVXBsb2FkZXIuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZUNsb3NlVXBsb2FkZXIgPSB0aGlzLm9uSGFuZGxlQ2xvc2VVcGxvYWRlci5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub3BlbkV4dGVybmFsTGluayA9IHRoaXMub25PcGVuRXh0ZXJuYWxMaW5rLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkZvY3VzT3V0ID0gdGhpcy5vbkZvY3VzT3V0LmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZCA9IHRoaXMub25MaW5rUHJlc3NlZC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoSUJOID0gKGV2OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gcHJlcGFyZWRQcm9wZXJ0aWVzLm1ldGFQYXRoLmdldE9iamVjdCgpO1xuXHRcdFx0XHRpZiAoIW9EYXRhRmllbGQpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdH0gPSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBldi5nZXRTb3VyY2UoKT8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAob0RhdGFGaWVsZC5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhRmllbGQuTWFwcGluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0b0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRvRGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0ZXYuZ2V0U291cmNlKClcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiA9IChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3Qgb1RoaXM6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gcHJlcGFyZWRQcm9wZXJ0aWVzO1xuXHRcdFx0XHRjb25zdCBvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4gPSBwcmVwYXJlZFByb3BlcnRpZXMubWV0YVBhdGguZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJJc29sYXRlZFwiO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgJiZcblx0XHRcdFx0XHQob0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPE9wZXJhdGlvbkdyb3VwaW5nVHlwZT4pLiRFbnVtTWVtYmVyID09PVxuXHRcdFx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c0ludm9jYXRpb25Hcm91cGluZyA9IFwiQ2hhbmdlU2V0XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IGJJc05hdmlnYWJsZSA9IG9UaGlzLm5hdmlnYXRlQWZ0ZXJBY3Rpb24gYXMgYm9vbGVhbiB8IHN0cmluZztcblx0XHRcdFx0YklzTmF2aWdhYmxlID0gYklzTmF2aWdhYmxlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgZW50aXRpZXM6IEFycmF5PHN0cmluZz4gPSBvVGhpcz8uY29udGV4dFBhdGg/LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVNldE5hbWU6IHN0cmluZyA9IGVudGl0aWVzW2VudGl0aWVzLmxlbmd0aCAtIDFdO1xuXG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRcdFx0Y29udGV4dHM6IGV2LmdldFNvdXJjZSgpLmdldEJpbmRpbmdDb250ZXh0KCkhIGFzIE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogc0ludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRtb2RlbDogZXYuZ2V0U291cmNlKCkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdGxhYmVsOiBvRGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBiSXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogZW50aXR5U2V0TmFtZVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKG9EYXRhRmllbGQuQWN0aW9uISwgb1BhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWUuZGlzcGxheUFnZ3JlZ2F0ZURldGFpbHMoZXYsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJlcGFyZWRQcm9wZXJ0aWVzLmRhdGFNb2RlbFBhdGgpKTtcblx0XHRcdH07XG5cdFx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiKSB7XG5cdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoID0gKGV2KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0ZXYuZ2V0U291cmNlKCksXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0KHByZXBhcmVkUHJvcGVydGllcy5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpLlRhcmdldC52YWx1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5zaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyID0gdGhpcy5vblNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy52YWx1ZUhlbHBJZCA9IEZpZWxkU3RydWN0dXJlLmdldFBvc3NpYmxlVmFsdWVIZWxwVGVtcGxhdGVJZChcblx0XHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCksXG5cdFx0XHRcdHRoaXMuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5jb250ZW50ID0gRmllbGRTdHJ1Y3R1cmUuZ2V0RmllbGRTdHJ1Y3R1cmVUZW1wbGF0ZShwcmVwYXJlZFByb3BlcnRpZXMpIGFzIHVua25vd24gYXMgQ29udHJvbDtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGUubWVzc2FnZSArIFwiIGluIGNyZWF0ZUNvbnRlbnQgb2YgRmllbGRcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ7XG5cdH1cblxuXHRvbkhhbmRsZVR5cGVNaXNzbWF0Y2goZXY6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlVHlwZU1pc3NtYXRjaChldik7XG5cdH1cblxuXHRvbkhhbmRsZUZpbGVTaXplRXhjZWVkKGV2OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVGaWxlU2l6ZUV4Y2VlZChldik7XG5cdH1cblxuXHRvbkhhbmRsZU9wZW5VcGxvYWRlcihldjogVUk1RXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlT3BlblVwbG9hZGVyKGV2KTtcblx0fVxuXG5cdG9uVXBsb2FkU3RyZWFtKGV2OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIudXBsb2FkU3RyZWFtKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSwgZXYpO1xuXHR9XG5cblx0b25IYW5kbGVDbG9zZVVwbG9hZGVyKGV2OiBVSTVFdmVudDx7fSwgRmlsZVVwbG9hZGVyPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5oYW5kbGVDbG9zZVVwbG9hZGVyKGV2KTtcblx0fVxuXG5cdG9uT3BlbkV4dGVybmFsTGluayhldjogVUk1RXZlbnQ8e30sIExpbms+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLm9wZW5FeHRlcm5hbExpbmsoZXYpO1xuXHR9XG5cblx0b25MaW5rUHJlc3NlZChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIucHJlc3NMaW5rKGV2KTtcblx0fVxuXG5cdG9uRm9jdXNPdXQoZXY6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LmhhbmRsZUNvbnRlbnRGb2N1c091dChldik7XG5cdH1cblxuXHRvblNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIoZXY6IFVJNUV2ZW50PHt9LCBBdmF0YXI+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXYuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCk7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLnNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIoc291cmNlLCB2aWV3KTtcblx0fVxuXG5cdGdldFByb3BlcnR5QmFnKCk6IFByb3BlcnRpZXNPZjx0aGlzPiB7XG5cdFx0Y29uc3Qgc2V0dGluZ3M6IFByb3BlcnRpZXNPZjx0aGlzPiA9IHt9IGFzIFByb3BlcnRpZXNPZjx0aGlzPjtcblx0XHRjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFsbFByb3BlcnRpZXMoKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbnMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWxsQWdncmVnYXRpb25zKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgY3VycmVudFByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XG5cdFx0XHRzZXR0aW5nc1twcm9wZXJ0eU5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGN1cnJlbnRQcm9wZXJ0eVZhbHVlO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGFnZ3JlZ2F0aW9uTmFtZSBpbiBhZ2dyZWdhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lKTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFnZ3JlZ2F0aW9uQ29udGVudCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRyZW5BcnJheSA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1hbmFnZWRPYmplY3Qgb2YgYWdncmVnYXRpb25Db250ZW50KSB7XG5cdFx0XHRcdFx0aWYgKG1hbmFnZWRPYmplY3QuaXNBPEJ1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eT4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkJ1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiKSkge1xuXHRcdFx0XHRcdFx0Y2hpbGRyZW5BcnJheS5wdXNoKG1hbmFnZWRPYmplY3QuZ2V0UHJvcGVydHlCYWcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gY2hpbGRyZW5BcnJheTtcblx0XHRcdH0gZWxzZSBpZiAoYWdncmVnYXRpb25Db250ZW50KSB7XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQuaXNBPEJ1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eT4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkJ1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiKSkge1xuXHRcdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gYWdncmVnYXRpb25Db250ZW50LmdldFByb3BlcnR5QmFnKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBiaW5kaW5nIGluIChhZ2dyZWdhdGlvbkNvbnRlbnQgYXMgTWFuYWdlZE9iamVjdCAmIHsgbUJpbmRpbmdJbmZvcz86IFJlY29yZDxzdHJpbmcsIHsgYmluZGluZz86IEJpbmRpbmcgfT4gfSlcblx0XHRcdFx0XHRcdC5tQmluZGluZ0luZm9zKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XVtiaW5kaW5nXSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRCaW5kaW5nSW5mbyhiaW5kaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZ2V0SWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2V0dGluZ3M7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgdGFyZ2V0IHByb3BlcnR5IG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICogQHJldHVybnMgVGhlIHRhcmdldFByb3BlcnR5IG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICovXG5cdGdldElubGluZUVkaXRQcm9wZXJ0eSgpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz4oXG5cdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cblx0XHQpPy50YXJnZXRPYmplY3Q7XG5cdFx0cmV0dXJuIHRhcmdldFByb3BlcnR5O1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGZ1bGx5UXVhbGlmaWVkTmFtZSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBmdWxseVF1YWxpZmllZE5hbWUgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpPy5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH1cbn1cblxuZXhwb3J0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
1181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJtaXhpbiIsIklubGluZUVkaXQiLCJfZGVjMyIsInByb3BlcnR5IiwidHlwZSIsIl9kZWM0IiwiYmluZFRvU3RhdGUiLCJfZGVjNSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsImFzc29jaWF0aW9uIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiYWdncmVnYXRpb24iLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJyZXF1aXJlZCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMzMiIsIl9kZWMzMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFjcm9BUEkiLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY29tYmluZWRQcm9wcyIsImlkIiwiX2ZsZXhJZCIsInZoSWRQcmVmaXgiLCJpZFByZWZpeCIsIl9hcGlJZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGUiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJmb2N1c0hhbmRsZXJzQXR0YWNoZWQiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldENvbGxhYm9yYXRpb25CaW5kaW5nIiwiZmllbGQiLCJiaW5kaW5nIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzIiwiY2hhbmdlRXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJiaW5kaW5nQ29udGV4dCIsImlzVHJhbnNpZW50IiwidmFsdWVSZXNvbHZlZCIsImdldFBhcmFtZXRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWQiLCJmaWVsZFZhbGlkaXR5IiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJjdXN0b21WYWx1ZUJpbmRpbmciLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsIiwic2V0UHJvcGVydHkiLCJwYXRoIiwidXBkYXRlQmluZGluZ3MiLCJmZUNvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25Db250cm9sbGVyIiwidW5kZWZpbmVkIiwidGhlbiIsIm9Tb3VyY2UiLCJtUGFyYW1ldGVycyIsImZpcmVFdmVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJpc1ZhbGlkIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImNhdGNoIiwiTG9nIiwiZGVidWciLCJ2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50Iiwic2V0VGltZW91dCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkIiwiYkNvbGxhYm9yYXRpb25FbmFibGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkYXRhIiwiZ2V0QmluZGluZ0luZm8iLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJpbmRleE9mIiwibWFwIiwiZ2V0UGF0aCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkNoYW5nZSIsImNvbnRlbnQiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsImlzRGF0YVVwZGF0ZWQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZUNvbGxhYm9yYXRpb24iLCJoYW5kbGVMaXZlQ2hhbmdlIiwiX2V2ZW50Iiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJzb3VyY2VGaWVsZCIsInZpZXciLCJnZXRDb250cm9sbGVyIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsIl9zZXRBcmlhTGFiZWxsZWRCeSIsIm9Db250ZW50IiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJhQXJpYUxhYmVsbGVkQnkiLCJhcmlhTGFiZWxsZWRCeSIsInNJZCIsImFBcmlhTGFiZWxsZWRCeXMiLCJnZXRBcmlhTGFiZWxsZWRCeSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZ2V0SW5uZXJDb250cm9sIiwiZmllbGRXcmFwcGVyIiwiY29udHJvbHMiLCJnZXRDb250ZW50RWRpdCIsImlubmVyQ29udHJvbCIsImxlbmd0aCIsImdldEl0ZW1zIiwib25BZnRlclJlbmRlcmluZyIsImVkaXRDb250cm9sIiwibm90TG9ja0NvbnRyb2xzIiwiY2FuTG9jayIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImNvbGxhYm9yYXRpb25FbmFibGVkIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uZm9jdXNpbiIsImV2dCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwiZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyIiwiY29udHJvbCIsImdldEVkaXRNb2RlIiwiZ2V0Q29udGVudERpc3BsYXkiLCJoYXNQZW5kaW5nVXNlcklucHV0IiwidGFyZ2V0Q29udHJvbCIsImdldENvbnRlbnQiLCJnZXRMYWJlbENvbnRyb2xzIiwicmVmZXJlbmNpbmdMYWJlbHMiLCJfZ2V0TGFiZWxzRnJvbVJlZmVyZW5jaW5nTGFiZWxzIiwiX2dldExhYmVsc0ZvckZvcm1GaWVsZHMiLCJsYWJlbElkcyIsIkxhYmVsRW5hYmxlbWVudCIsImdldFJlZmVyZW5jaW5nTGFiZWxzIiwibGFiZWxDb250cm9scyIsImdldFZpZXciLCJmb3JFYWNoIiwibGFiZWxJZCIsImxhYmVsQ29udHJvbCIsImJ5SWQiLCJwdXNoIiwiZ2V0SWQiLCJnZXRQYXJlbnQiLCJnZXRMYWJlbENvbnRyb2wiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkIiwiZ2V0VGV4dCIsImdldFRpdGxlIiwiRXJyb3IiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJtYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJzZXRWYWx1ZSIsInNldFNlbGVjdGVkIiwic2V0VGV4dCIsImdldEVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsImVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc2FibGVkIiwibGluayIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiZWRpdE1vZGVUeXBlIiwiRWRpdGFibGUiLCJzZXRFZGl0TW9kZSIsInNldExpbmtFbmFibGVkIiwiYWRkTWVzc2FnZSIsInBhcmFtZXRlcnMiLCJtc2dNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRSZXNvbHZlZFBhdGgiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJyZW1vdmVNZXNzYWdlIiwiYXJyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInJlc3VsdCIsImZpbmQiLCJlIiwicmVtb3ZlTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwicHJlcGFyZWRQcm9wZXJ0aWVzIiwicHJlcGFyZVByb3BlcnRpZXMiLCJjcmVhdGVDb250ZW50IiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJpbnB1dEZpZWxkUHJvcGVydGllcyIsImdldFByb3BlcnR5QmFnIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJyZWFkT25seSIsImJpbmRTdGF0ZSIsInNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJvbkxpdmVDaGFuZ2UiLCJoYXNMaXN0ZW5lcnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0Iiwib2RhdGFNZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJjb21wdXRlZENvbnRleHRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRDb21wdXRlZENvbnRleHRQYXRoIiwiY29tcHV0ZWRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJ2aXNpYmxlIiwic2V0VXBGaWVsZCIsIm1vZGVscyIsInZpZXdEYXRhIiwiSlNPTk1vZGVsIiwiZ2V0Vmlld0RhdGEiLCJpbnRlcm5hbCIsImdldEFwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsInNldE9yQmluZFByb3BlcnR5IiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwiaXNEeW5hbWljSW5zdGFudGlhdGlvbiIsImRpc3BsYXlTdHlsZSIsImZpbGVVcGxvYWRlclZpc2libGUiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJjb21wdXRlZEVkaXRNb2RlIiwiZXZlbnRIYW5kbGVycyIsImNoYW5nZSIsImxpdmVDaGFuZ2UiLCJ2YWxpZGF0ZUZpZWxkR3JvdXAiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwib25IYW5kbGVUeXBlTWlzc21hdGNoIiwiYmluZCIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwib25IYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwiZXYiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwidXBsb2FkU3RyZWFtIiwib25VcGxvYWRTdHJlYW0iLCJyZW1vdmVTdHJlYW0iLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJvbkhhbmRsZU9wZW5VcGxvYWRlciIsImhhbmRsZUNsb3NlVXBsb2FkZXIiLCJvbkhhbmRsZUNsb3NlVXBsb2FkZXIiLCJvcGVuRXh0ZXJuYWxMaW5rIiwib25PcGVuRXh0ZXJuYWxMaW5rIiwib25Gb2N1c091dCIsImxpbmtQcmVzc2VkIiwib25MaW5rUHJlc3NlZCIsIm9uRGF0YUZpZWxkV2l0aElCTiIsIm9EYXRhRmllbGQiLCJnZXRPYmplY3QiLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiIsIm9UaGlzIiwic0ludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsIiRFbnVtTWVtYmVyIiwiYklzTmF2aWdhYmxlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImVudGl0aWVzIiwic3BsaXQiLCJlbnRpdHlTZXROYW1lIiwib1BhcmFtcyIsImNvbnRleHRzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiaW52b2tlQWN0aW9uIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsIkZpZWxkUnVudGltZSIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRNZXRhUGF0aCIsIiRUeXBlIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJUYXJnZXQiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwidmFsdWVIZWxwSWQiLCJGaWVsZFN0cnVjdHVyZSIsImdldFBvc3NpYmxlVmFsdWVIZWxwVGVtcGxhdGVJZCIsImdldEZpZWxkU3RydWN0dXJlVGVtcGxhdGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicHJlc3NMaW5rIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0Iiwic2V0dGluZ3MiLCJwcm9wZXJ0aWVzIiwiZ2V0QWxsUHJvcGVydGllcyIsImFnZ3JlZ2F0aW9ucyIsImdldEFsbEFnZ3JlZ2F0aW9ucyIsInByb3BlcnR5TmFtZSIsImN1cnJlbnRQcm9wZXJ0eVZhbHVlIiwiYWdncmVnYXRpb25OYW1lIiwiYWdncmVnYXRpb25Db250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHJlbkFycmF5IiwibWFuYWdlZE9iamVjdCIsIm1CaW5kaW5nSW5mb3MiLCJnZXRJbmxpbmVFZGl0UHJvcGVydHkiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsInRhcmdldFByb3BlcnR5IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250YWN0IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRhY3QvQ29udGFjdFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja09iamVjdFByb3BlcnR5IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0J1aWxkaW5nQmxvY2tPYmplY3RQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgQ29uZGl0aW9uYWxXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgVGV4dExpbmsgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvVGV4dExpbmtcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIERhdGFQb2ludCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9EYXRhUG9pbnRcIjtcbmltcG9ydCAqIGFzIEZpZWxkU3RydWN0dXJlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCB7IHNldFVwRmllbGQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSBFeHBhbmRhYmxlVGV4dCBmcm9tIFwic2FwL20vRXhwYW5kYWJsZVRleHRcIjtcbmltcG9ydCB0eXBlIEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIElucHV0QmFzZSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0QmFzZSRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IHR5cGUgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGFiZWxFbmFibGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9MYWJlbEVuYWJsZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyBWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCxcblx0RmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcIi4vTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEVtYWlsIGZyb20gXCIuL2NvbnRhY3QvRW1haWxcIjtcbmltcG9ydCB0eXBlIEZpbGVXcmFwcGVyIGZyb20gXCIuL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuaW1wb3J0IElubGluZUVkaXQgZnJvbSBcIi4vaW5saW5lRWRpdC9JbmxpbmVFZGl0XCI7XG5cbnR5cGUgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5ID0gQ29udHJvbCAmIHsgYWRkQXJpYUxhYmVsbGVkQnk/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDsgZ2V0QXJpYUxhYmVsbGVkQnk6ICgpID0+IHN0cmluZ1tdIH07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgZmllbGQgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24gaXMgZXhwZWN0ZWQsIGJ1dCB0aGUgZmllbGQgY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IGEgcHJvcGVydHkgZnJvbSB0aGUgZW50aXR5IHR5cGUuXG4gKiBXaGVuIGNyZWF0aW5nIGEgRmllbGQgYnVpbGRpbmcgYmxvY2ssIHlvdSBtdXN0IHByb3ZpZGUgYW4gSUQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgd29ya3MgY29ycmVjdGx5LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmllbGQgaWQ9XCJNeUZpZWxkXCIgbWV0YVBhdGg9XCJNeVByb3BlcnR5XCIgLyZndDtcbiAqIDwvcHJlPlxuICogPGEgaHJlZj1cIi9zYXB1aTUtc2RrLWludGVybmFsL3Rlc3QtcmVzb3VyY2VzL3NhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2J1aWxkaW5nQmxvY2tPdmVydmlld1wiIHRhcmdldD1cIl9ibGFua1wiID5PdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3M8L2E+XG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5GaWVsZFxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIsIHtcblx0cmV0dXJuVHlwZXM6IFtcblx0XHRcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZvcm1FbGVtZW50V3JhcHBlclwiIC8qLCBub3Qgc3VyZSBpIHdhbnQgdG8gYWRkIHRob3NlIHlldCBcInNhcC5mZS5tYWNyb3MuRmllbGRcIiwgXCJzYXAubS5IQm94XCIsIFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5Db25kaXRpb25hbFdyYXBwZXJcIiwgXCJzYXAubS5CdXR0b25cIiovXG5cdF1cbn0pXG5AbWl4aW4oSW5saW5lRWRpdClcbmNsYXNzIEZpZWxkIGV4dGVuZHMgTWFjcm9BUEk8eyByZWFkT25seTogYm9vbGVhbjsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9PiB7XG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBlZGl0YWJsZSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSBpZiB0aGUgcGFnZSBpcyBjdXJyZW50bHkgZWRpdGFibGUuXG5cdCAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdCBzZXQgYSBmaWVsZCB0byBlZGl0YWJsZSBpZiBpdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFzIG5vdCBlZGl0YWJsZS5cblx0ICogQHByaXZhdGVcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGJpbmRUb1N0YXRlOiB0cnVlIH0pXG5cdHB1YmxpYyByZWFkb25seSByZWFkT25seSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWVsZCBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgaWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW10sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIlByb3BlcnR5XCJdXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogV3JhcCBmaWVsZFxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgd3JhcD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgY29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGNvbnRhaW5pbmcgZGV0YWlscyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGNoYW5nZSE6IEV2ZW50SGFuZGxlcjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWVsZCBnZXQgdGhlIGZvY3VzLlxuXHQgKlxuXHQgKi9cblx0QGV2ZW50KClcblx0Zm9jdXNpbiE6IEV2ZW50SGFuZGxlcjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgY29udGFpbmluZyBkZXRhaWxzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgbGl2ZSBjaGFuZ2VkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlITogRXZlbnRIYW5kbGVyO1xuXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWRQcmVmaXg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFByZWZpeCBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIElEIG9mIHRoZSB2YWx1ZSBoZWxwIHVzZWQgZm9yIHRoZSBmaWVsZFxuXHQgKi9cblx0QGFzc29jaWF0aW9uKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyB2aElkUHJlZml4ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBhY3Rpb24gd2lsbCBuYXZpZ2F0ZSBhZnRlciBleGVjdXRpb25cblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IG5hdmlnYXRlQWZ0ZXJBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZEZvcm1hdE9wdGlvbnNcIiB9KVxuXHRwdWJsaWMgcmVhZG9ubHkgZm9ybWF0T3B0aW9ucz86IEZpZWxkRm9ybWF0T3B0aW9ucztcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cblx0cHVibGljIF9mbGV4SWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEVkaXQgTW9kZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIElmIHRoZSBlZGl0TW9kZSBpcyB1bmRlZmluZWQgdGhlbiB3ZSBjb21wdXRlIGl0IGJhc2VkIG9uIHRoZSBtZXRhZGF0YVxuXHQgKiBPdGhlcndpc2Ugd2UgdXNlIHRoZSB2YWx1ZSBwcm92aWRlZCBoZXJlLlxuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInNhcC51aS5tZGMuZW51bXMuRmllbGRFZGl0TW9kZVwiXG5cdH0pXG5cdHB1YmxpYyByZWFkb25seSBlZGl0TW9kZT86IEZpZWxkRWRpdE1vZGUgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHQvKipcblx0ICogT3B0aW9uIHRvIGFkZCBzZW1hbnRpYyBvYmplY3RzIGZvciBhIGZpZWxkLlxuXHQgKiBUaGlzIHBhcmFtZXRlciBvdmVyd3JpdGVzIHRoZSBzZW1hbnRpYyBvYmplY3RzIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9ucy5cblx0ICogVmFsaWQgb3B0aW9ucyBhcmUgZWl0aGVyIGEgc2luZ2xlIHNlbWFudGljIG9iamVjdCwgYSBzdHJpbmdpZmllZCBhcnJheSBvZiBzZW1hbnRpYyBvYmplY3RzLFxuXHQgKiBhIGZvcm1hdHRlciBvciBhIHNpbmdsZSBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJuaW5nIGVpdGhlciBhIHNpbmdsZSBzZW1hbnRpYyBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc2VtYW50aWMgb2JqZWN0cy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgYmluZFRvU3RhdGU6IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNlbWFudGljT2JqZWN0ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gb3B0aW9uYWxseSBwcm92aWRlIGFuIGV4dGVybmFsIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBtb2RlbCB0aGFuIHRoZSBPRGF0YSBtb2RlbC5cblx0ICogSXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIGEgZmllbGQgd2l0aCB2YWx1ZSBoZWxwLCBhbmQgd2l0aG91dCBzdXBwb3J0IGZvciBjb21wbGV4IHZhbHVlIGhlbHAgKGN1cnJlbmN5IC8gdW5pdCkuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRiaW5kYWJsZTogdHJ1ZSxcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlLFxuXHRcdHJlcXVpcmVkOiBmYWxzZVxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZXh0ZXJuYWwgZGVzY3JpcHRpb24gdGhhdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IG1vZGVsIHRoYW4gdGhlIG9EYXRhIG1vZGVsLlxuXHQgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0YmluZGFibGU6IHRydWUsXG5cdFx0aXNCaW5kaW5nSW5mbzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogZmFsc2Vcblx0fSlcblx0cHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5UZXh0QWxpZ25cIlxuXHR9KVxuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dEFsaWduPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzQmluZGluZ0luZm86IHRydWUgfSlcblx0cHVibGljIHJlYWRvbmx5IHNob3dFcnJvck9iamVjdFN0YXR1cz86IG9iamVjdCB8IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29sbGFib3JhdGlvbkVuYWJsZWQ/OiBib29sZWFuOyAvLyBOZWVkIHRvIGJlIGNvbXB1dGVkIG9uIGRlbWFuZFxuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIG1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aD86IHN0cmluZzsgLy8gTmVlZCB0byBiZSBjb21wdXRlZCBvbiBkZW1hbmRcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdGN1c3RvbVZhbHVlQmluZGluZz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGlubGluZUVkaXRFbmFibGVkPyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc0lubGluZUVkaXQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgZm9jdXNIYW5kbGVyc0F0dGFjaGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjb21wdXRlZE1ldGFQYXRoPzogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbXB1dGVkQ29udGV4dFBhdGg/OiBDb250ZXh0O1xuXG5cdHByaXZhdGUgb2RhdGFNZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdF9hcGlJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaGVscCByZXF1aXJlcyB2YWxpZGF0aW9uIG9yIG5vdC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9yZXF1aXJlc1ZhbGlkYXRpb24/OiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmVwcm9jZXNzb3JDb250ZXh0ITogWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyB1c2VkIGZvciBjb2xsYWJvcmF0aW9uIG5vdGlmaWNhdGlvbnMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZ1xuXHQgKi9cblx0Z2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoZmllbGQ6IENvbnRyb2wpOiBPRGF0YUxpc3RCaW5kaW5nIHwgT0RhdGFDb250ZXh0QmluZGluZyB7XG5cdFx0bGV0IGJpbmRpbmcgPSAoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQpLmdldEJpbmRpbmcoKTtcblxuXHRcdGlmICghYmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBkYXRhIGZyb20gYSBjaGFuZ2UgZXZlbnQgZm9yIHVzYWdlIGluIHRoZSBoYW5kbGVDaGFuZ2UgbWV0aG9kLlxuXHQgKiBAcGFyYW0gY2hhbmdlRXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZGV0YWlsc1xuXHQgKi9cblx0cHJpdmF0ZSBleHRyYWN0Q2hhbmdlRXZlbnREZXRhaWxzKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHtcblx0XHRzb3VyY2U6IG1kY0ZpZWxkO1xuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRcdGlzVHJhbnNpZW50OiBib29sZWFuO1xuXHRcdHZhbHVlUmVzb2x2ZWQ6IFByb21pc2U8dm9pZD47XG5cdFx0dmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbjtcblx0XHRjdXN0b21WYWx1ZUJpbmRpbmc6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBQcm9wZXJ0eUJpbmRpbmdJbmZvIHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBzb3VyY2UgPSBjaGFuZ2VFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdC8vIElmIHRoZSBmaWVsZCBpcyBib3VuZCB0byBhIEpTT04gbW9kZWwsIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIHJldHVybnMgdW5kZWZpbmVkLlxuXHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIGNhbm5vdCBjYWxsIGlzVHJhbnNpZW50IG9uIGl0LiBEZWZhdWx0aW5nIHRvIGZhbHNlLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpZW50ID0gYmluZGluZ0NvbnRleHQgPyAoYmluZGluZ0NvbnRleHQgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpIDogZmFsc2U7XG5cdFx0Y29uc3QgdmFsdWVSZXNvbHZlZCA9IGNoYW5nZUV2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0Y29uc3QgdmFsaWQgPSBjaGFuZ2VFdmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKTtcblx0XHRjb25zdCBmaWVsZFZhbGlkaXR5ID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShjaGFuZ2VFdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0XHRjb25zdCBjdXN0b21WYWx1ZUJpbmRpbmcgPSB0aGlzPy5jdXN0b21WYWx1ZUJpbmRpbmc7XG5cblx0XHRyZXR1cm4geyBzb3VyY2UsIGNvbnRyb2xsZXIsIGlzVHJhbnNpZW50LCB2YWx1ZVJlc29sdmVkLCB2YWxpZCwgZmllbGRWYWxpZGl0eSwgY3VzdG9tVmFsdWVCaW5kaW5nIH07XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlQ2hhbmdlKGNoYW5nZUV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IHsgc291cmNlLCBjb250cm9sbGVyLCBpc1RyYW5zaWVudCwgdmFsdWVSZXNvbHZlZCwgdmFsaWQsIGZpZWxkVmFsaWRpdHksIGN1c3RvbVZhbHVlQmluZGluZyB9ID1cblx0XHRcdHRoaXMuZXh0cmFjdENoYW5nZUV2ZW50RGV0YWlscyhjaGFuZ2VFdmVudCk7XG5cblx0XHRpZiAoY3VzdG9tVmFsdWVCaW5kaW5nKSB7XG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cdFx0XHRjb25zdCB2YWx1ZU1vZGVsID0gc291cmNlPy5nZXRNb2RlbChjdXN0b21WYWx1ZUJpbmRpbmcubW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgQ2hlY2tCb3gkU2VsZWN0RXZlbnQpLmdldFBhcmFtZXRlcihcInNlbGVjdGVkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSAoY2hhbmdlRXZlbnQgYXMgSW5wdXRCYXNlJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlTW9kZWw/LnNldFByb3BlcnR5KGN1c3RvbVZhbHVlQmluZGluZy5wYXRoLCBuZXdWYWx1ZSk7XG5cdFx0XHR2YWx1ZU1vZGVsPy51cGRhdGVCaW5kaW5ncyh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIEZFIENvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgZXh0ZW5zaW9uQVBJIHRvIGFjY2VzcyBpbnRlcm5hbCBGRSBjb250cm9sbGVyc1xuXHRcdGNvbnN0IGZlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgPyBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEN1cnJlbnRseSB3ZSBoYXZlIHVuZGVmaW5lZCBhbmQgdHJ1ZS4uLiBhbmQgb3VyIGNyZWF0aW9uIHJvdyBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhpcy5cblx0XHQvLyBJIHdvdWxkIG1vdmUgdGhpcyBsb2dpYyB0byB0aGlzIHBsYWNlIGFzIGl0J3MgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBmaWVsZCBjb25zdW1lclxuXHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gVGhlIGV2ZW50IGlzIGdvbmUuIEZvciBub3cgd2UnbGwganVzdCByZWNyZWF0ZSBpdCBhZ2FpblxuXHRcdFx0XHQoY2hhbmdlRXZlbnQgYXMgeyBvU291cmNlPzogbWRjRmllbGQgfSkub1NvdXJjZSA9IHNvdXJjZTtcblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgbVBhcmFtZXRlcnM/OiB7IHZhbGlkPzogYm9vbGVhbiB9IH0pLm1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdHZhbGlkOiB2YWxpZCA/PyB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXM/LmZpcmVFdmVudChcImNoYW5nZVwiLCB7IHZhbHVlOiB0aGlzLmdldFZhbHVlKCksIGlzVmFsaWQ6IHZhbGlkID8/IHRydWUgfSk7XG5cdFx0XHRcdGlmICghaXNUcmFuc2llbnQpIHtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIHNpZGUgZWZmZWN0cyB3aXRob3V0IHJlZ2lzdGVyaW5nIGRlZmVycmVkIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQgYmVmb3JlIHZhbHVlUmVzb2x2ZWQgaXMgcmVzb2x2ZWQuXG5cdFx0XHRcdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2UoY2hhbmdlRXZlbnQsICEhZmllbGRWYWxpZGl0eSwgdmFsdWVSZXNvbHZlZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0RmllbGRSdW50aW1lSGVscGVyLmZldGNoUmVjb21tZW5kYXRpb25zKHNvdXJjZSwgY29udHJvbGxlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBldmVudCBpcyBnb25lLiBGb3Igbm93IHdlJ2xsIGp1c3QgcmVjcmVhdGUgaXQgYWdhaW5cblx0XHRcdFx0KGNoYW5nZUV2ZW50IGFzIHsgb1NvdXJjZT86IG1kY0ZpZWxkIH0pLm9Tb3VyY2UgPSBzb3VyY2U7XG5cdFx0XHRcdChjaGFuZ2VFdmVudCBhcyB7IG1QYXJhbWV0ZXJzPzogeyB2YWxpZD86IGJvb2xlYW4gfSB9KS5tUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHR2YWxpZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0TG9nLmRlYnVnKFwiUHJlcmVxdWlzaXRlcyBvbiBGaWVsZCBmb3IgdGhlIFNpZGVFZmZlY3RzIGFuZCBSZWNvbW1lbmRhdGlvbnMgaGF2ZSBiZWVuIHJlamVjdGVkXCIpO1xuXHRcdFx0XHQvLyBhcyB0aGUgVUkgbWlnaHQgbmVlZCB0byByZWFjdCBvbi4gV2UgY291bGQgcHJvdmlkZSBhIHBhcmFtZXRlciB0byBpbmZvcm0gaWYgdmFsaWRhdGlvblxuXHRcdFx0XHQvLyB3YXMgc3VjY2Vzc2Z1bD9cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgeyB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLCBpc1ZhbGlkOiB2YWxpZCA/PyBmYWxzZSB9KTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gRm9yIHRoZSBFZGl0RmxvdyBzeW5jaHJvbml6YXRpb24sIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgUEFUQ0ggcmVxdWVzdCB0byBiZSBzZW50IChvciBhbiBlcnJvciB0byBiZSBkZXRlY3RlZCksIG90aGVyd2lzZSB0aGVyZSBjb3VsZCBiZSBlLmcuIGFjdGlvbiBvciBzYXZlIGludm9rZWQgaW4gcGFyYWxsZWwgd2l0aCB0aGUgUEFUQ0ggcmVxdWVzdC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgd2l0aCBhIDAtdGltZW91dCwgdG8gYWxsb3cgZm9yIHRoZSAncGF0Y2hTZW50JyBldmVudCB0byBiZSBzZW50IGJ5IHRoZSBiaW5kaW5nICh0aGVuIHRoZSBpbnRlcm5hbCBlZGl0IGZsb3cgc3luY2hyb25pemF0aW9uIGtpY2tzIGluIHdpdGggRWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50KS5cblx0XHRjb25zdCB2YWx1ZVJlc29sdmVkQW5kUGF0Y2hTZW50ID0gdmFsdWVSZXNvbHZlZFxuXHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGZlQ29udHJvbGxlcj8uZWRpdEZsb3cuc3luY1Rhc2sodmFsdWVSZXNvbHZlZEFuZFBhdGNoU2VudCk7XG5cblx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQsIGl0IG1lYW5zIHRoZSByZXF1ZXN0IHdvdWxkIGZhaWwgYW55d2F5IGFzIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QgaW4gcmVhbGl0eVxuXHRcdC8vIFNob3VsZCB0aGUgcmVxdWVzdCBiZSBtYWRlIGluIGZ1dHVyZSBpZiB0aGUgY29udGV4dCBpcyB0cmFuc2llbnQ/XG5cdFx0aWYgKGlzVHJhbnNpZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmVDb250cm9sbGVyPy5fc2lkZUVmZmVjdHMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChjaGFuZ2VFdmVudCwgISFmaWVsZFZhbGlkaXR5LCB2YWx1ZVJlc29sdmVkKTtcblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblxuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvbkJpbmRpbmcoc291cmNlKTtcblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtcblx0XHRcdFx0Li4uKChzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSB8fCBzb3VyY2UuZ2V0QmluZGluZ0luZm8oXCJzZWxlY3RlZFwiKSk/LnBhcnRzIHx8IFtdKSxcblx0XHRcdFx0Li4uKHNvdXJjZS5nZXRCaW5kaW5nSW5mbyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8ucGFydHMgfHwgW10pXG5cdFx0XHRdXG5cdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcGFydD8ucGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhcnQucGF0aC5pbmRleE9mKFwiQEBcIikgPCAwOyAvLyBSZW1vdmUgYmluZGluZyBwYXJ0cyB3aXRoIEBAIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IgY29sbGFib3JhdGlvbiBtZXNzYWdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uIChwYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7cGFydC5wYXRofWA7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGcm9tIHRoaXMgcG9pbnQsIHdlIHdpbGwgYWx3YXlzIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgKFVOTE9DSyBvciBDSEFOR0UpLCBzbyB3ZSByZXRhaW5cblx0XHRcdC8vIGEgcG90ZW50aWFsIFVOTE9DSyB0aGF0IHdvdWxkIGJlIHNlbnQgaW4gaGFuZGxlRm9jdXNPdXQsIHRvIG1ha2Ugc3VyZSBpdCdzIHNlbnQgYWZ0ZXIgdGhlIENIQU5HRSBtZXNzYWdlXG5cdFx0XHRjb250cm9sbGVyPy5jb2xsYWJvcmF0aXZlRHJhZnQucmV0YWluQXN5bmNNZXNzYWdlcyhkYXRhKTtcblxuXHRcdFx0Y29uc3Qgc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIC0tPiB3YWl0IHVudGlsIGl0J3Mgc2VudCB0byB0aGUgc2VydmVyIGJlZm9yZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzXG5cdFx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/LmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGlzRGF0YVVwZGF0ZWQgPSBiaW5kaW5nLmhhc1BlbmRpbmdDaGFuZ2VzKCk7XG5cdFx0XHRpZiAoaXNEYXRhVXBkYXRlZCkge1xuXHRcdFx0XHRzZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VzQWZ0ZXJQYXRjaENvbXBsZXRlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVDb2xsYWJvcmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIWlzRGF0YVVwZGF0ZWQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGlmIHRoZSBiaW5kaW5nIGhhcyBzb21lIHBlbmRpbmcgY2hhbmdlcywgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIG9uY2UgdGhlIEZpZWxkIHZhbHVlIGlzIHJlc29sdmVkXG5cdFx0XHRcdFx0aWYgKGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2VuZENvbGxhYm9yYXRpb25NZXNzYWdlc0FmdGVyUGF0Y2hDb21wbGV0ZWQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlcj8uY29sbGFib3JhdGl2ZURyYWZ0LnJlbGVhc2VBc3luY01lc3NhZ2VzKGRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChzb3VyY2UuaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fCAoc291cmNlIGFzIENvbnRyb2wpLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdHZhbHVlUmVzb2x2ZWRcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR1cGRhdGVDb2xsYWJvcmF0aW9uKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXBkYXRlQ29sbGFib3JhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVMaXZlQ2hhbmdlKF9ldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25WYWxpZGF0ZUZpZWxkR3JvdXAoX2V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlRmllbGQgPSBfZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhzb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRmZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoX2V2ZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogUHJvcGVydGllc09mPEZpZWxkLCBcImNoYW5nZVwiIHwgXCJsaXZlQ2hhbmdlXCIgfCBcImZvY3VzaW5cIj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxGaWVsZD4pIHtcblx0XHRsZXQgY29tYmluZWRQcm9wcztcblxuXHRcdGlmIChwcm9wcykge1xuXHRcdFx0aWYgKHR5cGVvZiBwcm9wcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5vdGhlcnMsIGlkOiBwcm9wcyB9IGFzIFByb3BlcnRpZXNPZjxGaWVsZD47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzID0geyAuLi5wcm9wcywgLi4ub3RoZXJzIH0gYXMgUHJvcGVydGllc09mPEZpZWxkPjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBfZmxleElkLCB2aElkUHJlZml4LCBpZFByZWZpeCwgaWQsIF9hcGlJZCB9ID0gY29tYmluZWRQcm9wcztcblxuXHRcdFx0aWYgKF9mbGV4SWQgJiYgIV9mbGV4SWQuaW5jbHVkZXMoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9hcGlJZCA9IF9mbGV4SWQ7XG5cdFx0XHRcdGNvbWJpbmVkUHJvcHMuX2ZsZXhJZCA9IGAke19mbGV4SWR9LWNvbnRlbnRgO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXZoSWRQcmVmaXgpIHtcblx0XHRcdFx0Ly9ubyB2aElkUHJlZml4IG1lYW5zIFwicHVibGljIHVzZSBjYXNlXCJcblx0XHRcdFx0Y29tYmluZWRQcm9wcy52aElkUHJlZml4ID0gXCJGaWVsZFZhbHVlSGVscFwiO1xuXHRcdFx0XHRjb21iaW5lZFByb3BzLl9mbGV4SWQgPSBpZDtcblx0XHRcdFx0Y29tYmluZWRQcm9wcy5pZFByZWZpeCA9IGlkUHJlZml4IHx8IGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpZCkge1xuXHRcdFx0XHRpZiAoY29tYmluZWRQcm9wcy5fYXBpSWQpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gY29tYmluZWRQcm9wcy5fYXBpSWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaWRQcmVmaXgpIHtcblx0XHRcdFx0XHRjb21iaW5lZFByb3BzLmlkID0gZ2VuZXJhdGUoW2lkUHJlZml4LCBcIkZpZWxkXCJdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRzdXBlcihjb21iaW5lZFByb3BzKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxsZWRCeShvQ29udGVudD86IENvbnRyb2xXaXRoQWNjZXNzaWJpbGl0eSk6IHZvaWQge1xuXHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5hZGRBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0Y29uc3QgYUFyaWFMYWJlbGxlZEJ5ID0gdGhpcy5hcmlhTGFiZWxsZWRCeTtcblxuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgYUFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFBcmlhTGFiZWxsZWRCeXMgPSBvQ29udGVudC5nZXRBcmlhTGFiZWxsZWRCeSgpIHx8IFtdO1xuXHRcdFx0XHRpZiAoIWFBcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoc0lkKSkge1xuXHRcdFx0XHRcdG9Db250ZW50LmFkZEFyaWFMYWJlbGxlZEJ5KHNJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHQvLyBiZWZvcmUgY2FsbGluZyB0aGUgcmVuZGVyZXIgb2YgdGhlIEZpZWxkIHBhcmVudCBjb250cm9sIG1heSBoYXZlIHNldCBhcmlhTGFiZWxsZWRCeVxuXHRcdC8vIHdlIGVuc3VyZSBpdCBpcyBwYXNzZWQgdG8gaXRzIGlubmVyIGNvbnRyb2xzXG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbFdpdGhBY2Nlc3NpYmlsaXR5KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SW5uZXJDb250cm9sKHNvdXJjZTogQ29udHJvbCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFzb3VyY2U/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHNvdXJjZSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+O1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKSBhcyBDb250cm9sW107XG5cdFx0XHRsZXQgaW5uZXJDb250cm9sO1xuXHRcdFx0aWYgKGNvbnRyb2xzLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRcdGlubmVyQ29udHJvbCA9IGNvbnRyb2xzWzBdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlubmVyQ29udHJvbD8uaXNBKFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0XHRpbm5lckNvbnRyb2wgPSAoaW5uZXJDb250cm9sIGFzIEhCb3gpLmdldEl0ZW1zKClbMF07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaW5uZXJDb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWRpdENvbnRyb2wgPSB0aGlzLmdldElubmVyQ29udHJvbCh0aGlzLmNvbnRlbnQpO1xuXHRcdGNvbnN0IG5vdExvY2tDb250cm9scyA9IFtcInNhcC5tLkNoZWNrQm94XCJdO1xuXG5cdFx0Y29uc3QgY2FuTG9jayA9ICFub3RMb2NrQ29udHJvbHMuaW5jbHVkZXMoZWRpdENvbnRyb2w/LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID8/IFwiXCIpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmICF0aGlzLmZvY3VzSGFuZGxlcnNBdHRhY2hlZCAmJiBjYW5Mb2NrKSB7XG5cdFx0XHQvLyBUaGUgZXZlbnQgZGVsZWdhdGUgZG9lc24ndCB3b3JrIG9uIHRoZSBGaWVsZCwgd2UgbmVlZCB0byBwdXQgaXQgb24gaXRzIGNvbnRlbnQgKEZpZWxkV3JhcHBlcilcblx0XHRcdHRoaXMuY29udGVudD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uZm9jdXNpbjogKGV2dDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNJbih0aGlzLCBldnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsZXJzQXR0YWNoZWQgPSB0cnVlOyAvLyBUbyBhdm9pZCBhdHRhY2hpbmcgZXZlbnRzIHR3aWNlXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgY29udHJvbCBpbiB0aGUgRmllbGRXcmFwcGVyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBGaWVsZFdyYXBwZXJcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IHZpc2libGUgY29udHJvbFxuXHQgKi9cblx0c3RhdGljIGdldENvbnRyb2xJbkZpZWxkV3JhcHBlcihjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpICYmICFjb250cm9sPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBjb250cm9sIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj47XG5cdFx0XHRjb25zdCBjb250cm9scyA9IGZpZWxkV3JhcHBlci5nZXRFZGl0TW9kZSgpID09PSBcIkRpc3BsYXlcIiA/IFtmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKV0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPj0gMSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250cm9sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBoYXMgc29tZSBNZGMgZmllbGQgd2l0aCBwZW5kaW5nIHVzZXIgaW5wdXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBwZW5kaW5nIHVzZXIgaW5wdXQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0aGFzUGVuZGluZ1VzZXJJbnB1dCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRDb250cm9sID0gRmllbGQuZ2V0Q29udHJvbEluRmllbGRXcmFwcGVyKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRyZXR1cm4gISEodGFyZ2V0Q29udHJvbCAmJiB0YXJnZXRDb250cm9sLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIHRhcmdldENvbnRyb2wuaGFzUGVuZGluZ1VzZXJJbnB1dCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsYWJlbCBjb250cm9scyBvZiB0aGUgZmllbGRcblx0ICogd2hlbiBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSAnbGFiZWxGb3InIGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgb3Igd2hlbiBpbiBhIGZvcm0uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBjb250cm9sc1xuXHQgKi9cblx0Z2V0TGFiZWxDb250cm9scygpOiBMYWJlbFtdIHtcblx0XHRjb25zdCByZWZlcmVuY2luZ0xhYmVscyA9IHRoaXMuX2dldExhYmVsc0Zyb21SZWZlcmVuY2luZ0xhYmVscygpO1xuXHRcdHJldHVybiByZWZlcmVuY2luZ0xhYmVscy5sZW5ndGggPiAwID8gcmVmZXJlbmNpbmdMYWJlbHMgOiB0aGlzLl9nZXRMYWJlbHNGb3JGb3JtRmllbGRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIHdoZW4gcmVmZXJlbmNlZCBieSBhIGxhYmVsLlxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwgY29udHJvbHNcblx0ICovXG5cdF9nZXRMYWJlbHNGcm9tUmVmZXJlbmNpbmdMYWJlbHMoKTogTGFiZWxbXSB7XG5cdFx0Y29uc3QgbGFiZWxJZHMgPSBMYWJlbEVuYWJsZW1lbnQuZ2V0UmVmZXJlbmNpbmdMYWJlbHModGhpcyk7XG5cdFx0Y29uc3QgbGFiZWxDb250cm9sczogTGFiZWxbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdGxhYmVsSWRzLmZvckVhY2goKGxhYmVsSWQpID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsQ29udHJvbCA9IHZpZXcuYnlJZChsYWJlbElkKTtcblx0XHRcdGlmIChsYWJlbENvbnRyb2wpIHtcblx0XHRcdFx0bGFiZWxDb250cm9scy5wdXNoKGxhYmVsQ29udHJvbCBhcyBMYWJlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxhYmVsQ29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkIG9yIGNvbm5lY3RlZCBmaWVsZCB3aGVuIGluIGEgZm9ybS5cblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGNvbnRyb2xzXG5cdCAqL1xuXHRfZ2V0TGFiZWxzRm9yRm9ybUZpZWxkcygpOiBMYWJlbFtdIHtcblx0XHQvLyBpZiB0aGUgZmllbGQgaXMgbm90IGluIGEgZm9ybSwgd2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICghdGhpcy5nZXRJZCgpLmluY2x1ZGVzKFwiRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdC8vIHNlYXJjaCB0aGUgcGFyZW50cyBvZiB0aGUgY29udHJvbCB1bnRpbCB3ZSBmaW5kIGEgc2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XG5cdFx0Ly8gb3Igd2UgcmVhY2ggdGhlIHJvb3QgY29udHJvbFxuXHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IChjb250cm9sIGFzIE1hbmFnZWRPYmplY3QpPy5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2wgPyBbKGNvbnRyb2wgYXMgRm9ybUVsZW1lbnQpLmdldExhYmVsQ29udHJvbCgpIGFzIExhYmVsXSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgZmxvYXQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQ29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICghb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIG9Db250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHRvQ29udHJvbCA9IChvQ29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRTZWxlY3RlZCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBSYXRpbmdJbmRpY2F0b3IpLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBKFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIExpbmspLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5MYWJlbFwiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiAob0NvbnRyb2wgYXMgVGV4dCkuZ2V0VGV4dChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEVuaGFuY2VXaXRoVUk1PFRleHRMaW5rPj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIChvQ29udHJvbCBhcyBPYmplY3RTdGF0dXMpLmdldFRleHQoKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sPy5pc0EoXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKG9Db250cm9sIGFzIE9iamVjdElkZW50aWZpZXIpLmdldFRpdGxlKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbC5nZXRWYWx1ZSgpOyAvLyBGaWVsZFdyYXBwZXJcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRyb2w/LmlzQTxEYXRhUG9pbnQ+KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIikgfHxcblx0XHRcdG9Db250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpIHx8XG5cdFx0XHRvQ29udHJvbD8uaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIilcblx0XHQpIHtcblx0XHRcdC8vIHRoaXMgaXMgYSBCQnY0IHVuZGVybmVhdGgsIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgQkJWNFxuXHRcdFx0cmV0dXJuIG9Db250cm9sLmdldFZhbHVlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdldHRpbmcgdmFsdWUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCAmJiBjb250cm9sPy5pc0EoXCJzYXAubS5IQm94XCIpKSB7XG5cdFx0XHQvLyBmb3IgY2hhaW5pbmcgcmVhc29ucywgbGV0wrRzIGtlZXAgaXQgbGlrZSB0aGF0XG5cdFx0XHRjb250cm9sID0gKGNvbnRyb2wgYXMgSEJveCkuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cdFx0aWYgKGNvbnRyb2w/LmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0Y29udHJvbC5zZXRTZWxlY3RlZCh2YWx1ZSBhcyBib29sZWFuKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxJbnB1dEJhc2U+KFwic2FwLm0uSW5wdXRCYXNlXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8VGV4dD4oXCJzYXAubS5UZXh0XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFRleHQodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJzZXR0aW5nIHZhbHVlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZW1lbnQgc3RhdGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXG5cdFx0aWYgKGNvbnRyb2wgPT09IG51bGwgfHwgY29udHJvbCA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2w/LmlzQShcInNhcC5tLlRleHRcIikpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBjb2xsYWJvcmF0aW9uLWVuYWJsZWQgSEJveFxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2wuaXNBPEhCb3g+KFwic2FwLm0uSEJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgVkJveCB3cmFwcGVyXG5cdFx0aWYgKGNvbnRyb2wuaXNBPFZCb3g+KFwic2FwLm0uVkJveFwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0SXRlbXMoKVswXTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgcHJvcGVydHktYmFzZWQgY29udHJvbHMgdGhhdCB1c2UgXCJlbmFibGVkXCIgcHJvcGVydHlcblx0XHRpZiAoXG5cdFx0XHRjb250cm9sLmlzQTxDaGVja0JveD4oXCJzYXAubS5DaGVja0JveFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIGNvbnRyb2xzIHRoYXQgYXJlIGFsd2F5cyBlbmFibGVkXG5cdFx0aWYgKFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxGb3JtRWxlbWVudFdyYXBwZXI+KFwic2FwLmZlLmNvcmUuY29udHJvbHMuRm9ybUVsZW1lbnRXcmFwcGVyXCIpIHx8XG5cdFx0XHRjb250cm9sLmlzQTxFeHBhbmRhYmxlVGV4dD4oXCJzYXAubS5FeHBhbmRhYmxlVGV4dFwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8dHlwZW9mIENvbmRpdGlvbmFsV3JhcHBlcj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkNvbmRpdGlvbmFsV3JhcHBlclwiKSB8fFxuXHRcdFx0Y29udHJvbC5pc0E8VGV4dExpbms+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5UZXh0TGlua1wiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHNwZWNpYWwgcHJvcGVydHkgY2FzZXNcblx0XHRpZiAoY29udHJvbC5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpIHx8IGNvbnRyb2wuaXNBPENvbnRhY3Q+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkNvbnRhY3RcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLmdldEVuYWJsZWQoKTtcblx0XHR9XG5cblx0XHRpZiAoY29udHJvbC5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5nZXRQcm9wZXJ0eShcImxpbmtFbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBNREMgRmllbGQgc3BlY2lhbCBjYXNlXG5cdFx0aWYgKGNvbnRyb2wuaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGVkaXRNb2RlID0gY29udHJvbC5nZXRFZGl0TW9kZSgpO1xuXHRcdFx0cmV0dXJuIGVkaXRNb2RlICE9PSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBGaWxlV3JhcHBlciBzcGVjaWFsIGNhc2Vcblx0XHRpZiAoY29udHJvbC5pc0E8RmlsZVdyYXBwZXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWxlV3JhcHBlclwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wubGluayA/IGNvbnRyb2wubGluay5nZXRQcm9wZXJ0eShcImVuYWJsZWRcIikgOiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBIQm94IHdpdGggU2l0dWF0aW9uc0luZGljYXRvciBhdCBpdGVtWzFdXG5cdFx0aWYgKChjb250cm9sIGFzIEhCb3gpLmlzQT8uKFwic2FwLm0uSEJveFwiKSAmJiAoY29udHJvbCBhcyBIQm94KS5nZXRJdGVtcygpWzFdPy5pc0EoXCJzYXAuZmUubWFjcm9zLnNpdHVhdGlvbnMuU2l0dWF0aW9uc0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBlbmFibGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmllbGQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRsZXQgY29udHJvbCA9IEZpZWxkLmdldENvbnRyb2xJbkZpZWxkV3JhcHBlcih0aGlzLmNvbnRlbnQpO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIGNvbnRyb2w/LmlzQTxIQm94PihcInNhcC5tLkhCb3hcIikpIHtcblx0XHRcdC8vIGZvciBjaGFpbmluZyByZWFzb25zLCBsZXTCtHMga2VlcCBpdCBsaWtlIHRoYXRcblx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldEl0ZW1zKClbMF07XG5cdFx0fVxuXG5cdFx0Ly8gd2UgbmVlZCB0byBjYWxsIHRoZSBzZXRQcm9wZXJ0eSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGVuZCB1cCBpbiBhIG1heCBjYWxsIHN0YWNrIHNpemVcblx0XHRpZiAoY29udHJvbD8uaXNBPENoZWNrQm94PihcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImVuYWJsZWRcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8SW5wdXRCYXNlPihcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPExpbms+KFwic2FwLm0uTGlua1wiKSkge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuc2V0UHJvcGVydHkoXCJlbmFibGVkXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbD8uaXNBPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwiZW5hYmxlZFwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5zZXRQcm9wZXJ0eShcImFjdGl2ZVwiLCBlbmFibGVkKTtcblx0XHR9IGVsc2UgaWYgKGNvbnRyb2w/LmlzQTxPYmplY3RJZGVudGlmaWVyPihcInNhcC5tLk9iamVjdElkZW50aWZpZXJcIikpIHtcblx0XHRcdHJldHVybiBjb250cm9sLnNldFByb3BlcnR5KFwidGl0bGVBY3RpdmVcIiwgZW5hYmxlZCk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0Ly8gVGhlIG1kYyBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IFwiZW5hYmxlZFwiLCB0aGVyZWZvcmUgd2UgbWFwXG5cdFx0XHQvLyB0aGUgZW5hYmxlZCBwcm9wZXJ0eSB0byB0aGUgcmVzcGVjdGl2ZSBkaXNhYmxlZCBzZXR0aW5nIG9mIHRoZSBlZGl0IG1vZGVcblx0XHRcdC8vIHdpdGggdGhpcyBncmFjZWZ1bCBwYXR0ZXJuXG5cdFx0XHRsZXQgZWRpdE1vZGVUeXBlO1xuXHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0ZWRpdE1vZGVUeXBlID0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRNb2RlVHlwZSA9IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sLnNldEVkaXRNb2RlKGVkaXRNb2RlVHlwZSk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RW1haWw+KFwic2FwLmZlLm1hY3Jvcy5jb250YWN0LkVtYWlsXCIpKSB7XG5cdFx0XHRjb250cm9sLnNldExpbmtFbmFibGVkKGVuYWJsZWQpO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2w7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sPy5pc0E8RGF0YVBvaW50PihcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRjb250cm9sLnNldEVuYWJsZWQoZW5hYmxlZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IFwic2V0RW5hYmxlZCBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIFR5cGUgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBGaWVsZC5nZXRDb250cm9sSW5GaWVsZFdyYXBwZXIodGhpcy5jb250ZW50KTtcblxuXHRcdGxldCBwYXRoOyAvL3RhcmdldCBmb3Igb01lc3NhZ2Vcblx0XHRpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRwYXRoID0gKG9Db250cm9sIGFzIENoZWNrQm94KS5nZXRCaW5kaW5nKFwic2VsZWN0ZWRcIik/LmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2w/LmlzQShcInNhcC5tLklucHV0QmFzZVwiKSkge1xuXHRcdFx0cGF0aCA9IChvQ29udHJvbCBhcyBJbnB1dEJhc2UpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UmVzb2x2ZWRQYXRoKCk7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbD8uaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdHBhdGggPSBvQ29udHJvbC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFJlc29sdmVkUGF0aCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBwYXRoLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvQ29udHJvbD8uZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IGFyciA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGFyci5maW5kKChlOiBNZXNzYWdlKSA9PiBlPy5nZXRJZD8uKCkgPT09IGlkKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRtc2dNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlc3VsdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWVzc2FnZU1hbmFnZXIoKTogTWVzc2FnaW5nIHtcblx0XHRyZXR1cm4gTWVzc2FnaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBvbk1ldGFkYXRhQXZhaWxhYmxlIGV2ZW50LlxuXHQgKi9cblx0b25NZXRhZGF0YUF2YWlsYWJsZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gdGhpcy5wcmVwYXJlUHJvcGVydGllcygpO1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcykge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZXMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBGaWVsZCBibG9jay5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbWV0YSBwYXRoIGFuZCBjb250ZXh0IHBhdGgsIHNldHMgdXAgdGhlIGlucHV0IGZpZWxkIHByb3BlcnRpZXMsXG5cdCAqIGFuZCBjYWxscyB0aGUgc2V0VXBGaWVsZCBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEFkZGl0aW9uYWxseSwgaXQgc2V0cyB0aGUgbWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIGFuZCBjb2xsYWJvcmF0aW9uRW5hYmxlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgcHJvcGVydGllcyBmb3IgdGhlIEZpZWxkIGJsb2NrLCBvciB1bmRlZmluZWQgaWYgdGhlIHByZXByb2Nlc3NvciBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUuXG5cdCAqL1xuXHRwcmVwYXJlUHJvcGVydGllcygpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gdGhpcy5nZXRNZXRhUGF0aE9iamVjdCh0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblxuXHRcdGlmICghbWV0YUNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0Y29uc3QgaW5wdXRGaWVsZFByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5QmFnKCkgYXMgSW5wdXRGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5wdXRGaWVsZFByb3BlcnRpZXMsIFwidmFsdWVcIiwge1xuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEZpZWxkUHJvcGVydGllcywgXCJkZXNjcmlwdGlvblwiLCB7XG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbnB1dEZpZWxkUHJvcGVydGllcy5yZWFkT25seSA9IHRoaXMuYmluZFN0YXRlKFwicmVhZE9ubHlcIik7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgYSBiaW5kaW5nIGZvciB0aGUgcHJvcGVydHkgc2VtYW50aWNPYmplY3Qgd2Ugd2lsbCByZWx5IG9uIHRoZSBiaW5kaW5nIHRvIHRoZSBzdGF0ZSB0byBlbnN1cmVcblx0XHQvLyBiaW5kaW5nIG1hbmlwdWxhdGlvbiBpcyBwb3NzaWJsZVxuXHRcdGlmICh0aGlzLmdldEJpbmRpbmdJbmZvKFwic2VtYW50aWNPYmplY3RcIikpIHtcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnNlbWFudGljT2JqZWN0ID0gY29tcGlsZUV4cHJlc3Npb24odGhpcy5iaW5kU3RhdGUoXCJzZW1hbnRpY09iamVjdFwiKSk7XG5cdFx0fVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLnZoSWRQcmVmaXggPSB0aGlzLnZoSWRQcmVmaXg7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMuaWRQcmVmaXggPSB0aGlzLmlkUHJlZml4O1xuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLl9mbGV4SWQgPSB0aGlzLl9mbGV4SWQ7XG5cdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMub25MaXZlQ2hhbmdlID0gdGhpcy5oYXNMaXN0ZW5lcnMoXCJsaXZlQ2hhbmdlXCIpID8gXCJTb21ldGhpbmdcIiA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMucHJlcHJvY2Vzc29yQ29udGV4dCA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0O1xuXHRcdHRoaXMub2RhdGFNZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aCA9IHRoaXMub2RhdGFNZXRhTW9kZWw/LmdldE1ldGFDb250ZXh0KHRoaXMuZ2V0Q29tcHV0ZWRDb250ZXh0UGF0aCh0aGlzLmNvbnRleHRQYXRoKSk7XG5cblx0XHR0aGlzLmNvbXB1dGVkTWV0YVBhdGggPSB0aGlzLm9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0UGF0aCgpKSBhcyBDb250ZXh0O1xuXG5cdFx0Ly8gU29tZSBjb2RlIHJlbHkgb24gdXMgY2hlY2tpbmcgaWYgdmlzaWJsZSBpcyBkZWZpbmVkIG9yIG5vdCwgdGhlIG9ubHkgd2F5IHRvIGRvIGl0IGlzIHRocm91Z2ggdGhlIGlzUHJvcGVydHlJbml0aWFsIG1ldGhvZFxuXHRcdGlmICh0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwidmlzaWJsZVwiKSkge1xuXHRcdFx0aW5wdXRGaWVsZFByb3BlcnRpZXMudmlzaWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2lmICh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQpIHtcblx0XHQvLyBJZiB0aGUgSUQgaXMgbm90IHNldCBieSB0aGUgY29uc3VtZXIsIHVzZSB0aGUgSUQgcHJvdmlkZWQgYnkgVUk1LlxuXHRcdC8vIChUaGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIHZhbHVlIGhlbHAgcmVsaWVzIG9uIGFsd2F5cyBoYXZpbmcgYW4gSUQuKVxuXHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLmlkID0gaW5wdXRGaWVsZFByb3BlcnRpZXMuaWQgPz8gdGhpcy5nZXRJZCgpO1xuXG5cdFx0Y29uc3QgcHJlcGFyZWRQcm9wZXJ0aWVzID0gc2V0VXBGaWVsZChcblx0XHRcdGlucHV0RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0e30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy52aWV3RGF0YSBhcyBKU09OTW9kZWwpID8/IG5ldyBKU09OTW9kZWwodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGE/LigpID8/IHt9KSxcblx0XHRcdCh0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVscy5pbnRlcm5hbCBhcyBKU09OTW9kZWwpID8/IHRoaXMuX2dldE93bmVyKCkhLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHR0aGlzLnByZXByb2Nlc3NvckNvbnRleHQ/LmFwcENvbXBvbmVudCA/PyB0aGlzLl9nZXRPd25lcigpIS5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHRoaXMuaXNQcm9wZXJ0eUluaXRpYWwoXCJyZWFkT25seVwiKSxcblx0XHRcdHRoaXMuY29tcHV0ZWRNZXRhUGF0aCxcblx0XHRcdHRoaXMuY29tcHV0ZWRDb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImlubGluZUVkaXRFbmFibGVkXCIsIHByZXBhcmVkUHJvcGVydGllcy5pbmxpbmVFZGl0RW5hYmxlZCk7XG5cdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcImhhc0lubGluZUVkaXRcIiwgY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmhhc0lubGluZUVkaXQpKTtcblxuXHRcdHByZXBhcmVkUHJvcGVydGllcy5pc0R5bmFtaWNJbnN0YW50aWF0aW9uID0gdHJ1ZTtcblx0XHRpZiAocHJlcGFyZWRQcm9wZXJ0aWVzLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCkgdGhpcy5tYWluUHJvcGVydHlSZWxhdGl2ZVBhdGggPSBwcmVwYXJlZFByb3BlcnRpZXMubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoO1xuXHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSBwcmVwYXJlZFByb3BlcnRpZXMuY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiKVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVVcGxvYWRlclZpc2libGUgPSAhdGhpcy5yZWFkT25seSAmJiBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uO1xuXHRcdHJldHVybiBwcmVwYXJlZFByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGVudCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHByZXBhcmVkIHByb3BlcnRpZXMgdG8gY3JlYXRlIGFuZCByZXR1cm4gdGhlIGNvbnRlbnQgY29udHJvbCBmb3IgdGhlIEZpZWxkIGJsb2NrLlxuXHQgKiBAcGFyYW0gcHJlcGFyZWRQcm9wZXJ0aWVzIFRoZSBwcmVwYXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgRmllbGQgYmxvY2suXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRlbnQgY29udHJvbC5cblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQocHJlcGFyZWRQcm9wZXJ0aWVzOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IENvbnRyb2wge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0Ly8gV2UgaGF2ZSB0byBzZXQgKG9yIGJpbmQpIHNvbWUgcHJvcGVydGllcyB0byB0aGUgRmllbGQgc28gdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgY29uc3VtZXJzL1VJNVxuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJyZXF1aXJlZFwiLCBwcmVwYXJlZFByb3BlcnRpZXMucmVxdWlyZWRFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0YWJsZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdGFibGVFeHByZXNzaW9uKTtcblxuXHRcdFx0dGhpcy5zZXRPckJpbmRQcm9wZXJ0eShcInZpc2libGVcIiwgcHJlcGFyZWRQcm9wZXJ0aWVzLnZpc2libGUpO1xuXHRcdFx0aWYgKHR5cGVvZiBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5jdXN0b21WYWx1ZUJpbmRpbmcgPSBwcmVwYXJlZFByb3BlcnRpZXMudmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVwYXJlZFByb3BlcnRpZXMuY29tcHV0ZWRFZGl0TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3JCaW5kUHJvcGVydHkoXCJlZGl0TW9kZVwiLCBwcmVwYXJlZFByb3BlcnRpZXMuZWRpdE1vZGUgPz8gY29tcGlsZUV4cHJlc3Npb24ocHJlcGFyZWRQcm9wZXJ0aWVzLmNvbXB1dGVkRWRpdE1vZGUpKTtcblx0XHRcdH1cblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlQ2hhbmdlOiBFdmVudEhhbmRsZXIgfSkuaGFuZGxlQ2hhbmdlO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZSA9IChGaWVsZCBhcyB1bmtub3duIGFzIHsgaGFuZGxlTGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyIH0pLmhhbmRsZUxpdmVDaGFuZ2U7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgPSAoXG5cdFx0XHRcdEZpZWxkIGFzIHVua25vd24gYXMgeyBvblZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyIH1cblx0XHRcdCkub25WYWxpZGF0ZUZpZWxkR3JvdXA7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVUeXBlTWlzc21hdGNoID0gdGhpcy5vbkhhbmRsZVR5cGVNaXNzbWF0Y2guYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmhhbmRsZUZpbGVTaXplRXhjZWVkID0gdGhpcy5vbkhhbmRsZUZpbGVTaXplRXhjZWVkLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVVcGxvYWRDb21wbGV0ZSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlVXBsb2FkQ29tcGxldGUoXG5cdFx0XHRcdFx0ZXYsXG5cdFx0XHRcdFx0eyBwYXRoOiBwcmVwYXJlZFByb3BlcnRpZXMuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiB9LFxuXHRcdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnVwbG9hZFN0cmVhbSA9IHRoaXMub25VcGxvYWRTdHJlYW0uYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLnJlbW92ZVN0cmVhbSA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIucmVtb3ZlU3RyZWFtKFxuXHRcdFx0XHRcdGV2IGFzIEZpZWxkJENoYW5nZUV2ZW50ICYgVUk1RXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdFx0XHRcdHsgcGF0aDogcHJlcGFyZWRQcm9wZXJ0aWVzLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gfSxcblx0XHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXJcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVPcGVuVXBsb2FkZXIgPSB0aGlzLm9uSGFuZGxlT3BlblVwbG9hZGVyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5oYW5kbGVDbG9zZVVwbG9hZGVyID0gdGhpcy5vbkhhbmRsZUNsb3NlVXBsb2FkZXIuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9wZW5FeHRlcm5hbExpbmsgPSB0aGlzLm9uT3BlbkV4dGVybmFsTGluay5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25Gb2N1c091dCA9IHRoaXMub25Gb2N1c091dC5iaW5kKHRoaXMpO1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWQgPSB0aGlzLm9uTGlua1ByZXNzZWQuYmluZCh0aGlzKTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTiA9IChldjogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IHByZXBhcmVkUHJvcGVydGllcy5tZXRhUGF0aC5nZXRPYmplY3QoKTtcblx0XHRcdFx0aWYgKCFvRGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHR9ID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogZXYuZ2V0U291cmNlKCk/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YUZpZWxkLk1hcHBpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0b0RhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGV2LmdldFNvdXJjZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b24gPSAoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UaGlzOiBGaWVsZEJsb2NrUHJvcGVydGllcyA9IHByZXBhcmVkUHJvcGVydGllcztcblx0XHRcdFx0Y29uc3Qgb0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ID0gcHJlcGFyZWRQcm9wZXJ0aWVzLm1ldGFQYXRoLmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgc0ludm9jYXRpb25Hcm91cGluZyA9IFwiSXNvbGF0ZWRcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxPcGVyYXRpb25Hcm91cGluZ1R5cGU+KS4kRW51bU1lbWJlciA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIkNoYW5nZVNldFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBiSXNOYXZpZ2FibGUgPSBvVGhpcy5uYXZpZ2F0ZUFmdGVyQWN0aW9uIGFzIGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0XHRcdGJJc05hdmlnYWJsZSA9IGJJc05hdmlnYWJsZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGVudGl0aWVzOiBBcnJheTxzdHJpbmc+ID0gb1RoaXM/LmNvbnRleHRQYXRoPy5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdFx0XHRcdGNvbnRleHRzOiBldi5nZXRTb3VyY2UoKS5nZXRCaW5kaW5nQ29udGV4dCgpISBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHNJbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdFx0bW9kZWw6IGV2LmdldFNvdXJjZSgpLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRsYWJlbDogb0RhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRpc05hdmlnYWJsZTogYklzTmF2aWdhYmxlLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IGVudGl0eVNldE5hbWVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihvRGF0YUZpZWxkLkFjdGlvbiEsIG9QYXJhbXMpO1xuXHRcdFx0fTtcblx0XHRcdHByZXBhcmVkUHJvcGVydGllcy5ldmVudEhhbmRsZXJzLmRpc3BsYXlBZ2dyZWdhdGlvbkRldGFpbHMgPSAoZXYpOiB2b2lkID0+IHtcblx0XHRcdFx0RmllbGRSdW50aW1lLmRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzKGV2LCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByZXBhcmVkUHJvcGVydGllcy5kYXRhTW9kZWxQYXRoKSk7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByZXBhcmVkUHJvcGVydGllcy5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIikge1xuXHRcdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCA9IChldik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5vbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aChcblx0XHRcdFx0XHRcdGV2LmdldFNvdXJjZSgpLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdChwcmVwYXJlZFByb3BlcnRpZXMuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKS5UYXJnZXQudmFsdWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cHJlcGFyZWRQcm9wZXJ0aWVzLmV2ZW50SGFuZGxlcnMuc2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlciA9IHRoaXMub25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyLmJpbmQodGhpcyk7XG5cdFx0XHRwcmVwYXJlZFByb3BlcnRpZXMudmFsdWVIZWxwSWQgPSBGaWVsZFN0cnVjdHVyZS5nZXRQb3NzaWJsZVZhbHVlSGVscFRlbXBsYXRlSWQoXG5cdFx0XHRcdHByZXBhcmVkUHJvcGVydGllcyxcblx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLFxuXHRcdFx0XHR0aGlzLmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuY29udGVudCA9IEZpZWxkU3RydWN0dXJlLmdldEZpZWxkU3RydWN0dXJlVGVtcGxhdGUocHJlcGFyZWRQcm9wZXJ0aWVzKSBhcyB1bmtub3duIGFzIENvbnRyb2w7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhlLm1lc3NhZ2UgKyBcIiBpbiBjcmVhdGVDb250ZW50IG9mIEZpZWxkXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jb250ZW50O1xuXHR9XG5cblx0b25IYW5kbGVUeXBlTWlzc21hdGNoKGV2OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZVR5cGVNaXNzbWF0Y2goZXYpO1xuXHR9XG5cblx0b25IYW5kbGVGaWxlU2l6ZUV4Y2VlZChldjogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlRmlsZVNpemVFeGNlZWQoZXYpO1xuXHR9XG5cblx0b25IYW5kbGVPcGVuVXBsb2FkZXIoZXY6IFVJNUV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLmhhbmRsZU9wZW5VcGxvYWRlcihldik7XG5cdH1cblxuXHRvblVwbG9hZFN0cmVhbShldjogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLnVwbG9hZFN0cmVhbSh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCksIGV2KTtcblx0fVxuXG5cdG9uSGFuZGxlQ2xvc2VVcGxvYWRlcihldjogVUk1RXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuaGFuZGxlQ2xvc2VVcGxvYWRlcihldik7XG5cdH1cblxuXHRvbk9wZW5FeHRlcm5hbExpbmsoZXY6IFVJNUV2ZW50PHt9LCBMaW5rPik6IHZvaWQge1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5vcGVuRXh0ZXJuYWxMaW5rKGV2KTtcblx0fVxuXG5cdG9uTGlua1ByZXNzZWQoZXY6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLnByZXNzTGluayhldik7XG5cdH1cblxuXHRvbkZvY3VzT3V0KGV2OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNPdXQoZXYpO1xuXHR9XG5cblx0b25TaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyKGV2OiBVSTVFdmVudDx7fSwgQXZhdGFyPik6IHZvaWQge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpO1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5zaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyKHNvdXJjZSwgdmlldyk7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eUJhZygpOiBQcm9wZXJ0aWVzT2Y8dGhpcz4ge1xuXHRcdGNvbnN0IHNldHRpbmdzOiBQcm9wZXJ0aWVzT2Y8dGhpcz4gPSB7fSBhcyBQcm9wZXJ0aWVzT2Y8dGhpcz47XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0c2V0dGluZ3NbcHJvcGVydHlOYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl0gPSBjdXJyZW50UHJvcGVydHlWYWx1ZTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGlvbk5hbWUgaW4gYWdncmVnYXRpb25zKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSk7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhZ2dyZWdhdGlvbkNvbnRlbnQpKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBtYW5hZ2VkT2JqZWN0IG9mIGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRcdGlmIChtYW5hZ2VkT2JqZWN0LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRcdGNoaWxkcmVuQXJyYXkucHVzaChtYW5hZ2VkT2JqZWN0LmdldFByb3BlcnR5QmFnKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGNoaWxkcmVuQXJyYXk7XG5cdFx0XHR9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50LmlzQTxCdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHk+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5CdWlsZGluZ0Jsb2NrT2JqZWN0UHJvcGVydHlcIikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWUgYXMga2V5b2YgUHJvcGVydGllc09mPHRoaXM+XSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5nZXRQcm9wZXJ0eUJhZygpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYmluZGluZyBpbiAoYWdncmVnYXRpb25Db250ZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IG1CaW5kaW5nSW5mb3M/OiBSZWNvcmQ8c3RyaW5nLCB7IGJpbmRpbmc/OiBCaW5kaW5nIH0+IH0pXG5cdFx0XHRcdFx0XHQubUJpbmRpbmdJbmZvcykge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3NbYWdncmVnYXRpb25OYW1lIGFzIGtleW9mIFByb3BlcnRpZXNPZjx0aGlzPl1bYmluZGluZ10gPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZ2V0QmluZGluZ0luZm8oYmluZGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZSBhcyBrZXlvZiBQcm9wZXJ0aWVzT2Y8dGhpcz5dID0gYWdncmVnYXRpb25Db250ZW50LmdldElkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIHRhcmdldCBwcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSB0YXJnZXRQcm9wZXJ0eSBvZiB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqL1xuXHRnZXRJbmxpbmVFZGl0UHJvcGVydHkoKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGFNb2RlbFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KFxuXHRcdFx0dGhpcy5tZXRhUGF0aCxcblx0XHRcdHRoaXMuY29udGV4dFBhdGhcblx0XHQpO1xuXHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+XG5cdFx0KT8udGFyZ2V0T2JqZWN0O1xuXHRcdHJldHVybiB0YXJnZXRQcm9wZXJ0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBmdWxseVF1YWxpZmllZE5hbWUgb2YgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZnVsbHlRdWFsaWZpZWROYW1lIG9mIHRoZSBpbmxpbmUgZWRpdCBmaWVsZC5cblx0ICovXG5cdGdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKT8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFkQSxJQXFCTUEsS0FBSyxJQUFBQyxJQUFBLEdBTlZDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtJQUN0Q0MsV0FBVyxFQUFFLENBQ1oseUNBQXlDLENBQUM7RUFFNUMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDREMsS0FBSyxDQUFDQyxVQUFVLENBQUMsRUFBQUMsS0FBQSxHQVVoQkMsUUFBUSxDQUFDO0lBQUVDLElB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