@sapui5/sap.fe.macros 1.130.1 → 1.131.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 (278) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/ActionCommand.js +39 -0
  4. package/src/sap/fe/macros/ActionCommand.tsx +49 -0
  5. package/src/sap/fe/macros/Chart.js +5 -5
  6. package/src/sap/fe/macros/Chart.tsx +4 -4
  7. package/src/sap/fe/macros/CommonHelper.js +23 -13
  8. package/src/sap/fe/macros/CommonHelper.ts +119 -66
  9. package/src/sap/fe/macros/DelegateUtil.js +37 -33
  10. package/src/sap/fe/macros/DelegateUtil.ts +94 -58
  11. package/src/sap/fe/macros/FooterContent.js +6 -6
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -2
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +2 -2
  15. package/src/sap/fe/macros/MacroAPI.js +9 -9
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -8
  17. package/src/sap/fe/macros/MultiTab.js +6 -6
  18. package/src/sap/fe/macros/MultiTab.tsx +3 -3
  19. package/src/sap/fe/macros/MultiValueField.js +9 -9
  20. package/src/sap/fe/macros/MultiValueField.tsx +3 -3
  21. package/src/sap/fe/macros/ObjectTitle.js +6 -6
  22. package/src/sap/fe/macros/ObjectTitle.tsx +2 -2
  23. package/src/sap/fe/macros/Page.js +6 -6
  24. package/src/sap/fe/macros/Page.tsx +2 -2
  25. package/src/sap/fe/macros/RichTextEditor.js +8 -8
  26. package/src/sap/fe/macros/RichTextEditor.tsx +2 -2
  27. package/src/sap/fe/macros/TSXUtils.js +3 -2
  28. package/src/sap/fe/macros/TSXUtils.tsx +4 -3
  29. package/src/sap/fe/macros/ValueHelp.js +6 -6
  30. package/src/sap/fe/macros/ValueHelp.tsx +2 -2
  31. package/src/sap/fe/macros/ai/EasyFilterBar.js +6 -6
  32. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +2 -2
  33. package/src/sap/fe/macros/chart/ActionGroup.js +6 -6
  34. package/src/sap/fe/macros/chart/ActionGroup.ts +1 -3
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -13
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -21
  37. package/src/sap/fe/macros/chart/ChartRuntime.js +2 -2
  38. package/src/sap/fe/macros/chart/ChartRuntime.ts +5 -4
  39. package/src/sap/fe/macros/chart/ChartUtils.js +1 -1
  40. package/src/sap/fe/macros/chart/ChartUtils.ts +1 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +12 -12
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +24 -22
  43. package/src/sap/fe/macros/contact/CollaborativeHeader.js +6 -6
  44. package/src/sap/fe/macros/contact/CollaborativeHeader.tsx +2 -2
  45. package/src/sap/fe/macros/contact/Contact.js +7 -6
  46. package/src/sap/fe/macros/contact/Contact.tsx +3 -2
  47. package/src/sap/fe/macros/contact/Email.js +6 -6
  48. package/src/sap/fe/macros/contact/Email.tsx +3 -3
  49. package/src/sap/fe/macros/contact/TeamContactOptions.js +6 -6
  50. package/src/sap/fe/macros/contact/TeamContactOptions.tsx +2 -2
  51. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +35 -59
  52. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +22 -52
  53. package/src/sap/fe/macros/contentSwitcher/ContentSwitcherItem.js +5 -6
  54. package/src/sap/fe/macros/contentSwitcher/ContentSwitcherItem.ts +4 -0
  55. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +31 -1
  56. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +32 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +16 -16
  58. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +6 -6
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +5 -3
  61. package/src/sap/fe/macros/controls/RadioButtons.js +7 -7
  62. package/src/sap/fe/macros/controls/RadioButtons.tsx +2 -2
  63. package/src/sap/fe/macros/controls/Section.js +3 -2
  64. package/src/sap/fe/macros/controls/Section.ts +1 -1
  65. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +1 -1
  66. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +8 -6
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +1 -2
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +0 -1
  69. package/src/sap/fe/macros/coreUI/ParameterDialog.js +38 -8
  70. package/src/sap/fe/macros/coreUI/ParameterDialog.tsx +34 -1
  71. package/src/sap/fe/macros/designtime/Designtime.helper.js +9 -11
  72. package/src/sap/fe/macros/designtime/Designtime.helper.ts +8 -10
  73. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +12 -23
  74. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +2 -11
  75. package/src/sap/fe/macros/field/FieldAPI.js +325 -53
  76. package/src/sap/fe/macros/field/FieldAPI.ts +309 -204
  77. package/src/sap/fe/macros/field/FieldFormatOptions.js +316 -8
  78. package/src/sap/fe/macros/field/FieldFormatOptions.ts +206 -5
  79. package/src/sap/fe/macros/field/FieldHelper.js +7 -5
  80. package/src/sap/fe/macros/field/FieldHelper.ts +14 -13
  81. package/src/sap/fe/macros/field/FieldRuntime.js +24 -221
  82. package/src/sap/fe/macros/field/FieldRuntime.ts +23 -260
  83. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +193 -0
  84. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +237 -0
  85. package/src/sap/fe/macros/field/FieldTemplating.js +2 -3
  86. package/src/sap/fe/macros/field/FieldTemplating.ts +10 -11
  87. package/src/sap/fe/macros/filter/CustomFilter.fragment.xml +4 -2
  88. package/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  89. package/src/sap/fe/macros/filter/FilterUtils.ts +8 -7
  90. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -1
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +4 -0
  92. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +13 -13
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +28 -24
  94. package/src/sap/fe/macros/filterBar/FilterBarSummary.js +75 -0
  95. package/src/sap/fe/macros/filterBar/FilterBarSummary.tsx +50 -0
  96. package/src/sap/fe/macros/filterBar/FilterHelper.js +1 -1
  97. package/src/sap/fe/macros/filterBar/FilterHelper.ts +3 -5
  98. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +61 -5
  99. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +74 -10
  100. package/src/sap/fe/macros/form/CustomFormElement.js +7 -7
  101. package/src/sap/fe/macros/form/CustomFormElement.tsx +4 -4
  102. package/src/sap/fe/macros/form/FormDelegate.js +6 -6
  103. package/src/sap/fe/macros/form/FormDelegate.ts +17 -10
  104. package/src/sap/fe/macros/form/FormElement.block.js +2 -1
  105. package/src/sap/fe/macros/form/FormElement.block.ts +1 -0
  106. package/src/sap/fe/macros/form/FormElementFlexibility.fragment.xml +1 -0
  107. package/src/sap/fe/macros/formatters/TableFormatter.js +18 -13
  108. package/src/sap/fe/macros/formatters/TableFormatter.ts +16 -10
  109. package/src/sap/fe/macros/internal/ActionCommand.block.js +12 -28
  110. package/src/sap/fe/macros/internal/ActionCommand.block.ts +12 -26
  111. package/src/sap/fe/macros/internal/DataPoint.js +7 -7
  112. package/src/sap/fe/macros/internal/DataPoint.tsx +4 -4
  113. package/src/sap/fe/macros/internal/FilterField.block.js +3 -2
  114. package/src/sap/fe/macros/internal/FilterField.block.ts +6 -5
  115. package/src/sap/fe/macros/internal/InternalField.block.js +64 -176
  116. package/src/sap/fe/macros/internal/InternalField.block.ts +26 -185
  117. package/src/sap/fe/macros/internal/field/DisplayStyle.js +40 -19
  118. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +30 -19
  119. package/src/sap/fe/macros/internal/field/EditStyle.js +66 -41
  120. package/src/sap/fe/macros/internal/field/EditStyle.tsx +69 -66
  121. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +64 -0
  122. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +61 -0
  123. package/src/sap/fe/macros/internal/field/FieldStructure.js +29 -64
  124. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +27 -68
  125. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +34 -23
  126. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +44 -33
  127. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +2 -2
  128. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +6 -2
  129. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  130. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +1 -1
  131. package/src/sap/fe/macros/internal/helpers/Upload.js +4 -3
  132. package/src/sap/fe/macros/internal/helpers/Upload.ts +5 -2
  133. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +15 -10
  134. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +15 -11
  135. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +1 -1
  136. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -1
  137. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +8 -3
  138. package/src/sap/fe/macros/internal/valuehelp/ValueListForCondition.fragment.xml +0 -1
  139. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +34 -25
  140. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +35 -24
  141. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +6 -1
  142. package/src/sap/fe/macros/kpiTag/AnalyticalKPITag.js +6 -6
  143. package/src/sap/fe/macros/kpiTag/AnalyticalKPITag.tsx +2 -2
  144. package/src/sap/fe/macros/library.js +7 -4
  145. package/src/sap/fe/macros/library.ts +4 -2
  146. package/src/sap/fe/macros/macroLibrary.js +3 -3
  147. package/src/sap/fe/macros/macroLibrary.ts +0 -2
  148. package/src/sap/fe/macros/messagebundle.properties +14 -4
  149. package/src/sap/fe/macros/messagebundle_ar.properties +88 -6
  150. package/src/sap/fe/macros/messagebundle_bg.properties +85 -3
  151. package/src/sap/fe/macros/messagebundle_ca.properties +85 -3
  152. package/src/sap/fe/macros/messagebundle_cnr.properties +86 -4
  153. package/src/sap/fe/macros/messagebundle_cs.properties +86 -4
  154. package/src/sap/fe/macros/messagebundle_cy.properties +86 -4
  155. package/src/sap/fe/macros/messagebundle_da.properties +88 -6
  156. package/src/sap/fe/macros/messagebundle_de.properties +85 -3
  157. package/src/sap/fe/macros/messagebundle_el.properties +86 -4
  158. package/src/sap/fe/macros/messagebundle_en.properties +86 -4
  159. package/src/sap/fe/macros/messagebundle_en_GB.properties +86 -4
  160. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +86 -4
  161. package/src/sap/fe/macros/messagebundle_es.properties +87 -5
  162. package/src/sap/fe/macros/messagebundle_es_MX.properties +86 -4
  163. package/src/sap/fe/macros/messagebundle_et.properties +85 -3
  164. package/src/sap/fe/macros/messagebundle_fi.properties +86 -4
  165. package/src/sap/fe/macros/messagebundle_fr.properties +85 -3
  166. package/src/sap/fe/macros/messagebundle_fr_CA.properties +86 -4
  167. package/src/sap/fe/macros/messagebundle_hi.properties +85 -3
  168. package/src/sap/fe/macros/messagebundle_hr.properties +87 -5
  169. package/src/sap/fe/macros/messagebundle_hu.properties +86 -4
  170. package/src/sap/fe/macros/messagebundle_id.properties +86 -4
  171. package/src/sap/fe/macros/messagebundle_it.properties +85 -3
  172. package/src/sap/fe/macros/messagebundle_iw.properties +85 -3
  173. package/src/sap/fe/macros/messagebundle_ja.properties +85 -3
  174. package/src/sap/fe/macros/messagebundle_kk.properties +86 -4
  175. package/src/sap/fe/macros/messagebundle_ko.properties +86 -4
  176. package/src/sap/fe/macros/messagebundle_lt.properties +86 -4
  177. package/src/sap/fe/macros/messagebundle_lv.properties +86 -4
  178. package/src/sap/fe/macros/messagebundle_mk.properties +87 -5
  179. package/src/sap/fe/macros/messagebundle_ms.properties +86 -4
  180. package/src/sap/fe/macros/messagebundle_nl.properties +86 -4
  181. package/src/sap/fe/macros/messagebundle_no.properties +86 -4
  182. package/src/sap/fe/macros/messagebundle_pl.properties +86 -4
  183. package/src/sap/fe/macros/messagebundle_pt.properties +85 -3
  184. package/src/sap/fe/macros/messagebundle_pt_PT.properties +86 -4
  185. package/src/sap/fe/macros/messagebundle_ro.properties +86 -4
  186. package/src/sap/fe/macros/messagebundle_ru.properties +85 -3
  187. package/src/sap/fe/macros/messagebundle_sh.properties +86 -4
  188. package/src/sap/fe/macros/messagebundle_sk.properties +85 -3
  189. package/src/sap/fe/macros/messagebundle_sl.properties +86 -4
  190. package/src/sap/fe/macros/messagebundle_sr.properties +86 -4
  191. package/src/sap/fe/macros/messagebundle_sv.properties +87 -5
  192. package/src/sap/fe/macros/messagebundle_th.properties +86 -4
  193. package/src/sap/fe/macros/messagebundle_tr.properties +85 -3
  194. package/src/sap/fe/macros/messagebundle_uk.properties +85 -3
  195. package/src/sap/fe/macros/messagebundle_vi.properties +86 -4
  196. package/src/sap/fe/macros/messagebundle_zh_CN.properties +85 -3
  197. package/src/sap/fe/macros/messagebundle_zh_TW.properties +85 -3
  198. package/src/sap/fe/macros/messages/MessageButton.js +5 -7
  199. package/src/sap/fe/macros/messages/MessageButton.ts +8 -6
  200. package/src/sap/fe/macros/microchart/MicroChartContainer.js +5 -5
  201. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +25 -21
  202. package/src/sap/fe/macros/microchart/MicroChartHelper.js +20 -13
  203. package/src/sap/fe/macros/microchart/MicroChartHelper.ts +86 -46
  204. package/src/sap/fe/macros/multivaluefield/MultiValueFieldRuntime.js +4 -4
  205. package/src/sap/fe/macros/multivaluefield/MultiValueFieldRuntime.ts +4 -4
  206. package/src/sap/fe/macros/quickView/QuickView.js +1 -1
  207. package/src/sap/fe/macros/quickView/QuickView.tsx +6 -6
  208. package/src/sap/fe/macros/quickView/QuickViewDelegate.js +49 -35
  209. package/src/sap/fe/macros/quickView/QuickViewDelegate.ts +345 -160
  210. package/src/sap/fe/macros/quickView/QuickViewHeaderOptions.block.js +1 -1
  211. package/src/sap/fe/macros/quickView/QuickViewHeaderOptions.block.tsx +2 -2
  212. package/src/sap/fe/macros/quickView/fragments/QuickViewFacets.fragment.xml +3 -1
  213. package/src/sap/fe/macros/share/Share.block.js +10 -12
  214. package/src/sap/fe/macros/share/Share.block.tsx +37 -26
  215. package/src/sap/fe/macros/situations/SituationsIndicator.js +8 -7
  216. package/src/sap/fe/macros/situations/SituationsIndicator.tsx +4 -4
  217. package/src/sap/fe/macros/situations/SituationsPopover.js +1 -1
  218. package/src/sap/fe/macros/situations/SituationsPopover.ts +5 -5
  219. package/src/sap/fe/macros/situations/SituationsText.js +1 -1
  220. package/src/sap/fe/macros/situations/SituationsText.ts +5 -4
  221. package/src/sap/fe/macros/table/ActionsTemplating.js +131 -95
  222. package/src/sap/fe/macros/table/ActionsTemplating.tsx +222 -159
  223. package/src/sap/fe/macros/table/BasicSearch.js +2 -2
  224. package/src/sap/fe/macros/table/BasicSearch.ts +9 -7
  225. package/src/sap/fe/macros/table/MdcTableTemplate.js +206 -159
  226. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +311 -265
  227. package/src/sap/fe/macros/table/SlotColumn.js +6 -6
  228. package/src/sap/fe/macros/table/SlotColumn.ts +2 -2
  229. package/src/sap/fe/macros/table/Table.block.js +111 -95
  230. package/src/sap/fe/macros/table/Table.block.tsx +9 -0
  231. package/src/sap/fe/macros/table/TableAPI.js +318 -375
  232. package/src/sap/fe/macros/table/TableAPI.ts +302 -322
  233. package/src/sap/fe/macros/table/TableFullScreenButton.js +205 -0
  234. package/src/sap/fe/macros/table/TableFullScreenButton.tsx +206 -0
  235. package/src/sap/fe/macros/table/TableHelper.js +19 -31
  236. package/src/sap/fe/macros/table/TableHelper.ts +62 -69
  237. package/src/sap/fe/macros/table/TableRuntime.js +6 -5
  238. package/src/sap/fe/macros/table/TableRuntime.ts +37 -20
  239. package/src/sap/fe/macros/table/TableSizeHelper.js +1 -1
  240. package/src/sap/fe/macros/table/TableSizeHelper.ts +2 -2
  241. package/src/sap/fe/macros/table/Utils.js +4 -3
  242. package/src/sap/fe/macros/table/Utils.ts +17 -16
  243. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +7 -10
  244. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +14 -14
  245. package/src/sap/fe/macros/table/delegates/TableDelegate.js +73 -94
  246. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +208 -204
  247. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +4 -3
  248. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +27 -7
  249. package/src/sap/fe/macros/table/designtime/Table.designtime.helper.js +15 -8
  250. package/src/sap/fe/macros/table/designtime/Table.designtime.helper.ts +12 -8
  251. package/src/sap/fe/macros/table/designtime/Table.designtime.js +144 -132
  252. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +150 -133
  253. package/src/sap/fe/macros/table/massEdit/MassEdit.js +58 -20
  254. package/src/sap/fe/macros/table/massEdit/MassEdit.tsx +65 -24
  255. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +24 -32
  256. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +30 -49
  257. package/src/sap/fe/macros/table/massEdit/MassEditField.js +5 -4
  258. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -2
  259. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +1 -1
  260. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +1 -2
  261. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +208 -0
  262. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +203 -0
  263. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +17 -7
  264. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +16 -9
  265. package/src/sap/fe/macros/table/uploadTable/UploadTableTemplate.js +1 -1
  266. package/src/sap/fe/macros/table/uploadTable/UploadTableTemplate.tsx +1 -1
  267. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +1 -1
  268. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +1 -1
  269. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +1 -1
  270. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +20 -19
  271. package/src/sap/fe/macros/visualfilters/VisualFilter.block.js +1 -1
  272. package/src/sap/fe/macros/visualfilters/VisualFilter.block.ts +11 -10
  273. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +13 -10
  274. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +60 -38
  275. package/src/sap/fe/macros/visualfilters/fragments/InteractiveBarChart.js +1 -1
  276. package/src/sap/fe/macros/visualfilters/fragments/InteractiveBarChart.ts +1 -1
  277. package/src/sap/fe/macros/table/TableFullScreenDialog.block.js +0 -232
  278. package/src/sap/fe/macros/table/TableFullScreenDialog.block.tsx +0 -219
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.130.1",
3
+ "version": "1.131.0",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.130.1</version>
9
+ <version>1.131.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controls/CommandExecution", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, CommandExecution, _jsx) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+ var resolveBindingString = BindingToolkit.resolveBindingString;
10
+ function getCommandExecutionForAction(commandName, action, parameters) {
11
+ let executeFunction;
12
+ let isEnabled;
13
+ const actionVisible = action.visible ? resolveBindingString(action.visible) : undefined;
14
+ const actionEnabled = action.enabled ? resolveBindingString(action.enabled) : undefined;
15
+ switch (action.type) {
16
+ case "ForAction":
17
+ executeFunction = parameters.onExecuteAction;
18
+ isEnabled = parameters.isActionEnabled !== undefined ? resolveBindingString(parameters.isActionEnabled) : actionEnabled;
19
+ break;
20
+ case "ForNavigation":
21
+ executeFunction = parameters.onExecuteIBN;
22
+ isEnabled = parameters.isIBNEnabled !== undefined ? resolveBindingString(parameters.isIBNEnabled) : actionEnabled;
23
+ break;
24
+ default:
25
+ executeFunction = parameters.onExecuteManifest;
26
+ isEnabled = parameters.isEnabled !== undefined ? resolveBindingString(parameters.isEnabled) : actionEnabled;
27
+ }
28
+ return _jsx(CommandExecution, {
29
+ "core:require": "{FPM: 'sap/fe/core/helpers/FPMHelper'}",
30
+ execute: executeFunction,
31
+ enabled: isEnabled,
32
+ visible: parameters.visible ?? actionVisible,
33
+ command: commandName ?? action.command
34
+ });
35
+ }
36
+ _exports.getCommandExecutionForAction = getCommandExecutionForAction;
37
+ return _exports;
38
+ }, false);
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uIiwiY29tbWFuZE5hbWUiLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwiZXhlY3V0ZUZ1bmN0aW9uIiwiaXNFbmFibGVkIiwiYWN0aW9uVmlzaWJsZSIsInZpc2libGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInVuZGVmaW5lZCIsImFjdGlvbkVuYWJsZWQiLCJlbmFibGVkIiwidHlwZSIsIm9uRXhlY3V0ZUFjdGlvbiIsImlzQWN0aW9uRW5hYmxlZCIsIm9uRXhlY3V0ZUlCTiIsImlzSUJORW5hYmxlZCIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiX2pzeCIsIkNvbW1hbmRFeGVjdXRpb24iLCJleGVjdXRlIiwiY29tbWFuZCIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25Db21tYW5kLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlQmluZGluZ1N0cmluZywgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcblxudHlwZSBDb21tYW5kRXhlY3V0aW9uUGFyYW1ldGVycyA9IHtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG9uRXhlY3V0ZUFjdGlvbj86IChldmVudDogQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQpID0+IHZvaWQ7XG5cdG9uRXhlY3V0ZUlCTj86IChldmVudDogQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQpID0+IHZvaWQ7XG5cdG9uRXhlY3V0ZU1hbmlmZXN0PzogKGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCkgPT4gdm9pZDtcblx0aXNBY3Rpb25FbmFibGVkPzogYm9vbGVhbiB8IHN0cmluZztcblx0aXNJQk5FbmFibGVkPzogYm9vbGVhbiB8IHN0cmluZztcblx0aXNFbmFibGVkPzogYm9vbGVhbiB8IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uKFxuXHRjb21tYW5kTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHBhcmFtZXRlcnM6IENvbW1hbmRFeGVjdXRpb25QYXJhbWV0ZXJzXG4pOiBDb21tYW5kRXhlY3V0aW9uIHtcblx0bGV0IGV4ZWN1dGVGdW5jdGlvbjogKGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCkgPT4gdm9pZDtcblx0bGV0IGlzRW5hYmxlZDogYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uVmlzaWJsZSA9IGFjdGlvbi52aXNpYmxlID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oYWN0aW9uLnZpc2libGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25FbmFibGVkID0gYWN0aW9uLmVuYWJsZWQgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihhY3Rpb24uZW5hYmxlZCkgOiB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRleGVjdXRlRnVuY3Rpb24gPSBwYXJhbWV0ZXJzLm9uRXhlY3V0ZUFjdGlvbiE7XG5cdFx0XHRpc0VuYWJsZWQgPVxuXHRcdFx0XHRwYXJhbWV0ZXJzLmlzQWN0aW9uRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4ocGFyYW1ldGVycy5pc0FjdGlvbkVuYWJsZWQpIDogYWN0aW9uRW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRleGVjdXRlRnVuY3Rpb24gPSBwYXJhbWV0ZXJzLm9uRXhlY3V0ZUlCTiE7XG5cdFx0XHRpc0VuYWJsZWQgPSBwYXJhbWV0ZXJzLmlzSUJORW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4ocGFyYW1ldGVycy5pc0lCTkVuYWJsZWQpIDogYWN0aW9uRW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRleGVjdXRlRnVuY3Rpb24gPSBwYXJhbWV0ZXJzLm9uRXhlY3V0ZU1hbmlmZXN0ITtcblx0XHRcdGlzRW5hYmxlZCA9IHBhcmFtZXRlcnMuaXNFbmFibGVkICE9PSB1bmRlZmluZWQgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihwYXJhbWV0ZXJzLmlzRW5hYmxlZCkgOiBhY3Rpb25FbmFibGVkO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0ZXhlY3V0ZT17ZXhlY3V0ZUZ1bmN0aW9ufVxuXHRcdFx0ZW5hYmxlZD17aXNFbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17cGFyYW1ldGVycy52aXNpYmxlID8/IGFjdGlvblZpc2libGV9XG5cdFx0XHRjb21tYW5kPXtjb21tYW5kTmFtZSA/PyBhY3Rpb24uY29tbWFuZCF9XG5cdFx0Lz5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBZU8sU0FBU0EsNEJBQTRCQSxDQUMzQ0MsV0FBK0IsRUFDL0JDLE1BQWtCLEVBQ2xCQyxVQUFzQyxFQUNuQjtJQUNuQixJQUFJQyxlQUErRDtJQUNuRSxJQUFJQyxTQUFrRTtJQUN0RSxNQUFNQyxhQUFhLEdBQUdKLE1BQU0sQ0FBQ0ssT0FBTyxHQUFHQyxvQkFBb0IsQ0FBVU4sTUFBTSxDQUFDSyxPQUFPLENBQUMsR0FBR0UsU0FBUztJQUNoRyxNQUFNQyxhQUFhLEdBQUdSLE1BQU0sQ0FBQ1MsT0FBTyxHQUFHSCxvQkFBb0IsQ0FBVU4sTUFBTSxDQUFDUyxPQUFPLENBQUMsR0FBR0YsU0FBUztJQUNoRyxRQUFRUCxNQUFNLENBQUNVLElBQUk7TUFDbEIsS0FBSyxXQUFXO1FBQ2ZSLGVBQWUsR0FBR0QsVUFBVSxDQUFDVSxlQUFnQjtRQUM3Q1IsU0FBUyxHQUNSRixVQUFVLENBQUNXLGVBQWUsS0FBS0wsU0FBUyxHQUFHRCxvQkFBb0IsQ0FBVUwsVUFBVSxDQUFDVyxlQUFlLENBQUMsR0FBR0osYUFBYTtRQUNySDtNQUNELEtBQUssZUFBZTtRQUNuQk4sZUFBZSxHQUFHRCxVQUFVLENBQUNZLFlBQWE7UUFDMUNWLFNBQVMsR0FBR0YsVUFBVSxDQUFDYSxZQUFZLEtBQUtQLFNBQVMsR0FBR0Qsb0JBQW9CLENBQVVMLFVBQVUsQ0FBQ2EsWUFBWSxDQUFDLEdBQUdOLGFBQWE7UUFDMUg7TUFDRDtRQUNDTixlQUFlLEdBQUdELFVBQVUsQ0FBQ2MsaUJBQWtCO1FBQy9DWixTQUFTLEdBQUdGLFVBQVUsQ0FBQ0UsU0FBUyxLQUFLSSxTQUFTLEdBQUdELG9CQUFvQixDQUFVTCxVQUFVLENBQUNFLFNBQVMsQ0FBQyxHQUFHSyxhQUFhO0lBQ3RIO0lBRUEsT0FDQ1EsSUFBQSxDQUFDQyxnQkFBZ0I7TUFDaEIsZ0JBQWEsd0NBQXdDO01BQ3JEQyxPQUFPLEVBQUVoQixlQUFnQjtNQUN6Qk8sT0FBTyxFQUFFTixTQUFVO01BQ25CRSxPQUFPLEVBQUVKLFVBQVUsQ0FBQ0ksT0FBTyxJQUFJRCxhQUFjO01BQzdDZSxPQUFPLEVBQUVwQixXQUFXLElBQUlDLE1BQU0sQ0FBQ21CO0lBQVMsQ0FDeEMsQ0FBQztFQUVKO0VBQUNDLFFBQUEsQ0FBQXRCLDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsT0FBQXNCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,49 @@
1
+ import { resolveBindingString, type BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
2
+ import CommandExecution from "sap/fe/core/controls/CommandExecution";
3
+ import { type BaseAction } from "sap/fe/core/converters/controls/Common/Action";
4
+ import { type CommandExecution$ExecuteEvent } from "sap/ui/core/CommandExecution";
5
+
6
+ type CommandExecutionParameters = {
7
+ visible?: boolean;
8
+ onExecuteAction?: (event: CommandExecution$ExecuteEvent) => void;
9
+ onExecuteIBN?: (event: CommandExecution$ExecuteEvent) => void;
10
+ onExecuteManifest?: (event: CommandExecution$ExecuteEvent) => void;
11
+ isActionEnabled?: boolean | string;
12
+ isIBNEnabled?: boolean | string;
13
+ isEnabled?: boolean | string;
14
+ };
15
+
16
+ export function getCommandExecutionForAction(
17
+ commandName: string | undefined,
18
+ action: BaseAction,
19
+ parameters: CommandExecutionParameters
20
+ ): CommandExecution {
21
+ let executeFunction: (event: CommandExecution$ExecuteEvent) => void;
22
+ let isEnabled: boolean | BindingToolkitExpression<boolean> | undefined;
23
+ const actionVisible = action.visible ? resolveBindingString<boolean>(action.visible) : undefined;
24
+ const actionEnabled = action.enabled ? resolveBindingString<boolean>(action.enabled) : undefined;
25
+ switch (action.type) {
26
+ case "ForAction":
27
+ executeFunction = parameters.onExecuteAction!;
28
+ isEnabled =
29
+ parameters.isActionEnabled !== undefined ? resolveBindingString<boolean>(parameters.isActionEnabled) : actionEnabled;
30
+ break;
31
+ case "ForNavigation":
32
+ executeFunction = parameters.onExecuteIBN!;
33
+ isEnabled = parameters.isIBNEnabled !== undefined ? resolveBindingString<boolean>(parameters.isIBNEnabled) : actionEnabled;
34
+ break;
35
+ default:
36
+ executeFunction = parameters.onExecuteManifest!;
37
+ isEnabled = parameters.isEnabled !== undefined ? resolveBindingString<boolean>(parameters.isEnabled) : actionEnabled;
38
+ }
39
+
40
+ return (
41
+ <CommandExecution
42
+ core:require="{FPM: 'sap/fe/core/helpers/FPMHelper'}"
43
+ execute={executeFunction}
44
+ enabled={isEnabled}
45
+ visible={parameters.visible ?? actionVisible}
46
+ command={commandName ?? action.command!}
47
+ />
48
+ );
49
+ }
@@ -304,7 +304,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
304
304
  this.content = this.createContent();
305
305
  }
306
306
  };
307
- _proto.onAfterRendering = function onAfterRendering() {
307
+ _proto.onAfterRendering = function onAfterRendering(afterRenderingEvent) {
308
308
  var _this$getPageControll;
309
309
  const view = (_this$getPageControll = this.getPageController()) === null || _this$getPageControll === void 0 ? void 0 : _this$getPageControll.getView();
310
310
  const internalModelContext = view === null || view === void 0 ? void 0 : view.getBindingContext("internal");
@@ -316,7 +316,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
316
316
  showMessageStrip[sCacheKey] = chart.data("draftSupported") === "true" && !!oBindingContext && !oBindingContext.getObject("IsActiveEntity");
317
317
  internalModelContext.setProperty("controls/showMessageStrip", showMessageStrip);
318
318
  this.attachStateChangeHandler();
319
- _MacroAPI.prototype.onAfterRendering.call(this);
319
+ _MacroAPI.prototype.onAfterRendering.call(this, afterRenderingEvent);
320
320
  };
321
321
  _proto.attachStateChangeHandler = function attachStateChangeHandler() {
322
322
  StateUtil.detachStateChange(this.stateChangeHandler);
@@ -622,8 +622,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
622
622
  }
623
623
 
624
624
  /**
625
- * Get the selection variant from the chart.
626
- * @returns A promise that resolves with a {@link sap.fe.navigation.SelectionVariant}
625
+ * Get the selection variant from the chart. This function considers only the selection variant applied at the control level.
626
+ * @returns A promise that resolves with {@link sap.fe.navigation.SelectionVariant}.
627
627
  * @public
628
628
  */;
629
629
  _proto.getSelectionVariant = async function getSelectionVariant() {
@@ -964,4 +964,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
964
964
  _exports = Chart;
965
965
  return _exports;
966
966
  }, false);
967
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsIl9kZWM0IiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzUiLCJyZXF1aXJlZCIsImV4cGVjdGVkVHlwZXMiLCJleHBlY3RlZEFubm90YXRpb25zIiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJhbGxvd2VkVmFsdWVzIiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiYXNzb2NpYXRpb24iLCJfZGVjMTciLCJhZ2dyZWdhdGlvbiIsIl9kZWMxOCIsImFsdFR5cGVzIiwibXVsdGlwbGUiLCJkZWZhdWx0Q2xhc3MiLCJBY3Rpb24iLCJfZGVjMTkiLCJldmVudCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMyNSIsIl9kZWMyNiIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0U2VjdGlvbkNvbnRlbnRSb2xlIiwic2VuZERhdGFUb0NvbnN1bWVyIiwiY29uc3VtZXJEYXRhIiwiX3RoaXMkY29udGVudCIsIl90aGlzJGNvbnRlbnQyIiwiX3RoaXMkY29udGVudDMiLCJjb250ZW50Iiwic2V0SGVhZGVyIiwidGl0bGUiLCJzZXRIZWFkZXJTdHlsZSIsInNldEhlYWRlckxldmVsIiwidGl0bGVMZXZlbCIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJfdGhpcyRjb250ZW50NCIsIl90aGlzJGNvbnRlbnQ0JGdldEJpbiIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJzZXR0aW5ncyIsIm90aGVycyIsIl90aGlzIiwiX2FwcGx5SWRUb0NvbnRlbnQiLCJpZCIsImdlbmVyYXRlIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJwcmV2RHJpbGxTdGFjayIsImluaXRpYWxDb250cm9sU3RhdGUiLCJjaGFydEFjdGlvbnMiLCJfY29tbWFuZEFjdGlvbnMiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJfZGVzY3JpcHRvcjE4IiwiX2Rlc2NyaXB0b3IxOSIsIl9kZXNjcmlwdG9yMjAiLCJfZGVzY3JpcHRvcjIxIiwiX2Rlc2NyaXB0b3IyMiIsIl9leHBvcnRzIiwiaXNBIiwidHlwZU5hbWUiLCJvbGRWYWxpZFR5cGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjcmVhdGVDb250ZW50Iiwib25BZnRlclJlbmRlcmluZyIsIl90aGlzJGdldFBhZ2VDb250cm9sbCIsInZpZXciLCJnZXRQYWdlQ29udHJvbGxlciIsImdldFZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImNoYXJ0IiwiZ2V0Q29udGVudCIsInNob3dNZXNzYWdlU3RyaXAiLCJzQ2hhcnRFbnRpdHlQYXRoIiwiZGF0YSIsInNDYWNoZUtleSIsIm9CaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsInNldFByb3BlcnR5IiwiYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyIiwiU3RhdGVVdGlsIiwiZGV0YWNoU3RhdGVDaGFuZ2UiLCJzdGF0ZUNoYW5nZUhhbmRsZXIiLCJhdHRhY2hTdGF0ZUNoYW5nZSIsIm9FdmVudCIsImNvbnRyb2wiLCJnZXRQYXJhbWV0ZXIiLCJjaGFydEJsb2NrIiwiZ2V0UGFyZW50IiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm9GaWx0ZXJDb250cm9sIiwib0NoYXJ0IiwiRmlsdGVyVXRpbHMiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsImFEYXRhIiwiYlNlbGVjdGVkIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsImZpcmVFdmVudCIsIm1lcmdlIiwic2VsZWN0ZWQiLCJvbkludGVybmFsRGF0YVJlcXVlc3RlZCIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNhcmRzIiwiYWN0aW9uVG9vbGJhckl0ZW1zIiwiZ2V0QWN0aW9ucyIsImhhc0luc2lnaHRBY3Rpb25FbmFibGVkIiwiZ2V0RmlsdGVyIiwiY2FyZCIsImdldENhcmRNYW5pZmVzdENoYXJ0IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInB1c2giLCJnZXRDaGFydENvbnRyb2wiLCJnZXRIZWFkZXIiLCJjYWxsYmFjayIsIm9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjayIsImJpbmQiLCJoYXNTZWxlY3Rpb25zIiwibWRjQ2hhcnQiLCJfbWRjQ2hhcnQkZ2V0Q29udHJvbEQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0IiwiYURpbWVuc2lvbnMiLCJDaGFydFV0aWxzIiwiZ2V0RGltZW5zaW9uc0Zyb21EcmlsbFN0YWNrIiwiYklzRHJpbGxEb3duIiwiYklzRHJpbGxVcCIsImJOb0NoYW5nZSIsInRvU3RyaW5nIiwiYUZpbHRlcnMiLCJnZXRDaGFydFNlbGVjdGlvbnMiLCJlcnIiLCJMb2ciLCJlcnJvciIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwiaW5zaWdodHNQYXJhbXMiLCJjcmVhdGVDaGFydENhcmRQYXJhbXMiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsImUiLCJzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSIsImdldENhcmRNYW5pZmVzdCIsIl90aGlzJGdldFBhZ2VDb250cm9sbDIiLCJzaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiZ2V0U2VydmljZSIsImNoYXJ0RmlsdGVySW5mbyIsImdldEFsbEZpbHRlckluZm8iLCJmaWx0ZXJzIiwiZm9yRWFjaCIsImZpbHRlciIsImdldFBhdGgiLCJzUGF0aCIsImdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyIsIkZpbHRlciIsImFuZCIsInVuZGVmaW5lZCIsImdldFByb3BlcnR5RGF0YU1vZGVsIiwicHJvcGVydHlOYW1lIiwibWV0YVBhdGgiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImRpbWVuc2lvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImNoYXJ0UHJvcGVydHkiLCJnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kIiwibmFtZSIsImtpbmQiLCJyZXBsYWNlIiwiX2NvbnZlcnRTdGF0ZVV0aWxUb1ByZXNlbnRhdGlvblZhcmlhbnQiLCJjaGFydFN0YXRlIiwiX2NoYXJ0U3RhdGUkc29ydGVycyIsIl9jaGFydFN0YXRlJHN1cHBsZW1lbiIsIl9jaGFydFN0YXRlJHN1cHBsZW1lbjIiLCJzb3J0T3JkZXIiLCJzb3J0ZXJzIiwibWFwIiwic29ydGVyIiwiUHJvcGVydHkiLCJEZXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsInN1cHBsZW1lbnRhcnlDb25maWciLCJwcm9wZXJ0aWVzIiwiY2hhcnRUeXBlIiwiY2hhcnRUeXBlSW5SZXF1aXJlZEZvcm1hdCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJkaW1lbnNpb25BdHRyaWJ1dGVzIiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJpdGVtcyIsIml0ZW0iLCJfaXRlbSRyb2xlIiwiX2l0ZW0kcm9sZTIiLCJyb2xlIiwic3Vic3RyaW5nIiwiRGltZW5zaW9uIiwiUm9sZSIsIk1lYXN1cmUiLCJjaGFydFZpeiIsIkNvbnRlbnQiLCJDaGFydFR5cGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiRGltZW5zaW9ucyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiTWVhc3VyZXMiLCJUeXBlIiwiY2hhcnRQViIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJzZXRDaGFydFZpc3VhbGl6YXRpb24iLCJzZXRQcm9wZXJ0aWVzIiwiU29ydE9yZGVyIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldElkIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwic2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJfY2hhcnQkZ2V0Q29udHJvbERlbGUiLCJleGlzdGluZ1ByZXNlbnRhdGlvblZhcmlhbnQiLCJwcm9wZXJ0aWVzSW5mbyIsImZldGNoUHJvcGVydGllcyIsInN0YXRlVXRpbFB2IiwiUHJlc2VudGF0aW9uVmFyaWFudFRvU3RhdGVVdGlsc1BWIiwiY29udmVydFB2VG9TdGF0ZVV0aWxQdiIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiZ2V0VmFyaWFudCIsInNldEN1cnJlbnRWYXJpYW50S2V5Iiwia2V5IiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU3RhdGVIZWxwZXIiLCJzZXRTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJhcmd1bWVudHMiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiZ2V0Q29udHJvbFN0YXRlIiwiY29udHJvbFN0YXRlIiwiZnVsbFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwic2V0SW5pdGlhbFN0YXRlIiwicmV0cmlldmVTdGF0ZSIsIl90aGlzJGNvbnRlbnQkZ2V0VmFyaSIsImlubmVyQ2hhcnQiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRJZCIsImFwcGx5TGVnYWN5U3RhdGUiLCJfbmF2UGFyYW1ldGVycyIsInNob3VsZEFwcGx5RGlmZlN0YXRlIiwidm0iLCJ2bVN0YXRlIiwiX2NvbnRyb2xTdGF0ZSRpbm5lckNoIiwiX2NvbnRyb2xTdGF0ZSRpbm5lckNoMiIsImFwcGx5U3RhdGUiLCJfY29udHJvbFN0YXRlJHZhcmlhbnQiLCJfdGhpcyRjb250ZW50NSIsImN1cnJlbnRWYXJpYW50IiwiX3RoaXMkY29udGVudDYiLCJvdk0iLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsInNWYXJpYW50UmVmZXJlbmNlIiwic29tZSIsIm9WYXJpYW50IiwiZ2V0S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiQ29udHJvbFZhcmlhbnRBcHBseUFQSSIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJpbm5lckNoYXJ0U3RhdGUiLCJmaW5hbFN0YXRlIiwiZGlmZlN0YXRlIiwiX3RoaXMkZ2V0UGFnZUNvbnRyb2xsMyIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiX2NyZWF0ZUNvbnRlbnQiLCJvd25lciIsIl9nZXRPd25lciIsInNldEZpbHRlciIsImRlc3Ryb3kiLCJ2YWx1ZSIsInN1cHByZXNzSW52YWxpZGF0ZSIsIl9hcHBseWluZ1NldHRpbmdzIiwiZ2V0TWV0YWRhdGEiLCJnZXRQcm9wZXJ0aWVzIiwicmVtb3ZlQWdncmVnYXRpb24iLCJyZW1vdmVkIiwiZ2V0QWdncmVnYXRpb25zIiwiYWRkQWdncmVnYXRpb24iLCJpbnNlcnRBZ2dyZWdhdGlvbiIsImluZGV4IiwiX3RoaXMkX2dldE93bmVyIiwiX3RoaXMkX2dldE93bmVyJGdldFJvIiwiX3RoaXMkX2dldE93bmVyMiIsIl90aGlzJGdldEFwcENvbXBvbmVudCIsImNvbnRleHRQYXRoIiwiX3Jlc29sdmVkQ29udGV4dFBhdGgiLCJlbmRzV2l0aCIsImdldE1kY0NoYXJ0VGVtcGxhdGUiLCJnZXRSb290Q29udHJvbGxlciIsImdldFZpZXdEYXRhIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RGlhZ25vc3RpY3MiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIk1hY3JvQVBJIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiVGl0bGVMZXZlbCIsIkF1dG8iLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYXJ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0IGFzIFZvY2FidWxhcnlDaGFydCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBDaGFydENoYXJ0IGZyb20gXCJzYXAvY2hhcnQvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvdmlld1N0YXRlL0lWaWV3U3RhdGVDb250cmlidXRvclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSwgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uR3JvdXBcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgdHlwZSBJU2luZ2xlU2VjdGlvbkNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL3NlY3Rpb24vSVNpbmdsZVNlY3Rpb25Db250cmlidXRvclwiO1xuaW1wb3J0IHR5cGUgeyBDb25zdW1lckRhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9zZWN0aW9uL0lTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3JcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgRGltZW5zaW9uVHlwZSwgTWVhc3VyZVR5cGUsIFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vUHJlc2VudGF0aW9uVmFyaWFudFwiO1xuaW1wb3J0IFByZXNlbnRhdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1ByZXNlbnRhdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2FyZE1hbmlmZXN0IH0gZnJvbSBcInNhcC9pbnNpZ2h0cy9DYXJkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFdmVudCwgZGVmYXVsdCBhcyBVSTVFdmVudCB9IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTGF5b3V0RGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHsgVGl0bGVMZXZlbCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNRENDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnREZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9DaGFydERlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBcHBTdGF0ZSwgSXRlbXMsIFNvcnRlcnMgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWxDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5SW5mbyB9IGZyb20gXCIuL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbk9yQWN0aW9uR3JvdXAsIENoYXJ0Q29udGV4dE9iamVjdFBhdGgsIENoYXJ0Q3VzdG9tRGF0YSwgQ29tbWFuZEFjdGlvbiB9IGZyb20gXCIuL2NoYXJ0L01kY0NoYXJ0VGVtcGxhdGVcIjtcbmltcG9ydCB7IGdldE1kY0NoYXJ0VGVtcGxhdGUgfSBmcm9tIFwiLi9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgUHJlc2VudGF0aW9uVmFyaWFudFRvU3RhdGVVdGlsc1BWIGZyb20gXCIuL2NoYXJ0L2FkYXB0ZXIvQ2hhcnRQdlRvU3RhdGVVdGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ2hhcnRDYXJkUGFyYW1zIH0gZnJvbSBcIi4vaW5zaWdodHMvQW5hbHl0aWNhbEluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCIuL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwiLi9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydENvbnRlbnQsIEluc2lnaHRzUGFyYW1zIH0gZnJvbSBcIi4vaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRDYXJkTWFuaWZlc3QsIHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3LCBzaG93SW5zaWdodHNDYXJkUHJldmlldyB9IGZyb20gXCIuL2luc2lnaHRzL0luc2lnaHRzU2VydmljZVwiO1xuaW1wb3J0IFN0YXRlSGVscGVyIGZyb20gXCIuL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIENoYXJ0U3RhdGUgPSB7XG5cdGlubmVyQ2hhcnQ/OiB7XG5cdFx0aW5pdGlhbFN0YXRlPzoge1xuXHRcdFx0aXRlbXM/OiB7IG5hbWU6IHN0cmluZyB9W107XG5cdFx0fTtcblx0XHRmdWxsU3RhdGU/OiB7XG5cdFx0XHRpdGVtcz86IHsgbmFtZTogc3RyaW5nIH1bXTtcblx0XHRcdGZpbHRlcj86IG9iamVjdDtcblx0XHR9O1xuXHR9O1xuXHR2YXJpYW50TWFuYWdlbWVudD86IHtcblx0XHR2YXJpYW50SWQ/OiBzdHJpbmcgfCBudWxsO1xuXHR9O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuLyoqXG4gKiBCdWlsZGluZyBibG9jayB1c2VkIHRvIGNyZWF0ZSBhIGNoYXJ0IGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgY29udGV4dFBhdGggYW5kIG1ldGFQYXRoIGlzIGV4cGVjdGVkLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Q2hhcnQgaWQ9XCJNeUNoYXJ0XCIgY29udGV4dFBhdGg9XCIvUm9vdEVudGl0eVwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuQ2hhcnRcbiAqIEBpZ25vcmVJbnRlcmZhY2Ugc2FwLmZlLm1hY3Jvcy5jb250cm9scy5zZWN0aW9uLklTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3JcbiAqIEB1aTUtbWV0YW1vZGVsXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIiwgeyByZXR1cm5UeXBlczogW1wic2FwLmZlLm1hY3Jvcy5NYWNyb0FQSVwiXSB9KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhcnQgZXh0ZW5kcyBNYWNyb0FQSSBpbXBsZW1lbnRzIElTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3IsIElWaWV3U3RhdGVDb250cmlidXRvcjxDaGFydFN0YXRlPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX2ZlX2NvcmVfY29udHJvbGxlcmV4dGVuc2lvbnNfdmlld1N0YXRlX0lWaWV3U3RhdGVDb250cmlidXRvciA9IHRydWU7XG5cblx0Y29udGVudCE6IE1EQ0NoYXJ0O1xuXG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLnNlY3Rpb24uSVNpbmdsZVNlY3Rpb25Db250cmlidXRvclwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9mZV9tYWNyb3NfY29udHJvbHNfc2VjdGlvbl9JU2luZ2xlU2VjdGlvbkNvbnRyaWJ1dG9yID0gdHJ1ZTtcblxuXHRnZXRTZWN0aW9uQ29udGVudFJvbGUoKTogXCJwcm92aWRlclwiIHwgXCJjb25zdW1lclwiIHtcblx0XHRyZXR1cm4gXCJjb25zdW1lclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZW5kRGF0YVRvQ29uc3VtZXIgbWV0aG9kIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgSVNpbmdsZVNlY3Rpb25Db250cmlidXRvclxuXHQgKlxuXHQgKiBXaWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlNlY3Rpb24gY29udHJvbCB3aGVuIHRoZXJlIGlzIGEgQ2hhcnQgYnVpbGRpbmcgYmxvY2sgcmVuZGVyZWQgd2l0aGluIGEgc2VjdGlvblxuXHQgKiBhbG9uZyB3aXRoIHRoZSBjb25zdW1lckRhdGEgaS5lLiBzZWN0aW9uJ3MgZGF0YSBzdWNoIGFzIHRpdGxlIGFuZCB0aXRsZSBsZXZlbCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8gdGhlIGNoYXJ0IHVzaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBhY2NvcmRpbmdseS5cblx0ICpcblx0ICovXG5cblx0c2VuZERhdGFUb0NvbnN1bWVyKGNvbnN1bWVyRGF0YTogQ29uc3VtZXJEYXRhKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50Py5zZXRIZWFkZXIoY29uc3VtZXJEYXRhLnRpdGxlKTtcblx0XHR0aGlzLmNvbnRlbnQ/LnNldEhlYWRlclN0eWxlKFwiSDRcIik7XG5cdFx0dGhpcy5jb250ZW50Py5zZXRIZWFkZXJMZXZlbChjb25zdW1lckRhdGEudGl0bGVMZXZlbCBhcyBUaXRsZUxldmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgY2hhcnRcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cmVhZG9ubHkgaWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIHByZXNlbnRhdGlvbiBjb250ZXh0IChVSS5DaGFydCB3aXRoIG9yIHdpdGhvdXQgYSBxdWFsaWZpZXIpXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdLFxuXHRcdGV4cGVjdGVkQW5ub3RhdGlvbnM6IFtcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCJcblx0XHRdXG5cdH0pXG5cdHJlYWRvbmx5IG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBlbnRpdHlTZXQgb3IgbmF2aWdhdGlvblByb3BlcnR5XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdLFxuXHRcdGV4cGVjdGVkQW5ub3RhdGlvbnM6IFtdXG5cdH0pXG5cdHJlYWRvbmx5IGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIGhlYWRlciB0ZXh0IHRoYXQgaXMgc2hvd24gaW4gdGhlIGNoYXJ0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cmVhZG9ubHkgaGVhZGVyITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgaGVhZGVyIHRleHQgc2hvdWxkIGJlIHNob3duIG9yIG5vdFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHJlYWRvbmx5IGhlYWRlclZpc2libGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBzZWxlY3Rpb24gbW9kZSB0byBiZSB1c2VkIGJ5IHRoZSBjaGFydC5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBOb25lYCwgYFNpbmdsZWAgb3IgYE11bHRpcGxlYFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IFwiTXVsdGlwbGVcIiwgYWxsb3dlZFZhbHVlczogW1wiTm9uZVwiLCBcIlNpbmdsZVwiLCBcIk11bHRpcGxlXCJdIH0pXG5cdHJlYWRvbmx5IHNlbGVjdGlvbk1vZGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHRoZSBraW5kIG9mIHZhcmlhbnQgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgY2hhcnQuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWUgaXMgYENvbnRyb2xgLjxici8+XG5cdCAqIElmIHNldCB3aXRoIHZhbHVlIGBDb250cm9sYCwgYSB2YXJpYW50IG1hbmFnZW1lbnQgY29udHJvbCBpcyBzZWVuIHdpdGhpbiB0aGUgY2hhcnQgYW5kIHRoZSBjaGFydCBpcyBsaW5rZWQgdG8gdGhpcy48YnIvPlxuXHQgKiBJZiBub3Qgc2V0IHdpdGggYW55IHZhbHVlLCB2YXJpYW50IG1hbmFnZW1lbnQgY29udHJvbCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGNoYXJ0LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBhbGxvd2VkVmFsdWVzOiBbXCJDb250cm9sXCJdIH0pXG5cdHJlYWRvbmx5IHZhcmlhbnRNYW5hZ2VtZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGljaCBvcHRpb25zIHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgY2hhcnQgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICogSWYgaXQgaXMgc2V0IHRvIGB0cnVlYCwgYWxsIHBvc3NpYmxlIG9wdGlvbnMgZm9yIHRoaXMga2luZCBvZiBjaGFydCBhcmUgZW5hYmxlZC48YnIvPlxuXHQgKiBJZiBpdCBpcyBzZXQgdG8gYGZhbHNlYCwgcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkLjxici8+XG5cdCAqIDxici8+XG5cdCAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgbW9yZSBncmFudWxhciBjb250cm9sIGZvciB0aGUgcGVyc29uYWxpemF0aW9uIGJ5IHByb3ZpZGluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggdGhlIG9wdGlvbnMgeW91IHdhbnQgdG8gYmUgYXZhaWxhYmxlLjxici8+XG5cdCAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTo8YnIvPlxuXHQgKiAtIFNvcnQ8YnIvPlxuXHQgKiAtIFR5cGU8YnIvPlxuXHQgKiAtIEl0ZW08YnIvPlxuXHQgKiAtIEZpbHRlcjxici8+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRyZWFkb25seSBwZXJzb25hbGl6YXRpb24hOiBzdHJpbmcgfCBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBIZWFkZXIgbGV2ZWwgb2YgY2hhcnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cmVhZG9ubHkgaGVhZGVyTGV2ZWw6IFRpdGxlTGV2ZWwgPSBUaXRsZUxldmVsLkF1dG87XG5cblx0LyoqXG5cdCAqIENoYXJ0IGRlbGVnYXRlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcIm9iamVjdFwiIH0pXG5cdHJlYWRvbmx5IGNoYXJ0RGVsZWdhdGU/OiBvYmplY3Q7XG5cblx0LyoqXG5cdCAqIFVzZWQgaW50ZXJuYWxseSBmb3IgTFIgYW5kIE9QXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZWFkb25seSBfYXBwbHlJZFRvQ29udGVudCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBObyBkYXRhIHRleHRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cmVhZG9ubHkgbm9EYXRhVGV4dD86IHN0cmluZztcblxuXHQvKipcblx0ICogUGFyYW1ldGVyIHdpdGggZHJpbGxzdGFjayBvbiBhIGRyaWxsIHVwLyBkcmlsbCBkb3duIG9mIHRoZSBNRENfQ2hhcnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByZXZEcmlsbFN0YWNrOiBzdHJpbmdbXSA9IFtdO1xuXG5cdF9jb250ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRfY29udGV4dCE6IE1vZGVsQ29udGV4dDtcblxuXHRibG9ja0FjdGlvbnM/OiBBY3Rpb25PckFjdGlvbkdyb3VwO1xuXG5cdF9ibG9ja0lkPzogc3RyaW5nO1xuXG5cdF9wZXJzb25hbGl6YXRpb24/OiBzdHJpbmcgfCBib29sZWFuO1xuXG5cdGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0X2Jsb2NrQWN0aW9ucyE6IChNZW51SXRlbSB8IEFjdGlvblRvb2xiYXJBY3Rpb24gfCB1bmRlZmluZWQpW107XG5cblx0Y2hhcnREZWZpbml0aW9uITogQ2hhcnRWaXN1YWxpemF0aW9uO1xuXG5cdG5hdmlnYXRpb25QYXRoPzogc3RyaW5nO1xuXG5cdGF1dG9CaW5kT25Jbml0PzogYm9vbGVhbjtcblxuXHR2aXpQcm9wZXJ0aWVzPzogc3RyaW5nO1xuXG5cdGNoYXJ0QWN0aW9ucz86IEJhc2VBY3Rpb25bXSA9IFtdO1xuXG5cdGZpbHRlcj86IHN0cmluZztcblxuXHR2aXNpYmxlPzogc3RyaW5nO1xuXG5cdGRyYWZ0U3VwcG9ydGVkPzogYm9vbGVhbjtcblxuXHRoZWFkZXJTdHlsZT86IFRpdGxlTGV2ZWw7XG5cblx0dXNlQ29uZGVuc2VkTGF5b3V0ITogYm9vbGVhbjtcblxuXHRfbWV0YVBhdGhDb250ZXh0ITogTW9kZWxDb250ZXh0O1xuXG5cdF9jdXN0b21EYXRhITogQ2hhcnRDdXN0b21EYXRhO1xuXG5cdF9jaGFydENvbnRleHQhOiBNb2RlbENvbnRleHQ7XG5cblx0X2NoYXJ0VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdF9jaGFydCE6IFZvY2FidWxhcnlDaGFydDtcblxuXHRfbWV0YU1vZGVsITogT0RhdGFNZXRhTW9kZWw7XG5cblx0bWVhc3VyZXM/OiBNb2RlbENvbnRleHQ7XG5cblx0X3NvcnRDb25kaXRpb25zOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cblx0X2NvbW1hbmRBY3Rpb25zOiBDb21tYW5kQWN0aW9uW10gPSBbXTtcblxuXHRmaXJlVmFyaWFudFNlbGVjdGVkPzogRnVuY3Rpb247XG5cblx0ZmlyZVZhcmlhbnRTYXZlZD86IEZ1bmN0aW9uO1xuXG5cdGZpcmVTZWdtZW50ZWRCdXR0b25QcmVzc2VkPzogRnVuY3Rpb247XG5cblx0X3Jlc29sdmVkQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIElkIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFydC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0ZmlsdGVyQmFyPzogc3RyaW5nO1xuXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAudWkuY29yZS5MYXlvdXREYXRhXCJcblx0fSlcblx0bGF5b3V0RGF0YSE6IExheW91dERhdGE7XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBhY3Rpb25zIG9mIHRoZSBjaGFydC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uXCIsXG5cdFx0YWx0VHlwZXM6IFtcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uR3JvdXBcIl0sXG5cdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0ZGVmYXVsdENsYXNzOiBBY3Rpb25cblx0fSlcblx0YWN0aW9ucyE6IEFjdGlvbltdIHwgQWN0aW9uR3JvdXBbXTtcblxuXHQvKipcblx0ICogR2V0cyBjb250ZXh0cyBmcm9tIHRoZSBjaGFydCB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci5cblx0ICogQHJldHVybnMgQ29udGV4dHMgb2YgdGhlIHJvd3Mgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U2VsZWN0ZWRDb250ZXh0cygpOiBDb250ZXh0W10ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSB8fCBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBjaGFydCBzZWxlY3Rpb25zIGFyZSBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgc2VsZWN0ZWQvZGVzZWxlY3RlZCBhbmQgdGhlIEJvb2xlYW4gZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGRhdGEgaXMgc2VsZWN0ZWQgb3IgZGVzZWxlY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VsZWN0aW9uQ2hhbmdlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBjaGFydCByZXF1ZXN0cyBkYXRhLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxEYXRhUmVxdWVzdGVkITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEV2ZW50IHRyaWdnZXJlZCB3aGVuIGNoYXJ0J3MgdmFyaWFudCBpcyBzZWxlY3RlZC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdHZhcmlhbnRTZWxlY3RlZD86IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiBjaGFydCdzIHZhcmlhbnQgaXMgc2F2ZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHR2YXJpYW50U2F2ZWQ/OiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogRXZlbnQgdHJpZ2dlcmVkIHdoZW4gY2hhcnQncyBzZWdtZW50ZWQgYnV0dG9uIGkuZS4sIG1vZGUgYmV0d2VlbiB0YWJsZSwgY2hhcnQgYW5kIGNoYXJ0IHdpdGggdGFibGUgdmlldyBpcyBzZWxlY3RlZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0c2VnbWVudGVkQnV0dG9uUHJlc3NlZCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKHNldHRpbmdzPzogUHJvcGVydGllc09mPENoYXJ0Piwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdGlmIChzZXR0aW5ncz8uX2FwcGx5SWRUb0NvbnRlbnQpIHtcblx0XHRcdHNldHRpbmdzLmlkID0gZ2VuZXJhdGUoW3NldHRpbmdzLmlkLCBcIjo6Q2hhcnRcIl0pO1xuXHRcdH1cblx0XHRzdXBlcihzZXR0aW5ncywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiBpcyBvdmVycmlkZGVuIHRvIGVuc3VyZSBiYWNrd2FyZCBpbmNvbXBhdGliaWxpdHlcblx0ICogQG92ZXJyaWRlXG5cdCAqL1xuXHRpc0E8VCBleHRlbmRzIEJhc2VPYmplY3QgPSBCYXNlT2JqZWN0Pih0eXBlTmFtZTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIGlzIFQ7XG5cblx0aXNBPFQ+KHR5cGVOYW1lPzogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIGlzIFQ7XG5cblx0aXNBKHR5cGVOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9sZFZhbGlkVHlwZSA9IFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiO1xuXHRcdGlmICgoQXJyYXkuaXNBcnJheSh0eXBlTmFtZSkgJiYgdHlwZU5hbWUuaW5jbHVkZXMob2xkVmFsaWRUeXBlKSkgfHwgdHlwZU5hbWUgPT09IG9sZFZhbGlkVHlwZSkgcmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gc3VwZXIuaXNBKHR5cGVOYW1lKTtcblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgY2hhcnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBDaGFydDtcblx0XHRjb25zdCBzaG93TWVzc2FnZVN0cmlwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRyb2xzL3Nob3dNZXNzYWdlU3RyaXBcIikgfHwge307XG5cdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IGNoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIiksXG5cdFx0XHRzQ2FjaGVLZXkgPSBgJHtzQ2hhcnRFbnRpdHlQYXRofUNoYXJ0YCxcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0c2hvd01lc3NhZ2VTdHJpcFtzQ2FjaGVLZXldID1cblx0XHRcdGNoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCIgJiYgISFvQmluZGluZ0NvbnRleHQgJiYgIW9CaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL3Nob3dNZXNzYWdlU3RyaXBcIiwgc2hvd01lc3NhZ2VTdHJpcCk7XG5cdFx0dGhpcy5hdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIoKTtcblxuXHRcdHN1cGVyLm9uQWZ0ZXJSZW5kZXJpbmcoKTtcblx0fVxuXG5cdHByaXZhdGUgYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk6IHZvaWQge1xuXHRcdFN0YXRlVXRpbC5kZXRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdFx0U3RhdGVVdGlsLmF0dGFjaFN0YXRlQ2hhbmdlKHRoaXMuc3RhdGVDaGFuZ2VIYW5kbGVyKTtcblx0fVxuXG5cdHN0YXRlQ2hhbmdlSGFuZGxlcihvRXZlbnQ6IEV2ZW50PHsgY29udHJvbDogQ29udHJvbCB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udHJvbFwiKTtcblx0XHRpZiAoY29udHJvbC5pc0E8Q2hhcnQ+KFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3QgY2hhcnRCbG9jayA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGhhbmRsZVN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfTtcblx0XHRcdGlmIChjaGFydEJsb2NrPy5oYW5kbGVTdGF0ZUNoYW5nZSkge1xuXHRcdFx0XHRjaGFydEJsb2NrLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMob0ZpbHRlckNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJDb250cm9sIGFzIEZpbHRlckJhciwgb0NoYXJ0ISk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlU2VsZWN0aW9uQ2hhbmdlKG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duW107IG5hbWU6IHN0cmluZyB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIik7XG5cdFx0Y29uc3QgYlNlbGVjdGVkID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIikgPT09IFwic2VsZWN0RGF0YVwiO1xuXHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwgbWVyZ2Uoe30sIHsgZGF0YTogYURhdGEsIHNlbGVjdGVkOiBiU2VsZWN0ZWQgfSkpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkKCk6IHZvaWQge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIpO1xuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwiY29sbGFib3JhdGlvbk1hbmFnZXJcIiwgXCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHNcIilcblx0YXN5bmMgY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5jb250ZW50LmdldEFjdGlvbnMoKSBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uW107XG5cdFx0aWYgKGhhc0luc2lnaHRBY3Rpb25FbmFibGVkKGFjdGlvblRvb2xiYXJJdGVtcywgdGhpcy5jb250ZW50LmdldEZpbHRlcigpKSkge1xuXHRcdFx0Y29uc3QgY2FyZCA9IGF3YWl0IHRoaXMuZ2V0Q2FyZE1hbmlmZXN0Q2hhcnQoKTtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhjYXJkKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNhcmRzLnB1c2goe1xuXHRcdFx0XHRcdGNhcmQ6IGNhcmQsXG5cdFx0XHRcdFx0dGl0bGU6IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCkuZ2V0SGVhZGVyKCksXG5cdFx0XHRcdFx0Y2FsbGJhY2s6IHRoaXMub25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrLmJpbmQodGhpcylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFzU2VsZWN0aW9ucygpOiBib29sZWFuIHtcblx0XHQvLyBjb25zaWRlciBjaGFydCBzZWxlY3Rpb25zIGluIHRoZSBjdXJyZW50IGRyaWxsIHN0YWNrIG9yIG9uIGFueSBmdXJ0aGVyIGRyaWxsIGRvd25zXG5cdFx0Y29uc3QgbWRjQ2hhcnQgPSB0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBNRENDaGFydDtcblx0XHRpZiAobWRjQ2hhcnQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGNoYXJ0ID0gKG1kY0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHVua25vd24gYXMgQ2hhcnREZWxlZ2F0ZSk/LmdldElubmVyQ2hhcnQobWRjQ2hhcnQpIGFzIENoYXJ0Q2hhcnQ7XG5cdFx0XHRcdGlmIChjaGFydCkge1xuXHRcdFx0XHRcdGNvbnN0IGFEaW1lbnNpb25zID0gQ2hhcnRVdGlscy5nZXREaW1lbnNpb25zRnJvbURyaWxsU3RhY2soY2hhcnQpO1xuXHRcdFx0XHRcdGNvbnN0IGJJc0RyaWxsRG93biA9IGFEaW1lbnNpb25zLmxlbmd0aCA+IHRoaXMucHJldkRyaWxsU3RhY2subGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGJJc0RyaWxsVXAgPSBhRGltZW5zaW9ucy5sZW5ndGggPCB0aGlzLnByZXZEcmlsbFN0YWNrLmxlbmd0aDtcblx0XHRcdFx0XHRjb25zdCBiTm9DaGFuZ2UgPSBhRGltZW5zaW9ucy50b1N0cmluZygpID09PSB0aGlzLnByZXZEcmlsbFN0YWNrLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0bGV0IGFGaWx0ZXJzOiBGaWx0ZXJbXTtcblx0XHRcdFx0XHRpZiAoYklzRHJpbGxVcCAmJiBhRGltZW5zaW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdC8vIGRyaWxsaW5nIHVwIHRvIGxldmVsMCB3b3VsZCBjbGVhciBhbGwgc2VsZWN0aW9uc1xuXHRcdFx0XHRcdFx0YUZpbHRlcnMgPSBDaGFydFV0aWxzLmdldENoYXJ0U2VsZWN0aW9ucyhtZGNDaGFydCwgdHJ1ZSkgYXMgRmlsdGVyW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZpbHRlcnMgb2Ygc2VsZWN0aW9ucyBvZiBwcmV2aW91cyBkcmlsbHN0YWNrIHdoZW4gZHJpbGxpbmcgdXAvZG93blxuXHRcdFx0XHRcdFx0Ly8gdG8gdGhlIGNoYXJ0IGFuZCB0YWJsZVxuXHRcdFx0XHRcdFx0YUZpbHRlcnMgPSBDaGFydFV0aWxzLmdldENoYXJ0U2VsZWN0aW9ucyhtZGNDaGFydCkgYXMgRmlsdGVyW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChiSXNEcmlsbERvd24gfHwgYklzRHJpbGxVcCkge1xuXHRcdFx0XHRcdFx0Ly8gdXBkYXRlIHRoZSBkcmlsbHN0YWNrIG9uIGEgZHJpbGwgdXAvIGRyaWxsIGRvd25cblx0XHRcdFx0XHRcdHRoaXMucHJldkRyaWxsU3RhY2sgPSBhRGltZW5zaW9ucztcblx0XHRcdFx0XHRcdHJldHVybiBhRmlsdGVycy5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYk5vQ2hhbmdlKSB7XG5cdFx0XHRcdFx0XHQvLyBiTm9DaGFuZ2UgaXMgdHJ1ZSB3aGVuIGNoYXJ0IGlzIHNlbGVjdGVkXG5cdFx0XHRcdFx0XHRyZXR1cm4gYUZpbHRlcnMubGVuZ3RoID4gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIGNoZWNraW5nIGZvciBzZWxlY3Rpb25zIGluIENoYXJ0OiAke2Vycn1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gY3JlYXRlIGluc2lnaHRzUGFyYW1zIGFuZCBjYWxsIHRoZSBBUEkgdG8gc2hvdyBpbnNpZ2h0cyBjYXJkIHByZXZpZXcgZm9yIGNoYXJ0cy5cblx0ICogQHJldHVybnMgVW5kZWZpbmVkIGlmIGNhcmQgcHJldmlldyBpcyByZW5kZXJlZC5cblx0ICovXG5cdGFzeW5jIG9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpbnNpZ2h0c1BhcmFtcyA9IGF3YWl0IGNyZWF0ZUNoYXJ0Q2FyZFBhcmFtcyh0aGlzKTtcblx0XHRcdGlmIChpbnNpZ2h0c1BhcmFtcykge1xuXHRcdFx0XHRzaG93SW5zaWdodHNDYXJkUHJldmlldyhpbnNpZ2h0c1BhcmFtcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSh0aGlzLmNvbnRlbnQpO1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY2FyZCBtYW5pZmVzdCBvcHRpbWl6ZWQgZm9yIHRoZSBjaGFydCBjYXNlLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIENhcmRNYW5pZmVzdFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRDYXJkTWFuaWZlc3RDaGFydCgpOiBQcm9taXNlPENhcmRNYW5pZmVzdD4ge1xuXHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gYXdhaXQgY3JlYXRlQ2hhcnRDYXJkUGFyYW1zKHRoaXMpO1xuXHRcdHJldHVybiBnZXRDYXJkTWFuaWZlc3QoaW5zaWdodHNQYXJhbXMgYXMgSW5zaWdodHNQYXJhbXM8Q2hhcnRDb250ZW50Pik7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqIEBwYXJhbSBjYXJkIFRoZSBjYXJkIG1hbmlmZXN0IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgb25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrKGNhcmQ6IENhcmRNYW5pZmVzdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoY2FyZCkge1xuXHRcdFx0XHRhd2FpdCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyhcblx0XHRcdFx0XHRjYXJkLFxuXHRcdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uY29sbGFib3JhdGlvbk1hbmFnZXIuZ2V0U2VydmljZSgpIGFzIENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5jb250ZW50KTtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpbHRlcnMgcmVsYXRlZCB0byB0aGUgY2hhcnQuXG5cdCAqIEByZXR1cm5zICBUaGUgZmlsdGVyIGNvbmZpZ3VyZWQgb24gdGhlIGNoYXJ0IG9yIHVuZGVmaW5lZCBpZiBub25lXG5cdCAqL1xuXHRnZXRGaWx0ZXIoKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjaGFydEZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8odGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgTURDQ2hhcnQpO1xuXHRcdGlmIChjaGFydEZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpIHtcblx0XHRcdGNoYXJ0RmlsdGVySW5mby5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRpZiAoZmlsdGVyLmdldFBhdGgoKSkge1xuXHRcdFx0XHRcdChmaWx0ZXIgYXMgdW5rbm93biBhcyB7IHNQYXRoOiBzdHJpbmcgfSkuc1BhdGggPSB0aGlzLmdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhmaWx0ZXIuZ2V0UGF0aCgpISk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBjaGFydEZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNoYXJ0IGNvbnRyb2wgZnJvbSB0aGUgQ2hhcnQgQVBJLlxuXHQgKiBAcmV0dXJucyBUaGUgQ2hhcnQgY29udHJvbCBpbnNpZGUgdGhlIENoYXJ0IEFQSVxuXHQgKi9cblx0Z2V0Q2hhcnRDb250cm9sKCk6IE1EQ0NoYXJ0IHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIGRpbWVuc2lvbi5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSAgTmFtZSBvZiB0aGUgZGltZW5zaW9uXG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhbW9kZWwgb2JqZWN0IHBhdGggZm9yIHRoZSBkaW1lbnNpb25cblx0ICovXG5cblx0Z2V0UHJvcGVydHlEYXRhTW9kZWwocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IG51bGwge1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gdGhpcy5jb250ZW50LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRoaXMuY29udGVudC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGRpbWVuc2lvbkNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7bWV0YVBhdGh9LyR7cHJvcGVydHlOYW1lfWApIGFzIENvbnRleHQ7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4oZGltZW5zaW9uQ29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNoYXJ0IHByb3BlcnRpZXMgYnkgcmVtb3ZpbmcgX2ZlX2dyb3VwYWJsZSBhbmQgX2ZlX2FnZ3JlZ2F0YWJsZSBwcmVmaXguXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFQcm9wZXJ0aWVzIENoYXJ0IGZpbHRlciBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIENoYXJ0IHByb3BlcnRpZXMgd2l0aG91dCBwcmVmaXhlc1xuXHQgKi9cblxuXHRnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMoY2hhcnRQcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoY2hhcnRQcm9wZXJ0eSAmJiBjaGFydFByb3BlcnR5LmluY2x1ZGVzKFwiZmVfZ3JvdXBhYmxlXCIpKSB7XG5cdFx0XHRjaGFydFByb3BlcnR5ID0gdGhpcy5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGNoYXJ0UHJvcGVydHksIFwiZ3JvdXBhYmxlXCIpO1xuXHRcdH0gZWxzZSBpZiAoY2hhcnRQcm9wZXJ0eSAmJiBjaGFydFByb3BlcnR5LmluY2x1ZGVzKFwiZmVfYWdncmVnYXRhYmxlXCIpKSB7XG5cdFx0XHRjaGFydFByb3BlcnR5ID0gdGhpcy5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGNoYXJ0UHJvcGVydHksIFwiYWdncmVnYXRhYmxlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2hhcnRQcm9wZXJ0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGludGVybmFsIGNoYXJ0IGZvciB0aGUgbWVhc3VyZSBvciBkaW1lbnNpb24uXG5cdCAqIEBwYXJhbSBuYW1lIElEIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0ga2luZCBUeXBlIG9mIHRoZSBwcm9wZXJ0eSAobWVhc3VyZSBvciBkaW1lbnNpb24pXG5cdCAqIEByZXR1cm5zIEludGVybmFsIElEIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG5cdCAqL1xuXG5cdGdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQobmFtZTogc3RyaW5nLCBraW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXJ0J3Mgc3RhdGVVdGlsICB0byBDaGFydCBQcmVzZW50YXRpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGNoYXJ0U3RhdGUgQ2hhcnQgQXBwU3RhdGUgdXRpbCBQVlxuXHQgKiBAcmV0dXJucyBQcmVzZW50YXRpb24gVmFyaWFudCBzdHJ1Y3R1cmUgZm9yIHRoZSBjaGFydFxuXHQgKi9cblx0X2NvbnZlcnRTdGF0ZVV0aWxUb1ByZXNlbnRhdGlvblZhcmlhbnQoY2hhcnRTdGF0ZTogQXBwU3RhdGUpOiBQcmVzZW50YXRpb25WYXJpYW50IHtcblx0XHRjb25zdCBzb3J0T3JkZXIgPSBjaGFydFN0YXRlLnNvcnRlcnM/Lm1hcCgoc29ydGVyOiBTb3J0ZXJzKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRQcm9wZXJ0eTogdGhpcy5nZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMoc29ydGVyLm5hbWUpLFxuXHRcdFx0XHREZXNjZW5kaW5nOiBzb3J0ZXIuZGVzY2VuZGluZ1xuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRjb25zdCB0eXBlID0gY2hhcnRTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnPy5wcm9wZXJ0aWVzPy5jaGFydFR5cGU7XG5cdFx0Y29uc3QgY2hhcnRUeXBlSW5SZXF1aXJlZEZvcm1hdCA9IHR5cGUgPyB0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBjaGFydFR5cGUgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0VHlwZS9cIiArIGNoYXJ0VHlwZUluUmVxdWlyZWRGb3JtYXQ7XG5cdFx0Y29uc3QgZGltZW5zaW9uczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG1lYXN1cmVzOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0ZGltZW5zaW9uQXR0cmlidXRlczogRGltZW5zaW9uVHlwZVtdID0gW10sXG5cdFx0XHRtZWFzdXJlQXR0cmlidXRlczogTWVhc3VyZVR5cGVbXSA9IFtdO1xuXHRcdChjaGFydFN0YXRlLml0ZW1zID8/IFtdKS5mb3JFYWNoKChpdGVtOiBJdGVtcykgPT4ge1xuXHRcdFx0aXRlbS5uYW1lID0gdGhpcy5nZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMoaXRlbS5uYW1lKTtcblx0XHRcdGNvbnN0IHJvbGUgPSBpdGVtLnJvbGU/Lmxlbmd0aFxuXHRcdFx0XHQ/IGl0ZW0ucm9sZS5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIGl0ZW0ucm9sZT8uc3Vic3RyaW5nKDEsIGl0ZW0ucm9sZS5sZW5ndGgpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGl0ZW0ucm9sZSA9PT0gXCJjYXRlZ29yeVwiIHx8IGl0ZW0ucm9sZSA9PT0gXCJzZXJpZXNcIiB8fCBpdGVtLnJvbGUgPT09IFwiY2F0ZWdvcnkyXCIpIHtcblx0XHRcdFx0ZGltZW5zaW9ucy5wdXNoKGl0ZW0ubmFtZSk7XG5cdFx0XHRcdGRpbWVuc2lvbkF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0RGltZW5zaW9uOiBpdGVtLm5hbWUsXG5cdFx0XHRcdFx0Um9sZTogYGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0RGltZW5zaW9uUm9sZVR5cGUvJHtyb2xlfWBcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZWFzdXJlcy5wdXNoKGl0ZW0ubmFtZSk7XG5cdFx0XHRcdG1lYXN1cmVBdHRyaWJ1dGVzLnB1c2goeyBNZWFzdXJlOiBpdGVtLm5hbWUsIFJvbGU6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiArIHJvbGUgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjaGFydFZpejogVmlzdWFsaXphdGlvbiA9IHtcblx0XHRcdENvbnRlbnQ6IHtcblx0XHRcdFx0Q2hhcnRUeXBlOiBjaGFydFR5cGUsXG5cdFx0XHRcdERpbWVuc2lvbkF0dHJpYnV0ZXM6IGRpbWVuc2lvbkF0dHJpYnV0ZXMsXG5cdFx0XHRcdERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG5cdFx0XHRcdE1lYXN1cmVBdHRyaWJ1dGVzOiBtZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdFx0TWVhc3VyZXM6IG1lYXN1cmVzXG5cdFx0XHR9LFxuXHRcdFx0VHlwZTogXCJDaGFydFwiXG5cdFx0fTtcblx0XHRjb25zdCBjaGFydFBWID0gbmV3IFByZXNlbnRhdGlvblZhcmlhbnQoKTtcblx0XHRjaGFydFBWLnNldENoYXJ0VmlzdWFsaXphdGlvbihjaGFydFZpeik7XG5cdFx0Y2hhcnRQVi5zZXRQcm9wZXJ0aWVzKHtcblx0XHRcdFNvcnRPcmRlcjogc29ydE9yZGVyID8/IFtdXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNoYXJ0UFY7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCB0aGF0IGlzIGN1cnJlbnRseSBhcHBsaWVkIG9uIHRoZSBjaGFydC5cblx0ICogQHJldHVybnMgVGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5QcmVzZW50YXRpb25WYXJpYW50fSBhcHBsaWVkIHRvIHRoZSBjaGFydFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdGFzeW5jIGdldFByZXNlbnRhdGlvblZhcmlhbnQoKTogUHJvbWlzZTxQcmVzZW50YXRpb25WYXJpYW50PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNoYXJ0U3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY29udmVydFN0YXRlVXRpbFRvUHJlc2VudGF0aW9uVmFyaWFudChjaGFydFN0YXRlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgaWQ6IHN0cmluZyA9IHRoaXMuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRMb2cuZXJyb3IoYENoYXJ0IEJ1aWxkaW5nIEJsb2NrICgke2lkfSkgLSBnZXQgcHJlc2VudGF0aW9uIHZhcmlhbnQgZmFpbGVkIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgZm9yIHRoZSBtZGMgY2hhcnQuXG5cdCAqXG5cdCAqIFRoZSBqc29uIGZvcm1hdCByZXRyaWV2ZWQgYnkgdXNpbmcgdGhlIGdldCBQcmVzZW50YXRpb25WYXJpYW50IGJ1dHRvbiBpbiB0aGUgbGlua2VkIEZQTSBzYW1wbGUgc2hvdWxkIGJlIGZvbGxvd2VkIHdoaWxlIHRyeWluZyB0byBzZXQgdGhlIFByZXNlbnRhdGlvblZhcmlhbnQgYXMgbmVlZGVkLlxuXHQgKiBUaGUgdmFsdWVzIGRpbWVuc2lvbnMsIG1lYXN1cmVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGJlIGdpdmVuIGluIHRoZSB2YWxpZCBmb3JtYXQgYW5kIG51bGwgb3IgZW1wdHkgdmFsdWVzIHNob3VsZCBiZSBhdm9pZGVkLlxuXHQgKiBPbmUgZGltZW5zaW9uIGF0dHJpYnV0ZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSByb2xlIGFzc29jaWF0ZWQgd2l0aCBpdCBvbiBhIGdpdmVuIGNoYXJ0LlxuXHQgKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudCB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlByZXNlbnRhdGlvblZhcmlhbnR9IHRvIGJlIHNldFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdGFzeW5jIHNldFByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uVmFyaWFudDogUHJlc2VudGF0aW9uVmFyaWFudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjaGFydCA9IHRoaXMuY29udGVudDtcblx0XHRcdGNvbnN0IGV4aXN0aW5nUHJlc2VudGF0aW9uVmFyaWFudCA9IGF3YWl0IHRoaXMuZ2V0UHJlc2VudGF0aW9uVmFyaWFudCgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc0luZm8gPSAoYXdhaXQgKGNoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIENoYXJ0RGVsZWdhdGUpPy5mZXRjaFByb3BlcnRpZXMoY2hhcnQpKSBhcyBQcm9wZXJ0eUluZm9bXTtcblxuXHRcdFx0Y29uc3Qgc3RhdGVVdGlsUHYgPSBQcmVzZW50YXRpb25WYXJpYW50VG9TdGF0ZVV0aWxzUFYuY29udmVydFB2VG9TdGF0ZVV0aWxQdihcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudCxcblx0XHRcdFx0ZXhpc3RpbmdQcmVzZW50YXRpb25WYXJpYW50LFxuXHRcdFx0XHRwcm9wZXJ0aWVzSW5mb1xuXHRcdFx0KTtcblxuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShjaGFydCwgc3RhdGVVdGlsUHYpO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkU6IENoYXJ0IEJ1aWxkaW5nIEJsb2NrIHNldFByZXNlbnRhdGlvblZhcmlhbnQgQVBJIGZhaWxlZCB3aXRoIGVycm9yOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5IG9mIHRoZSBjdXJyZW50IHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcmV0dXJucyBWYXJpYW50IGtleSBvZiB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBhcHBsaWVkIHRvIHRoZSBjaGFydFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldFZhcmlhbnQoKS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhcmlhbnQgb2YgdGhlIHByb3ZpZGVkIGtleSBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIHZhcmlhbnQga2V5IG9mIHtAbGluayBzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnR9IHRvIGJlIHNldFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRDdXJyZW50VmFyaWFudEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgY2hhcnQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRyZXR1cm4gU3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIHRoZSBjaGFydC4gTm90ZTogc2V0U2VsZWN0aW9uVmFyaWFudCB3aWxsIGNsZWFyIGV4aXN0aW5nIGZpbHRlcnMgYW5kIHRoZW4gYXBwbHkgdGhlIFNlbGVjdGlvblZhcmlhbnQgdmFsdWVzLlxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIGFwcGx5IHRvIHRoZSBjaGFydFxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBPcHRpb25hbC4gSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgdGhlIGFzc29jaWF0ZWQgdGV4dCBwcm9wZXJ0eSB2YWx1ZXMgKGlmIHRoZXkncmUgYXZhaWxhYmxlIGluIHRoZSBTZWxlY3Rpb25WYXJpYW50KSB0byBkaXNwbGF5IHRoZSBmaWx0ZXIgdmFsdWUgZGVzY3JpcHRpb25zLCBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlbSBmcm9tIHRoZSBiYWNrZW5kXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldFNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgcHJlZmlsbERlc2NyaXB0aW9ucyA9IGZhbHNlKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udHJvbCBzdGF0ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY29udHJvbCBzdGF0ZSBrZXkuXG5cdCAqIEBwYXJhbSBjb250cm9sU3RhdGUgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIC0gVGhlIGZ1bGwgc3RhdGUgb2YgdGhlIGNvbnRyb2wgYWxvbmcgd2l0aCB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBhdmFpbGFibGUuXG5cdCAqL1xuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sIGJ5IHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbml0aWFsIHN0YXRlIGlzIHNldC5cblx0ICovXG5cdGFzeW5jIHNldEluaXRpYWxTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXN5bmNocm9ub3VzbHkgcmV0cmlldmVzIHRoZSBzdGF0ZSBvZiB0aGUgY2hhcnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZpZXdzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNoYXJ0IHN0YXRlIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0YXN5bmMgcmV0cmlldmVTdGF0ZSgpOiBQcm9taXNlPENoYXJ0U3RhdGUgfCBudWxsPiB7XG5cdFx0Y29uc3QgY2hhcnRTdGF0ZTogQ2hhcnRTdGF0ZSA9IHt9O1xuXHRcdGNoYXJ0U3RhdGUuaW5uZXJDaGFydCA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlKGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KSkgYXMgb2JqZWN0O1xuXHRcdGNvbnN0IHZhcmlhbnRUb1JldHJpZXZlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnQoKT8uZ2V0SWQoKTtcblx0XHRpZiAodmFyaWFudFRvUmV0cmlldmUpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0XHRpZiAoIWNoYXJ0U3RhdGUudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0Y2hhcnRTdGF0ZS52YXJpYW50TWFuYWdlbWVudCA9IHsgdmFyaWFudElkOiB2YXJpYW50TWFuYWdlbWVudENvbnRyb2w/LmdldEN1cnJlbnRWYXJpYW50S2V5KCkgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoYXJ0U3RhdGUudmFyaWFudE1hbmFnZW1lbnQudmFyaWFudElkID0gdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2hhcnRTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBsZWdhY3kgc3RhdGUgdG8gdGhlIGNoYXJ0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb250cm9sIHN0YXRlIHJldHJpZXZhbCBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGdldENvbnRyb2xTdGF0ZSBGdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY29udHJvbCBzdGF0ZS5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZS5cblx0ICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlMZWdhY3lTdGF0ZShcblx0XHRnZXRDb250cm9sU3RhdGU6IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0X25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjaGFydCA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCB2bSA9IGNoYXJ0LmdldFZhcmlhbnQoKTtcblxuXHRcdGNvbnN0IGNoYXJ0U3RhdGUgPSBnZXRDb250cm9sU3RhdGUoY2hhcnQpIGFzIHsgaW5pdGlhbFN0YXRlPzogQ2hhcnRTdGF0ZTsgZnVsbFN0YXRlPzogQ2hhcnRTdGF0ZSB9O1xuXHRcdGNvbnN0IHZtU3RhdGUgPSB2bSA/IGdldENvbnRyb2xTdGF0ZSh2bSkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBDaGFydFN0YXRlID0ge307XG5cblx0XHRpZiAoY2hhcnRTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyQ2hhcnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lckNoYXJ0LFxuXHRcdFx0XHQuLi5jaGFydFN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJDaGFydD8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLmNoYXJ0U3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lckNoYXJ0Py5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4uY2hhcnRTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIENvbnRyb2xTdGF0ZSwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXN5bmNocm9ub3VzbHkgYXBwbGllcyB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSB0byB0aGUgdmlld3N0YXRlLlxuXHQgKiBAcGFyYW0gY29udHJvbFN0YXRlIFRoZSBzdGF0ZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gW19uYXZQYXJhbWV0ZXJzXSBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBbc2hvdWxkQXBwbHlEaWZmU3RhdGVdIE9wdGlvbmFsIGZsYWcgdG8gc2tpcCBtZXJnaW5nIHN0YXRlcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5U3RhdGUoY29udHJvbFN0YXRlOiBDaGFydFN0YXRlLCBfbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghY29udHJvbFN0YXRlKSByZXR1cm47XG5cblx0XHRjb25zdCB2YXJpYW50SWQgPSBjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQ/LnZhcmlhbnRJZDtcblx0XHRjb25zdCBjdXJyZW50VmFyaWFudCA9IHRoaXMuY29udGVudD8uZ2V0VmFyaWFudCgpO1xuXG5cdFx0Ly8gSGFuZGxlIFZhcmlhbnQgTWFuYWdlbWVudFxuXHRcdGlmICh2YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiB2YXJpYW50SWQgIT09IGN1cnJlbnRWYXJpYW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdGNvbnN0IG92TSA9IHRoaXMuY29udGVudD8uZ2V0VmFyaWFudCgpO1xuXHRcdFx0Y29uc3QgYVZhcmlhbnRzID0gb3ZNPy5nZXRWYXJpYW50cygpO1xuXHRcdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSBhVmFyaWFudHM/LnNvbWUoKG9WYXJpYW50KSA9PiBvVmFyaWFudC5nZXRLZXkoKSA9PT0gdmFyaWFudElkKVxuXHRcdFx0XHQ/IHZhcmlhbnRJZFxuXHRcdFx0XHQ6IG92TT8uZ2V0U3RhbmRhcmRWYXJpYW50S2V5O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRlbGVtZW50OiBvdk0sXG5cdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgc3RhdGUgZXZlbiBpZiBhYm92ZSBjb25kaXRpb24gbm90IHNhdGlzZmllZFxuXHRcdFx0YXdhaXQgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgSW5uZXIgQ2hhcnQgU3RhdGVcblx0XHRjb25zdCBpbm5lckNoYXJ0U3RhdGUgPSBjb250cm9sU3RhdGUuaW5uZXJDaGFydDtcblx0XHRsZXQgZmluYWxTdGF0ZTtcblxuXHRcdGlmIChpbm5lckNoYXJ0U3RhdGUpIHtcblx0XHRcdGlmIChzaG91bGRBcHBseURpZmZTdGF0ZSAmJiBpbm5lckNoYXJ0U3RhdGUuaW5pdGlhbFN0YXRlKSB7XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdFx0XHRpbm5lckNoYXJ0U3RhdGUuaW5pdGlhbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0XHRpbm5lckNoYXJ0U3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmluYWxTdGF0ZSA9IGlubmVyQ2hhcnRTdGF0ZS5mdWxsU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCwgZmluYWxTdGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBieSB0aGUgTURDIHN0YXRlIHV0aWwgd2hlbiB0aGUgc3RhdGUgZm9yIHRoaXMgY29udHJvbCdzIGNoaWxkIGhhcyBjaGFuZ2VkLlxuXHQgKi9cblx0aGFuZGxlU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHR9XG5cblx0X2NyZWF0ZUNvbnRlbnQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGlmIChvd25lcj8uaXNBPFRlbXBsYXRlQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLlRlbXBsYXRlQ29tcG9uZW50XCIpKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgY3VycmVudCBmaWx0ZXIgZnJvbSB0aGUgb2xkICh0byBiZSBkZXN0cm95ZWQpIENoYXJ0IGluc3RhbmNlIGJlY2F1c2UgaWYgd2UgZG9uJ3QgdGhlbiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiwgdGhlIG9sZCBDaGFydCBpbnN0YW5jZSB1c2VkIHRvXG5cdFx0XHQvLyByZWFjdCBmb3IgZmlsdGVyIGJhciBhY3Rpb24sIGZvciBleGFtcGxlLCBvbiBDbGljayBvZiBHby5cblx0XHRcdHRoaXMuY29udGVudC5zZXRGaWx0ZXIoXCJcIik7XG5cdFx0XHR0aGlzLmNvbnRlbnQuZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0UHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHN1cHByZXNzSW52YWxpZGF0ZT86IGJvb2xlYW4pOiB0aGlzIHtcblx0XHRpZiAoIXRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyh0aGlzLmdldE1ldGFkYXRhKCkuZ2V0UHJvcGVydGllcygpKS5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRzdXBlci5zZXRQcm9wZXJ0eShrZXksIHZhbHVlLCB0cnVlKTtcblx0XHRcdHRoaXMuX2NyZWF0ZUNvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZW1vdmVBZ2dyZWdhdGlvbihuYW1lOiBzdHJpbmcsIHZhbHVlOiBNYW5hZ2VkT2JqZWN0IHwgbnVtYmVyIHwgc3RyaW5nLCBzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogTWFuYWdlZE9iamVjdCB8IG51bGwge1xuXHRcdGxldCByZW1vdmVkOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRpZiAoIXRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyh0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWdncmVnYXRpb25zKCkpLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRyZW1vdmVkID0gc3VwZXIucmVtb3ZlQWdncmVnYXRpb24obmFtZSwgdmFsdWUsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR0aGlzLl9jcmVhdGVDb250ZW50KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZWQgPSBzdXBlci5yZW1vdmVBZ2dyZWdhdGlvbihuYW1lLCB2YWx1ZSwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbW92ZWQ7XG5cdH1cblxuXHRhZGRBZ2dyZWdhdGlvbihuYW1lOiBzdHJpbmcsIHZhbHVlOiBNYW5hZ2VkT2JqZWN0LCBzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9hcHBseWluZ1NldHRpbmdzICYmIE9iamVjdC5rZXlzKHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBZ2dyZWdhdGlvbnMoKSkuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdHN1cGVyLmFkZEFnZ3JlZ2F0aW9uKG5hbWUsIHZhbHVlLCBzdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdFx0dGhpcy5fY3JlYXRlQ29udGVudCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5hZGRBZ2dyZWdhdGlvbihuYW1lLCB2YWx1ZSwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpbnNlcnRBZ2dyZWdhdGlvbihuYW1lOiBzdHJpbmcsIHZhbHVlOiBNYW5hZ2VkT2JqZWN0LCBpbmRleDogbnVtYmVyLCBzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9hcHBseWluZ1NldHRpbmdzICYmIE9iamVjdC5rZXlzKHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBZ2dyZWdhdGlvbnMoKSkuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdHN1cGVyLmluc2VydEFnZ3JlZ2F0aW9uKG5hbWUsIHZhbHVlLCBpbmRleCwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRcdHRoaXMuX2NyZWF0ZUNvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuaW5zZXJ0QWdncmVnYXRpb24obmFtZSwgdmFsdWUsIGluZGV4LCBzdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogTURDQ2hhcnQge1xuXHRcdGlmICh0aGlzLmNvbnRleHRQYXRoKSB7XG5cdFx0XHR0aGlzLl9yZXNvbHZlZENvbnRleHRQYXRoID0gdGhpcy5jb250ZXh0UGF0aC5lbmRzV2l0aChcIi9cIikgPyB0aGlzLmNvbnRleHRQYXRoIDogdGhpcy5jb250ZXh0UGF0aCArIFwiL1wiO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXRNZGNDaGFydFRlbXBsYXRlKFxuXHRcdFx0dGhpcyxcblx0XHRcdHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCk/LmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpID8/ICh0aGlzLl9nZXRPd25lcigpPy5nZXRWaWV3RGF0YSgpIGFzIHVua25vd24gYXMgVmlld0RhdGEpLFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RGlhZ25vc3RpY3MoKSA/PyAoe30gYXMgRGlhZ25vc3RpY3MpLFxuXHRcdFx0dGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxDaGFydENvbnRleHRPYmplY3RQYXRoPih0aGlzLm1ldGFQYXRoLCB0aGlzLl9yZXNvbHZlZENvbnRleHRQYXRoKSFcblx0XHQpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWRBLElBZ0JxQkEsS0FBSyxJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7SUFBRUMsV0FBVyxFQUFFLENBQUMsd0JBQXdCO0VBQUUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FFakZDLGtCQUFrQixDQUFDLGtFQUFrRSxDQUFDLEVBQUFDLEtBQUEsR0FLdEZELGtCQUFrQixDQUFDLDBEQUEwRCxDQUFDLEVBQUFFLEtBQUEsR0F3QjlFQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPNUJGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFB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
967
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsInJldHVyblR5cGVzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsIl9kZWM0IiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzUiLCJyZXF1aXJlZCIsImV4cGVjdGVkVHlwZXMiLCJleHBlY3RlZEFubm90YXRpb25zIiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJhbGxvd2VkVmFsdWVzIiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiYXNzb2NpYXRpb24iLCJfZGVjMTciLCJhZ2dyZWdhdGlvbiIsIl9kZWMxOCIsImFsdFR5cGVzIiwibXVsdGlwbGUiLCJkZWZhdWx0Q2xhc3MiLCJBY3Rpb24iLCJfZGVjMTkiLCJldmVudCIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsInhtbEV2ZW50SGFuZGxlciIsIl9kZWMyNSIsIl9kZWMyNiIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0U2VjdGlvbkNvbnRlbnRSb2xlIiwic2VuZERhdGFUb0NvbnN1bWVyIiwiY29uc3VtZXJEYXRhIiwiX3RoaXMkY29udGVudCIsIl90aGlzJGNvbnRlbnQyIiwiX3RoaXMkY29udGVudDMiLCJjb250ZW50Iiwic2V0SGVhZGVyIiwidGl0bGUiLCJzZXRIZWFkZXJTdHlsZSIsInNldEhlYWRlckxldmVsIiwidGl0bGVMZXZlbCIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJfdGhpcyRjb250ZW50NCIsIl90aGlzJGNvbnRlbnQ0JGdldEJpbiIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJzZXR0aW5ncyIsIm90aGVycyIsIl90aGlzIiwiX2FwcGx5SWRUb0NvbnRlbnQiLCJpZCIsImdlbmVyYXRlIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJwcmV2RHJpbGxTdGFjayIsImluaXRpYWxDb250cm9sU3RhdGUiLCJjaGFydEFjdGlvbnMiLCJfY29tbWFuZEFjdGlvbnMiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJfZGVzY3JpcHRvcjE4IiwiX2Rlc2NyaXB0b3IxOSIsIl9kZXNjcmlwdG9yMjAiLCJfZGVzY3JpcHRvcjIxIiwiX2Rlc2NyaXB0b3IyMiIsIl9leHBvcnRzIiwiaXNBIiwidHlwZU5hbWUiLCJvbGRWYWxpZFR5cGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjcmVhdGVDb250ZW50Iiwib25BZnRlclJlbmRlcmluZyIsImFmdGVyUmVuZGVyaW5nRXZlbnQiLCJfdGhpcyRnZXRQYWdlQ29udHJvbGwiLCJ2aWV3IiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRWaWV3IiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJjaGFydCIsImdldENvbnRlbnQiLCJzaG93TWVzc2FnZVN0cmlwIiwic0NoYXJ0RW50aXR5UGF0aCIsImRhdGEiLCJzQ2FjaGVLZXkiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3QiLCJzZXRQcm9wZXJ0eSIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiY2hhcnRCbG9jayIsImdldFBhcmVudCIsImhhbmRsZVN0YXRlQ2hhbmdlIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvRmlsdGVyQ29udHJvbCIsIm9DaGFydCIsIkZpbHRlclV0aWxzIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2UiLCJhRGF0YSIsImJTZWxlY3RlZCIsIkNoYXJ0UnVudGltZSIsImZuVXBkYXRlQ2hhcnQiLCJmaXJlRXZlbnQiLCJtZXJnZSIsInNlbGVjdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkcyIsImFjdGlvblRvb2xiYXJJdGVtcyIsImdldEFjdGlvbnMiLCJoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCIsImdldEZpbHRlciIsImNhcmQiLCJnZXRDYXJkTWFuaWZlc3RDaGFydCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJwdXNoIiwiZ2V0Q2hhcnRDb250cm9sIiwiZ2V0SGVhZGVyIiwiY2FsbGJhY2siLCJvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2siLCJiaW5kIiwiaGFzU2VsZWN0aW9ucyIsIm1kY0NoYXJ0IiwiX21kY0NoYXJ0JGdldENvbnRyb2xEIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsImFEaW1lbnNpb25zIiwiQ2hhcnRVdGlscyIsImdldERpbWVuc2lvbnNGcm9tRHJpbGxTdGFjayIsImJJc0RyaWxsRG93biIsImJJc0RyaWxsVXAiLCJiTm9DaGFuZ2UiLCJ0b1N0cmluZyIsImFGaWx0ZXJzIiwiZ2V0Q2hhcnRTZWxlY3Rpb25zIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCIsImluc2lnaHRzUGFyYW1zIiwiY3JlYXRlQ2hhcnRDYXJkUGFyYW1zIiwic2hvd0luc2lnaHRzQ2FyZFByZXZpZXciLCJlIiwic2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UiLCJnZXRDYXJkTWFuaWZlc3QiLCJfdGhpcyRnZXRQYWdlQ29udHJvbGwyIiwic2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXciLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImdldFNlcnZpY2UiLCJjaGFydEZpbHRlckluZm8iLCJnZXRBbGxGaWx0ZXJJbmZvIiwiZmlsdGVycyIsImZvckVhY2giLCJmaWx0ZXIiLCJnZXRQYXRoIiwic1BhdGgiLCJnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMiLCJGaWx0ZXIiLCJhbmQiLCJ1bmRlZmluZWQiLCJnZXRQcm9wZXJ0eURhdGFNb2RlbCIsInByb3BlcnR5TmFtZSIsIm1ldGFQYXRoIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJkaW1lbnNpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJjaGFydFByb3BlcnR5IiwiZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCIsIm5hbWUiLCJraW5kIiwicmVwbGFjZSIsIl9jb252ZXJ0U3RhdGVVdGlsVG9QcmVzZW50YXRpb25WYXJpYW50IiwiY2hhcnRTdGF0ZSIsIl9jaGFydFN0YXRlJHNvcnRlcnMiLCJfY2hhcnRTdGF0ZSRzdXBwbGVtZW4iLCJfY2hhcnRTdGF0ZSRzdXBwbGVtZW4yIiwic29ydE9yZGVyIiwic29ydGVycyIsIm1hcCIsInNvcnRlciIsIlByb3BlcnR5IiwiRGVzY2VuZGluZyIsImRlc2NlbmRpbmciLCJzdXBwbGVtZW50YXJ5Q29uZmlnIiwicHJvcGVydGllcyIsImNoYXJ0VHlwZSIsImNoYXJ0VHlwZUluUmVxdWlyZWRGb3JtYXQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiZGltZW5zaW9ucyIsIm1lYXN1cmVzIiwiZGltZW5zaW9uQXR0cmlidXRlcyIsIm1lYXN1cmVBdHRyaWJ1dGVzIiwiaXRlbXMiLCJpdGVtIiwiX2l0ZW0kcm9sZSIsIl9pdGVtJHJvbGUyIiwicm9sZSIsInN1YnN0cmluZyIsIkRpbWVuc2lvbiIsIlJvbGUiLCJNZWFzdXJlIiwiY2hhcnRWaXoiLCJDb250ZW50IiwiQ2hhcnRUeXBlIiwiRGltZW5zaW9uQXR0cmlidXRlcyIsIkRpbWVuc2lvbnMiLCJNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVzIiwiVHlwZSIsImNoYXJ0UFYiLCJQcmVzZW50YXRpb25WYXJpYW50Iiwic2V0Q2hhcnRWaXN1YWxpemF0aW9uIiwic2V0UHJvcGVydGllcyIsIlNvcnRPcmRlciIsImdldFByZXNlbnRhdGlvblZhcmlhbnQiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJnZXRJZCIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsInNldFByZXNlbnRhdGlvblZhcmlhbnQiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiX2NoYXJ0JGdldENvbnRyb2xEZWxlIiwiZXhpc3RpbmdQcmVzZW50YXRpb25WYXJpYW50IiwicHJvcGVydGllc0luZm8iLCJmZXRjaFByb3BlcnRpZXMiLCJzdGF0ZVV0aWxQdiIsIlByZXNlbnRhdGlvblZhcmlhbnRUb1N0YXRlVXRpbHNQViIsImNvbnZlcnRQdlRvU3RhdGVVdGlsUHYiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsImdldFZhcmlhbnQiLCJzZXRDdXJyZW50VmFyaWFudEtleSIsImtleSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsIlN0YXRlSGVscGVyIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJwcmVmaWxsRGVzY3JpcHRpb25zIiwiYXJndW1lbnRzIiwic2V0U2VsZWN0aW9uVmFyaWFudFRvTWRjQ29udHJvbCIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInNldEluaXRpYWxTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJfdGhpcyRjb250ZW50JGdldFZhcmkiLCJpbm5lckNoYXJ0IiwidmFyaWFudFRvUmV0cmlldmUiLCJ2YXJpYW50TWFuYWdlbWVudENvbnRyb2wiLCJ2YXJpYW50SWQiLCJhcHBseUxlZ2FjeVN0YXRlIiwiX25hdlBhcmFtZXRlcnMiLCJzaG91bGRBcHBseURpZmZTdGF0ZSIsInZtIiwidm1TdGF0ZSIsIl9jb250cm9sU3RhdGUkaW5uZXJDaCIsIl9jb250cm9sU3RhdGUkaW5uZXJDaDIiLCJhcHBseVN0YXRlIiwiX2NvbnRyb2xTdGF0ZSR2YXJpYW50IiwiX3RoaXMkY29udGVudDUiLCJjdXJyZW50VmFyaWFudCIsIl90aGlzJGNvbnRlbnQ2Iiwib3ZNIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsInNvbWUiLCJvVmFyaWFudCIsImdldEtleSIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFjdGl2YXRlVmFyaWFudCIsImVsZW1lbnQiLCJ2YXJpYW50UmVmZXJlbmNlIiwiaW5uZXJDaGFydFN0YXRlIiwiZmluYWxTdGF0ZSIsImRpZmZTdGF0ZSIsIl90aGlzJGdldFBhZ2VDb250cm9sbDMiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIl9jcmVhdGVDb250ZW50Iiwib3duZXIiLCJfZ2V0T3duZXIiLCJzZXRGaWx0ZXIiLCJkZXN0cm95IiwidmFsdWUiLCJzdXBwcmVzc0ludmFsaWRhdGUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImdldE1ldGFkYXRhIiwiZ2V0UHJvcGVydGllcyIsInJlbW92ZUFnZ3JlZ2F0aW9uIiwicmVtb3ZlZCIsImdldEFnZ3JlZ2F0aW9ucyIsImFkZEFnZ3JlZ2F0aW9uIiwiaW5zZXJ0QWdncmVnYXRpb24iLCJpbmRleCIsIl90aGlzJF9nZXRPd25lciIsIl90aGlzJF9nZXRPd25lciRnZXRSbyIsIl90aGlzJF9nZXRPd25lcjIiLCJfdGhpcyRnZXRBcHBDb21wb25lbnQiLCJjb250ZXh0UGF0aCIsIl9yZXNvbHZlZENvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJnZXRNZGNDaGFydFRlbXBsYXRlIiwiZ2V0Um9vdENvbnRyb2xsZXIiLCJnZXRWaWV3RGF0YSIsImdldEFwcENvbXBvbmVudCIsImdldERpYWdub3N0aWNzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIlRpdGxlTGV2ZWwiLCJBdXRvIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFydC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCBhcyBWb2NhYnVsYXJ5Q2hhcnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRDaGFydCBmcm9tIFwic2FwL2NoYXJ0L0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSBJVmlld1N0YXRlQ29udHJpYnV0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3ZpZXdTdGF0ZS9JVmlld1N0YXRlQ29udHJpYnV0b3JcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UsIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IEFjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIEFjdGlvbkdyb3VwIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvbkdyb3VwXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgSVNpbmdsZVNlY3Rpb25Db250cmlidXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9zZWN0aW9uL0lTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3JcIjtcbmltcG9ydCB0eXBlIHsgQ29uc3VtZXJEYXRhIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvc2VjdGlvbi9JU2luZ2xlU2VjdGlvbkNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IERpbWVuc2lvblR5cGUsIE1lYXN1cmVUeXBlLCBWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1ByZXNlbnRhdGlvblZhcmlhbnRcIjtcbmltcG9ydCBQcmVzZW50YXRpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9QcmVzZW50YXRpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCB9IGZyb20gXCJzYXAvaW5zaWdodHMvQ2FyZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRXZlbnQsIGRlZmF1bHQgYXMgVUk1RXZlbnQgfSBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIExheW91dERhdGEgZnJvbSBcInNhcC91aS9jb3JlL0xheW91dERhdGFcIjtcbmltcG9ydCB7IFRpdGxlTGV2ZWwgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTURDQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQXBwU3RhdGUsIEl0ZW1zLCBTb3J0ZXJzIH0gZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwiLi9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25PckFjdGlvbkdyb3VwLCBDaGFydENvbnRleHRPYmplY3RQYXRoLCBDaGFydEN1c3RvbURhdGEsIENvbW1hbmRBY3Rpb24gfSBmcm9tIFwiLi9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgeyBnZXRNZGNDaGFydFRlbXBsYXRlIH0gZnJvbSBcIi4vY2hhcnQvTWRjQ2hhcnRUZW1wbGF0ZVwiO1xuaW1wb3J0IFByZXNlbnRhdGlvblZhcmlhbnRUb1N0YXRlVXRpbHNQViBmcm9tIFwiLi9jaGFydC9hZGFwdGVyL0NoYXJ0UHZUb1N0YXRlVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYXJ0Q2FyZFBhcmFtcyB9IGZyb20gXCIuL2luc2lnaHRzL0FuYWx5dGljYWxJbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sU3RhdGUgfSBmcm9tIFwiLi9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHsgaGFzSW5zaWdodEFjdGlvbkVuYWJsZWQsIHNob3dHZW5lcmljRXJyb3JNZXNzYWdlIH0gZnJvbSBcIi4vaW5zaWdodHMvQ29tbW9uSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRDb250ZW50LCBJbnNpZ2h0c1BhcmFtcyB9IGZyb20gXCIuL2luc2lnaHRzL0luc2lnaHRzU2VydmljZVwiO1xuaW1wb3J0IHsgZ2V0Q2FyZE1hbmlmZXN0LCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldywgc2hvd0luc2lnaHRzQ2FyZFByZXZpZXcgfSBmcm9tIFwiLi9pbnNpZ2h0cy9JbnNpZ2h0c1NlcnZpY2VcIjtcbmltcG9ydCBTdGF0ZUhlbHBlciBmcm9tIFwiLi9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBDaGFydFN0YXRlID0ge1xuXHRpbm5lckNoYXJ0Pzoge1xuXHRcdGluaXRpYWxTdGF0ZT86IHtcblx0XHRcdGl0ZW1zPzogeyBuYW1lOiBzdHJpbmcgfVtdO1xuXHRcdH07XG5cdFx0ZnVsbFN0YXRlPzoge1xuXHRcdFx0aXRlbXM/OiB7IG5hbWU6IHN0cmluZyB9W107XG5cdFx0XHRmaWx0ZXI/OiBvYmplY3Q7XG5cdFx0fTtcblx0fTtcblx0dmFyaWFudE1hbmFnZW1lbnQ/OiB7XG5cdFx0dmFyaWFudElkPzogc3RyaW5nIHwgbnVsbDtcblx0fTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdXNlZCB0byBjcmVhdGUgYSBjaGFydCBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIGNvbnRleHRQYXRoIGFuZCBtZXRhUGF0aCBpcyBleHBlY3RlZC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkNoYXJ0IGlkPVwiTXlDaGFydFwiIGNvbnRleHRQYXRoPVwiL1Jvb3RFbnRpdHlcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkNoYXJ0XG4gKiBAaWdub3JlSW50ZXJmYWNlIHNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5JU2luZ2xlU2VjdGlvbkNvbnRyaWJ1dG9yXG4gKiBAdWk1LW1ldGFtb2RlbFxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkNoYXJ0XCIsIHsgcmV0dXJuVHlwZXM6IFtcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIl0gfSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYXJ0IGV4dGVuZHMgTWFjcm9BUEkgaW1wbGVtZW50cyBJU2luZ2xlU2VjdGlvbkNvbnRyaWJ1dG9yLCBJVmlld1N0YXRlQ29udHJpYnV0b3I8Q2hhcnRTdGF0ZT4ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9mZV9jb3JlX2NvbnRyb2xsZXJleHRlbnNpb25zX3ZpZXdTdGF0ZV9JVmlld1N0YXRlQ29udHJpYnV0b3IgPSB0cnVlO1xuXG5cdGNvbnRlbnQhOiBNRENDaGFydDtcblxuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5zZWN0aW9uLklTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3JcIilcblx0X19pbXBsZW1lbnRzX19zYXBfZmVfbWFjcm9zX2NvbnRyb2xzX3NlY3Rpb25fSVNpbmdsZVNlY3Rpb25Db250cmlidXRvciA9IHRydWU7XG5cblx0Z2V0U2VjdGlvbkNvbnRlbnRSb2xlKCk6IFwicHJvdmlkZXJcIiB8IFwiY29uc3VtZXJcIiB7XG5cdFx0cmV0dXJuIFwiY29uc3VtZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VuZERhdGFUb0NvbnN1bWVyIG1ldGhvZCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIElTaW5nbGVTZWN0aW9uQ29udHJpYnV0b3Jcblx0ICpcblx0ICogV2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgc2FwLmZlLm1hY3Jvcy5jb250cm9scy5TZWN0aW9uIGNvbnRyb2wgd2hlbiB0aGVyZSBpcyBhIENoYXJ0IGJ1aWxkaW5nIGJsb2NrIHJlbmRlcmVkIHdpdGhpbiBhIHNlY3Rpb25cblx0ICogYWxvbmcgd2l0aCB0aGUgY29uc3VtZXJEYXRhIGkuZS4gc2VjdGlvbidzIGRhdGEgc3VjaCBhcyB0aXRsZSBhbmQgdGl0bGUgbGV2ZWwgd2hpY2ggaXMgdGhlbiBhcHBsaWVkIHRvIHRoZSBjaGFydCB1c2luZyB0aGUgaW1wbGVtZW50YXRpb24gYmVsb3cgYWNjb3JkaW5nbHkuXG5cdCAqXG5cdCAqL1xuXG5cdHNlbmREYXRhVG9Db25zdW1lcihjb25zdW1lckRhdGE6IENvbnN1bWVyRGF0YSk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudD8uc2V0SGVhZGVyKGNvbnN1bWVyRGF0YS50aXRsZSk7XG5cdFx0dGhpcy5jb250ZW50Py5zZXRIZWFkZXJTdHlsZShcIkg0XCIpO1xuXHRcdHRoaXMuY29udGVudD8uc2V0SGVhZGVyTGV2ZWwoY29uc3VtZXJEYXRhLnRpdGxlTGV2ZWwgYXMgVGl0bGVMZXZlbCk7XG5cdH1cblxuXHQvKipcblx0ICogSUQgb2YgdGhlIGNoYXJ0XG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHJlYWRvbmx5IGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBwcmVzZW50YXRpb24gY29udGV4dCAoVUkuQ2hhcnQgd2l0aCBvciB3aXRob3V0IGEgcXVhbGlmaWVyKVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXSxcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXG5cdFx0XVxuXHR9KVxuXHRyZWFkb25seSBtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogTWV0YWRhdGEgcGF0aCB0byB0aGUgZW50aXR5U2V0IG9yIG5hdmlnYXRpb25Qcm9wZXJ0eVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXSxcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXVxuXHR9KVxuXHRyZWFkb25seSBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIHRoZSBoZWFkZXIgdGV4dCB0aGF0IGlzIHNob3duIGluIHRoZSBjaGFydFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHJlYWRvbmx5IGhlYWRlciE6IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIGhlYWRlciB0ZXh0IHNob3VsZCBiZSBzaG93biBvciBub3Rcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRyZWFkb25seSBoZWFkZXJWaXNpYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgc2VsZWN0aW9uIG1vZGUgdG8gYmUgdXNlZCBieSB0aGUgY2hhcnQuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgTm9uZWAsIGBTaW5nbGVgIG9yIGBNdWx0aXBsZWBcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiBcIk11bHRpcGxlXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIk5vbmVcIiwgXCJTaW5nbGVcIiwgXCJNdWx0aXBsZVwiXSB9KVxuXHRyZWFkb25seSBzZWxlY3Rpb25Nb2RlITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0aGUga2luZCBvZiB2YXJpYW50IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIGNoYXJ0LlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlIGlzIGBDb250cm9sYC48YnIvPlxuXHQgKiBJZiBzZXQgd2l0aCB2YWx1ZSBgQ29udHJvbGAsIGEgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2wgaXMgc2VlbiB3aXRoaW4gdGhlIGNoYXJ0IGFuZCB0aGUgY2hhcnQgaXMgbGlua2VkIHRvIHRoaXMuPGJyLz5cblx0ICogSWYgbm90IHNldCB3aXRoIGFueSB2YWx1ZSwgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2wgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBjaGFydC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgYWxsb3dlZFZhbHVlczogW1wiQ29udHJvbFwiXSB9KVxuXHRyZWFkb25seSB2YXJpYW50TWFuYWdlbWVudCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hpY2ggb3B0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIGNoYXJ0IHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAsIGFsbCBwb3NzaWJsZSBvcHRpb25zIGZvciB0aGlzIGtpbmQgb2YgY2hhcnQgYXJlIGVuYWJsZWQuPGJyLz5cblx0ICogSWYgaXQgaXMgc2V0IHRvIGBmYWxzZWAsIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZC48YnIvPlxuXHQgKiA8YnIvPlxuXHQgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBmb3IgdGhlIHBlcnNvbmFsaXphdGlvbiBieSBwcm92aWRpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB3aXRoIHRoZSBvcHRpb25zIHlvdSB3YW50IHRvIGJlIGF2YWlsYWJsZS48YnIvPlxuXHQgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6PGJyLz5cblx0ICogLSBTb3J0PGJyLz5cblx0ICogLSBUeXBlPGJyLz5cblx0ICogLSBJdGVtPGJyLz5cblx0ICogLSBGaWx0ZXI8YnIvPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0cmVhZG9ubHkgcGVyc29uYWxpemF0aW9uITogc3RyaW5nIHwgYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGVhZGVyIGxldmVsIG9mIGNoYXJ0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHJlYWRvbmx5IGhlYWRlckxldmVsOiBUaXRsZUxldmVsID0gVGl0bGVMZXZlbC5BdXRvO1xuXG5cdC8qKlxuXHQgKiBDaGFydCBkZWxlZ2F0ZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RcIiB9KVxuXHRyZWFkb25seSBjaGFydERlbGVnYXRlPzogb2JqZWN0O1xuXG5cdC8qKlxuXHQgKiBVc2VkIGludGVybmFsbHkgZm9yIExSIGFuZCBPUFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVhZG9ubHkgX2FwcGx5SWRUb0NvbnRlbnQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTm8gZGF0YSB0ZXh0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHJlYWRvbmx5IG5vRGF0YVRleHQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFBhcmFtZXRlciB3aXRoIGRyaWxsc3RhY2sgb24gYSBkcmlsbCB1cC8gZHJpbGwgZG93biBvZiB0aGUgTURDX0NoYXJ0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcmV2RHJpbGxTdGFjazogc3RyaW5nW10gPSBbXTtcblxuXHRfY29udGVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0X2NvbnRleHQhOiBNb2RlbENvbnRleHQ7XG5cblx0YmxvY2tBY3Rpb25zPzogQWN0aW9uT3JBY3Rpb25Hcm91cDtcblxuXHRfYmxvY2tJZD86IHN0cmluZztcblxuXHRfcGVyc29uYWxpemF0aW9uPzogc3RyaW5nIHwgYm9vbGVhbjtcblxuXHRpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdF9ibG9ja0FjdGlvbnMhOiAoTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkKVtdO1xuXG5cdGNoYXJ0RGVmaW5pdGlvbiE6IENoYXJ0VmlzdWFsaXphdGlvbjtcblxuXHRuYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcblxuXHRhdXRvQmluZE9uSW5pdD86IGJvb2xlYW47XG5cblx0dml6UHJvcGVydGllcz86IHN0cmluZztcblxuXHRjaGFydEFjdGlvbnM/OiBCYXNlQWN0aW9uW10gPSBbXTtcblxuXHRmaWx0ZXI/OiBzdHJpbmc7XG5cblx0dmlzaWJsZT86IHN0cmluZztcblxuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cblx0aGVhZGVyU3R5bGU/OiBUaXRsZUxldmVsO1xuXG5cdHVzZUNvbmRlbnNlZExheW91dCE6IGJvb2xlYW47XG5cblx0X21ldGFQYXRoQ29udGV4dCE6IE1vZGVsQ29udGV4dDtcblxuXHRfY3VzdG9tRGF0YSE6IENoYXJ0Q3VzdG9tRGF0YTtcblxuXHRfY2hhcnRDb250ZXh0ITogTW9kZWxDb250ZXh0O1xuXG5cdF9jaGFydFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRfY2hhcnQhOiBWb2NhYnVsYXJ5Q2hhcnQ7XG5cblx0X21ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG1lYXN1cmVzPzogTW9kZWxDb250ZXh0O1xuXG5cdF9zb3J0Q29uZGl0aW9uczogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXG5cdF9jb21tYW5kQWN0aW9uczogQ29tbWFuZEFjdGlvbltdID0gW107XG5cblx0ZmlyZVZhcmlhbnRTZWxlY3RlZD86IEZ1bmN0aW9uO1xuXG5cdGZpcmVWYXJpYW50U2F2ZWQ/OiBGdW5jdGlvbjtcblxuXHRmaXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZD86IEZ1bmN0aW9uO1xuXG5cdF9yZXNvbHZlZENvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZCBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcnQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGZpbHRlckJhcj86IHN0cmluZztcblxuXHRAYWdncmVnYXRpb24oe1xuXHRcdHR5cGU6IFwic2FwLnVpLmNvcmUuTGF5b3V0RGF0YVwiXG5cdH0pXG5cdGxheW91dERhdGEhOiBMYXlvdXREYXRhO1xuXG5cdC8qKlxuXHQgKiBBZ2dyZWdhdGUgYWN0aW9ucyBvZiB0aGUgY2hhcnQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvblwiLFxuXHRcdGFsdFR5cGVzOiBbXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvbkdyb3VwXCJdLFxuXHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdGRlZmF1bHRDbGFzczogQWN0aW9uXG5cdH0pXG5cdGFjdGlvbnMhOiBBY3Rpb25bXSB8IEFjdGlvbkdyb3VwW107XG5cblx0LyoqXG5cdCAqIEdldHMgY29udGV4dHMgZnJvbSB0aGUgY2hhcnQgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXG5cdCAqIEByZXR1cm5zIENvbnRleHRzIG9mIHRoZSByb3dzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldFNlbGVjdGVkQ29udGV4dHMoKTogQ29udGV4dFtdIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdH1cblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gY2hhcnQgc2VsZWN0aW9ucyBhcmUgY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXRhIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgYW5kIHRoZSBCb29sZWFuIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBkYXRhIGlzIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlbGVjdGlvbkNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgY2hhcnQgcmVxdWVzdHMgZGF0YS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsRGF0YVJlcXVlc3RlZCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiBjaGFydCdzIHZhcmlhbnQgaXMgc2VsZWN0ZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHR2YXJpYW50U2VsZWN0ZWQ/OiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogRXZlbnQgdHJpZ2dlcmVkIHdoZW4gY2hhcnQncyB2YXJpYW50IGlzIHNhdmVkLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0dmFyaWFudFNhdmVkPzogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEV2ZW50IHRyaWdnZXJlZCB3aGVuIGNoYXJ0J3Mgc2VnbWVudGVkIGJ1dHRvbiBpLmUuLCBtb2RlIGJldHdlZW4gdGFibGUsIGNoYXJ0IGFuZCBjaGFydCB3aXRoIHRhYmxlIHZpZXcgaXMgc2VsZWN0ZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdHNlZ21lbnRlZEJ1dHRvblByZXNzZWQhOiBGdW5jdGlvbjtcblxuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncz86IFByb3BlcnRpZXNPZjxDaGFydD4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRpZiAoc2V0dGluZ3M/Ll9hcHBseUlkVG9Db250ZW50KSB7XG5cdFx0XHRzZXR0aW5ncy5pZCA9IGdlbmVyYXRlKFtzZXR0aW5ncy5pZCwgXCI6OkNoYXJ0XCJdKTtcblx0XHR9XG5cdFx0c3VwZXIoc2V0dGluZ3MsIG90aGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gaXMgb3ZlcnJpZGRlbiB0byBlbnN1cmUgYmFja3dhcmQgaW5jb21wYXRpYmlsaXR5XG5cdCAqIEBvdmVycmlkZVxuXHQgKi9cblx0aXNBPFQgZXh0ZW5kcyBCYXNlT2JqZWN0ID0gQmFzZU9iamVjdD4odHlwZU5hbWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyBpcyBUO1xuXG5cdGlzQTxUPih0eXBlTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyBpcyBUO1xuXG5cdGlzQSh0eXBlTmFtZTogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRjb25zdCBvbGRWYWxpZFR5cGUgPSBcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIjtcblx0XHRpZiAoKEFycmF5LmlzQXJyYXkodHlwZU5hbWUpICYmIHR5cGVOYW1lLmluY2x1ZGVzKG9sZFZhbGlkVHlwZSkpIHx8IHR5cGVOYW1lID09PSBvbGRWYWxpZFR5cGUpIHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIHN1cGVyLmlzQSh0eXBlTmFtZSk7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKGFmdGVyUmVuZGVyaW5nRXZlbnQ6IEpRdWVyeS5FdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldFZpZXcoKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3Py5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGNoYXJ0ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgQ2hhcnQ7XG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VTdHJpcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250cm9scy9zaG93TWVzc2FnZVN0cmlwXCIpIHx8IHt9O1xuXHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBjaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpLFxuXHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5UGF0aH1DaGFydGAsXG5cdFx0XHRvQmluZGluZ0NvbnRleHQgPSB2aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdHNob3dNZXNzYWdlU3RyaXBbc0NhY2hlS2V5XSA9XG5cdFx0XHRjaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiICYmICEhb0JpbmRpbmdDb250ZXh0ICYmICFvQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KFwiSXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9zaG93TWVzc2FnZVN0cmlwXCIsIHNob3dNZXNzYWdlU3RyaXApO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cblx0XHRzdXBlci5vbkFmdGVyUmVuZGVyaW5nKGFmdGVyUmVuZGVyaW5nRXZlbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIoKTogdm9pZCB7XG5cdFx0U3RhdGVVdGlsLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMuc3RhdGVDaGFuZ2VIYW5kbGVyKTtcblx0XHRTdGF0ZVV0aWwuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHR9XG5cblx0c3RhdGVDaGFuZ2VIYW5kbGVyKG9FdmVudDogRXZlbnQ8eyBjb250cm9sOiBDb250cm9sIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250cm9sXCIpO1xuXHRcdGlmIChjb250cm9sLmlzQTxDaGFydD4oXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRjb25zdCBjaGFydEJsb2NrID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGNoYXJ0QmxvY2s/LmhhbmRsZVN0YXRlQ2hhbmdlKSB7XG5cdFx0XHRcdGNoYXJ0QmxvY2suaGFuZGxlU3RhdGVDaGFuZ2UoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyhvRmlsdGVyQ29udHJvbDogQ29udHJvbCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckNvbnRyb2wgYXMgRmlsdGVyQmFyLCBvQ2hhcnQhKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVTZWxlY3Rpb25DaGFuZ2Uob0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd25bXTsgbmFtZTogc3RyaW5nIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgYURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKTtcblx0XHRjb25zdCBiU2VsZWN0ZWQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmFtZVwiKSA9PT0gXCJzZWxlY3REYXRhXCI7XG5cdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHR0aGlzLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCBtZXJnZSh7fSwgeyBkYXRhOiBhRGF0YSwgc2VsZWN0ZWQ6IGJTZWxlY3RlZCB9KSk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcIik7XG5cdH1cblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJjb2xsYWJvcmF0aW9uTWFuYWdlclwiLCBcImNvbGxlY3RBdmFpbGFibGVDYXJkc1wiKVxuXHRhc3luYyBjb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHM6IFdyYXBwZWRDYXJkW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhY3Rpb25Ub29sYmFySXRlbXMgPSB0aGlzLmNvbnRlbnQuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXTtcblx0XHRpZiAoaGFzSW5zaWdodEFjdGlvbkVuYWJsZWQoYWN0aW9uVG9vbGJhckl0ZW1zLCB0aGlzLmNvbnRlbnQuZ2V0RmlsdGVyKCkpKSB7XG5cdFx0XHRjb25zdCBjYXJkID0gYXdhaXQgdGhpcy5nZXRDYXJkTWFuaWZlc3RDaGFydCgpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGNhcmQpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2FyZHMucHVzaCh7XG5cdFx0XHRcdFx0Y2FyZDogY2FyZCxcblx0XHRcdFx0XHR0aXRsZTogdGhpcy5nZXRDaGFydENvbnRyb2woKS5nZXRIZWFkZXIoKSxcblx0XHRcdFx0XHRjYWxsYmFjazogdGhpcy5vbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2suYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYXNTZWxlY3Rpb25zKCk6IGJvb2xlYW4ge1xuXHRcdC8vIGNvbnNpZGVyIGNoYXJ0IHNlbGVjdGlvbnMgaW4gdGhlIGN1cnJlbnQgZHJpbGwgc3RhY2sgb3Igb24gYW55IGZ1cnRoZXIgZHJpbGwgZG93bnNcblx0XHRjb25zdCBtZGNDaGFydCA9IHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIE1EQ0NoYXJ0O1xuXHRcdGlmIChtZGNDaGFydCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgY2hhcnQgPSAobWRjQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdW5rbm93biBhcyBDaGFydERlbGVnYXRlKT8uZ2V0SW5uZXJDaGFydChtZGNDaGFydCkgYXMgQ2hhcnRDaGFydDtcblx0XHRcdFx0aWYgKGNoYXJ0KSB7XG5cdFx0XHRcdFx0Y29uc3QgYURpbWVuc2lvbnMgPSBDaGFydFV0aWxzLmdldERpbWVuc2lvbnNGcm9tRHJpbGxTdGFjayhjaGFydCk7XG5cdFx0XHRcdFx0Y29uc3QgYklzRHJpbGxEb3duID0gYURpbWVuc2lvbnMubGVuZ3RoID4gdGhpcy5wcmV2RHJpbGxTdGFjay5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgYklzRHJpbGxVcCA9IGFEaW1lbnNpb25zLmxlbmd0aCA8IHRoaXMucHJldkRyaWxsU3RhY2subGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGJOb0NoYW5nZSA9IGFEaW1lbnNpb25zLnRvU3RyaW5nKCkgPT09IHRoaXMucHJldkRyaWxsU3RhY2sudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRsZXQgYUZpbHRlcnM6IEZpbHRlcltdO1xuXHRcdFx0XHRcdGlmIChiSXNEcmlsbFVwICYmIGFEaW1lbnNpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Ly8gZHJpbGxpbmcgdXAgdG8gbGV2ZWwwIHdvdWxkIGNsZWFyIGFsbCBzZWxlY3Rpb25zXG5cdFx0XHRcdFx0XHRhRmlsdGVycyA9IENoYXJ0VXRpbHMuZ2V0Q2hhcnRTZWxlY3Rpb25zKG1kY0NoYXJ0LCB0cnVlKSBhcyBGaWx0ZXJbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gYXBwbHkgZmlsdGVycyBvZiBzZWxlY3Rpb25zIG9mIHByZXZpb3VzIGRyaWxsc3RhY2sgd2hlbiBkcmlsbGluZyB1cC9kb3duXG5cdFx0XHRcdFx0XHQvLyB0byB0aGUgY2hhcnQgYW5kIHRhYmxlXG5cdFx0XHRcdFx0XHRhRmlsdGVycyA9IENoYXJ0VXRpbHMuZ2V0Q2hhcnRTZWxlY3Rpb25zKG1kY0NoYXJ0KSBhcyBGaWx0ZXJbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGJJc0RyaWxsRG93biB8fCBiSXNEcmlsbFVwKSB7XG5cdFx0XHRcdFx0XHQvLyB1cGRhdGUgdGhlIGRyaWxsc3RhY2sgb24gYSBkcmlsbCB1cC8gZHJpbGwgZG93blxuXHRcdFx0XHRcdFx0dGhpcy5wcmV2RHJpbGxTdGFjayA9IGFEaW1lbnNpb25zO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFGaWx0ZXJzLmxlbmd0aCA+IDA7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChiTm9DaGFuZ2UpIHtcblx0XHRcdFx0XHRcdC8vIGJOb0NoYW5nZSBpcyB0cnVlIHdoZW4gY2hhcnQgaXMgc2VsZWN0ZWRcblx0XHRcdFx0XHRcdHJldHVybiBhRmlsdGVycy5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgY2hlY2tpbmcgZm9yIHNlbGVjdGlvbnMgaW4gQ2hhcnQ6ICR7ZXJyfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgY2hhcnRzLlxuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gYXdhaXQgY3JlYXRlQ2hhcnRDYXJkUGFyYW1zKHRoaXMpO1xuXHRcdFx0aWYgKGluc2lnaHRzUGFyYW1zKSB7XG5cdFx0XHRcdHNob3dJbnNpZ2h0c0NhcmRQcmV2aWV3KGluc2lnaHRzUGFyYW1zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlKHRoaXMuY29udGVudCk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjYXJkIG1hbmlmZXN0IG9wdGltaXplZCBmb3IgdGhlIGNoYXJ0IGNhc2UuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgQ2FyZE1hbmlmZXN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldENhcmRNYW5pZmVzdENoYXJ0KCk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdFx0Y29uc3QgaW5zaWdodHNQYXJhbXMgPSBhd2FpdCBjcmVhdGVDaGFydENhcmRQYXJhbXModGhpcyk7XG5cdFx0cmV0dXJuIGdldENhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyBhcyBJbnNpZ2h0c1BhcmFtczxDaGFydENvbnRlbnQ+KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBpbnNpZ2h0c1BhcmFtcyBhbmQgY2FsbCB0aGUgQVBJIHRvIHNob3cgaW5zaWdodHMgY2FyZCBwcmV2aWV3IGZvciB0YWJsZS5cblx0ICogQHBhcmFtIGNhcmQgVGhlIGNhcmQgbWFuaWZlc3QgdG8gYmUgdXNlZCBmb3IgdGhlIGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiBjYXJkIHByZXZpZXcgaXMgcmVuZGVyZWQuXG5cdCAqL1xuXHRhc3luYyBvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2soY2FyZDogQ2FyZE1hbmlmZXN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChjYXJkKSB7XG5cdFx0XHRcdGF3YWl0IHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3KFxuXHRcdFx0XHRcdGNhcmQsXG5cdFx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5jb2xsYWJvcmF0aW9uTWFuYWdlci5nZXRTZXJ2aWNlKCkgYXMgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSh0aGlzLmNvbnRlbnQpO1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmlsdGVycyByZWxhdGVkIHRvIHRoZSBjaGFydC5cblx0ICogQHJldHVybnMgIFRoZSBmaWx0ZXIgY29uZmlndXJlZCBvbiB0aGUgY2hhcnQgb3IgdW5kZWZpbmVkIGlmIG5vbmVcblx0ICovXG5cdGdldEZpbHRlcigpOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNoYXJ0RmlsdGVySW5mbyA9IENoYXJ0VXRpbHMuZ2V0QWxsRmlsdGVySW5mbyh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBNRENDaGFydCk7XG5cdFx0aWYgKGNoYXJ0RmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Y2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG5cdFx0XHRcdGlmIChmaWx0ZXIuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0KGZpbHRlciBhcyB1bmtub3duIGFzIHsgc1BhdGg6IHN0cmluZyB9KS5zUGF0aCA9IHRoaXMuZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzKGZpbHRlci5nZXRQYXRoKCkhKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7IGZpbHRlcnM6IGNoYXJ0RmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY2hhcnQgY29udHJvbCBmcm9tIHRoZSBDaGFydCBBUEkuXG5cdCAqIEByZXR1cm5zIFRoZSBDaGFydCBjb250cm9sIGluc2lkZSB0aGUgQ2hhcnQgQVBJXG5cdCAqL1xuXHRnZXRDaGFydENvbnRyb2woKTogTURDQ2hhcnQge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgZGltZW5zaW9uLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lICBOYW1lIG9mIHRoZSBkaW1lbnNpb25cblx0ICogQHJldHVybnMgVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIGRpbWVuc2lvblxuXHQgKi9cblxuXHRnZXRQcm9wZXJ0eURhdGFNb2RlbChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgbnVsbCB7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSB0aGlzLmNvbnRlbnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpIGFzIHN0cmluZztcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGhpcy5jb250ZW50LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZGltZW5zaW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHttZXRhUGF0aH0vJHtwcm9wZXJ0eU5hbWV9YCkgYXMgQ29udGV4dDtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5PihkaW1lbnNpb25Db250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY2hhcnQgcHJvcGVydGllcyBieSByZW1vdmluZyBfZmVfZ3JvdXBhYmxlIGFuZCBfZmVfYWdncmVnYXRhYmxlIHByZWZpeC5cblx0ICogQHBhcmFtIHtBcnJheX0gYVByb3BlcnRpZXMgQ2hhcnQgZmlsdGVyIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgQ2hhcnQgcHJvcGVydGllcyB3aXRob3V0IHByZWZpeGVzXG5cdCAqL1xuXG5cdGdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhjaGFydFByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChjaGFydFByb3BlcnR5ICYmIGNoYXJ0UHJvcGVydHkuaW5jbHVkZXMoXCJmZV9ncm91cGFibGVcIikpIHtcblx0XHRcdGNoYXJ0UHJvcGVydHkgPSB0aGlzLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQoY2hhcnRQcm9wZXJ0eSwgXCJncm91cGFibGVcIik7XG5cdFx0fSBlbHNlIGlmIChjaGFydFByb3BlcnR5ICYmIGNoYXJ0UHJvcGVydHkuaW5jbHVkZXMoXCJmZV9hZ2dyZWdhdGFibGVcIikpIHtcblx0XHRcdGNoYXJ0UHJvcGVydHkgPSB0aGlzLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQoY2hhcnRQcm9wZXJ0eSwgXCJhZ2dyZWdhdGFibGVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBjaGFydFByb3BlcnR5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgY2hhcnQgZm9yIHRoZSBtZWFzdXJlIG9yIGRpbWVuc2lvbi5cblx0ICogQHBhcmFtIG5hbWUgSUQgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBraW5kIFR5cGUgb2YgdGhlIHByb3BlcnR5IChtZWFzdXJlIG9yIGRpbWVuc2lvbilcblx0ICogQHJldHVybnMgSW50ZXJuYWwgSUQgZm9yIHRoZSBzYXAuY2hhcnQuQ2hhcnRcblx0ICovXG5cblx0Z2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG5hbWUucmVwbGFjZShcIl9mZV9cIiArIGtpbmQgKyBcIl9cIiwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhcnQncyBzdGF0ZVV0aWwgIHRvIENoYXJ0IFByZXNlbnRhdGlvbiBWYXJpYW50LlxuXHQgKiBAcGFyYW0gY2hhcnRTdGF0ZSBDaGFydCBBcHBTdGF0ZSB1dGlsIFBWXG5cdCAqIEByZXR1cm5zIFByZXNlbnRhdGlvbiBWYXJpYW50IHN0cnVjdHVyZSBmb3IgdGhlIGNoYXJ0XG5cdCAqL1xuXHRfY29udmVydFN0YXRlVXRpbFRvUHJlc2VudGF0aW9uVmFyaWFudChjaGFydFN0YXRlOiBBcHBTdGF0ZSk6IFByZXNlbnRhdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IHNvcnRPcmRlciA9IGNoYXJ0U3RhdGUuc29ydGVycz8ubWFwKChzb3J0ZXI6IFNvcnRlcnMpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFByb3BlcnR5OiB0aGlzLmdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhzb3J0ZXIubmFtZSksXG5cdFx0XHRcdERlc2NlbmRpbmc6IHNvcnRlci5kZXNjZW5kaW5nXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdGNvbnN0IHR5cGUgPSBjaGFydFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWc/LnByb3BlcnRpZXM/LmNoYXJ0VHlwZTtcblx0XHRjb25zdCBjaGFydFR5cGVJblJlcXVpcmVkRm9ybWF0ID0gdHlwZSA/IHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGNoYXJ0VHlwZSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRUeXBlL1wiICsgY2hhcnRUeXBlSW5SZXF1aXJlZEZvcm1hdDtcblx0XHRjb25zdCBkaW1lbnNpb25zOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0bWVhc3VyZXM6IHN0cmluZ1tdID0gW10sXG5cdFx0XHRkaW1lbnNpb25BdHRyaWJ1dGVzOiBEaW1lbnNpb25UeXBlW10gPSBbXSxcblx0XHRcdG1lYXN1cmVBdHRyaWJ1dGVzOiBNZWFzdXJlVHlwZVtdID0gW107XG5cdFx0KGNoYXJ0U3RhdGUuaXRlbXMgPz8gW10pLmZvckVhY2goKGl0ZW06IEl0ZW1zKSA9PiB7XG5cdFx0XHRpdGVtLm5hbWUgPSB0aGlzLmdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhpdGVtLm5hbWUpO1xuXHRcdFx0Y29uc3Qgcm9sZSA9IGl0ZW0ucm9sZT8ubGVuZ3RoXG5cdFx0XHRcdD8gaXRlbS5yb2xlLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgaXRlbS5yb2xlPy5zdWJzdHJpbmcoMSwgaXRlbS5yb2xlLmxlbmd0aClcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoaXRlbS5yb2xlID09PSBcImNhdGVnb3J5XCIgfHwgaXRlbS5yb2xlID09PSBcInNlcmllc1wiIHx8IGl0ZW0ucm9sZSA9PT0gXCJjYXRlZ29yeTJcIikge1xuXHRcdFx0XHRkaW1lbnNpb25zLnB1c2goaXRlbS5uYW1lKTtcblx0XHRcdFx0ZGltZW5zaW9uQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHREaW1lbnNpb246IGl0ZW0ubmFtZSxcblx0XHRcdFx0XHRSb2xlOiBgY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS8ke3JvbGV9YFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lYXN1cmVzLnB1c2goaXRlbS5uYW1lKTtcblx0XHRcdFx0bWVhc3VyZUF0dHJpYnV0ZXMucHVzaCh7IE1lYXN1cmU6IGl0ZW0ubmFtZSwgUm9sZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERpbWVuc2lvblJvbGVUeXBlL1wiICsgcm9sZSB9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGNoYXJ0Vml6OiBWaXN1YWxpemF0aW9uID0ge1xuXHRcdFx0Q29udGVudDoge1xuXHRcdFx0XHRDaGFydFR5cGU6IGNoYXJ0VHlwZSxcblx0XHRcdFx0RGltZW5zaW9uQXR0cmlidXRlczogZGltZW5zaW9uQXR0cmlidXRlcyxcblx0XHRcdFx0RGltZW5zaW9uczogZGltZW5zaW9ucyxcblx0XHRcdFx0TWVhc3VyZUF0dHJpYnV0ZXM6IG1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRNZWFzdXJlczogbWVhc3VyZXNcblx0XHRcdH0sXG5cdFx0XHRUeXBlOiBcIkNoYXJ0XCJcblx0XHR9O1xuXHRcdGNvbnN0IGNoYXJ0UFYgPSBuZXcgUHJlc2VudGF0aW9uVmFyaWFudCgpO1xuXHRcdGNoYXJ0UFYuc2V0Q2hhcnRWaXN1YWxpemF0aW9uKGNoYXJ0Vml6KTtcblx0XHRjaGFydFBWLnNldFByb3BlcnRpZXMoe1xuXHRcdFx0U29ydE9yZGVyOiBzb3J0T3JkZXIgPz8gW11cblx0XHR9KTtcblx0XHRyZXR1cm4gY2hhcnRQVjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IHRoYXQgaXMgY3VycmVudGx5IGFwcGxpZWQgb24gdGhlIGNoYXJ0LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJlc2VudGF0aW9uIHZhcmlhbnQge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlByZXNlbnRhdGlvblZhcmlhbnR9IGFwcGxpZWQgdG8gdGhlIGNoYXJ0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cblx0YXN5bmMgZ2V0UHJlc2VudGF0aW9uVmFyaWFudCgpOiBQcm9taXNlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY2hhcnRTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHJldHVybiB0aGlzLl9jb252ZXJ0U3RhdGVVdGlsVG9QcmVzZW50YXRpb25WYXJpYW50KGNoYXJ0U3RhdGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zdCBpZDogc3RyaW5nID0gdGhpcy5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdExvZy5lcnJvcihgQ2hhcnQgQnVpbGRpbmcgQmxvY2sgKCR7aWR9KSAtIGdldCBwcmVzZW50YXRpb24gdmFyaWFudCBmYWlsZWQgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCBmb3IgdGhlIG1kYyBjaGFydC5cblx0ICpcblx0ICogVGhlIGpzb24gZm9ybWF0IHJldHJpZXZlZCBieSB1c2luZyB0aGUgZ2V0IFByZXNlbnRhdGlvblZhcmlhbnQgYnV0dG9uIGluIHRoZSBsaW5rZWQgRlBNIHNhbXBsZSBzaG91bGQgYmUgZm9sbG93ZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCB0aGUgUHJlc2VudGF0aW9uVmFyaWFudCBhcyBuZWVkZWQuXG5cdCAqIFRoZSB2YWx1ZXMgZGltZW5zaW9ucywgbWVhc3VyZXMgYW5kIG90aGVyIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYmUgZ2l2ZW4gaW4gdGhlIHZhbGlkIGZvcm1hdCBhbmQgbnVsbCBvciBlbXB0eSB2YWx1ZXMgc2hvdWxkIGJlIGF2b2lkZWQuXG5cdCAqIE9uZSBkaW1lbnNpb24gYXR0cmlidXRlIHNob3VsZCBoYXZlIG9ubHkgb25lIHJvbGUgYXNzb2NpYXRlZCB3aXRoIGl0IG9uIGEgZ2l2ZW4gY2hhcnQuXG5cdCAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50IHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uUHJlc2VudGF0aW9uVmFyaWFudH0gdG8gYmUgc2V0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cblx0YXN5bmMgc2V0UHJlc2VudGF0aW9uVmFyaWFudChwcmVzZW50YXRpb25WYXJpYW50OiBQcmVzZW50YXRpb25WYXJpYW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNoYXJ0ID0gdGhpcy5jb250ZW50O1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdQcmVzZW50YXRpb25WYXJpYW50ID0gYXdhaXQgdGhpcy5nZXRQcmVzZW50YXRpb25WYXJpYW50KCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IChhd2FpdCAoY2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgQ2hhcnREZWxlZ2F0ZSk/LmZldGNoUHJvcGVydGllcyhjaGFydCkpIGFzIFByb3BlcnR5SW5mb1tdO1xuXG5cdFx0XHRjb25zdCBzdGF0ZVV0aWxQdiA9IFByZXNlbnRhdGlvblZhcmlhbnRUb1N0YXRlVXRpbHNQVi5jb252ZXJ0UHZUb1N0YXRlVXRpbFB2KFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50LFxuXHRcdFx0XHRleGlzdGluZ1ByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0XHQpO1xuXG5cdFx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNoYXJ0LCBzdGF0ZVV0aWxQdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRTogQ2hhcnQgQnVpbGRpbmcgQmxvY2sgc2V0UHJlc2VudGF0aW9uVmFyaWFudCBBUEkgZmFpbGVkIHdpdGggZXJyb3I6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgdmFyaWFudCBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFZhcmlhbnQga2V5IG9mIHtAbGluayBzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnR9IGFwcGxpZWQgdG8gdGhlIGNoYXJ0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEN1cnJlbnRWYXJpYW50S2V5KCk6IHN0cmluZyB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFyaWFudCBvZiB0aGUgcHJvdmlkZWQga2V5IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHBhcmFtIGtleSBUaGUgdmFyaWFudCBrZXkgb2Yge0BsaW5rIHNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudH0gdG8gYmUgc2V0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNldEN1cnJlbnRWYXJpYW50S2V5KGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldEN1cnJlbnRWYXJpYW50S2V5KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBjaGFydC4gVGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgb25seSB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYXBwbGllZCBhdCB0aGUgY29udHJvbCBsZXZlbC5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldFNlbGVjdGlvblZhcmlhbnQoKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0cmV0dXJuIFN0YXRlSGVscGVyLmdldFNlbGVjdGlvblZhcmlhbnQodGhpcy5jb250ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byB0aGUgY2hhcnQuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byBhcHBseSB0byB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgU2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBTdGF0ZUhlbHBlci5zZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sKHRoaXMuZ2V0Q29udGVudCgpLCBzZWxlY3Rpb25WYXJpYW50LCBwcmVmaWxsRGVzY3JpcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRyb2wgc3RhdGUgYmFzZWQgb24gdGhlIGdpdmVuIGNvbnRyb2wgc3RhdGUga2V5LlxuXHQgKiBAcGFyYW0gY29udHJvbFN0YXRlIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmdWxsIHN0YXRlIG9mIHRoZSBjb250cm9sIGFsb25nIHdpdGggdGhlIGluaXRpYWwgc3RhdGUgaWYgYXZhaWxhYmxlLlxuXHQgKi9cblx0Z2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZSBhcyBvYmplY3Rcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0XHR0aGlzLmluaXRpYWxDb250cm9sU3RhdGUgPSBpbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IHJldHJpZXZlcyB0aGUgc3RhdGUgb2YgdGhlIGNoYXJ0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2aWV3c3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjaGFydCBzdGF0ZSBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGFzeW5jIHJldHJpZXZlU3RhdGUoKTogUHJvbWlzZTxDaGFydFN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGNoYXJ0U3RhdGU6IENoYXJ0U3RhdGUgPSB7fTtcblx0XHRjaGFydFN0YXRlLmlubmVyQ2hhcnQgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCFjaGFydFN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdGNoYXJ0U3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaGFydFN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJ0U3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSBjaGFydCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY2hhcnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSBjaGFydC5nZXRWYXJpYW50KCk7XG5cblx0XHRjb25zdCBjaGFydFN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKGNoYXJ0KSBhcyB7IGluaXRpYWxTdGF0ZT86IENoYXJ0U3RhdGU7IGZ1bGxTdGF0ZT86IENoYXJ0U3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblxuXHRcdGNvbnN0IGNvbnRyb2xTdGF0ZTogQ2hhcnRTdGF0ZSA9IHt9O1xuXG5cdFx0aWYgKGNoYXJ0U3RhdGUpIHtcblx0XHRcdGNvbnRyb2xTdGF0ZS5pbm5lckNoYXJ0ID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJDaGFydCxcblx0XHRcdFx0Li4uY2hhcnRTdGF0ZSxcblx0XHRcdFx0ZnVsbFN0YXRlOiB7XG5cdFx0XHRcdFx0Li4uY29udHJvbFN0YXRlLmlubmVyQ2hhcnQ/LmZ1bGxTdGF0ZSxcblx0XHRcdFx0XHQuLi5jaGFydFN0YXRlLmZ1bGxTdGF0ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbml0aWFsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJDaGFydD8uaW5pdGlhbFN0YXRlLFxuXHRcdFx0XHRcdC4uLmNoYXJ0U3RhdGUuaW5pdGlhbFN0YXRlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKHZtU3RhdGU/LnZhcmlhbnRJZCkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50ID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdHZhcmlhbnRJZDogdm1TdGF0ZS52YXJpYW50SWQudG9TdHJpbmcoKVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoY29udHJvbFN0YXRlICYmIE9iamVjdC5rZXlzKGNvbnRyb2xTdGF0ZSkubGVuZ3RoID4gMCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseVN0YXRlKGNvbnRyb2xTdGF0ZSBhcyBDb250cm9sU3RhdGUsIF9uYXZQYXJhbWV0ZXJzLCBzaG91bGRBcHBseURpZmZTdGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgdGhlIHByb3ZpZGVkIGNvbnRyb2wgc3RhdGUgdG8gdGhlIHZpZXdzdGF0ZS5cblx0ICogQHBhcmFtIGNvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBPcHRpb25hbCBmbGFnIHRvIHNraXAgbWVyZ2luZyBzdGF0ZXMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN0YXRlIGhhcyBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseVN0YXRlKGNvbnRyb2xTdGF0ZTogQ2hhcnRTdGF0ZSwgX25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdmFyaWFudElkID0gY29udHJvbFN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50Py52YXJpYW50SWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblxuXHRcdC8vIEhhbmRsZSBWYXJpYW50IE1hbmFnZW1lbnRcblx0XHRpZiAodmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgdmFyaWFudElkICE9PSBjdXJyZW50VmFyaWFudC5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRjb25zdCBvdk0gPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRcdGNvbnN0IGFWYXJpYW50cyA9IG92TT8uZ2V0VmFyaWFudHMoKTtcblx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gYVZhcmlhbnRzPy5zb21lKChvVmFyaWFudCkgPT4gb1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHZhcmlhbnRJZClcblx0XHRcdFx0PyB2YXJpYW50SWRcblx0XHRcdFx0OiBvdk0/LmdldFN0YW5kYXJkVmFyaWFudEtleTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0ZWxlbWVudDogb3ZNLFxuXHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXdhaXQgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIHN0YXRlIGV2ZW4gaWYgYWJvdmUgY29uZGl0aW9uIG5vdCBzYXRpc2ZpZWRcblx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIElubmVyIENoYXJ0IFN0YXRlXG5cdFx0Y29uc3QgaW5uZXJDaGFydFN0YXRlID0gY29udHJvbFN0YXRlLmlubmVyQ2hhcnQ7XG5cdFx0bGV0IGZpbmFsU3RhdGU7XG5cblx0XHRpZiAoaW5uZXJDaGFydFN0YXRlKSB7XG5cdFx0XHRpZiAoc2hvdWxkQXBwbHlEaWZmU3RhdGUgJiYgaW5uZXJDaGFydFN0YXRlLmluaXRpYWxTdGF0ZSkge1xuXHRcdFx0XHRmaW5hbFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLmRpZmZTdGF0ZShcblx0XHRcdFx0XHR0aGlzLmNvbnRlbnQsXG5cdFx0XHRcdFx0aW5uZXJDaGFydFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0aW5uZXJDaGFydFN0YXRlLmZ1bGxTdGF0ZSBhcyBvYmplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBpbm5lckNoYXJ0U3RhdGUuZnVsbFN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIGZpbmFsU3RhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIE1EQyBzdGF0ZSB1dGlsIHdoZW4gdGhlIHN0YXRlIGZvciB0aGlzIGNvbnRyb2wncyBjaGlsZCBoYXMgY2hhbmdlZC5cblx0ICovXG5cdGhhbmRsZVN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0fVxuXG5cdF9jcmVhdGVDb250ZW50KCk6IHZvaWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRpZiAob3duZXI/LmlzQTxUZW1wbGF0ZUNvbXBvbmVudD4oXCJzYXAuZmUuY29yZS5UZW1wbGF0ZUNvbXBvbmVudFwiKSkge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byByZW1vdmUgdGhlIGN1cnJlbnQgZmlsdGVyIGZyb20gdGhlIG9sZCAodG8gYmUgZGVzdHJveWVkKSBDaGFydCBpbnN0YW5jZSBiZWNhdXNlIGlmIHdlIGRvbid0IHRoZW4gZm9yIHNvbWUgc3RyYW5nZSByZWFzb24sIHRoZSBvbGQgQ2hhcnQgaW5zdGFuY2UgdXNlZCB0b1xuXHRcdFx0Ly8gcmVhY3QgZm9yIGZpbHRlciBiYXIgYWN0aW9uLCBmb3IgZXhhbXBsZSwgb24gQ2xpY2sgb2YgR28uXG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0RmlsdGVyKFwiXCIpO1xuXHRcdFx0dGhpcy5jb250ZW50LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdHNldFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9hcHBseWluZ1NldHRpbmdzICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXModGhpcy5nZXRNZXRhZGF0YSgpLmdldFByb3BlcnRpZXMoKSkuaW5jbHVkZXMoa2V5KSkge1xuXHRcdFx0c3VwZXIuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSwgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9jcmVhdGVDb250ZW50KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1cGVyLnNldFByb3BlcnR5KGtleSwgdmFsdWUsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVtb3ZlQWdncmVnYXRpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogTWFuYWdlZE9iamVjdCB8IG51bWJlciB8IHN0cmluZywgc3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IE1hbmFnZWRPYmplY3QgfCBudWxsIHtcblx0XHRsZXQgcmVtb3ZlZDogTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKCF0aGlzLl9hcHBseWluZ1NldHRpbmdzICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXModGhpcy5nZXRNZXRhZGF0YSgpLmdldEFnZ3JlZ2F0aW9ucygpKS5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0cmVtb3ZlZCA9IHN1cGVyLnJlbW92ZUFnZ3JlZ2F0aW9uKG5hbWUsIHZhbHVlLCBzdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdFx0dGhpcy5fY3JlYXRlQ29udGVudCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmVkID0gc3VwZXIucmVtb3ZlQWdncmVnYXRpb24obmFtZSwgdmFsdWUsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZW1vdmVkO1xuXHR9XG5cblx0YWRkQWdncmVnYXRpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogTWFuYWdlZE9iamVjdCwgc3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICghdGhpcy5fYXBwbHlpbmdTZXR0aW5ncyAmJiBPYmplY3Qua2V5cyh0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWdncmVnYXRpb25zKCkpLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRzdXBlci5hZGRBZ2dyZWdhdGlvbihuYW1lLCB2YWx1ZSwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRcdHRoaXMuX2NyZWF0ZUNvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuYWRkQWdncmVnYXRpb24obmFtZSwgdmFsdWUsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aW5zZXJ0QWdncmVnYXRpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogTWFuYWdlZE9iamVjdCwgaW5kZXg6IG51bWJlciwgc3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICghdGhpcy5fYXBwbHlpbmdTZXR0aW5ncyAmJiBPYmplY3Qua2V5cyh0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QWdncmVnYXRpb25zKCkpLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRzdXBlci5pbnNlcnRBZ2dyZWdhdGlvbihuYW1lLCB2YWx1ZSwgaW5kZXgsIHN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR0aGlzLl9jcmVhdGVDb250ZW50KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1cGVyLmluc2VydEFnZ3JlZ2F0aW9uKG5hbWUsIHZhbHVlLCBpbmRleCwgc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE1EQ0NoYXJ0IHtcblx0XHRpZiAodGhpcy5jb250ZXh0UGF0aCkge1xuXHRcdFx0dGhpcy5fcmVzb2x2ZWRDb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpID8gdGhpcy5jb250ZXh0UGF0aCA6IHRoaXMuY29udGV4dFBhdGggKyBcIi9cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ2V0TWRjQ2hhcnRUZW1wbGF0ZShcblx0XHRcdHRoaXMsXG5cdFx0XHR0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpPy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSA/PyAodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGEoKSBhcyB1bmtub3duIGFzIFZpZXdEYXRhKSxcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldERpYWdub3N0aWNzKCkgPz8gKHt9IGFzIERpYWdub3N0aWNzKSxcblx0XHRcdHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD4odGhpcy5tZXRhUGF0aCwgdGhpcy5fcmVzb2x2ZWRDb250ZXh0UGF0aCkhXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTRFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFkQSxJQWdCcUJBLEtBQUssSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLHFCQUFxQixFQUFFO0lBQUVDLFdBQVcsRUFBRSxDQUFDLHdCQUF3QjtFQUFFLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRWpGQyxrQkFBa0IsQ0FBQyxrRUFBa0Us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
@@ -392,7 +392,7 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
392
392
  }
393
393
  }
394
394
 
395
- onAfterRendering(): void {
395
+ onAfterRendering(afterRenderingEvent: JQuery.Event): void {
396
396
  const view = this.getPageController()?.getView();
397
397
  const internalModelContext: InternalModelContext = view?.getBindingContext("internal") as InternalModelContext;
398
398
  const chart = this.getContent() as Chart;
@@ -405,7 +405,7 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
405
405
  internalModelContext.setProperty("controls/showMessageStrip", showMessageStrip);
406
406
  this.attachStateChangeHandler();
407
407
 
408
- super.onAfterRendering();
408
+ super.onAfterRendering(afterRenderingEvent);
409
409
  }
410
410
 
411
411
  private attachStateChangeHandler(): void {
@@ -724,8 +724,8 @@ export default class Chart extends MacroAPI implements ISingleSectionContributor
724
724
  }
725
725
 
726
726
  /**
727
- * Get the selection variant from the chart.
728
- * @returns A promise that resolves with a {@link sap.fe.navigation.SelectionVariant}
727
+ * Get the selection variant from the chart. This function considers only the selection variant applied at the control level.
728
+ * @returns A promise that resolves with {@link sap.fe.navigation.SelectionVariant}.
729
729
  * @public
730
730
  */
731
731
  async getSelectionVariant(): Promise<SelectionVariant> {