@sapui5/sap.fe.core 1.100.0 → 1.102.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 (295) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AppComponent.js +23 -30
  4. package/src/sap/fe/core/AppComponent.ts +35 -40
  5. package/src/sap/fe/core/AppStateHandler.js +8 -8
  6. package/src/sap/fe/core/AppStateHandler.ts +11 -11
  7. package/src/sap/fe/core/BaseController.js +9 -9
  8. package/src/sap/fe/core/BaseController.ts +3 -4
  9. package/src/sap/fe/core/CommonUtils.js +122 -101
  10. package/src/sap/fe/core/CommonUtils.ts +239 -193
  11. package/src/sap/fe/core/ExtensionAPI.js +12 -13
  12. package/src/sap/fe/core/ExtensionAPI.ts +21 -31
  13. package/src/sap/fe/core/PageController.js +19 -13
  14. package/src/sap/fe/core/PageController.ts +40 -34
  15. package/src/sap/fe/core/TemplateComponent.js +198 -123
  16. package/src/sap/fe/core/TemplateComponent.ts +109 -121
  17. package/src/sap/fe/core/TemplateModel.js +7 -9
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  27. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  28. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  29. package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
  30. package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  33. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
  34. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
  35. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
  36. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
  37. package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
  38. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
  39. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  40. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  41. package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
  42. package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
  43. package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
  44. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
  45. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  46. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  47. package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
  48. package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  50. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  51. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  52. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  53. package/src/sap/fe/core/controllerextensions/Share.js +34 -16
  54. package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
  55. package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
  56. package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
  57. package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
  58. package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  61. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
  63. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
  65. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
  67. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
  68. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  69. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
  70. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
  71. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
  74. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  77. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
  78. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
  79. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  80. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  82. package/src/sap/fe/core/controls/Any.js +28 -0
  83. package/src/sap/fe/core/controls/Any.ts +30 -0
  84. package/src/sap/fe/core/controls/CommandExecution.js +50 -16
  85. package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
  86. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  87. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  88. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
  89. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
  90. package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
  91. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
  93. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
  95. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  96. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  97. package/src/sap/fe/core/controls/FileWrapper.js +360 -0
  98. package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
  99. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  100. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  101. package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
  102. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
  103. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  104. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  105. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  106. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  107. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  108. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  109. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  110. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  111. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  112. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  113. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
  114. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
  117. package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
  118. package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
  119. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  120. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  121. package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
  127. package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
  128. package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
  129. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  130. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  131. package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
  132. package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
  133. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
  135. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
  137. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  138. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  139. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
  140. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  143. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  145. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  147. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  149. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  151. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
  153. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  154. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  155. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  156. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  157. package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
  158. package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  161. package/src/sap/fe/core/fpm/Component.js +46 -17
  162. package/src/sap/fe/core/fpm/Component.ts +11 -16
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  165. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  166. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  167. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  168. package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
  169. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  170. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  171. package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
  172. package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
  173. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  174. package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
  175. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  176. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  177. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  178. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  179. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  181. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
  182. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
  183. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  184. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  185. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  186. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  187. package/src/sap/fe/core/library.js +13 -5
  188. package/src/sap/fe/core/library.ts +26 -17
  189. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  190. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  191. package/src/sap/fe/core/messagebundle.properties +135 -180
  192. package/src/sap/fe/core/messagebundle_ar.properties +31 -64
  193. package/src/sap/fe/core/messagebundle_bg.properties +31 -64
  194. package/src/sap/fe/core/messagebundle_ca.properties +31 -64
  195. package/src/sap/fe/core/messagebundle_cs.properties +31 -64
  196. package/src/sap/fe/core/messagebundle_cy.properties +32 -65
  197. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  198. package/src/sap/fe/core/messagebundle_de.properties +29 -62
  199. package/src/sap/fe/core/messagebundle_el.properties +32 -65
  200. package/src/sap/fe/core/messagebundle_en.properties +32 -65
  201. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
  202. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
  203. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
  204. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
  205. package/src/sap/fe/core/messagebundle_es.properties +31 -64
  206. package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
  207. package/src/sap/fe/core/messagebundle_et.properties +31 -64
  208. package/src/sap/fe/core/messagebundle_fi.properties +29 -62
  209. package/src/sap/fe/core/messagebundle_fr.properties +36 -69
  210. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
  211. package/src/sap/fe/core/messagebundle_hi.properties +29 -62
  212. package/src/sap/fe/core/messagebundle_hr.properties +32 -65
  213. package/src/sap/fe/core/messagebundle_hu.properties +30 -63
  214. package/src/sap/fe/core/messagebundle_id.properties +32 -65
  215. package/src/sap/fe/core/messagebundle_it.properties +31 -64
  216. package/src/sap/fe/core/messagebundle_iw.properties +31 -64
  217. package/src/sap/fe/core/messagebundle_ja.properties +29 -62
  218. package/src/sap/fe/core/messagebundle_kk.properties +31 -64
  219. package/src/sap/fe/core/messagebundle_ko.properties +31 -64
  220. package/src/sap/fe/core/messagebundle_lt.properties +31 -64
  221. package/src/sap/fe/core/messagebundle_lv.properties +32 -65
  222. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  223. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  224. package/src/sap/fe/core/messagebundle_no.properties +31 -64
  225. package/src/sap/fe/core/messagebundle_pl.properties +34 -67
  226. package/src/sap/fe/core/messagebundle_pt.properties +32 -65
  227. package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
  228. package/src/sap/fe/core/messagebundle_ro.properties +33 -66
  229. package/src/sap/fe/core/messagebundle_ru.properties +33 -66
  230. package/src/sap/fe/core/messagebundle_sh.properties +31 -64
  231. package/src/sap/fe/core/messagebundle_sk.properties +31 -64
  232. package/src/sap/fe/core/messagebundle_sl.properties +29 -62
  233. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  234. package/src/sap/fe/core/messagebundle_th.properties +31 -64
  235. package/src/sap/fe/core/messagebundle_tr.properties +31 -64
  236. package/src/sap/fe/core/messagebundle_uk.properties +32 -65
  237. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  238. package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
  239. package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
  240. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  241. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  243. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  244. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
  245. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
  246. package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
  247. package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
  248. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  249. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
  251. package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
  252. package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
  253. package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
  254. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  255. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
  257. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
  258. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  259. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  260. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  261. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  262. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  263. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  264. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  265. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
  266. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  267. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  268. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  269. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  270. package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
  271. package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
  272. package/src/sap/fe/core/templating/UIFormatters.js +133 -22
  273. package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
  274. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  275. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  276. package/src/sap/fe/core/type/Email.js +26 -8
  277. package/src/sap/fe/core/type/Email.ts +8 -7
  278. package/src/sap/fe/core/AnnotationHelper.js +0 -312
  279. package/src/sap/fe/core/AnnotationHelper.ts +0 -315
  280. package/src/sap/fe/core/RouterProxy.js +0 -926
  281. package/src/sap/fe/core/TransactionHelper.js +0 -1562
  282. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
  283. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
  284. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
  285. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
  286. package/src/sap/fe/core/actions/draft.js +0 -523
  287. package/src/sap/fe/core/actions/messageHandling.js +0 -567
  288. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  289. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  290. package/src/sap/fe/core/actions/operations.js +0 -1096
  291. package/src/sap/fe/core/actions/sticky.js +0 -130
  292. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  293. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
  294. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  295. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -2,21 +2,21 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/fe/core/TransactionHelper", "sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/BusyLocker", "sap/fe/core/library", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/m/Dialog", "sap/m/Button", "sap/m/Text", "sap/fe/core/actions/sticky", "sap/fe/core/actions/collaboration/ActivitySync", "sap/fe/core/actions/collaboration/CollaborationCommon"], function (ControllerExtension, OverrideExecution, TransactionHelper, Log, CommonUtils, BusyLocker, FELibrary, EditState, ClassSupport, ControllerExtensionMetadata, Dialog, Button, Text, sticky, ActivitySync, CollaborationCommon) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controllerextensions/editFlow/sticky", "sap/fe/core/controllerextensions/editFlow/TransactionHelper", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/EditState", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/Text", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution"], function (Log, CommonUtils, BusyLocker, ActivitySync, CollaborationCommon, sticky, TransactionHelper, ClassSupport, EditState, FELibrary, Button, Dialog, Text, ControllerExtension, OverrideExecution) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _class, _class2;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _dec34, _dec35, _dec36, _dec37, _dec38, _dec39, _dec40, _dec41, _dec42, _dec43, _dec44, _dec45, _dec46, _dec47, _dec48, _class, _class2;
9
9
 
10
+ var publicExtension = ClassSupport.publicExtension;
11
+ var privateExtension = ClassSupport.privateExtension;
12
+ var methodOverride = ClassSupport.methodOverride;
13
+ var finalExtension = ClassSupport.finalExtension;
14
+ var extensible = ClassSupport.extensible;
15
+ var defineUI5Class = ClassSupport.defineUI5Class;
10
16
  var Activity = CollaborationCommon.Activity;
11
17
  var send = ActivitySync.send;
12
- var UI5Class = ClassSupport.UI5Class;
13
- var Public = ClassSupport.Public;
14
- var Private = ClassSupport.Private;
15
- var Override = ClassSupport.Override;
16
- var Final = ClassSupport.Final;
17
- var Extensible = ClassSupport.Extensible;
18
18
 
19
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
19
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
20
20
 
21
21
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
22
22
 
@@ -26,8 +26,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
26
26
  DraftStatus = FELibrary.DraftStatus,
27
27
  EditMode = FELibrary.EditMode,
28
28
  CreationMode = FELibrary.CreationMode;
29
- var InternalEditFlow = (_dec = UI5Class("sap.fe.core.controllerextensions.InternalEditFlow", ControllerExtensionMetadata), _dec2 = Override(), _dec3 = Extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
30
- _inherits(InternalEditFlow, _ControllerExtension);
29
+ var InternalEditFlow = (_dec = defineUI5Class("sap.fe.core.controllerextensions.InternalEditFlow"), _dec2 = methodOverride(), _dec3 = privateExtension(), _dec4 = extensible(OverrideExecution.After), _dec5 = publicExtension(), _dec6 = finalExtension(), _dec7 = publicExtension(), _dec8 = finalExtension(), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec13 = publicExtension(), _dec14 = finalExtension(), _dec15 = publicExtension(), _dec16 = finalExtension(), _dec17 = publicExtension(), _dec18 = finalExtension(), _dec19 = publicExtension(), _dec20 = finalExtension(), _dec21 = publicExtension(), _dec22 = finalExtension(), _dec23 = publicExtension(), _dec24 = finalExtension(), _dec25 = publicExtension(), _dec26 = finalExtension(), _dec27 = publicExtension(), _dec28 = finalExtension(), _dec29 = publicExtension(), _dec30 = finalExtension(), _dec31 = publicExtension(), _dec32 = finalExtension(), _dec33 = publicExtension(), _dec34 = finalExtension(), _dec35 = publicExtension(), _dec36 = finalExtension(), _dec37 = publicExtension(), _dec38 = finalExtension(), _dec39 = publicExtension(), _dec40 = finalExtension(), _dec41 = publicExtension(), _dec42 = finalExtension(), _dec43 = publicExtension(), _dec44 = finalExtension(), _dec45 = publicExtension(), _dec46 = finalExtension(), _dec47 = publicExtension(), _dec48 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
30
+ _inheritsLoose(InternalEditFlow, _ControllerExtension);
31
31
 
32
32
  function InternalEditFlow() {
33
33
  return _ControllerExtension.apply(this, arguments) || this;
@@ -52,7 +52,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
52
52
  setCreationMode = function setCreationMode(bCreationMode) {// to be overridden
53
53
  };
54
54
 
55
- _proto.createMultipleDocuments = function createMultipleDocuments(oListBinding, aData, bCreateAtEnd, bFromCopyPaste, beforeCreateCallBack) {
55
+ _proto.createMultipleDocuments = function createMultipleDocuments(oListBinding, aData, bCreateAtEnd, bFromCopyPaste, beforeCreateCallBack, bInactive) {
56
56
  var _this = this;
57
57
 
58
58
  var transactionHelper = this.getTransactionHelper(),
@@ -87,7 +87,8 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
87
87
  mParameters.busyMode = "None";
88
88
  mParameters.creationMode = CreationMode.CreationRow;
89
89
  mParameters.parentControl = _this.getView();
90
- mParameters.createAtEnd = bCreateAtEnd; // Remove navigation properties as we don't support deep create
90
+ mParameters.createAtEnd = bCreateAtEnd;
91
+ mParameters.inactive = bInactive; // Remove navigation properties as we don't support deep create
91
92
 
92
93
  for (var sPropertyPath in mPropertyValues) {
93
94
  var oProperty = oMetaModel.getObject(sMetaPath + "/" + sPropertyPath);
@@ -103,7 +104,9 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
103
104
  }).then(function (aContexts) {
104
105
  // transient contexts are reliably removed once oNewContext.created() is resolved
105
106
  return Promise.all(aContexts.map(function (oNewContext) {
106
- return oNewContext.created();
107
+ if (!oNewContext.bInactive) {
108
+ return oNewContext.created();
109
+ }
107
110
  }));
108
111
  }).then(function () {
109
112
  var oBindingContext = _this.getView().getBindingContext(); // if there are transient contexts, we must avoid requesting side effects
@@ -163,7 +166,9 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
163
166
 
164
167
 
165
168
  EditState.setEditStateDirty();
166
- send(_this2.getView(), Activity.Delete, aContexts); // Finally, check if the current state can be impacted by the deletion, i.e. if there's
169
+ send(_this2.getView(), Activity.Delete, aContexts.map(function (context) {
170
+ return context.getPath();
171
+ })); // Finally, check if the current state can be impacted by the deletion, i.e. if there's
167
172
  // an OP displaying a deleted object. If yes navigate back to dismiss the OP
168
173
 
169
174
  for (var index = 0; index < aContexts.length; index++) {
@@ -242,14 +247,12 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
242
247
  */
243
248
  ;
244
249
 
245
- _proto.setEditMode = function setEditMode(sEditMode) {
246
- var bCreationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
250
+ _proto.setEditMode = function setEditMode(sEditMode, bCreationMode) {
247
251
  // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
248
252
  // rely on the global UI model to exist
249
253
  var oGlobalModel = this.getGlobalUIModel();
250
254
 
251
255
  if (sEditMode) {
252
- oGlobalModel.setProperty("/editMode", sEditMode, undefined, true);
253
256
  oGlobalModel.setProperty("/isEditable", sEditMode === "Editable", undefined, true);
254
257
  }
255
258
 
@@ -334,7 +337,10 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
334
337
 
335
338
  mParameters.internalModelContext = mParameters.controlId ? (_sap$ui$getCore$byId = sap.ui.getCore().byId(mParameters.controlId)) === null || _sap$ui$getCore$byId === void 0 ? void 0 : _sap$ui$getCore$byId.getBindingContext("internal") : null;
336
339
  return this.syncTask().then(transactionHelper.deleteDocument.bind(transactionHelper, oContext, mParameters, oResourceBundle, this.getMessageHandler())).then(function () {
337
- _this4.getInternalModel().setProperty("/sessionOn", false);
340
+ var internalModel = _this4.getInternalModel();
341
+
342
+ internalModel.setProperty("/sessionOn", false);
343
+ internalModel.setProperty("/stickySessionToken", undefined);
338
344
  }).catch(function (oError) {
339
345
  return Promise.reject(oError);
340
346
  });
@@ -487,7 +493,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
487
493
  // the new hash, and the guard cannot be found in the managed history of the router proxy
488
494
 
489
495
  setTimeout(function () {
490
- oAppComponent.getRouterProxy().setNavigationGuard();
496
+ oAppComponent.getRouterProxy().setNavigationGuard(oContext.getPath().substring(1));
491
497
  }, 0); // Setting back navigation on shell service, to get the dicard message box in case of sticky
492
498
 
493
499
  oAppComponent.getShellServices().setBackNavigation(this.onBackNavigationInSession.bind(this));
@@ -495,7 +501,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
495
501
  oAppComponent.getShellServices().registerDirtyStateProvider(this.fnDirtyStateProvider); // handle session timeout
496
502
 
497
503
  var i18nModel = this.getView().getModel("sap.fe.i18n");
498
- this.fnHandleSessionTimeout = this._attachSessionTimeout(this, i18nModel);
504
+ this.fnHandleSessionTimeout = this._attachSessionTimeout(oContext, i18nModel);
499
505
  this.getView().getModel().attachSessionTimeout(this.fnHandleSessionTimeout);
500
506
  this.fnStickyDiscardAfterNavigation = this._attachRouteMatched(this, oContext, oAppComponent);
501
507
  oAppComponent.getRoutingService().attachRouteMatched(this.fnStickyDiscardAfterNavigation);
@@ -566,7 +572,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
566
572
 
567
573
  if (oRouterProxy.checkIfBackIsOutOfGuard()) {
568
574
  var oBindingContext = oView && oView.getBindingContext();
569
- CommonUtils.processDataLossConfirmation(function () {
575
+ sticky.processDataLossConfirmation(function () {
570
576
  _this7.discardStickySession(oBindingContext);
571
577
 
572
578
  history.back();
@@ -663,7 +669,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
663
669
  };
664
670
 
665
671
  _proto._attachSessionTimeout = function _attachSessionTimeout(oContext, i18nModel) {
666
- var that = oContext;
672
+ var that = this;
667
673
  return function fnHandleSessionTimeout() {
668
674
  try {
669
675
  if (oContext === undefined) {
@@ -714,8 +720,20 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideE
714
720
  };
715
721
  };
716
722
 
723
+ _proto.scrollAndFocusOnInactiveRow = function scrollAndFocusOnInactiveRow(oTable) {
724
+ var oRowBinding = oTable.getRowBinding();
725
+ var iActiveRowIndex = oRowBinding.getCount() || 0;
726
+
727
+ if (iActiveRowIndex > 0) {
728
+ oTable.scrollToIndex(iActiveRowIndex - 1);
729
+ oTable.focusRow(iActiveRowIndex, true);
730
+ } else {
731
+ oTable.focusRow(iActiveRowIndex, true);
732
+ }
733
+ };
734
+
717
735
  return InternalEditFlow;
718
- }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setCreationMode", [Private, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "setCreationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createMultipleDocuments", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "createMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteMultipleDocuments", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "computeEditMode", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "computeEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setEditMode", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "setEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setDraftStatus", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "setDraftStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRoutingListener", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getRoutingListener"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getGlobalUIModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getGlobalUIModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "syncTask", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "syncTask"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getProgrammingModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getProgrammingModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteDocumentTransaction", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteDocumentTransaction"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleCreateEvents", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleCreateEvents"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTransactionHelper", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getTransactionHelper"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getInternalModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getInternalModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "createActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getCurrentActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteCurrentActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getActionResponseDataAndKeys", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getActionResponseDataAndKeys"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getMessageHandler", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOn", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOn"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOff", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOff"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBackNavigationInSession", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "onBackNavigationInSession"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "discardStickySession", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "discardStickySession"), _class2.prototype)), _class2)) || _class);
736
+ }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setCreationMode", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "setCreationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createMultipleDocuments", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "createMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteMultipleDocuments", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "computeEditMode", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "computeEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setEditMode", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "setEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setDraftStatus", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "setDraftStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRoutingListener", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "getRoutingListener"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getGlobalUIModel", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "getGlobalUIModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "syncTask", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "syncTask"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getProgrammingModel", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "getProgrammingModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteDocumentTransaction", [_dec23, _dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteDocumentTransaction"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleCreateEvents", [_dec25, _dec26], Object.getOwnPropertyDescriptor(_class2.prototype, "handleCreateEvents"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTransactionHelper", [_dec27, _dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "getTransactionHelper"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getInternalModel", [_dec29, _dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "getInternalModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createActionPromise", [_dec31, _dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "createActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getCurrentActionPromise", [_dec33, _dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "getCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteCurrentActionPromise", [_dec35, _dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getActionResponseDataAndKeys", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "getActionResponseDataAndKeys"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getMessageHandler", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOn", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOn"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOff", [_dec43, _dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOff"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBackNavigationInSession", [_dec45, _dec46], Object.getOwnPropertyDescriptor(_class2.prototype, "onBackNavigationInSession"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "discardStickySession", [_dec47, _dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "discardStickySession"), _class2.prototype)), _class2)) || _class);
719
737
  return InternalEditFlow;
720
738
  }, false);
721
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVybmFsRWRpdEZsb3cudHMiXSwibmFtZXMiOlsiUHJvZ3JhbW1pbmdNb2RlbCIsIkZFTGlicmFyeSIsIkRyYWZ0U3RhdHVzIiwiRWRpdE1vZGUiLCJDcmVhdGlvbk1vZGUiLCJJbnRlcm5hbEVkaXRGbG93IiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEiLCJPdmVycmlkZSIsIkV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0Q3JlYXRpb25Nb2RlIiwiYkNyZWF0aW9uTW9kZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwib0xpc3RCaW5kaW5nIiwiYURhdGEiLCJiQ3JlYXRlQXRFbmQiLCJiRnJvbUNvcHlQYXN0ZSIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwidHJhbnNhY3Rpb25IZWxwZXIiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsIm9Mb2NrT2JqZWN0IiwiZ2V0R2xvYmFsVUlNb2RlbCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiQnVzeUxvY2tlciIsImxvY2siLCJzeW5jVGFzayIsInRoZW4iLCJvbkJlZm9yZUNyZWF0ZVByb21pc2UiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldENvbnRleHQiLCJnZXRNZXRhUGF0aCIsImhhbmRsZUNyZWF0ZUV2ZW50cyIsImFDcmVhdGlvblByb21pc2VzIiwibWFwIiwibVByb3BlcnR5VmFsdWVzIiwibVBhcmFtZXRlcnMiLCJkYXRhIiwia2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCIsImJ1c3lNb2RlIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJwYXJlbnRDb250cm9sIiwiY3JlYXRlQXRFbmQiLCJzUHJvcGVydHlQYXRoIiwib1Byb3BlcnR5IiwiZ2V0T2JqZWN0IiwiJGtpbmQiLCJjcmVhdGVEb2N1bWVudCIsImdldE1lc3NhZ2VIYW5kbGVyIiwiYWxsIiwiYUNvbnRleHRzIiwib05ld0NvbnRleHQiLCJjcmVhdGVkIiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJDb21tb25VdGlscyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwicmVqZWN0IiwiZmluYWxseSIsInVubG9jayIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwib1JvdXRpbmdMaXN0ZW5lciIsImdldFJvdXRpbmdMaXN0ZW5lciIsIm9UYWJsZSIsImJ5SWQiLCJjb250cm9sSWQiLCJpc0EiLCJFcnJvciIsImdldFJvd0JpbmRpbmciLCJiRmluZEFjdGl2ZUNvbnRleHRzIiwiZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbiIsIm9SZXN1bHQiLCJjbGVhclNlbGVjdGlvbiIsImlzUm9vdCIsImF0dGFjaEV2ZW50T25jZSIsInJlZnJlc2giLCJFZGl0U3RhdGUiLCJzZXRFZGl0U3RhdGVEaXJ0eSIsInNlbmQiLCJBY3Rpdml0eSIsIkRlbGV0ZSIsImluZGV4IiwibGVuZ3RoIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5IiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJvRXJyb3IiLCJjb21wdXRlRWRpdE1vZGUiLCJvQ29udGV4dCIsInNDdXN0b21BY3Rpb24iLCJnZXRJbnRlcm5hbE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJzUHJvZ3JhbW1pbmdNb2RlbCIsImdldFByb2dyYW1taW5nTW9kZWwiLCJEcmFmdCIsInNldERyYWZ0U3RhdHVzIiwiQ2xlYXIiLCJyZXF1ZXN0T2JqZWN0IiwiYklzQWN0aXZlRW50aXR5Iiwic2V0RWRpdE1vZGUiLCJFZGl0YWJsZSIsImJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJEaXNwbGF5IiwiU3RpY2t5IiwiX2hhc05ld0FjdGlvbkZvclN0aWNreSIsIl9iQ3JlYXRlTW9kZSIsImhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucyIsImhhbmRsZVN0aWNreU9uIiwic2V0UHJvcGVydHkiLCJzRWRpdE1vZGUiLCJvR2xvYmFsTW9kZWwiLCJzRHJhZnRTdGF0ZSIsIl9yb3V0aW5nIiwidlRhc2siLCJmbk5ld1Rhc2siLCJfcFRhc2tzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJkZWxldGVEb2N1bWVudCIsImJpbmQiLCJvQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hFdmVudCIsIlNhdmluZyIsIm9FdmVudCIsImJTdWNjZXNzIiwiZ2V0UGFyYW1ldGVyIiwiU2F2ZWQiLCJzaG93TWVzc2FnZURpYWxvZyIsIl9vVHJhbnNhY3Rpb25IZWxwZXIiLCJUcmFuc2FjdGlvbkhlbHBlciIsImNyZWF0ZUFjdGlvblByb21pc2UiLCJzQWN0aW9uTmFtZSIsInNDb250cm9sSWQiLCJmUmVzb2x2ZXIiLCJmUmVqZWN0b3IiLCJvQWN0aW9uUHJvbWlzZSIsIm9SZXNwb25zZSIsIk9iamVjdCIsImFzc2lnbiIsImdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1ZpZXciLCJnZXREYXRhIiwic0FjdGlvblJldHVyblR5cGUiLCIkUmV0dXJuVHlwZSIsIiRUeXBlIiwiYUtleSIsIiRLZXkiLCJvRGF0YSIsImtleXMiLCJtZXNzYWdlSGFuZGxlciIsIm9BcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsImhhc05hdmlnYXRpb25HdWFyZCIsInNIYXNoVHJhY2tlciIsImdldEhhc2giLCJvSW50ZXJuYWxNb2RlbCIsInNldFRpbWVvdXQiLCJzZXROYXZpZ2F0aW9uR3VhcmQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJvbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uIiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJfcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImkxOG5Nb2RlbCIsImZuSGFuZGxlU2Vzc2lvblRpbWVvdXQiLCJfYXR0YWNoU2Vzc2lvblRpbWVvdXQiLCJhdHRhY2hTZXNzaW9uVGltZW91dCIsImZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiIsIl9hdHRhY2hSb3V0ZU1hdGNoZWQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsImluZm8iLCJoYW5kbGVTdGlja3lPZmYiLCJkaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRldGFjaFNlc3Npb25UaW1lb3V0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwib1JvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tJc091dE9mR3VhcmQiLCJwcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24iLCJkaXNjYXJkU3RpY2t5U2Vzc2lvbiIsImhpc3RvcnkiLCJiYWNrIiwic3RpY2t5IiwiZGlzY2FyZERvY3VtZW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsIm9TdGlja3lTZXNzaW9uIiwiTmV3QWN0aW9uIiwiQWRkaXRpb25hbE5ld0FjdGlvbnMiLCJmaW5kIiwic0FkZGl0aW9uYWxBY3Rpb24iLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJzVGFyZ2V0SGFzaCIsImlubmVyQXBwUm91dGUiLCJzTGNsSGFzaFRyYWNrZXIiLCJiRGlydHkiLCJiU2Vzc2lvbk9OIiwiaXNOYXZpZ2F0aW9uRmluYWxpemVkIiwiY2hlY2tIYXNoV2l0aEd1YXJkIiwiaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciIsInNldERpcnR5RmxhZyIsInRoYXQiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwidGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidHlwZSIsInByZXNzIiwiYWZ0ZXJDbG9zZSIsImRlc3Ryb3kiLCJhZGRTdHlsZUNsYXNzIiwic2V0TW9kZWwiLCJhZGREZXBlbmRlbnQiLCJvcGVuIiwib0ZuQ29udGV4dCIsInNDdXJyZW50SGFzaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJQcml2YXRlIiwiUHVibGljIiwiRmluYWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBbkM7QUFBQSxNQUNDRSxXQUFXLEdBQUdELFNBQVMsQ0FBQ0MsV0FEekI7QUFBQSxNQUVDQyxRQUFRLEdBQUdGLFNBQVMsQ0FBQ0UsUUFGdEI7QUFBQSxNQUdDQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0csWUFIMUI7TUFNTUMsZ0IsV0FETEMsUUFBUSxDQUFDLG1EQUFELEVBQXNEQywyQkFBdEQsQyxVQVVQQyxRQUFRLEUsVUFjUkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQzs7Ozs7Ozs7O1dBYlhDLE0sR0FEQSxrQkFDUztBQUNSLFdBQUtDLGNBQUwsR0FBc0IsS0FBS0MsSUFBTCxDQUFVQyxlQUFWLEVBQXRCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7WUFHQztBQUNBQyxJQUFBQSxlLEdBSEEseUJBR2dCQyxhQUhoQixFQUd3QyxDQUN2QztBQUNBLEs7O1dBR0RDLHVCLEdBRkEsaUNBRXdCQyxZQUZ4QixFQUUyQ0MsS0FGM0MsRUFFdURDLFlBRnZELEVBRTBFQyxjQUYxRSxFQUUrRkMsb0JBRi9GLEVBRTBIO0FBQUE7O0FBQ3pILFVBQU1DLGlC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TSxFQUNBQyxLLDBKQWtCQUQsTSxFQUNBQyxLLGlLQU9BRCxNLEVBQ0FDLEssbUtBWUFELE0sRUFDQUMsSyx5SkFxQkFELE0sRUFDQUMsSyw0SkFxQkFELE0sRUFDQUMsSyw2S0FLQUQsTSxFQUNBQyxLLDRLQWtDQUQsTSxFQUNBQyxLLHVLQXdCQUQsTSxFQUNBQyxLLHFLQVVBRCxNLEVBQ0FDLEssb0tBY0FELE0sRUFDQUMsSywyS0FxQkFELE0sRUFDQUMsSyxrTEFLQUQsTSxFQUNBQyxLLHVMQWFBRCxNLEVBQ0FDLEssOEtBMEJBRCxNLEVBQ0FDLEssZ0tBWUFELE0sRUFDQUMsSyw4SkF5Q0FELE0sRUFDQUMsSyx5S0FnREFELE0sRUFDQUMsSyw4S0F1QkFELE0sRUFDQUMsSztTQTRJYTNQLGdCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgVHJhbnNhY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL1RyYW5zYWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IHsgRXh0ZW5zaWJsZSwgRmluYWwsIE92ZXJyaWRlLCBQcml2YXRlLCBQdWJsaWMsIFVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBzdGlja3kgZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvc3RpY2t5XCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB7IHNlbmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWwsXG5cdERyYWZ0U3RhdHVzID0gRkVMaWJyYXJ5LkRyYWZ0U3RhdHVzLFxuXHRFZGl0TW9kZSA9IEZFTGlicmFyeS5FZGl0TW9kZSxcblx0Q3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcblxuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1wiLCBDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEpXG5jbGFzcyBJbnRlcm5hbEVkaXRGbG93IGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRwcml2YXRlIF9wVGFza3M6IGFueTtcblx0cHJpdmF0ZSBvQWN0aW9uUHJvbWlzZT86IFByb21pc2U8YW55Pjtcblx0cHJpdmF0ZSBfb1RyYW5zYWN0aW9uSGVscGVyPzogVHJhbnNhY3Rpb25IZWxwZXI7XG5cdHByaXZhdGUgZm5EaXJ0eVN0YXRlUHJvdmlkZXI/OiBGdW5jdGlvbjtcblx0cHJpdmF0ZSBmbkhhbmRsZVNlc3Npb25UaW1lb3V0PzogRnVuY3Rpb247XG5cdHByaXZhdGUgZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uPzogRnVuY3Rpb247XG5cdEBPdmVycmlkZSgpXG5cdG9uSW5pdCgpIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRvIHNldCB0aGUgY3JlYXRpb24gbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIGJDcmVhdGlvbk1vZGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3cjc2V0Q3JlYXRpb25Nb2RlXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBQcml2YXRlXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHNldENyZWF0aW9uTW9kZShiQ3JlYXRpb25Nb2RlOiBib29sZWFuKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlblxuXHR9XG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKG9MaXN0QmluZGluZzogYW55LCBhRGF0YTogYW55LCBiQ3JlYXRlQXRFbmQ6IGFueSwgYkZyb21Db3B5UGFzdGU6IGFueSwgYmVmb3JlQ3JlYXRlQ2FsbEJhY2s6IGFueSkge1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKSxcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5vUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLnN5bmNUYXNrKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCBvbkJlZm9yZUNyZWF0ZVByb21pc2UgPSBiZWZvcmVDcmVhdGVDYWxsQmFja1xuXHRcdFx0XHRcdD8gYmVmb3JlQ3JlYXRlQ2FsbEJhY2soeyBjb250ZXh0UGF0aDogb0xpc3RCaW5kaW5nICYmIG9MaXN0QmluZGluZy5nZXRQYXRoKCkgfSlcblx0XHRcdFx0XHQ6IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRyZXR1cm4gb25CZWZvcmVDcmVhdGVQcm9taXNlO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0xpc3RCaW5kaW5nLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0bGV0IHNNZXRhUGF0aDogc3RyaW5nO1xuXG5cdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLmdldFBhdGgoKSArIFwiL1wiICsgb0xpc3RCaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaGFuZGxlQ3JlYXRlRXZlbnRzKG9MaXN0QmluZGluZyk7XG5cblx0XHRcdFx0Ly8gSXRlcmF0ZSBvbiBhbGwgaXRlbXMgYW5kIHN0b3JlIHRoZSBjb3JyZXNwb25kaW5nIGNyZWF0aW9uIHByb21pc2Vcblx0XHRcdFx0Y29uc3QgYUNyZWF0aW9uUHJvbWlzZXMgPSBhRGF0YS5tYXAoKG1Qcm9wZXJ0eVZhbHVlczogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHsgZGF0YToge30gfTtcblxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQgPSBmYWxzZTsgLy8gY3VycmVudGx5IG5vdCBmdWxseSBzdXBwb3J0ZWRcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5TW9kZSA9IFwiTm9uZVwiO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdztcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSBiQ3JlYXRlQXRFbmQ7XG5cblx0XHRcdFx0XHQvLyBSZW1vdmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFzIHdlIGRvbid0IHN1cHBvcnQgZGVlcCBjcmVhdGVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eVBhdGggaW4gbVByb3BlcnR5VmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YVBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHkuJGtpbmQgIT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgbVByb3BlcnR5VmFsdWVzW3NQcm9wZXJ0eVBhdGhdKSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGFbc1Byb3BlcnR5UGF0aF0gPSBtUHJvcGVydHlWYWx1ZXNbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRyYW5zYWN0aW9uSGVscGVyLmNyZWF0ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHR0aGlzLmdldE1lc3NhZ2VIYW5kbGVyKCksXG5cdFx0XHRcdFx0XHRiRnJvbUNvcHlQYXN0ZSxcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFDcmVhdGlvblByb21pc2VzKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihhQ29udGV4dHM6IGFueSkge1xuXHRcdFx0XHQvLyB0cmFuc2llbnQgY29udGV4dHMgYXJlIHJlbGlhYmx5IHJlbW92ZWQgb25jZSBvTmV3Q29udGV4dC5jcmVhdGVkKCkgaXMgcmVzb2x2ZWRcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFDb250ZXh0cy5tYXAoZnVuY3Rpb24ob05ld0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9OZXdDb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdFx0XHQvLyBpZiB0aGVyZSBhcmUgdHJhbnNpZW50IGNvbnRleHRzLCB3ZSBtdXN0IGF2b2lkIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0Ly8gaWYgbGlzdCBiaW5kaW5nIGlzIHJlZnJlc2hlZCwgdHJhbnNpZW50IGNvbnRleHRzIG1pZ2h0IGJlIGxvc3Rcblx0XHRcdFx0aWYgKCFDb21tb25VdGlscy5oYXNUcmFuc2llbnRDb250ZXh0KG9MaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0JpbmRpbmdDb250ZXh0IGFzIENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIG11bHRpcGxlIGRvY3VtZW50cy5cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTG9ja09iamVjdCk7XG5cdFx0XHR9KTtcblx0fVxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVNdWx0aXBsZURvY3VtZW50cyhhQ29udGV4dHM6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9Sb3V0aW5nTGlzdGVuZXIgPSB0aGlzLmdldFJvdXRpbmdMaXN0ZW5lcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKTtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgVGFibGU7XG5cdFx0aWYgKCFvVGFibGUgfHwgIW9UYWJsZS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgY29udHJvbElkIG1pc3Npbmcgb3IgaW5jb3JyZWN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpIGFzIGFueTtcblx0XHRtUGFyYW1ldGVycy5iRmluZEFjdGl2ZUNvbnRleHRzID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLmRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24oYUNvbnRleHRzLCBtUGFyYW1ldGVycylcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0bGV0IG9SZXN1bHQ7XG5cblx0XHRcdFx0Ly8gTXVsdGlwbGUgb2JqZWN0IGRlbGV0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgbGlzdFxuXHRcdFx0XHQvLyBGaXJzdCBjbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhcyBpdCdzIG5vdCB2YWxpZCBhbnkgbW9yZVxuXHRcdFx0XHQob1RhYmxlIGFzIGFueSkuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdFx0XHQvLyBUaGVuIHJlZnJlc2ggdGhlIGxpc3QtYmluZGluZyAoTFIpLCBvciByZXF1aXJlIHNpZGUtZWZmZWN0cyAoT1ApXG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcuaXNSb290KCkpIHtcblx0XHRcdFx0XHQvLyBrZWVwIHByb21pc2UgY2hhaW4gcGVuZGluZyB1bnRpbCByZWZyZXNoIG9mIGxpc3RiaW5kaW5nIGlzIGNvbXBsZXRlZFxuXHRcdFx0XHRcdG9SZXN1bHQgPSBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcblx0XHRcdFx0XHRcdG9MaXN0QmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9MaXN0QmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmUgYXJlIHRyYW5zaWVudCBjb250ZXh0cywgd2UgbXVzdCBhdm9pZCByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0XHQvLyBpZiBsaXN0IGJpbmRpbmcgaXMgcmVmcmVzaGVkLCB0cmFuc2llbnQgY29udGV4dHMgbWlnaHQgYmUgbG9zdFxuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChvTGlzdEJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9CaW5kaW5nQ29udGV4dCBhcyBDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBkZWxldGluZyBhdCBsZWFzdCBvbmUgb2JqZWN0IHNob3VsZCBhbHNvIHNldCB0aGUgVUkgdG8gZGlydHlcblx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cblx0XHRcdFx0c2VuZCh0aGlzLmdldFZpZXcoKSwgQWN0aXZpdHkuRGVsZXRlLCBhQ29udGV4dHMpO1xuXG5cdFx0XHRcdC8vIEZpbmFsbHksIGNoZWNrIGlmIHRoZSBjdXJyZW50IHN0YXRlIGNhbiBiZSBpbXBhY3RlZCBieSB0aGUgZGVsZXRpb24sIGkuZS4gaWYgdGhlcmUnc1xuXHRcdFx0XHQvLyBhbiBPUCBkaXNwbGF5aW5nIGEgZGVsZXRlZCBvYmplY3QuIElmIHllcyBuYXZpZ2F0ZSBiYWNrIHRvIGRpc21pc3MgdGhlIE9QXG5cdFx0XHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhQ29udGV4dHMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0aW5nTGlzdGVuZXIuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KGFDb250ZXh0c1tpbmRleF0pKSB7XG5cdFx0XHRcdFx0XHRvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGFDb250ZXh0c1tpbmRleF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG9SZXN1bHQ7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRlbGV0aW5nIHRoZSBkb2N1bWVudChzKVwiLCBvRXJyb3IpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTG9ja09iamVjdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNpZGVzIGlmIGEgZG9jdW1lbnQgaXMgdG8gYmUgc2hvd24gaW4gZGlzcGxheSBvciBlZGl0IG1vZGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfY29tcHV0ZUVkaXRNb2RlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbEVkaXRGbG93XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBlZGl0ZWRcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXMgb25jZSB0aGUgZWRpdCBtb2RlIGlzIGNvbXB1dGVkXG5cdCAqL1xuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGNvbXB1dGVFZGl0TW9kZShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc0N1c3RvbUFjdGlvbiA9IHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLmdldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdFx0XHR0aGlzLnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblxuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0LnJlcXVlc3RPYmplY3QoXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0XHRcdFx0LnRoZW4oKGJJc0FjdGl2ZUVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChiSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaW4gY2FzZSB0aGUgZG9jdW1lbnQgaXMgZHJhZnQgc2V0IGl0IGluIGVkaXQgbW9kZVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KFwiSGFzQWN0aXZlRW50aXR5XCIpLnRoZW4oKGJIYXNBY3RpdmVFbnRpdHk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRFZGl0TW9kZSh1bmRlZmluZWQsICFiSGFzQWN0aXZlRW50aXR5KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBhY3RpdmUgZG9jdW1lbnQsIHN0YXkgb24gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRFZGl0TW9kZShFZGl0TW9kZS5EaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgdGhlIGVkaXRNb2RlIGZvciBkcmFmdFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdFx0XHRpZiAoc0N1c3RvbUFjdGlvbiAmJiBzQ3VzdG9tQWN0aW9uICE9PSBcIlwiICYmIHRoaXMuX2hhc05ld0FjdGlvbkZvclN0aWNreShvQ29udGV4dCwgdGhpcy5nZXRWaWV3KCksIHNDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuX2JDcmVhdGVNb2RlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKS5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUsIHRydWUpO1xuXHRcdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVN0aWNreU9uKG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KSgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlZGl0IG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRWRpdE1vZGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ3JlYXRpb25Nb2RlIENyZWF0ZU1vZGUgZmxhZyB0byBpZGVudGlmeSB0aGUgY3JlYXRpb24gbW9kZVxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0c2V0RWRpdE1vZGUoc0VkaXRNb2RlPzogc3RyaW5nLCBiQ3JlYXRpb25Nb2RlOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHQvLyBhdCB0aGlzIHBvaW50IG9mIHRpbWUgaXQncyBub3QgbWVhbnQgdG8gcmVsZWFzZSB0aGUgZWRpdCBmbG93IGZvciBmcmVlc3R5bGUgdXNhZ2UgdGhlcmVmb3JlIHdlIGNhblxuXHRcdC8vIHJlbHkgb24gdGhlIGdsb2JhbCBVSSBtb2RlbCB0byBleGlzdFxuXHRcdGNvbnN0IG9HbG9iYWxNb2RlbCA9IHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpO1xuXG5cdFx0aWYgKHNFZGl0TW9kZSkge1xuXHRcdFx0b0dsb2JhbE1vZGVsLnNldFByb3BlcnR5KFwiL2VkaXRNb2RlXCIsIHNFZGl0TW9kZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRcdG9HbG9iYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIsIHNFZGl0TW9kZSA9PT0gXCJFZGl0YWJsZVwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdH1cblxuXHRcdGlmIChiQ3JlYXRpb25Nb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNpbmNlIHNldENyZWF0aW9uTW9kZSBpcyBwdWJsaWMgaW4gRWRpdEZsb3cgYW5kIGNhbiBiZSBvdmVycmlkZW4sIG1ha2Ugc3VyZSB0byBjYWxsIGl0IHZpYSB0aGUgY29udHJvbGxlclxuXHRcdFx0Ly8gdG8gZW5zdXJlIGFueSBvdmVycmlkZXMgYXJlIHRha2VuIGludG8gYWNjb3VudFxuXHRcdFx0dGhpcy5zZXRDcmVhdGlvbk1vZGUoYkNyZWF0aW9uTW9kZSk7XG5cdFx0fVxuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0c2V0RHJhZnRTdGF0dXMoc0RyYWZ0U3RhdGU6IGFueSkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIGZyZWVzdHlsZSB1c2FnZSB0aGVyZWZvcmUgd2UgY2FuXG5cdFx0Ly8gcmVseSBvbiB0aGUgZ2xvYmFsIFVJIG1vZGVsIHRvIGV4aXN0XG5cdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL2RyYWZ0U3RhdHVzXCIsIHNEcmFmdFN0YXRlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0Um91dGluZ0xpc3RlbmVyKCkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIEZQTSBjdXN0b20gcGFnZXMgYW5kIHRoZSByb3V0aW5nXG5cdFx0Ly8gbGlzdGVuZXIgaXMgbm90IHlldCBwdWJsaWMgdGhlcmVmb3JlIGtlZXAgdGhlIGxvZ2ljIGhlcmUgZm9yIG5vd1xuXG5cdFx0aWYgKHRoaXMuYmFzZS5fcm91dGluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYmFzZS5fcm91dGluZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWRpdCBGbG93IHdvcmtzIG9ubHkgd2l0aCBhIGdpdmVuIHJvdXRpbmcgbGlzdGVuZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0R2xvYmFsVUlNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIGZyZWVzdHlsZSB1c2FnZSB0aGVyZWZvcmUgd2UgY2FuXG5cdFx0Ly8gcmVseSBvbiB0aGUgZ2xvYmFsIFVJIG1vZGVsIHRvIGV4aXN0XG5cdFx0cmV0dXJuIHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSB0YXNrIGluIHN5bmMgd2l0aCBvdGhlciB0YXNrcyBjcmVhdGVkIHZpYSB0aGlzIGZ1bmN0aW9uLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9taXNlIGNoYWluIG9mIHRoZSB0YXNrLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjc3luY1Rhc2tcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtQcm9taXNlfEZ1bmN0aW9ufSBbdlRhc2tdIE9wdGlvbmFsLCBhIHByb21pc2Ugb3IgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgc3luY2hyb25vdXNseVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSB0YXNrIGlzIGNvbXBsZXRlZFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRzeW5jVGFzayh2VGFzaz86IEZ1bmN0aW9uIHwgUHJvbWlzZTxhbnk+KSB7XG5cdFx0bGV0IGZuTmV3VGFzaztcblx0XHRpZiAodlRhc2sgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRmbk5ld1Rhc2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHZUYXNrO1xuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2VGFzayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRmbk5ld1Rhc2sgPSB2VGFzaztcblx0XHR9XG5cblx0XHR0aGlzLl9wVGFza3MgPSB0aGlzLl9wVGFza3MgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0aWYgKCEhZm5OZXdUYXNrKSB7XG5cdFx0XHR0aGlzLl9wVGFza3MgPSB0aGlzLl9wVGFza3MudGhlbihmbk5ld1Rhc2spLmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fcFRhc2tzO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dDogYW55KTogdHlwZW9mIFByb2dyYW1taW5nTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVEb2N1bWVudFRyYW5zYWN0aW9uKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIGFueSkub1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0dHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cblx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzZXR0aW5nIGFuZCByZW1vdmluZyBvZiBjb250ZXh0cyBzaG91bGRuJ3QgYmUgaW4gdGhlIHRyYW5zYWN0aW9uIGhlbHBlciBhdCBhbGxcblx0XHQvLyBmb3IgdGhlIHRpbWUgYmVpbmcgSSBrZXB0IGl0IGFuZCBwcm92aWRlIHRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IHRvIG5vdCBicmVhayBzb21ldGhpbmdcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmNvbnRyb2xJZFxuXHRcdFx0PyBzYXAudWlcblx0XHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdFx0LmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKVxuXHRcdFx0XHRcdD8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKVxuXHRcdFx0OiBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuc3luY1Rhc2soKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLmRlbGV0ZURvY3VtZW50LmJpbmQodHJhbnNhY3Rpb25IZWxwZXIsIG9Db250ZXh0LCBtUGFyYW1ldGVycywgb1Jlc291cmNlQnVuZGxlLCB0aGlzLmdldE1lc3NhZ2VIYW5kbGVyKCkpXG5cdFx0XHQpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCBmYWxzZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgY3JlYXRlIGV2ZW50OiBzaG93cyBtZXNzYWdlcyBhbmQgaW4gY2FzZSBvZiBhIGRyYWZ0LCB1cGRhdGVzIHRoZSBkcmFmdCBpbmRpY2F0b3IuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0JpbmRpbmcgT0RhdGEgbGlzdCBiaW5kaW5nIG9iamVjdFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0aGFuZGxlQ3JlYXRlRXZlbnRzKG9CaW5kaW5nOiBhbnkpIHtcblx0XHRjb25zdCB0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKTtcblxuXHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXG5cdFx0b0JpbmRpbmcgPSAob0JpbmRpbmcuZ2V0QmluZGluZyAmJiBvQmluZGluZy5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9CaW5kaW5nKTtcblxuXHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY3JlYXRlU2VudFwiLCAoKSA9PiB7XG5cdFx0XHR0cmFuc2FjdGlvbkhlbHBlci5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHR0aGlzLnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjcmVhdGVDb21wbGV0ZWRcIiwgKG9FdmVudDogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBiU3VjY2VzcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWNjZXNzXCIpO1xuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoYlN1Y2Nlc3MgPyBEcmFmdFN0YXR1cy5TYXZlZCA6IERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0TWVzc2FnZUhhbmRsZXIoKS5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdH0pO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0VHJhbnNhY3Rpb25IZWxwZXIoKSB7XG5cdFx0aWYgKCF0aGlzLl9vVHJhbnNhY3Rpb25IZWxwZXIpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBhbHNvIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIgaXMgbG9ja2luZyB0aGVyZWZvcmUgcGFzc2luZyBsb2NrIG9iamVjdFxuXHRcdFx0dGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyID0gbmV3IFRyYW5zYWN0aW9uSGVscGVyKHRoaXMuX29BcHBDb21wb25lbnQsIHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0SW50ZXJuYWxNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgcHJvbWlzZSB0byB3YWl0IGZvciBhbiBhY3Rpb24gdG8gYmUgZXhlY3V0ZWRcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9jcmVhdGVBY3Rpb25Qcm9taXNlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSByZXNvbHZlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBleHRlcm5hbGx5IHJlc29sdmUgdGhlIHByb21pc2Vcblx0ICovXG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Y3JlYXRlQWN0aW9uUHJvbWlzZShzQWN0aW9uTmFtZTogYW55LCBzQ29udHJvbElkOiBhbnkpIHtcblx0XHRsZXQgZlJlc29sdmVyLCBmUmVqZWN0b3I7XG5cdFx0dGhpcy5vQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZSZXNvbHZlciA9IHJlc29sdmU7XG5cdFx0XHRmUmVqZWN0b3IgPSByZWplY3Q7XG5cdFx0fSkudGhlbigob1Jlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKHsgY29udHJvbElkOiBzQ29udHJvbElkIH0sIHRoaXMuZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5cyhzQWN0aW9uTmFtZSwgb1Jlc3BvbnNlKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHsgZlJlc29sdmVyOiBmUmVzb2x2ZXIsIGZSZWplY3RvcjogZlJlamVjdG9yIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZ2V0Q3VycmVudEFjdGlvblByb21pc2Ugb2JqZWN0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEN1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyB0aGUgcHJvbWlzZVxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0Q3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0FjdGlvblByb21pc2U7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpIHtcblx0XHR0aGlzLm9BY3Rpb25Qcm9taXNlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUmVzcG9uc2UgVGhlIGJvdW5kIGFjdGlvbidzIHJlc3BvbnNlIGRhdGEgb3IgcmVzcG9uc2UgY29udGV4dFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCBkYXRhIGFuZCBuYW1lcyBvZiB0aGUga2V5IGZpZWxkcyBvZiB0aGUgcmVzcG9uc2Vcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMoc0FjdGlvbk5hbWU6IHN0cmluZywgb1Jlc3BvbnNlOiBhbnkpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvUmVzcG9uc2UpKSB7XG5cdFx0XHRpZiAob1Jlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRvUmVzcG9uc2UgPSBvUmVzcG9uc2VbMF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFvUmVzcG9uc2UpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b01ldGFNb2RlbCA9IChvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSkuZ2V0RGF0YSgpLFxuXHRcdFx0c0FjdGlvblJldHVyblR5cGUgPVxuXHRcdFx0XHRvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdWzBdICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdWzBdLiRSZXR1cm5UeXBlXG5cdFx0XHRcdFx0PyBvTWV0YU1vZGVsW3NBY3Rpb25OYW1lXVswXS4kUmV0dXJuVHlwZS4kVHlwZVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdGFLZXkgPSBzQWN0aW9uUmV0dXJuVHlwZSAmJiBvTWV0YU1vZGVsW3NBY3Rpb25SZXR1cm5UeXBlXSA/IG9NZXRhTW9kZWxbc0FjdGlvblJldHVyblR5cGVdLiRLZXkgOiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG9EYXRhOiBvUmVzcG9uc2UuZ2V0T2JqZWN0KCksXG5cdFx0XHRrZXlzOiBhS2V5XG5cdFx0fTtcblx0fVxuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGdldE1lc3NhZ2VIYW5kbGVyKCkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIEZQTSBjdXN0b20gcGFnZXMgdGhlcmVmb3JlIGtlZXBcblx0XHQvLyB0aGUgbG9naWMgaGVyZSBmb3Igbm93XG5cblx0XHRpZiAodGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IEZsb3cgd29ya3Mgb25seSB3aXRoIGEgZ2l2ZW4gbWVzc2FnZSBoYW5kbGVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGhhbmRsZVN0aWNreU9uKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAob0FwcENvbXBvbmVudCA9PT0gdW5kZWZpbmVkIHx8IG9Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIEFwcENvbXBvbmVudCBvciBDb250ZXh0IGZvciBmdW5jdGlvbiBoYW5kbGVTdGlja3lPblwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuaGFzTmF2aWdhdGlvbkd1YXJkKCkpIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2hUcmFja2VyID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKSxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpO1xuXG5cdFx0XHRcdC8vIFNldCBhIGd1YXJkIGluIHRoZSBSb3V0ZXJQcm94eVxuXHRcdFx0XHQvLyBBIHRpbWVvdXQgaXMgbmVjZXNzYXJ5LCBhcyB3aXRoIGRlZmVycmVkIGNyZWF0aW9uIHRoZSBoYXNoQ2hhbmdlciBpcyBub3QgdXBkYXRlZCB5ZXQgd2l0aFxuXHRcdFx0XHQvLyB0aGUgbmV3IGhhc2gsIGFuZCB0aGUgZ3VhcmQgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnkgb2YgdGhlIHJvdXRlciBwcm94eVxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXROYXZpZ2F0aW9uR3VhcmQoKTtcblx0XHRcdFx0fSwgMCk7XG5cblx0XHRcdFx0Ly8gU2V0dGluZyBiYWNrIG5hdmlnYXRpb24gb24gc2hlbGwgc2VydmljZSwgdG8gZ2V0IHRoZSBkaWNhcmQgbWVzc2FnZSBib3ggaW4gY2FzZSBvZiBzdGlja3lcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odGhpcy5vbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uLmJpbmQodGhpcykpO1xuXG5cdFx0XHRcdHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIgPSB0aGlzLl9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihvQXBwQ29tcG9uZW50LCBvSW50ZXJuYWxNb2RlbCwgc0hhc2hUcmFja2VyKTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIodGhpcy5mbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cblx0XHRcdFx0Ly8gaGFuZGxlIHNlc3Npb24gdGltZW91dFxuXHRcdFx0XHRjb25zdCBpMThuTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpO1xuXHRcdFx0XHR0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQgPSB0aGlzLl9hdHRhY2hTZXNzaW9uVGltZW91dCh0aGlzLCBpMThuTW9kZWwpO1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSBhcyBhbnkpLmF0dGFjaFNlc3Npb25UaW1lb3V0KHRoaXMuZm5IYW5kbGVTZXNzaW9uVGltZW91dCk7XG5cblx0XHRcdFx0dGhpcy5mblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24gPSB0aGlzLl9hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcywgb0NvbnRleHQsIG9BcHBDb21wb25lbnQpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmluZm8oZXJyb3IpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRoYW5kbGVTdGlja3lPZmYoKSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChvQXBwQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIEFwcENvbXBvbmVudCBmb3IgZnVuY3Rpb24gaGFuZGxlU3RpY2t5T2ZmXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KSB7XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZXhpdGVkIGZyb20gdGhlIGFwcCwgQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50IGRvZXNuJ3QgcmV0dXJuIGFcblx0XHRcdFx0Ly8gc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LCBoZW5jZSB0aGUgJ2lmJyBhYm92ZVxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZGlzY2FyZE5hdmlnYXRpb25HdWFyZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5mbkRpcnR5U3RhdGVQcm92aWRlcikge1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHRcdFx0XHR0aGlzLmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSAmJiB0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkgYXMgYW55KS5kZXRhY2hTZXNzaW9uVGltZW91dCh0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKTtcblx0XHRcdHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG5cdFx0XHR0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuX2JDcmVhdGVNb2RlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnNldEVkaXRNb2RlKEVkaXRNb2RlLkRpc3BsYXksIGZhbHNlKTtcblxuXHRcdFx0aWYgKG9BcHBDb21wb25lbnQpIHtcblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBleGl0ZWQgZnJvbSB0aGUgYXBwLCBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQgZG9lc24ndCByZXR1cm4gYVxuXHRcdFx0XHQvLyBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQsIGhlbmNlIHRoZSAnaWYnIGFib3ZlXG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5pbmZvKGVycm9yKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXNjcmlwdGlvbiBNZXRob2QgdG8gZGlzcGxheSBhICdkaXNjYXJkJyBwb3BvdmVyIHdoZW4gZXhpdGluZyBhIHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgb25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1xuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0b25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyksXG5cdFx0XHRvUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHRpZiAob1JvdXRlclByb3h5LmNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkKCkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZGlzY2FyZFN0aWNreVNlc3Npb24ob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b1ZpZXcsXG5cdFx0XHRcdHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQmluZGluZ0NvbnRleHQpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGhpc3RvcnkuYmFjaygpO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0ZGlzY2FyZFN0aWNreVNlc3Npb24ob0NvbnRleHQ6IGFueSkge1xuXHRcdHN0aWNreS5kaXNjYXJkRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdHRoaXMuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdH1cblxuXHRfaGFzTmV3QWN0aW9uRm9yU3RpY2t5KG9Db250ZXh0OiBhbnksIG9WaWV3OiBWaWV3LCBzQ3VzdG9tQWN0aW9uOiBzdHJpbmcpIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9Db250ZXh0ID09PSB1bmRlZmluZWQgfHwgb1ZpZXcgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uIF9oYXNOZXdBY3Rpb25Gb3JTdGlja3lcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCkuc3Vic3RyaW5nKDAsIG9Db250ZXh0LmdldFBhdGgoKS5pbmRleE9mKFwiKFwiKSksXG5cdFx0XHRcdG9TdGlja3lTZXNzaW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCIpO1xuXG5cdFx0XHRpZiAob1N0aWNreVNlc3Npb24gJiYgb1N0aWNreVNlc3Npb24uTmV3QWN0aW9uICYmIG9TdGlja3lTZXNzaW9uLk5ld0FjdGlvbiA9PT0gc0N1c3RvbUFjdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1N0aWNreVNlc3Npb24gJiYgb1N0aWNreVNlc3Npb24uQWRkaXRpb25hbE5ld0FjdGlvbnMpIHtcblx0XHRcdFx0cmV0dXJuIHNDdXN0b21BY3Rpb24gPT09XG5cdFx0XHRcdFx0b1N0aWNreVNlc3Npb24uQWRkaXRpb25hbE5ld0FjdGlvbnMuZmluZChmdW5jdGlvbihzQWRkaXRpb25hbEFjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0FkZGl0aW9uYWxBY3Rpb24gPT09IHNDdXN0b21BY3Rpb247XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuaW5mbyhlcnJvcik7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdF9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIG9JbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNIYXNoVHJhY2tlcjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGZuRGlydHlTdGF0ZVByb3ZpZGVyKG9OYXZpZ2F0aW9uQ29udGV4dDogYW55KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAob05hdmlnYXRpb25Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uIGZuRGlydHlTdGF0ZVByb3ZpZGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc1RhcmdldEhhc2ggPSBvTmF2aWdhdGlvbkNvbnRleHQuaW5uZXJBcHBSb3V0ZSxcblx0XHRcdFx0XHRvUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHRcdGxldCBzTGNsSGFzaFRyYWNrZXIgPSBcIlwiO1xuXHRcdFx0XHRsZXQgYkRpcnR5OiBib29sZWFuO1xuXHRcdFx0XHRjb25zdCBiU2Vzc2lvbk9OID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2Vzc2lvbk9uXCIpO1xuXG5cdFx0XHRcdGlmICghYlNlc3Npb25PTikge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBzdGlja3kgc2Vzc2lvbiB3YXMgdGVybWluYXRlZCBiZWZvcmUgaGFuZC5cblx0XHRcdFx0XHQvLyBFZXhhbXBsZSBpbiBjYXNlIG9mIG5hdmlnYXRpbmcgYXdheSBmcm9tIGFwcGxpY2F0aW9uIHVzaW5nIElCTi5cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFvUm91dGVyUHJveHkuaXNOYXZpZ2F0aW9uRmluYWxpemVkKCkpIHtcblx0XHRcdFx0XHQvLyBJZiBuYXZpZ2F0aW9uIGlzIGN1cnJlbnRseSBoYXBwZW5pbmcgaW4gUm91dGVyUHJveHksIGl0J3MgYSB0cmFuc2llbnQgc3RhdGVcblx0XHRcdFx0XHQvLyAobm90IGRpcnR5KVxuXHRcdFx0XHRcdGJEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdHNMY2xIYXNoVHJhY2tlciA9IHNUYXJnZXRIYXNoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNIYXNoVHJhY2tlciA9PT0gc1RhcmdldEhhc2gpIHtcblx0XHRcdFx0XHQvLyB0aGUgaGFzaCBkaWRuJ3QgY2hhbmdlIHNvIGVpdGhlciB0aGUgdXNlciBhdHRlbXB0cyB0byByZWZyZXNoIG9yIHRvIGxlYXZlIHRoZSBhcHBcblx0XHRcdFx0XHRiRGlydHkgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoc1RhcmdldEhhc2gpIHx8IG9Sb3V0ZXJQcm94eS5pc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgdXNlciBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB3aXRoaW4gdGhlIHJvb3Qgb2JqZWN0XG5cdFx0XHRcdFx0Ly8gb3IgY3Jvc3NpbmcgdGhlIGd1YXJkIGhhcyBhbHJlYWR5IGJlZW4gYWxsb3dlZCBieSB0aGUgUm91dGVyUHJveHlcblx0XHRcdFx0XHRzTGNsSGFzaFRyYWNrZXIgPSBzVGFyZ2V0SGFzaDtcblx0XHRcdFx0XHRiRGlydHkgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB0aGUgdXNlciBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB3aXRoaW4gdGhlIGFwcCwgZm9yIGV4YW1wbGUgYmFjayB0byB0aGUgbGlzdCByZXBvcnRcblx0XHRcdFx0XHRiRGlydHkgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGJEaXJ0eSkge1xuXHRcdFx0XHRcdC8vIHRoZSBGTFAgZG9lc24ndCBjYWxsIHRoZSBkaXJ0eSBzdGF0ZSBwcm92aWRlciBhbnltb3JlIG9uY2UgaXQncyBkaXJ0eSwgYXMgdGhleSBjYW4ndFxuXHRcdFx0XHRcdC8vIGNoYW5nZSB0aGlzIGR1ZSB0byBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2Ugc2V0IGl0IGJhY2sgdG8gbm90LWRpcnR5XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldERpcnR5RmxhZyhmYWxzZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0hhc2hUcmFja2VyID0gc0xjbEhhc2hUcmFja2VyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGJEaXJ0eTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKGVycm9yKTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0X2F0dGFjaFNlc3Npb25UaW1lb3V0KG9Db250ZXh0OiBhbnksIGkxOG5Nb2RlbDogTW9kZWwpIHtcblx0XHRjb25zdCB0aGF0ID0gb0NvbnRleHQ7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gZm5IYW5kbGVTZXNzaW9uVGltZW91dCgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChvQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ29udGV4dCBtaXNzaW5nIGZvciBmdW5jdGlvbiBmbkhhbmRsZVNlc3Npb25UaW1lb3V0XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHJlbW92ZSB0cmFuc2llbnQgbWVzc2FnZXMgc2luY2Ugd2Ugd2lsbCBzaG93aW5nIG91ciBvd24gbWVzc2FnZVxuXHRcdFx0XHR0aGF0LmdldE1lc3NhZ2VIYW5kbGVyKCkucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdHRpdGxlOiBcIntzYXAuZmUuaTE4bj5DX0VESVRGTE9XX09CSkVDVF9QQUdFX1NFU1NJT05fRVhQSVJFRF9ESUFMT0dfVElUTEV9XCIsXG5cdFx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHsgdGV4dDogXCJ7c2FwLmZlLmkxOG4+Q19FRElURkxPV19PQkpFQ1RfUEFHRV9TRVNTSU9OX0VYUElSRURfRElBTE9HX01FU1NBR0V9XCIgfSksXG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fRElBTE9HX09LfVwiLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBzdGlja3kgaGFuZGxpbmcgYWZ0ZXIgbmF2aWdhdGlvbiBzaW5jZSBzZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gdGVybWluYXRlZFxuXHRcdFx0XHRcdFx0XHR0aGF0LmhhbmRsZVN0aWNreU9mZigpO1xuXHRcdFx0XHRcdFx0XHR0aGF0LmdldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdG9EaWFsb2cuc2V0TW9kZWwoaTE4bk1vZGVsLCBcInNhcC5mZS5pMThuXCIpO1xuXHRcdFx0XHR0aGF0LmdldFZpZXcoKS5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmluZm8oZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0fVxuXG5cdF9hdHRhY2hSb3V0ZU1hdGNoZWQob0ZuQ29udGV4dDogYW55LCBvQ29udGV4dDogYW55LCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKTtcblx0XHRcdC8vIGVpdGhlciBjdXJyZW50IGhhc2ggaXMgZW1wdHkgc28gdGhlIHVzZXIgbGVmdCB0aGUgYXBwIG9yIGhlIG5hdmlnYXRlZCBhd2F5IGZyb20gdGhlIG9iamVjdFxuXHRcdFx0aWYgKCFzQ3VycmVudEhhc2ggfHwgIW9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5jaGVja0hhc2hXaXRoR3VhcmQoc0N1cnJlbnRIYXNoKSkge1xuXHRcdFx0XHRvRm5Db250ZXh0LmRpc2NhcmRTdGlja3lTZXNzaW9uKG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsRWRpdEZsb3c7XG4iXX0=
739
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVybmFsRWRpdEZsb3cudHMiXSwibmFtZXMiOlsiUHJvZ3JhbW1pbmdNb2RlbCIsIkZFTGlicmFyeSIsIkRyYWZ0U3RhdHVzIiwiRWRpdE1vZGUiLCJDcmVhdGlvbk1vZGUiLCJJbnRlcm5hbEVkaXRGbG93IiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0Q3JlYXRpb25Nb2RlIiwiYkNyZWF0aW9uTW9kZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwib0xpc3RCaW5kaW5nIiwiYURhdGEiLCJiQ3JlYXRlQXRFbmQiLCJiRnJvbUNvcHlQYXN0ZSIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwiYkluYWN0aXZlIiwidHJhbnNhY3Rpb25IZWxwZXIiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsIm9Mb2NrT2JqZWN0IiwiZ2V0R2xvYmFsVUlNb2RlbCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiQnVzeUxvY2tlciIsImxvY2siLCJzeW5jVGFzayIsInRoZW4iLCJvbkJlZm9yZUNyZWF0ZVByb21pc2UiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldENvbnRleHQiLCJnZXRNZXRhUGF0aCIsImhhbmRsZUNyZWF0ZUV2ZW50cyIsImFDcmVhdGlvblByb21pc2VzIiwibWFwIiwibVByb3BlcnR5VmFsdWVzIiwibVBhcmFtZXRlcnMiLCJkYXRhIiwia2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCIsImJ1c3lNb2RlIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJwYXJlbnRDb250cm9sIiwiY3JlYXRlQXRFbmQiLCJpbmFjdGl2ZSIsInNQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHkiLCJnZXRPYmplY3QiLCIka2luZCIsImNyZWF0ZURvY3VtZW50IiwiZ2V0TWVzc2FnZUhhbmRsZXIiLCJhbGwiLCJhQ29udGV4dHMiLCJvTmV3Q29udGV4dCIsImNyZWF0ZWQiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJyZWplY3QiLCJmaW5hbGx5IiwidW5sb2NrIiwiZGVsZXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvUm91dGluZ0xpc3RlbmVyIiwiZ2V0Um91dGluZ0xpc3RlbmVyIiwib1RhYmxlIiwiYnlJZCIsImNvbnRyb2xJZCIsImlzQSIsIkVycm9yIiwiZ2V0Um93QmluZGluZyIsImJGaW5kQWN0aXZlQ29udGV4dHMiLCJkZWxldGVEb2N1bWVudFRyYW5zYWN0aW9uIiwib1Jlc3VsdCIsImNsZWFyU2VsZWN0aW9uIiwiaXNSb290IiwiYXR0YWNoRXZlbnRPbmNlIiwicmVmcmVzaCIsIkVkaXRTdGF0ZSIsInNldEVkaXRTdGF0ZURpcnR5Iiwic2VuZCIsIkFjdGl2aXR5IiwiRGVsZXRlIiwiY29udGV4dCIsImluZGV4IiwibGVuZ3RoIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5IiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJvRXJyb3IiLCJjb21wdXRlRWRpdE1vZGUiLCJvQ29udGV4dCIsInNDdXN0b21BY3Rpb24iLCJnZXRJbnRlcm5hbE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJzUHJvZ3JhbW1pbmdNb2RlbCIsImdldFByb2dyYW1taW5nTW9kZWwiLCJEcmFmdCIsInNldERyYWZ0U3RhdHVzIiwiQ2xlYXIiLCJyZXF1ZXN0T2JqZWN0IiwiYklzQWN0aXZlRW50aXR5Iiwic2V0RWRpdE1vZGUiLCJFZGl0YWJsZSIsImJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJEaXNwbGF5IiwiU3RpY2t5IiwiX2hhc05ld0FjdGlvbkZvclN0aWNreSIsIl9iQ3JlYXRlTW9kZSIsImhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucyIsImhhbmRsZVN0aWNreU9uIiwic2V0UHJvcGVydHkiLCJzRWRpdE1vZGUiLCJvR2xvYmFsTW9kZWwiLCJzRHJhZnRTdGF0ZSIsIl9yb3V0aW5nIiwidlRhc2siLCJmbk5ld1Rhc2siLCJfcFRhc2tzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJkZWxldGVEb2N1bWVudCIsImJpbmQiLCJpbnRlcm5hbE1vZGVsIiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwiYXR0YWNoRXZlbnQiLCJTYXZpbmciLCJvRXZlbnQiLCJiU3VjY2VzcyIsImdldFBhcmFtZXRlciIsIlNhdmVkIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJfb1RyYW5zYWN0aW9uSGVscGVyIiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJjcmVhdGVBY3Rpb25Qcm9taXNlIiwic0FjdGlvbk5hbWUiLCJzQ29udHJvbElkIiwiZlJlc29sdmVyIiwiZlJlamVjdG9yIiwib0FjdGlvblByb21pc2UiLCJvUmVzcG9uc2UiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzIiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsIkFycmF5IiwiaXNBcnJheSIsIm9WaWV3IiwiZ2V0RGF0YSIsInNBY3Rpb25SZXR1cm5UeXBlIiwiJFJldHVyblR5cGUiLCIkVHlwZSIsImFLZXkiLCIkS2V5Iiwib0RhdGEiLCJrZXlzIiwibWVzc2FnZUhhbmRsZXIiLCJvQXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNOYXZpZ2F0aW9uR3VhcmQiLCJzSGFzaFRyYWNrZXIiLCJnZXRIYXNoIiwib0ludGVybmFsTW9kZWwiLCJzZXRUaW1lb3V0Iiwic2V0TmF2aWdhdGlvbkd1YXJkIiwic3Vic3RyaW5nIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwib25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbiIsImZuRGlydHlTdGF0ZVByb3ZpZGVyIiwiX3JlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJpMThuTW9kZWwiLCJmbkhhbmRsZVNlc3Npb25UaW1lb3V0IiwiX2F0dGFjaFNlc3Npb25UaW1lb3V0IiwiYXR0YWNoU2Vzc2lvblRpbWVvdXQiLCJmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24iLCJfYXR0YWNoUm91dGVNYXRjaGVkIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJpbmZvIiwiaGFuZGxlU3RpY2t5T2ZmIiwiZGlzY2FyZE5hdmlnYXRpb25HdWFyZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkIiwic3RpY2t5IiwicHJvY2Vzc0RhdGFMb3NzQ29uZmlybWF0aW9uIiwiZGlzY2FyZFN0aWNreVNlc3Npb24iLCJoaXN0b3J5IiwiYmFjayIsImRpc2NhcmREb2N1bWVudCIsImluZGV4T2YiLCJvU3RpY2t5U2Vzc2lvbiIsIk5ld0FjdGlvbiIsIkFkZGl0aW9uYWxOZXdBY3Rpb25zIiwiZmluZCIsInNBZGRpdGlvbmFsQWN0aW9uIiwib05hdmlnYXRpb25Db250ZXh0Iiwic1RhcmdldEhhc2giLCJpbm5lckFwcFJvdXRlIiwic0xjbEhhc2hUcmFja2VyIiwiYkRpcnR5IiwiYlNlc3Npb25PTiIsImlzTmF2aWdhdGlvbkZpbmFsaXplZCIsImNoZWNrSGFzaFdpdGhHdWFyZCIsImlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIiLCJzZXREaXJ0eUZsYWciLCJ0aGF0IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwib0RpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJjb250ZW50IiwiVGV4dCIsInRleHQiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInR5cGUiLCJwcmVzcyIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsInNldE1vZGVsIiwiYWRkRGVwZW5kZW50Iiwib3BlbiIsIm9GbkNvbnRleHQiLCJzQ3VycmVudEhhc2giLCJzY3JvbGxBbmRGb2N1c09uSW5hY3RpdmVSb3ciLCJvUm93QmluZGluZyIsImlBY3RpdmVSb3dJbmRleCIsImdldENvdW50Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzUm93IiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFuQztBQUFBLE1BQ0NFLFdBQVcsR0FBR0QsU0FBUyxDQUFDQyxXQUR6QjtBQUFBLE1BRUNDLFFBQVEsR0FBR0YsU0FBUyxDQUFDRSxRQUZ0QjtBQUFBLE1BR0NDLFlBQVksR0FBR0gsU0FBUyxDQUFDRyxZQUgxQjtNQU1NQyxnQixXQURMQyxjQUFjLENBQUMsbURBQUQsQyxVQVViQyxjQUFjLEUsVUFhZEMsZ0JBQWdCLEUsVUFDaEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsVUFLVkMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQStGZEQsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQThFZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWdEZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWlCZEQsZUFBZSxFLFdBQ2ZDLGNB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QUFBLHFDQUE0QjFLLE1BQTVCLEVBQTJDO0FBQzFDLFVBQU0ySyxXQUFXLEdBQUczSyxNQUFNLENBQUNLLGFBQVAsRUFBcEI7QUFDQSxVQUFNdUssZUFBZSxHQUFHRCxXQUFXLENBQUNFLFFBQVosTUFBMEIsQ0FBbEQ7O0FBQ0EsVUFBSUQsZUFBZSxHQUFHLENBQXRCLEVBQXlCO0FBQ3hCNUssUUFBQUEsTUFBTSxDQUFDOEssYUFBUCxDQUFxQkYsZUFBZSxHQUFHLENBQXZDO0FBQ0E1SyxRQUFBQSxNQUFNLENBQUMrSyxRQUFQLENBQWdCSCxlQUFoQixFQUFpQyxJQUFqQztBQUNBLE9BSEQsTUFHTztBQUNONUssUUFBQUEsTUFBTSxDQUFDK0ssUUFBUCxDQUFnQkgsZUFBaEIsRUFBaUMsSUFBakM7QUFDQTtBQUNELEs7OztJQW53QjZCSSxtQjtTQXN3QmhCcFEsZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgc2VuZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgc3RpY2t5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9zdGlja3lcIjtcbmltcG9ydCBUcmFuc2FjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvVHJhbnNhY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7XG5cdGRlZmluZVVJNUNsYXNzLFxuXHRleHRlbnNpYmxlLFxuXHRmaW5hbEV4dGVuc2lvbixcblx0bWV0aG9kT3ZlcnJpZGUsXG5cdHByaXZhdGVFeHRlbnNpb24sXG5cdHB1YmxpY0V4dGVuc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWwsXG5cdERyYWZ0U3RhdHVzID0gRkVMaWJyYXJ5LkRyYWZ0U3RhdHVzLFxuXHRFZGl0TW9kZSA9IEZFTGlicmFyeS5FZGl0TW9kZSxcblx0Q3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1wiKVxuY2xhc3MgSW50ZXJuYWxFZGl0RmxvdyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRwcml2YXRlIF9wVGFza3M6IGFueTtcblx0cHJpdmF0ZSBvQWN0aW9uUHJvbWlzZT86IFByb21pc2U8YW55Pjtcblx0cHJpdmF0ZSBfb1RyYW5zYWN0aW9uSGVscGVyPzogVHJhbnNhY3Rpb25IZWxwZXI7XG5cdHByaXZhdGUgZm5EaXJ0eVN0YXRlUHJvdmlkZXI/OiBGdW5jdGlvbjtcblx0cHJpdmF0ZSBmbkhhbmRsZVNlc3Npb25UaW1lb3V0PzogRnVuY3Rpb247XG5cdHByaXZhdGUgZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uPzogRnVuY3Rpb247XG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRvIHNldCB0aGUgY3JlYXRpb24gbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIGJDcmVhdGlvbk1vZGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3cjc2V0Q3JlYXRpb25Nb2RlXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0c2V0Q3JlYXRpb25Nb2RlKGJDcmVhdGlvbk1vZGU6IGJvb2xlYW4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdH1cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdG9MaXN0QmluZGluZzogYW55LFxuXHRcdGFEYXRhOiBhbnksXG5cdFx0YkNyZWF0ZUF0RW5kOiBhbnksXG5cdFx0YkZyb21Db3B5UGFzdGU6IGJvb2xlYW4sXG5cdFx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s6IGFueSxcblx0XHRiSW5hY3RpdmU/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKSxcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5vUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLnN5bmNUYXNrKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Y29uc3Qgb25CZWZvcmVDcmVhdGVQcm9taXNlID0gYmVmb3JlQ3JlYXRlQ2FsbEJhY2tcblx0XHRcdFx0XHQ/IGJlZm9yZUNyZWF0ZUNhbGxCYWNrKHsgY29udGV4dFBhdGg6IG9MaXN0QmluZGluZyAmJiBvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpIH0pXG5cdFx0XHRcdFx0OiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0cmV0dXJuIG9uQmVmb3JlQ3JlYXRlUHJvbWlzZTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9MaXN0QmluZGluZy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGxldCBzTWV0YVBhdGg6IHN0cmluZztcblxuXHRcdFx0XHRpZiAob0xpc3RCaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0xpc3RCaW5kaW5nLmdldENvbnRleHQoKS5nZXRQYXRoKCkgKyBcIi9cIiArIG9MaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0xpc3RCaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmhhbmRsZUNyZWF0ZUV2ZW50cyhvTGlzdEJpbmRpbmcpO1xuXG5cdFx0XHRcdC8vIEl0ZXJhdGUgb24gYWxsIGl0ZW1zIGFuZCBzdG9yZSB0aGUgY29ycmVzcG9uZGluZyBjcmVhdGlvbiBwcm9taXNlXG5cdFx0XHRcdGNvbnN0IGFDcmVhdGlvblByb21pc2VzID0gYURhdGEubWFwKChtUHJvcGVydHlWYWx1ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7IGRhdGE6IHt9IH07XG5cblx0XHRcdFx0XHRtUGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkID0gZmFsc2U7IC8vIGN1cnJlbnRseSBub3QgZnVsbHkgc3VwcG9ydGVkXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuYnVzeU1vZGUgPSBcIk5vbmVcIjtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3c7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kID0gYkNyZWF0ZUF0RW5kO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmluYWN0aXZlID0gYkluYWN0aXZlO1xuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcyB3ZSBkb24ndCBzdXBwb3J0IGRlZXAgY3JlYXRlXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzUHJvcGVydHlQYXRoIGluIG1Qcm9wZXJ0eVZhbHVlcykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFQYXRoICsgXCIvXCIgKyBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5LiRraW5kICE9PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIG1Qcm9wZXJ0eVZhbHVlc1tzUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kYXRhW3NQcm9wZXJ0eVBhdGhdID0gbVByb3BlcnR5VmFsdWVzW3NQcm9wZXJ0eVBhdGhdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cmFuc2FjdGlvbkhlbHBlci5jcmVhdGVEb2N1bWVudChcblx0XHRcdFx0XHRcdG9MaXN0QmluZGluZyxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRNZXNzYWdlSGFuZGxlcigpLFxuXHRcdFx0XHRcdFx0YkZyb21Db3B5UGFzdGUsXG5cdFx0XHRcdFx0XHR0aGlzLmdldFZpZXcoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhQ3JlYXRpb25Qcm9taXNlcyk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFDb250ZXh0czogYW55KSB7XG5cdFx0XHRcdC8vIHRyYW5zaWVudCBjb250ZXh0cyBhcmUgcmVsaWFibHkgcmVtb3ZlZCBvbmNlIG9OZXdDb250ZXh0LmNyZWF0ZWQoKSBpcyByZXNvbHZlZFxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0YUNvbnRleHRzLm1hcChmdW5jdGlvbiAob05ld0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKCFvTmV3Q29udGV4dC5iSW5hY3RpdmUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9OZXdDb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdFx0XHQvLyBpZiB0aGVyZSBhcmUgdHJhbnNpZW50IGNvbnRleHRzLCB3ZSBtdXN0IGF2b2lkIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0Ly8gaWYgbGlzdCBiaW5kaW5nIGlzIHJlZnJlc2hlZCwgdHJhbnNpZW50IGNvbnRleHRzIG1pZ2h0IGJlIGxvc3Rcblx0XHRcdFx0aWYgKCFDb21tb25VdGlscy5oYXNUcmFuc2llbnRDb250ZXh0KG9MaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0JpbmRpbmdDb250ZXh0IGFzIENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyBtdWx0aXBsZSBkb2N1bWVudHMuXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHRcdH0pO1xuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRkZWxldGVNdWx0aXBsZURvY3VtZW50cyhhQ29udGV4dHM6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9Sb3V0aW5nTGlzdGVuZXIgPSB0aGlzLmdldFJvdXRpbmdMaXN0ZW5lcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKTtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgVGFibGU7XG5cdFx0aWYgKCFvVGFibGUgfHwgIW9UYWJsZS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgY29udHJvbElkIG1pc3Npbmcgb3IgaW5jb3JyZWN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpIGFzIGFueTtcblx0XHRtUGFyYW1ldGVycy5iRmluZEFjdGl2ZUNvbnRleHRzID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLmRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24oYUNvbnRleHRzLCBtUGFyYW1ldGVycylcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0bGV0IG9SZXN1bHQ7XG5cblx0XHRcdFx0Ly8gTXVsdGlwbGUgb2JqZWN0IGRlbGV0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgbGlzdFxuXHRcdFx0XHQvLyBGaXJzdCBjbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhcyBpdCdzIG5vdCB2YWxpZCBhbnkgbW9yZVxuXHRcdFx0XHQob1RhYmxlIGFzIGFueSkuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdFx0XHQvLyBUaGVuIHJlZnJlc2ggdGhlIGxpc3QtYmluZGluZyAoTFIpLCBvciByZXF1aXJlIHNpZGUtZWZmZWN0cyAoT1ApXG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcuaXNSb290KCkpIHtcblx0XHRcdFx0XHQvLyBrZWVwIHByb21pc2UgY2hhaW4gcGVuZGluZyB1bnRpbCByZWZyZXNoIG9mIGxpc3RiaW5kaW5nIGlzIGNvbXBsZXRlZFxuXHRcdFx0XHRcdG9SZXN1bHQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9MaXN0QmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmUgYXJlIHRyYW5zaWVudCBjb250ZXh0cywgd2UgbXVzdCBhdm9pZCByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0XHQvLyBpZiBsaXN0IGJpbmRpbmcgaXMgcmVmcmVzaGVkLCB0cmFuc2llbnQgY29udGV4dHMgbWlnaHQgYmUgbG9zdFxuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChvTGlzdEJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9CaW5kaW5nQ29udGV4dCBhcyBDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBkZWxldGluZyBhdCBsZWFzdCBvbmUgb2JqZWN0IHNob3VsZCBhbHNvIHNldCB0aGUgVUkgdG8gZGlydHlcblx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cblx0XHRcdFx0c2VuZChcblx0XHRcdFx0XHR0aGlzLmdldFZpZXcoKSxcblx0XHRcdFx0XHRBY3Rpdml0eS5EZWxldGUsXG5cdFx0XHRcdFx0YUNvbnRleHRzLm1hcCgoY29udGV4dDogQ29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGN1cnJlbnQgc3RhdGUgY2FuIGJlIGltcGFjdGVkIGJ5IHRoZSBkZWxldGlvbiwgaS5lLiBpZiB0aGVyZSdzXG5cdFx0XHRcdC8vIGFuIE9QIGRpc3BsYXlpbmcgYSBkZWxldGVkIG9iamVjdC4gSWYgeWVzIG5hdmlnYXRlIGJhY2sgdG8gZGlzbWlzcyB0aGUgT1Bcblx0XHRcdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFDb250ZXh0cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdFx0XHRpZiAob1JvdXRpbmdMaXN0ZW5lci5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoYUNvbnRleHRzW2luZGV4XSkpIHtcblx0XHRcdFx0XHRcdG9Sb3V0aW5nTGlzdGVuZXIubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoYUNvbnRleHRzW2luZGV4XSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gb1Jlc3VsdDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRlbGV0aW5nIHRoZSBkb2N1bWVudChzKVwiLCBvRXJyb3IpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVjaWRlcyBpZiBhIGRvY3VtZW50IGlzIHRvIGJlIHNob3duIGluIGRpc3BsYXkgb3IgZWRpdCBtb2RlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2NvbXB1dGVFZGl0TW9kZVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1xuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgZWRpdGVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIG9uY2UgdGhlIGVkaXQgbW9kZSBpcyBjb21wdXRlZFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Y29tcHV0ZUVkaXRNb2RlKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBzQ3VzdG9tQWN0aW9uID0gdGhpcy5nZXRJbnRlcm5hbE1vZGVsKCkuZ2V0UHJvcGVydHkoXCIvc0N1c3RvbUFjdGlvblwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0KCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXG5cdFx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdFx0XHQucmVxdWVzdE9iamVjdChcIklzQWN0aXZlRW50aXR5XCIpXG5cdFx0XHRcdFx0XHQudGhlbigoYklzQWN0aXZlRW50aXR5OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGJJc0FjdGl2ZUVudGl0eSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpbiBjYXNlIHRoZSBkb2N1bWVudCBpcyBkcmFmdCBzZXQgaXQgaW4gZWRpdCBtb2RlXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRFZGl0TW9kZShFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3QoXCJIYXNBY3RpdmVFbnRpdHlcIikudGhlbigoYkhhc0FjdGl2ZUVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldEVkaXRNb2RlKHVuZGVmaW5lZCwgIWJIYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGFjdGl2ZSBkb2N1bWVudCwgc3RheSBvbiBkaXNwbGF5IG1vZGVcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldEVkaXRNb2RlKEVkaXRNb2RlLkRpc3BsYXksIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgdGhlIGVkaXRNb2RlIGZvciBkcmFmdFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdFx0XHRpZiAoc0N1c3RvbUFjdGlvbiAmJiBzQ3VzdG9tQWN0aW9uICE9PSBcIlwiICYmIHRoaXMuX2hhc05ld0FjdGlvbkZvclN0aWNreShvQ29udGV4dCwgdGhpcy5nZXRWaWV3KCksIHNDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuX2JDcmVhdGVNb2RlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKS5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUsIHRydWUpO1xuXHRcdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVN0aWNreU9uKG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KSgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlZGl0IG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRWRpdE1vZGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ3JlYXRpb25Nb2RlIENyZWF0ZU1vZGUgZmxhZyB0byBpZGVudGlmeSB0aGUgY3JlYXRpb24gbW9kZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHNldEVkaXRNb2RlKHNFZGl0TW9kZT86IHN0cmluZywgYkNyZWF0aW9uTW9kZT86IGJvb2xlYW4pIHtcblx0XHQvLyBhdCB0aGlzIHBvaW50IG9mIHRpbWUgaXQncyBub3QgbWVhbnQgdG8gcmVsZWFzZSB0aGUgZWRpdCBmbG93IGZvciBmcmVlc3R5bGUgdXNhZ2UgdGhlcmVmb3JlIHdlIGNhblxuXHRcdC8vIHJlbHkgb24gdGhlIGdsb2JhbCBVSSBtb2RlbCB0byBleGlzdFxuXHRcdGNvbnN0IG9HbG9iYWxNb2RlbCA9IHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpO1xuXG5cdFx0aWYgKHNFZGl0TW9kZSkge1xuXHRcdFx0b0dsb2JhbE1vZGVsLnNldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIiwgc0VkaXRNb2RlID09PSBcIkVkaXRhYmxlXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGJDcmVhdGlvbk1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gU2luY2Ugc2V0Q3JlYXRpb25Nb2RlIGlzIHB1YmxpYyBpbiBFZGl0RmxvdyBhbmQgY2FuIGJlIG92ZXJyaWRlbiwgbWFrZSBzdXJlIHRvIGNhbGwgaXQgdmlhIHRoZSBjb250cm9sbGVyXG5cdFx0XHQvLyB0byBlbnN1cmUgYW55IG92ZXJyaWRlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50XG5cdFx0XHR0aGlzLnNldENyZWF0aW9uTW9kZShiQ3JlYXRpb25Nb2RlKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0c2V0RHJhZnRTdGF0dXMoc0RyYWZ0U3RhdGU6IGFueSkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIGZyZWVzdHlsZSB1c2FnZSB0aGVyZWZvcmUgd2UgY2FuXG5cdFx0Ly8gcmVseSBvbiB0aGUgZ2xvYmFsIFVJIG1vZGVsIHRvIGV4aXN0XG5cdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL2RyYWZ0U3RhdHVzXCIsIHNEcmFmdFN0YXRlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJvdXRpbmdMaXN0ZW5lcigpIHtcblx0XHQvLyBhdCB0aGlzIHBvaW50IG9mIHRpbWUgaXQncyBub3QgbWVhbnQgdG8gcmVsZWFzZSB0aGUgZWRpdCBmbG93IGZvciBGUE0gY3VzdG9tIHBhZ2VzIGFuZCB0aGUgcm91dGluZ1xuXHRcdC8vIGxpc3RlbmVyIGlzIG5vdCB5ZXQgcHVibGljIHRoZXJlZm9yZSBrZWVwIHRoZSBsb2dpYyBoZXJlIGZvciBub3dcblxuXHRcdGlmICh0aGlzLmJhc2UuX3JvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmJhc2UuX3JvdXRpbmc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVkaXQgRmxvdyB3b3JrcyBvbmx5IHdpdGggYSBnaXZlbiByb3V0aW5nIGxpc3RlbmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRHbG9iYWxVSU1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gYXQgdGhpcyBwb2ludCBvZiB0aW1lIGl0J3Mgbm90IG1lYW50IHRvIHJlbGVhc2UgdGhlIGVkaXQgZmxvdyBmb3IgZnJlZXN0eWxlIHVzYWdlIHRoZXJlZm9yZSB3ZSBjYW5cblx0XHQvLyByZWx5IG9uIHRoZSBnbG9iYWwgVUkgbW9kZWwgdG8gZXhpc3Rcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQZXJmb3JtcyBhIHRhc2sgaW4gc3luYyB3aXRoIG90aGVyIHRhc2tzIGNyZWF0ZWQgdmlhIHRoaXMgZnVuY3Rpb24uXG5cdCAqIFJldHVybnMgdGhlIHByb21pc2UgY2hhaW4gb2YgdGhlIHRhc2suXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0RmxvdyNzeW5jVGFza1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge1Byb21pc2V8RnVuY3Rpb259IFt2VGFza10gT3B0aW9uYWwsIGEgcHJvbWlzZSBvciBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBzeW5jaHJvbm91c2x5XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIG9uY2UgdGhlIHRhc2sgaXMgY29tcGxldGVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRzeW5jVGFzayh2VGFzaz86IEZ1bmN0aW9uIHwgUHJvbWlzZTxhbnk+KSB7XG5cdFx0bGV0IGZuTmV3VGFzaztcblx0XHRpZiAodlRhc2sgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRmbk5ld1Rhc2sgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB2VGFzaztcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdlRhc2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Zm5OZXdUYXNrID0gdlRhc2s7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcFRhc2tzID0gdGhpcy5fcFRhc2tzIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGlmICghIWZuTmV3VGFzaykge1xuXHRcdFx0dGhpcy5fcFRhc2tzID0gdGhpcy5fcFRhc2tzLnRoZW4oZm5OZXdUYXNrKS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9wVGFza3M7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dD86IGFueSk6IHR5cGVvZiBQcm9ncmFtbWluZ01vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpLmdldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24ob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5vUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHR0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKTtcblxuXHRcdG1QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMgfHwge307XG5cblx0XHQvLyBUT0RPOiB0aGlzIHNldHRpbmcgYW5kIHJlbW92aW5nIG9mIGNvbnRleHRzIHNob3VsZG4ndCBiZSBpbiB0aGUgdHJhbnNhY3Rpb24gaGVscGVyIGF0IGFsbFxuXHRcdC8vIGZvciB0aGUgdGltZSBiZWluZyBJIGtlcHQgaXQgYW5kIHByb3ZpZGUgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgdG8gbm90IGJyZWFrIHNvbWV0aGluZ1xuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuY29udHJvbElkXG5cdFx0XHQ/IHNhcC51aS5nZXRDb3JlKCkuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpPy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHQ6IG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5zeW5jVGFzaygpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0dHJhbnNhY3Rpb25IZWxwZXIuZGVsZXRlRG9jdW1lbnQuYmluZCh0cmFuc2FjdGlvbkhlbHBlciwgb0NvbnRleHQsIG1QYXJhbWV0ZXJzLCBvUmVzb3VyY2VCdW5kbGUsIHRoaXMuZ2V0TWVzc2FnZUhhbmRsZXIoKSlcblx0XHRcdClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCBmYWxzZSk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc3RpY2t5U2Vzc2lvblRva2VuXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qob0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGNyZWF0ZSBldmVudDogc2hvd3MgbWVzc2FnZXMgYW5kIGluIGNhc2Ugb2YgYSBkcmFmdCwgdXBkYXRlcyB0aGUgZHJhZnQgaW5kaWNhdG9yLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIHtvYmplY3R9IG9CaW5kaW5nIE9EYXRhIGxpc3QgYmluZGluZyBvYmplY3Rcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRoYW5kbGVDcmVhdGVFdmVudHMob0JpbmRpbmc6IGFueSkge1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXG5cdFx0dGhpcy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cblx0XHRvQmluZGluZyA9IChvQmluZGluZy5nZXRCaW5kaW5nICYmIG9CaW5kaW5nLmdldEJpbmRpbmcoKSkgfHwgb0JpbmRpbmc7XG5cdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwob0JpbmRpbmcpO1xuXG5cdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjcmVhdGVTZW50XCIsICgpID0+IHtcblx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLmhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucygpO1xuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2aW5nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNyZWF0ZUNvbXBsZXRlZFwiLCAob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IGJTdWNjZXNzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1Y2Nlc3NcIik7XG5cdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdFx0dGhpcy5zZXREcmFmdFN0YXR1cyhiU3VjY2VzcyA/IERyYWZ0U3RhdHVzLlNhdmVkIDogRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRNZXNzYWdlSGFuZGxlcigpLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0VHJhbnNhY3Rpb25IZWxwZXIoKSB7XG5cdFx0aWYgKCF0aGlzLl9vVHJhbnNhY3Rpb25IZWxwZXIpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBhbHNvIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIgaXMgbG9ja2luZyB0aGVyZWZvcmUgcGFzc2luZyBsb2NrIG9iamVjdFxuXHRcdFx0dGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyID0gbmV3IFRyYW5zYWN0aW9uSGVscGVyKHRoaXMuX29BcHBDb21wb25lbnQsIHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEludGVybmFsTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHByb21pc2UgdG8gd2FpdCBmb3IgYW4gYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfY3JlYXRlQWN0aW9uUHJvbWlzZVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICpcblx0ICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXh0ZXJuYWxseSByZXNvbHZlIHRoZSBwcm9taXNlXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjcmVhdGVBY3Rpb25Qcm9taXNlKHNBY3Rpb25OYW1lOiBhbnksIHNDb250cm9sSWQ6IGFueSkge1xuXHRcdGxldCBmUmVzb2x2ZXIsIGZSZWplY3Rvcjtcblx0XHR0aGlzLm9BY3Rpb25Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZlJlc29sdmVyID0gcmVzb2x2ZTtcblx0XHRcdGZSZWplY3RvciA9IHJlamVjdDtcblx0XHR9KS50aGVuKChvUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oeyBjb250cm9sSWQ6IHNDb250cm9sSWQgfSwgdGhpcy5nZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzKHNBY3Rpb25OYW1lLCBvUmVzcG9uc2UpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4geyBmUmVzb2x2ZXI6IGZSZXNvbHZlciwgZlJlamVjdG9yOiBmUmVqZWN0b3IgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0Q3VycmVudEFjdGlvblByb21pc2Vcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIHRoZSBwcm9taXNlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0FjdGlvblByb21pc2U7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0ZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0dGhpcy5vQWN0aW9uUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5c1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdGhhdCBpcyBleGVjdXRlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1Jlc3BvbnNlIFRoZSBib3VuZCBhY3Rpb24ncyByZXNwb25zZSBkYXRhIG9yIHJlc3BvbnNlIGNvbnRleHRcblx0ICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IHdpdGggZGF0YSBhbmQgbmFtZXMgb2YgdGhlIGtleSBmaWVsZHMgb2YgdGhlIHJlc3BvbnNlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5cyhzQWN0aW9uTmFtZTogc3RyaW5nLCBvUmVzcG9uc2U6IGFueSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KG9SZXNwb25zZSkpIHtcblx0XHRcdGlmIChvUmVzcG9uc2UubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdG9SZXNwb25zZSA9IG9SZXNwb25zZVswXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIW9SZXNwb25zZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvTWV0YU1vZGVsID0gKG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgYW55KS5nZXREYXRhKCksXG5cdFx0XHRzQWN0aW9uUmV0dXJuVHlwZSA9XG5cdFx0XHRcdG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbFtzQWN0aW9uTmFtZV0gJiYgb01ldGFNb2RlbFtzQWN0aW9uTmFtZV1bMF0gJiYgb01ldGFNb2RlbFtzQWN0aW9uTmFtZV1bMF0uJFJldHVyblR5cGVcblx0XHRcdFx0XHQ/IG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdWzBdLiRSZXR1cm5UeXBlLiRUeXBlXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0YUtleSA9IHNBY3Rpb25SZXR1cm5UeXBlICYmIG9NZXRhTW9kZWxbc0FjdGlvblJldHVyblR5cGVdID8gb01ldGFNb2RlbFtzQWN0aW9uUmV0dXJuVHlwZV0uJEtleSA6IG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0b0RhdGE6IG9SZXNwb25zZS5nZXRPYmplY3QoKSxcblx0XHRcdGtleXM6IGFLZXlcblx0XHR9O1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldE1lc3NhZ2VIYW5kbGVyKCkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIEZQTSBjdXN0b20gcGFnZXMgdGhlcmVmb3JlIGtlZXBcblx0XHQvLyB0aGUgbG9naWMgaGVyZSBmb3Igbm93XG5cblx0XHRpZiAodGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IEZsb3cgd29ya3Mgb25seSB3aXRoIGEgZ2l2ZW4gbWVzc2FnZSBoYW5kbGVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRoYW5kbGVTdGlja3lPbihvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChvQXBwQ29tcG9uZW50ID09PSB1bmRlZmluZWQgfHwgb0NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bmRlZmluZWQgQXBwQ29tcG9uZW50IG9yIENvbnRleHQgZm9yIGZ1bmN0aW9uIGhhbmRsZVN0aWNreU9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIW9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5oYXNOYXZpZ2F0aW9uR3VhcmQoKSkge1xuXHRcdFx0XHRjb25zdCBzSGFzaFRyYWNrZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZ2V0SGFzaCgpLFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRJbnRlcm5hbE1vZGVsKCk7XG5cblx0XHRcdFx0Ly8gU2V0IGEgZ3VhcmQgaW4gdGhlIFJvdXRlclByb3h5XG5cdFx0XHRcdC8vIEEgdGltZW91dCBpcyBuZWNlc3NhcnksIGFzIHdpdGggZGVmZXJyZWQgY3JlYXRpb24gdGhlIGhhc2hDaGFuZ2VyIGlzIG5vdCB1cGRhdGVkIHlldCB3aXRoXG5cdFx0XHRcdC8vIHRoZSBuZXcgaGFzaCwgYW5kIHRoZSBndWFyZCBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIG1hbmFnZWQgaGlzdG9yeSBvZiB0aGUgcm91dGVyIHByb3h5XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXROYXZpZ2F0aW9uR3VhcmQob0NvbnRleHQuZ2V0UGF0aCgpLnN1YnN0cmluZygxKSk7XG5cdFx0XHRcdH0sIDApO1xuXG5cdFx0XHRcdC8vIFNldHRpbmcgYmFjayBuYXZpZ2F0aW9uIG9uIHNoZWxsIHNlcnZpY2UsIHRvIGdldCB0aGUgZGljYXJkIG1lc3NhZ2UgYm94IGluIGNhc2Ugb2Ygc3RpY2t5XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKHRoaXMub25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbi5iaW5kKHRoaXMpKTtcblxuXHRcdFx0XHR0aGlzLmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gdGhpcy5fcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIob0FwcENvbXBvbmVudCwgb0ludGVybmFsTW9kZWwsIHNIYXNoVHJhY2tlcik7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXG5cdFx0XHRcdC8vIGhhbmRsZSBzZXNzaW9uIHRpbWVvdXRcblx0XHRcdFx0Y29uc3QgaTE4bk1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKTtcblx0XHRcdFx0dGhpcy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0ID0gdGhpcy5fYXR0YWNoU2Vzc2lvblRpbWVvdXQob0NvbnRleHQsIGkxOG5Nb2RlbCk7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpIGFzIGFueSkuYXR0YWNoU2Vzc2lvblRpbWVvdXQodGhpcy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0KTtcblxuXHRcdFx0XHR0aGlzLmZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IHRoaXMuX2F0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLCBvQ29udGV4dCwgb0FwcENvbXBvbmVudCk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcy5mblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuaW5mbyhlcnJvciBhcyBhbnkpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aGFuZGxlU3RpY2t5T2ZmKCkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAob0FwcENvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBBcHBDb21wb25lbnQgZm9yIGZ1bmN0aW9uIGhhbmRsZVN0aWNreU9mZlwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGV4aXRlZCBmcm9tIHRoZSBhcHAsIENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCBkb2Vzbid0IHJldHVybiBhXG5cdFx0XHRcdC8vIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCwgaGVuY2UgdGhlICdpZicgYWJvdmVcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmRpc2NhcmROYXZpZ2F0aW9uR3VhcmQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIpIHtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcih0aGlzLmZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0XHRcdFx0dGhpcy5mbkRpcnR5U3RhdGVQcm92aWRlciA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkgJiYgdGhpcy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0KSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpIGFzIGFueSkuZGV0YWNoU2Vzc2lvblRpbWVvdXQodGhpcy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0KTtcblx0XHRcdH1cblxuXHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLmZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbik7XG5cdFx0XHR0aGlzLmZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IHVuZGVmaW5lZDtcblxuXHRcdFx0dGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpLl9iQ3JlYXRlTW9kZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zZXRFZGl0TW9kZShFZGl0TW9kZS5EaXNwbGF5LCBmYWxzZSk7XG5cblx0XHRcdGlmIChvQXBwQ29tcG9uZW50KSB7XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZXhpdGVkIGZyb20gdGhlIGFwcCwgQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50IGRvZXNuJ3QgcmV0dXJuIGFcblx0XHRcdFx0Ly8gc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LCBoZW5jZSB0aGUgJ2lmJyBhYm92ZVxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuaW5mbyhlcnJvciBhcyBhbnkpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQGRlc2NyaXB0aW9uIE1ldGhvZCB0byBkaXNwbGF5IGEgJ2Rpc2NhcmQnIHBvcG92ZXIgd2hlbiBleGl0aW5nIGEgc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBvbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbEVkaXRGbG93XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0b25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyksXG5cdFx0XHRvUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHRpZiAob1JvdXRlclByb3h5LmNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkKCkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRcdHN0aWNreS5wcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmRpc2NhcmRTdGlja3lTZXNzaW9uKG9CaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9WaWV3LFxuXHRcdFx0XHR0aGlzLmdldFByb2dyYW1taW5nTW9kZWwob0JpbmRpbmdDb250ZXh0KVxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRoaXN0b3J5LmJhY2soKTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRkaXNjYXJkU3RpY2t5U2Vzc2lvbihvQ29udGV4dDogYW55KSB7XG5cdFx0c3RpY2t5LmRpc2NhcmREb2N1bWVudChvQ29udGV4dCk7XG5cdFx0dGhpcy5oYW5kbGVTdGlja3lPZmYoKTtcblx0fVxuXG5cdF9oYXNOZXdBY3Rpb25Gb3JTdGlja3kob0NvbnRleHQ6IGFueSwgb1ZpZXc6IFZpZXcsIHNDdXN0b21BY3Rpb246IHN0cmluZykge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAob0NvbnRleHQgPT09IHVuZGVmaW5lZCB8fCBvVmlldyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24gX2hhc05ld0FjdGlvbkZvclN0aWNreVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKS5zdWJzdHJpbmcoMCwgb0NvbnRleHQuZ2V0UGF0aCgpLmluZGV4T2YoXCIoXCIpKSxcblx0XHRcdFx0b1N0aWNreVNlc3Npb24gPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YVBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIik7XG5cblx0XHRcdGlmIChvU3RpY2t5U2Vzc2lvbiAmJiBvU3RpY2t5U2Vzc2lvbi5OZXdBY3Rpb24gJiYgb1N0aWNreVNlc3Npb24uTmV3QWN0aW9uID09PSBzQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvU3RpY2t5U2Vzc2lvbiAmJiBvU3RpY2t5U2Vzc2lvbi5BZGRpdGlvbmFsTmV3QWN0aW9ucykge1xuXHRcdFx0XHRyZXR1cm4gc0N1c3RvbUFjdGlvbiA9PT1cblx0XHRcdFx0XHRvU3RpY2t5U2Vzc2lvbi5BZGRpdGlvbmFsTmV3QWN0aW9ucy5maW5kKGZ1bmN0aW9uIChzQWRkaXRpb25hbEFjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0FkZGl0aW9uYWxBY3Rpb24gPT09IHNDdXN0b21BY3Rpb247XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuaW5mbyhlcnJvciBhcyBhbnkpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBvSW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBzSGFzaFRyYWNrZXI6IHN0cmluZykge1xuXHRcdHJldHVybiBmdW5jdGlvbiBmbkRpcnR5U3RhdGVQcm92aWRlcihvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9OYXZpZ2F0aW9uQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbiBmbkRpcnR5U3RhdGVQcm92aWRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNUYXJnZXRIYXNoID0gb05hdmlnYXRpb25Db250ZXh0LmlubmVyQXBwUm91dGUsXG5cdFx0XHRcdFx0b1JvdXRlclByb3h5ID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXHRcdFx0XHRsZXQgc0xjbEhhc2hUcmFja2VyID0gXCJcIjtcblx0XHRcdFx0bGV0IGJEaXJ0eTogYm9vbGVhbjtcblx0XHRcdFx0Y29uc3QgYlNlc3Npb25PTiA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiKTtcblxuXHRcdFx0XHRpZiAoIWJTZXNzaW9uT04pIHtcblx0XHRcdFx0XHQvLyBJZiB0aGUgc3RpY2t5IHNlc3Npb24gd2FzIHRlcm1pbmF0ZWQgYmVmb3JlIGhhbmQuXG5cdFx0XHRcdFx0Ly8gRWV4YW1wbGUgaW4gY2FzZSBvZiBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhcHBsaWNhdGlvbiB1c2luZyBJQk4uXG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghb1JvdXRlclByb3h5LmlzTmF2aWdhdGlvbkZpbmFsaXplZCgpKSB7XG5cdFx0XHRcdFx0Ly8gSWYgbmF2aWdhdGlvbiBpcyBjdXJyZW50bHkgaGFwcGVuaW5nIGluIFJvdXRlclByb3h5LCBpdCdzIGEgdHJhbnNpZW50IHN0YXRlXG5cdFx0XHRcdFx0Ly8gKG5vdCBkaXJ0eSlcblx0XHRcdFx0XHRiRGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRzTGNsSGFzaFRyYWNrZXIgPSBzVGFyZ2V0SGFzaDtcblx0XHRcdFx0fSBlbHNlIGlmIChzSGFzaFRyYWNrZXIgPT09IHNUYXJnZXRIYXNoKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGhhc2ggZGlkbid0IGNoYW5nZSBzbyBlaXRoZXIgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcmVmcmVzaCBvciB0byBsZWF2ZSB0aGUgYXBwXG5cdFx0XHRcdFx0YkRpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKHNUYXJnZXRIYXNoKSB8fCBvUm91dGVyUHJveHkuaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlcigpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHVzZXIgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgd2l0aGluIHRoZSByb290IG9iamVjdFxuXHRcdFx0XHRcdC8vIG9yIGNyb3NzaW5nIHRoZSBndWFyZCBoYXMgYWxyZWFkeSBiZWVuIGFsbG93ZWQgYnkgdGhlIFJvdXRlclByb3h5XG5cdFx0XHRcdFx0c0xjbEhhc2hUcmFja2VyID0gc1RhcmdldEhhc2g7XG5cdFx0XHRcdFx0YkRpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHVzZXIgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgd2l0aGluIHRoZSBhcHAsIGZvciBleGFtcGxlIGJhY2sgdG8gdGhlIGxpc3QgcmVwb3J0XG5cdFx0XHRcdFx0YkRpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChiRGlydHkpIHtcblx0XHRcdFx0XHQvLyB0aGUgRkxQIGRvZXNuJ3QgY2FsbCB0aGUgZGlydHkgc3RhdGUgcHJvdmlkZXIgYW55bW9yZSBvbmNlIGl0J3MgZGlydHksIGFzIHRoZXkgY2FuJ3Rcblx0XHRcdFx0XHQvLyBjaGFuZ2UgdGhpcyBkdWUgdG8gY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHNldCBpdCBiYWNrIHRvIG5vdC1kaXJ0eVxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0RGlydHlGbGFnKGZhbHNlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzSGFzaFRyYWNrZXIgPSBzTGNsSGFzaFRyYWNrZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYkRpcnR5O1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmluZm8oZXJyb3IgYXMgYW55KTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0X2F0dGFjaFNlc3Npb25UaW1lb3V0KG9Db250ZXh0OiBhbnksIGkxOG5Nb2RlbDogTW9kZWwpIHtcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblxuXHRcdHJldHVybiBmdW5jdGlvbiBmbkhhbmRsZVNlc3Npb25UaW1lb3V0KCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKG9Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb250ZXh0IG1pc3NpbmcgZm9yIGZ1bmN0aW9uIGZuSGFuZGxlU2Vzc2lvblRpbWVvdXRcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gcmVtb3ZlIHRyYW5zaWVudCBtZXNzYWdlcyBzaW5jZSB3ZSB3aWxsIHNob3dpbmcgb3VyIG93biBtZXNzYWdlXG5cdFx0XHRcdHRoYXQuZ2V0TWVzc2FnZUhhbmRsZXIoKS5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPkNfRURJVEZMT1dfT0JKRUNUX1BBR0VfU0VTU0lPTl9FWFBJUkVEX0RJQUxPR19USVRMRX1cIixcblx0XHRcdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdFx0Y29udGVudDogbmV3IFRleHQoeyB0ZXh0OiBcIntzYXAuZmUuaTE4bj5DX0VESVRGTE9XX09CSkVDVF9QQUdFX1NFU1NJT05fRVhQSVJFRF9ESUFMT0dfTUVTU0FHRX1cIiB9KSxcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5DX0NPTU1PTl9ESUFMT0dfT0t9XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBzdGlja3kgaGFuZGxpbmcgYWZ0ZXIgbmF2aWdhdGlvbiBzaW5jZSBzZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gdGVybWluYXRlZFxuXHRcdFx0XHRcdFx0XHR0aGF0LmhhbmRsZVN0aWNreU9mZigpO1xuXHRcdFx0XHRcdFx0XHR0aGF0LmdldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKGkxOG5Nb2RlbCwgXCJzYXAuZmUuaTE4blwiKTtcblx0XHRcdFx0dGhhdC5nZXRWaWV3KCkuYWRkRGVwZW5kZW50KG9EaWFsb2cpO1xuXHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKGVycm9yIGFzIGFueSk7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHR9XG5cblx0X2F0dGFjaFJvdXRlTWF0Y2hlZChvRm5Db250ZXh0OiBhbnksIG9Db250ZXh0OiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiBmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24oKSB7XG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2ggPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gZWl0aGVyIGN1cnJlbnQgaGFzaCBpcyBlbXB0eSBzbyB0aGUgdXNlciBsZWZ0IHRoZSBhcHAgb3IgaGUgbmF2aWdhdGVkIGF3YXkgZnJvbSB0aGUgb2JqZWN0XG5cdFx0XHRpZiAoIXNDdXJyZW50SGFzaCB8fCAhb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSGFzaFdpdGhHdWFyZChzQ3VycmVudEhhc2gpKSB7XG5cdFx0XHRcdG9GbkNvbnRleHQuZGlzY2FyZFN0aWNreVNlc3Npb24ob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0c2Nyb2xsQW5kRm9jdXNPbkluYWN0aXZlUm93KG9UYWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRjb25zdCBpQWN0aXZlUm93SW5kZXggPSBvUm93QmluZGluZy5nZXRDb3VudCgpIHx8IDA7XG5cdFx0aWYgKGlBY3RpdmVSb3dJbmRleCA+IDApIHtcblx0XHRcdG9UYWJsZS5zY3JvbGxUb0luZGV4KGlBY3RpdmVSb3dJbmRleCAtIDEpO1xuXHRcdFx0b1RhYmxlLmZvY3VzUm93KGlBY3RpdmVSb3dJbmRleCwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpQWN0aXZlUm93SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbEVkaXRGbG93O1xuIl19