@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,39 +2,74 @@
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/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/base/BindingParser", "sap/fe/core/helpers/SemanticKeyHelper", "sap/base/Log", "sap/ui/base/EventProvider", "sap/fe/core/BusyLocker", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/EditState", "sap/fe/core/actions/messageHandling", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/helpers/AppStartupHelper", "sap/ui/model/odata/v4/ODataUtils"], function (Service, ServiceFactory, BindingParser, SemanticKeyHelper, Log, EventProvider, BusyLocker, ModelHelper, EditState, messageHandling, Placeholder, AppStartupHelper, ODataUtils) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/helpers/AppStartupHelper", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticKeyHelper", "sap/ui/base/BindingParser", "sap/ui/base/EventProvider", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/model/odata/v4/ODataUtils"], function (Log, BusyLocker, messageHandling, Placeholder, AppStartupHelper, ClassSupport, EditState, ModelHelper, SemanticKeyHelper, BindingParser, EventProvider, Service, ServiceFactory, ODataUtils) {
6
6
  "use strict";
7
7
 
8
+ var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
9
+
8
10
  var _exports = {};
11
+ var event = ClassSupport.event;
12
+ var defineUI5Class = ClassSupport.defineUI5Class;
13
+
14
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
15
+
16
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
9
17
 
10
- 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); }
18
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
11
19
 
12
20
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
13
21
 
14
- var RoutingServiceEventing = EventProvider.extend("sap.fe.core.services.RoutingServiceEventing", {
15
- metadata: {
16
- events: {
17
- "routeMatched": {},
18
- "afterRouteMatched": {}
19
- }
20
- }
21
- });
22
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
22
23
 
23
- var RoutingService = /*#__PURE__*/function (_Service) {
24
- _inherits(RoutingService, _Service);
24
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
25
25
 
26
- function RoutingService() {
26
+ var RoutingServiceEventing = (_dec = defineUI5Class("sap.fe.core.services.RoutingServiceEventing"), _dec2 = event(), _dec3 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_EventProvider) {
27
+ _inheritsLoose(RoutingServiceEventing, _EventProvider);
28
+
29
+ function RoutingServiceEventing() {
27
30
  var _this;
28
31
 
29
32
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
30
33
  args[_key] = arguments[_key];
31
34
  }
32
35
 
33
- _this = _Service.call.apply(_Service, [this].concat(args)) || this;
34
- _this.navigationInfoQueue = [];
36
+ _this = _EventProvider.call.apply(_EventProvider, [this].concat(args)) || this;
37
+
38
+ _initializerDefineProperty(_this, "routeMatched", _descriptor, _assertThisInitialized(_this));
39
+
40
+ _initializerDefineProperty(_this, "afterRouteMatched", _descriptor2, _assertThisInitialized(_this));
41
+
35
42
  return _this;
36
43
  }
37
44
 
45
+ return RoutingServiceEventing;
46
+ }(EventProvider), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "routeMatched", [_dec2], {
47
+ configurable: true,
48
+ enumerable: true,
49
+ writable: true,
50
+ initializer: null
51
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "afterRouteMatched", [_dec3], {
52
+ configurable: true,
53
+ enumerable: true,
54
+ writable: true,
55
+ initializer: null
56
+ })), _class2)) || _class);
57
+
58
+ var RoutingService = /*#__PURE__*/function (_Service) {
59
+ _inheritsLoose(RoutingService, _Service);
60
+
61
+ function RoutingService() {
62
+ var _this2;
63
+
64
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
65
+ args[_key2] = arguments[_key2];
66
+ }
67
+
68
+ _this2 = _Service.call.apply(_Service, [this].concat(args)) || this;
69
+ _this2.navigationInfoQueue = [];
70
+ return _this2;
71
+ }
72
+
38
73
  _exports.RoutingService = RoutingService;
39
74
  var _proto = RoutingService.prototype;
40
75
 
@@ -78,18 +113,18 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
78
113
  ;
79
114
 
80
115
  _proto._parseRoutingConfiguration = function _parseRoutingConfiguration(oRoutingConfig, oRootViewConfig) {
81
- var _this2 = this;
116
+ var _this3 = this;
82
117
 
83
118
  var isFCL = oRootViewConfig && oRootViewConfig.viewName === "sap.fe.templates.RootContainer.view.Fcl"; // Information of targets
84
119
 
85
120
  this._mTargets = {};
86
121
  Object.keys(oRoutingConfig.targets).forEach(function (sTargetName) {
87
- _this2._mTargets[sTargetName] = Object.assign({
122
+ _this3._mTargets[sTargetName] = Object.assign({
88
123
  targetName: sTargetName
89
124
  }, oRoutingConfig.targets[sTargetName]); // View level for FCL cases is calculated from the target pattern
90
125
 
91
- if (_this2._mTargets[sTargetName].contextPattern !== undefined) {
92
- _this2._mTargets[sTargetName].viewLevel = _this2._getViewLevelFromPattern(_this2._mTargets[sTargetName].contextPattern, 0);
126
+ if (_this3._mTargets[sTargetName].contextPattern !== undefined) {
127
+ _this3._mTargets[sTargetName].viewLevel = _this3._getViewLevelFromPattern(_this3._mTargets[sTargetName].contextPattern, 0);
93
128
  }
94
129
  }); // Information of routes
95
130
 
@@ -139,17 +174,17 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
139
174
  } else {
140
175
  // Other FCL cases
141
176
  aRouteTargets.forEach(function (sTargetName) {
142
- switch (_this2._mTargets[sTargetName].controlAggregation) {
177
+ switch (_this3._mTargets[sTargetName].controlAggregation) {
143
178
  case "beginColumnPages":
144
- _this2._mTargets[sTargetName].FCLLevel = 0;
179
+ _this3._mTargets[sTargetName].FCLLevel = 0;
145
180
  break;
146
181
 
147
182
  case "midColumnPages":
148
- _this2._mTargets[sTargetName].FCLLevel = 1;
183
+ _this3._mTargets[sTargetName].FCLLevel = 1;
149
184
  break;
150
185
 
151
186
  default:
152
- _this2._mTargets[sTargetName].FCLLevel = 2;
187
+ _this3._mTargets[sTargetName].FCLLevel = 2;
153
188
  }
154
189
  });
155
190
  }
@@ -157,12 +192,12 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
157
192
 
158
193
 
159
194
  Object.keys(this._mTargets).forEach(function (sTargetName) {
160
- while (_this2._mTargets[sTargetName].parent) {
161
- var _sParentTargetName = _this2._mTargets[sTargetName].parent;
162
- _this2._mTargets[_sParentTargetName].viewLevel = _this2._mTargets[_sParentTargetName].viewLevel || _this2._mTargets[sTargetName].viewLevel;
163
- _this2._mTargets[_sParentTargetName].contextPattern = _this2._mTargets[_sParentTargetName].contextPattern || _this2._mTargets[sTargetName].contextPattern;
164
- _this2._mTargets[_sParentTargetName].FCLLevel = _this2._mTargets[_sParentTargetName].FCLLevel || _this2._mTargets[sTargetName].FCLLevel;
165
- _this2._mTargets[_sParentTargetName].controlAggregation = _this2._mTargets[_sParentTargetName].controlAggregation || _this2._mTargets[sTargetName].controlAggregation;
195
+ while (_this3._mTargets[sTargetName].parent) {
196
+ var _sParentTargetName = _this3._mTargets[sTargetName].parent;
197
+ _this3._mTargets[_sParentTargetName].viewLevel = _this3._mTargets[_sParentTargetName].viewLevel || _this3._mTargets[sTargetName].viewLevel;
198
+ _this3._mTargets[_sParentTargetName].contextPattern = _this3._mTargets[_sParentTargetName].contextPattern || _this3._mTargets[sTargetName].contextPattern;
199
+ _this3._mTargets[_sParentTargetName].FCLLevel = _this3._mTargets[_sParentTargetName].FCLLevel || _this3._mTargets[sTargetName].FCLLevel;
200
+ _this3._mTargets[_sParentTargetName].controlAggregation = _this3._mTargets[_sParentTargetName].controlAggregation || _this3._mTargets[sTargetName].controlAggregation;
166
201
  sTargetName = _sParentTargetName;
167
202
  }
168
203
  }); // Determine the root entity for the app
@@ -206,7 +241,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
206
241
 
207
242
 
208
243
  Object.keys(this._mTargets).map(function (sTargetKey) {
209
- return _this2._mTargets[sTargetKey];
244
+ return _this3._mTargets[sTargetKey];
210
245
  }).sort(function (a, b) {
211
246
  return a.viewLevel < b.viewLevel ? -1 : 1;
212
247
  }).forEach(function (target) {
@@ -221,15 +256,15 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
221
256
 
222
257
  Object.keys(settings.navigation || {}).forEach(function (sNavName) {
223
258
  // Check if it's a navigation property
224
- var targetRoute = _this2._mRoutes[settings.navigation[sNavName].detail.route];
259
+ var targetRoute = _this3._mRoutes[settings.navigation[sNavName].detail.route];
225
260
 
226
261
  if (targetRoute && targetRoute.targets) {
227
262
  targetRoute.targets.forEach(function (sTargetName) {
228
- if (_this2._mTargets[sTargetName].options && _this2._mTargets[sTargetName].options.settings && !_this2._mTargets[sTargetName].options.settings.fullContextPath) {
263
+ if (_this3._mTargets[sTargetName].options && _this3._mTargets[sTargetName].options.settings && !_this3._mTargets[sTargetName].options.settings.fullContextPath) {
229
264
  if (target.viewLevel === 0) {
230
- _this2._mTargets[sTargetName].options.settings.fullContextPath = "/" + sNavName + "/";
265
+ _this3._mTargets[sTargetName].options.settings.fullContextPath = (sNavName.startsWith("/") ? "" : "/") + sNavName + "/";
231
266
  } else {
232
- _this2._mTargets[sTargetName].options.settings.fullContextPath = settings.fullContextPath + sNavName + "/";
267
+ _this3._mTargets[sTargetName].options.settings.fullContextPath = settings.fullContextPath + sNavName + "/";
233
268
  }
234
269
  }
235
270
  });
@@ -292,13 +327,13 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
292
327
  ;
293
328
 
294
329
  _proto.getTargetInformationFor = function getTargetInformationFor(oComponentInstance) {
295
- var _this3 = this;
330
+ var _this4 = this;
296
331
 
297
332
  var sTargetComponentId = this._getComponentId(oComponentInstance._sOwnerId, oComponentInstance.getId());
298
333
 
299
334
  var sCorrectTargetName = null;
300
335
  Object.keys(this._mTargets).forEach(function (sTargetName) {
301
- if (_this3._mTargets[sTargetName].id === sTargetComponentId || _this3._mTargets[sTargetName].viewId === sTargetComponentId) {
336
+ if (_this4._mTargets[sTargetName].id === sTargetComponentId || _this4._mTargets[sTargetName].viewId === sTargetComponentId) {
302
337
  sCorrectTargetName = sTargetName;
303
338
  }
304
339
  });
@@ -314,11 +349,11 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
314
349
  };
315
350
 
316
351
  _proto.navigateTo = function navigateTo(oContext, sRouteName, mParameterMapping, bPreserveHistory) {
317
- var _this4 = this;
352
+ var _this5 = this;
318
353
 
319
354
  var sTargetURLPromise, bIsStickyMode;
320
355
 
321
- if (oContext.getModel() && oContext.getModel().getMetaModel) {
356
+ if (oContext.getModel() && oContext.getModel().getMetaModel && oContext.getModel().getMetaModel()) {
322
357
  bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
323
358
  }
324
359
 
@@ -327,12 +362,12 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
327
362
  sTargetURLPromise = Promise.resolve(SemanticKeyHelper.getSemanticPath(oContext));
328
363
  } else {
329
364
  sTargetURLPromise = this.prepareParameters(mParameterMapping, sRouteName, oContext).then(function (mParameters) {
330
- return _this4.oRouter.getURL(sRouteName, mParameters);
365
+ return _this5.oRouter.getURL(sRouteName, mParameters);
331
366
  });
332
367
  }
333
368
 
334
369
  return sTargetURLPromise.then(function (sTargetURL) {
335
- _this4.oRouterProxy.navToHash(sTargetURL, bPreserveHistory, false, false, !bIsStickyMode);
370
+ _this5.oRouterProxy.navToHash(sTargetURL, bPreserveHistory, false, false, !bIsStickyMode);
336
371
  });
337
372
  }
338
373
  /**
@@ -346,7 +381,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
346
381
  ;
347
382
 
348
383
  _proto.prepareParameters = function prepareParameters(mParameters, sTargetRoute, oContext) {
349
- var _this5 = this;
384
+ var _this6 = this;
350
385
 
351
386
  var oParametersPromise;
352
387
 
@@ -373,7 +408,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
373
408
  });
374
409
  });
375
410
  return Promise.all(aResolvedParameterPromises).then(function (aResolvedParameters) {
376
- var value = oParsedExpression.formatter ? oParsedExpression.formatter.apply(_this5, aResolvedParameters) : aResolvedParameters.join("");
411
+ var value = oParsedExpression.formatter ? oParsedExpression.formatter.apply(_this6, aResolvedParameters) : aResolvedParameters.join("");
377
412
  return {
378
413
  key: sParameterKey,
379
414
  value: value
@@ -425,7 +460,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
425
460
  ;
426
461
 
427
462
  _proto.navigateToContext = function navigateToContext(oContext, mParameters, oViewData, oCurrentTargetInfo) {
428
- var _this6 = this;
463
+ var _this7 = this;
429
464
 
430
465
  var sTargetRoute = "",
431
466
  oRouteParametersPromise,
@@ -450,7 +485,8 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
450
485
 
451
486
 
452
487
  if (sTargetPath.length === 0 && this.bExitOnNavigateBackToRoot) {
453
- return Promise.resolve(this.oRouterProxy.exitFromApp());
488
+ this.oRouterProxy.exitFromApp();
489
+ return Promise.resolve(true);
454
490
  } // If the context is deferred or async, we add (...) to the path
455
491
 
456
492
 
@@ -473,7 +509,8 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
473
509
  bPersistOPScroll: mParameters === null || mParameters === void 0 ? void 0 : mParameters.bPersistOPScroll,
474
510
  useContext: (mParameters === null || mParameters === void 0 ? void 0 : mParameters.updateFCLLevel) === -1 || mParameters !== null && mParameters !== void 0 && mParameters.bRecreateContext ? undefined : oContext,
475
511
  bDraftNavigation: mParameters === null || mParameters === void 0 ? void 0 : mParameters.bDraftNavigation,
476
- bShowPlaceholder: (mParameters === null || mParameters === void 0 ? void 0 : mParameters.showPlaceholder) !== undefined ? mParameters === null || mParameters === void 0 ? void 0 : mParameters.showPlaceholder : true
512
+ bShowPlaceholder: (mParameters === null || mParameters === void 0 ? void 0 : mParameters.showPlaceholder) !== undefined ? mParameters === null || mParameters === void 0 ? void 0 : mParameters.showPlaceholder : true,
513
+ bNavigateToSiblingEntity: mParameters === null || mParameters === void 0 ? void 0 : mParameters.bNavigateToSiblingEntity
477
514
  };
478
515
 
479
516
  if (mParameters !== null && mParameters !== void 0 && mParameters.checkNoHashChange) {
@@ -495,7 +532,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
495
532
 
496
533
  this._fireRouteMatchEvents(mEventParameters);
497
534
 
498
- return Promise.resolve();
535
+ return Promise.resolve(true);
499
536
  }
500
537
  }
501
538
 
@@ -534,17 +571,19 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
534
571
  return oRouteParametersPromise.then(function (oRouteParameters) {
535
572
  oRouteParameters.bIsStickyMode = bIsStickyMode;
536
573
 
537
- _this6.oRouter.navTo(sTargetRoute, oRouteParameters);
574
+ _this7.oRouter.navTo(sTargetRoute, oRouteParameters);
538
575
 
539
- return Promise.resolve();
576
+ return Promise.resolve(true);
540
577
  });
541
578
  }
542
579
 
543
580
  return this.oRouterProxy.navToHash(sTargetPath, false, mParameters === null || mParameters === void 0 ? void 0 : mParameters.noPreservationCache, mParameters === null || mParameters === void 0 ? void 0 : mParameters.bForceFocus, !bIsStickyMode).then(function (bNavigated) {
544
581
  if (!bNavigated) {
545
582
  // The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used
546
- _this6.navigationInfoQueue.pop();
583
+ _this7.navigationInfoQueue.pop();
547
584
  }
585
+
586
+ return bNavigated;
548
587
  });
549
588
  }
550
589
  /**
@@ -684,7 +723,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
684
723
  }
685
724
  }
686
725
 
687
- return this.oAppComponent.getRootViewController().calculateLayout(FCLLevel, sPath, mParameters.sLayout);
726
+ return this.oAppComponent.getRootViewController().calculateLayout(FCLLevel, sPath, mParameters.sLayout, mParameters.keepCurrentLayout);
688
727
  }
689
728
  /**
690
729
  * Event handler before a route is matched.
@@ -712,7 +751,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
712
751
  ;
713
752
 
714
753
  _proto._onRouteMatched = function _onRouteMatched(oEvent) {
715
- var _this7 = this;
754
+ var _this8 = this;
716
755
 
717
756
  var oAppStateHandler = this.oAppComponent.getAppStateHandler(),
718
757
  oRootView = this.oAppComponent.getRootControl();
@@ -748,7 +787,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
748
787
 
749
788
  if (!history.state || history.state.feLevel === undefined) {
750
789
  this.oRouterProxy.restoreHistory().then(function () {
751
- _this7.oRouterProxy.resolveRouteMatch();
790
+ _this8.oRouterProxy.resolveRouteMatch();
752
791
  }).catch(function (oError) {
753
792
  Log.error("Error while restoring history", oError);
754
793
  });
@@ -782,7 +821,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
782
821
  };
783
822
 
784
823
  _proto.getTargetsFromRoute = function getTargetsFromRoute(oRoute) {
785
- var _this8 = this;
824
+ var _this9 = this;
786
825
 
787
826
  var oTarget = oRoute.target;
788
827
 
@@ -791,14 +830,14 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
791
830
  } else {
792
831
  var aTarget = [];
793
832
  oTarget.forEach(function (sTarget) {
794
- aTarget.push(_this8._mTargets[sTarget]);
833
+ aTarget.push(_this9._mTargets[sTarget]);
795
834
  });
796
835
  return aTarget;
797
836
  }
798
837
  };
799
838
 
800
839
  _proto.initializeRouting = function initializeRouting() {
801
- var _this9 = this;
840
+ var _this10 = this;
802
841
 
803
842
  // Attach router handlers
804
843
  this._fnOnRouteMatched = this._onRouteMatched.bind(this);
@@ -817,16 +856,16 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
817
856
  var initPromise = this.oAppComponent.getStartupParameters().then(function (oStartupParameters) {
818
857
  var bHasStartUpParameters = oStartupParameters !== undefined && Object.keys(oStartupParameters).length !== 0;
819
858
 
820
- var sHash = _this9.oRouter.getHashChanger().getHash(); // Manage startup parameters (in case of no iapp-state)
859
+ var sHash = _this10.oRouter.getHashChanger().getHash(); // Manage startup parameters (in case of no iapp-state)
821
860
 
822
861
 
823
862
  if (!bIsIappState && bHasStartUpParameters && !sHash) {
824
863
  if (oStartupParameters.preferredMode && oStartupParameters.preferredMode[0].indexOf("create") !== -1) {
825
864
  // Create mode
826
- return _this9._manageCreateStartup(oStartupParameters);
865
+ return _this10._manageCreateStartup(oStartupParameters);
827
866
  } else {
828
867
  // Deep link
829
- return _this9._manageDeepLinkStartup(oStartupParameters);
868
+ return _this10._manageDeepLinkStartup(oStartupParameters);
830
869
  }
831
870
  }
832
871
  }).catch(function (oError) {
@@ -840,19 +879,19 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
840
879
  };
841
880
 
842
881
  _proto._manageCreateStartup = function _manageCreateStartup(oStartupParameters) {
843
- var _this10 = this;
882
+ var _this11 = this;
844
883
 
845
884
  return AppStartupHelper.getCreateStartupHash(oStartupParameters, this.getContextPath(), this.oRouter, this.oMetaModel).then(function (sNewHash) {
846
885
  if (sNewHash) {
847
- _this10.oRouter.getHashChanger().replaceHash(sNewHash);
886
+ _this11.oRouter.getHashChanger().replaceHash(sNewHash);
848
887
 
849
- _this10.bExitOnNavigateBackToRoot = true;
888
+ _this11.bExitOnNavigateBackToRoot = true;
850
889
  }
851
890
  });
852
891
  };
853
892
 
854
893
  _proto._manageDeepLinkStartup = function _manageDeepLinkStartup(oStartupParameters) {
855
- var _this11 = this;
894
+ var _this12 = this;
856
895
 
857
896
  return AppStartupHelper.getDeepLinkStartupHash(this.oAppComponent.getManifest()["sap.ui5"].routing, oStartupParameters, this.oModel).then(function (oDeepLink) {
858
897
  var sHash;
@@ -864,7 +903,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
864
903
  if (sSemanticPath !== sTechnicalPath) {
865
904
  // Store the mapping technical <-> semantic path to avoid recalculating it later
866
905
  // and use the semantic path instead of the technical one
867
- _this11.setLastSemanticMapping({
906
+ _this12.setLastSemanticMapping({
868
907
  technicalPath: sTechnicalPath,
869
908
  semanticPath: sSemanticPath
870
909
  });
@@ -877,7 +916,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
877
916
 
878
917
  if (sHash) {
879
918
  //Replace the hash with newly created hash
880
- _this11.oRouter.getHashChanger().replaceHash(sHash);
919
+ _this12.oRouter.getHashChanger().replaceHash(sHash);
881
920
  }
882
921
  });
883
922
  };
@@ -908,7 +947,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
908
947
  _exports.RoutingService = RoutingService;
909
948
 
910
949
  var RoutingServiceFactory = /*#__PURE__*/function (_ServiceFactory) {
911
- _inherits(RoutingServiceFactory, _ServiceFactory);
950
+ _inheritsLoose(RoutingServiceFactory, _ServiceFactory);
912
951
 
913
952
  function RoutingServiceFactory() {
914
953
  return _ServiceFactory.apply(this, arguments) || this;
@@ -926,4 +965,4 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
926
965
 
927
966
  return RoutingServiceFactory;
928
967
  }, false);
929
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiRXZlbnRQcm92aWRlciIsImV4dGVuZCIsIm1ldGFkYXRhIiwiZXZlbnRzIiwiUm91dGluZ1NlcnZpY2UiLCJuYXZpZ2F0aW9uSW5mb1F1ZXVlIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsInNjb3BlVHlwZSIsIm9BcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsImV2ZW50UHJvdmlkZXIiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0RW50cnkiLCJvUm9vdFZpZXdDb25maWciLCJfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbiIsIm9BcHBDb25maWciLCJvdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJpbml0UHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYmVmb3JlRXhpdCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIl9mbk9uUm91dGVNYXRjaGVkIiwiZmlyZUV2ZW50IiwiZXhpdCIsImRlc3Ryb3kiLCJpc0ZDTCIsInZpZXdOYW1lIiwiX21UYXJnZXRzIiwiT2JqZWN0Iiwia2V5cyIsInRhcmdldHMiLCJmb3JFYWNoIiwic1RhcmdldE5hbWUiLCJhc3NpZ24iLCJ0YXJnZXROYW1lIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJ2aWV3TGV2ZWwiLCJfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4iLCJfbVJvdXRlcyIsInNSb3V0ZUtleSIsInJvdXRlcyIsIm9Sb3V0ZU1hbmlmZXN0SW5mbyIsImFSb3V0ZVRhcmdldHMiLCJBcnJheSIsImlzQXJyYXkiLCJ0YXJnZXQiLCJzUm91dGVOYW1lIiwibmFtZSIsInNSb3V0ZVBhdHRlcm4iLCJwYXR0ZXJuIiwibGVuZ3RoIiwiaW5kZXhPZiIsIkxvZyIsIndhcm5pbmciLCJpUm91dGVMZXZlbCIsInJvdXRlTGV2ZWwiLCJpIiwic1BhcmVudFRhcmdldE5hbWUiLCJwYXJlbnQiLCJwdXNoIiwiRkNMTGV2ZWwiLCJjb250cm9sQWdncmVnYXRpb24iLCJhTGV2ZWwwUm91dGVOYW1lcyIsImFMZXZlbDFSb3V0ZU5hbWVzIiwic0RlZmF1bHRSb3V0ZU5hbWUiLCJzTmFtZSIsImlMZXZlbCIsInNEZWZhdWx0VGFyZ2V0TmFtZSIsInNsaWNlIiwic0NvbnRleHRQYXRoIiwib3B0aW9ucyIsInNldHRpbmdzIiwib1NldHRpbmdzIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtYXAiLCJzVGFyZ2V0S2V5Iiwic29ydCIsImEiLCJiIiwiZnVsbENvbnRleHRQYXRoIiwibmF2aWdhdGlvbiIsInNOYXZOYW1lIiwidGFyZ2V0Um91dGUiLCJkZXRhaWwiLCJyb3V0ZSIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInNUYXJnZXRVUkwiLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJzUHJvcGVydHlQYXRoIiwiam9pbiIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFsbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib1ZpZXdEYXRhIiwib0N1cnJlbnRUYXJnZXRJbmZvIiwib1JvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJ0YXJnZXRQYXRoIiwib1JvdXRlRGV0YWlsIiwicGFyYW1ldGVycyIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImFzeW5jQ29udGV4dCIsImJEZWZlcnJlZENvbnRleHQiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsIm9Bc3luY0NvbnRleHQiLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJ1c2VDb250ZXh0IiwidXBkYXRlRkNMTGV2ZWwiLCJiUmVjcmVhdGVDb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZUZvY3VzIiwidHJhbnNpZW50Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic1BhdGgiLCJ0ZXN0Iiwic1NlbWFudGljUGF0aCIsInRlY2huaWNhbFBhdGgiLCJzZW1hbnRpY1BhdGgiLCJfZmluZFBhdGhUb05hdmlnYXRlIiwiX2NoZWNrQ29udGV4dEZvclNlbWFudGljUGF0aCIsInNFbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiaXNEcmFmdFN1cHBvcnRlZCIsImlzQSIsImlzUmVsYXRpdmUiLCJnZXRIZWFkZXJDb250ZXh0Iiwic3Vic3RyaW5nIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0IiwiX2JlZm9yZVJvdXRlTWF0Y2hlZCIsImJQbGFjZWhvbGRlckVuYWJsZWQiLCJQbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJCdXN5TG9ja2VyIiwibG9jayIsIl9vblJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiYlJlYXNvbklzSWFwcFN0YXRlIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJnZXRQYXJhbWV0ZXIiLCJjb25maWciLCJoaXN0b3J5Iiwic3RhdGUiLCJmZUxldmVsIiwicmVzdG9yZUhpc3RvcnkiLCJyZXNvbHZlUm91dGVNYXRjaCIsImNhdGNoIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib0RhdGEiLCJmbkZ1bmN0aW9uIiwib0xpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJkZXRhY2hFdmVudCIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJnZXRSb3V0ZUZyb21IYXNoIiwic0hhc2giLCJnZXRIYXNoQ2hhbmdlciIsImhhc2giLCJnZXRNZXRhZGF0YSIsImZpbHRlciIsImdldFRhcmdldHNGcm9tUm91dGUiLCJhVGFyZ2V0Iiwic1RhcmdldCIsImluaXRpYWxpemVSb3V0aW5nIiwiYmluZCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsInJlc2V0RWRpdFN0YXRlIiwiYklzSWFwcFN0YXRlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJiSGFzU3RhcnRVcFBhcmFtZXRlcnMiLCJwcmVmZXJyZWRNb2RlIiwiX21hbmFnZUNyZWF0ZVN0YXJ0dXAiLCJfbWFuYWdlRGVlcExpbmtTdGFydHVwIiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJBcHBTdGFydHVwSGVscGVyIiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsInNOZXdIYXNoIiwicmVwbGFjZUhhc2giLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwiZ2V0TWFuaWZlc3QiLCJyb3V0aW5nIiwib0RlZXBMaW5rIiwiY29udGV4dCIsInNUZWNobmljYWxQYXRoIiwiZ2V0T3V0Ym91bmRzIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0Iiwib1JvdXRpbmdTZXJ2aWNlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFvQkEsTUFBTUEsc0JBQXNCLEdBQUdDLGFBQWEsQ0FBQ0MsTUFBZCxDQUFxQiw2Q0FBckIsRUFBb0U7QUFDbEdDLElBQUFBLFFBQVEsRUFBRTtBQUNUQyxNQUFBQSxNQUFNLEVBQUU7QUFDUCx3QkFBZ0IsRUFEVDtBQUVQLDZCQUFxQjtBQUZkO0FBREM7QUFEd0YsR0FBcEUsQ0FBL0I7O01BUWFDLGM7Ozs7Ozs7Ozs7O1lBZ0JaQyxtQixHQUE2QixFOzs7Ozs7O1dBRzdCQyxJLEdBQUEsZ0JBQU87QUFDTixVQUFNQyxRQUFRLEdBQUcsS0FBS0MsVUFBTCxFQUFqQjs7QUFDQSxVQUFJRCxRQUFRLENBQUNFLFNBQVQsS0FBdUIsV0FBM0IsRUFBd0M7QUFDdkMsYUFBS0MsYUFBTCxHQUFxQkgsUUFBUSxDQUFDSSxXQUE5QjtBQUNBLGFBQUtDLE1BQUwsR0FB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Szs7V0FFRCtCLFksR0FBQSx3QkFBZTtBQUNkLGFBQU8sS0FBS3BTLFNBQVo7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQzBSLGMsR0FBQSwwQkFBaUI7QUFDaEIsYUFBTyxLQUFLbE8sWUFBWjtBQUNBLEs7O1dBQ0Q2TyxZLEdBQUEsd0JBQW9CO0FBQ25CLGFBQU8sSUFBUDtBQUNBLEs7OztJQXoxQmtDQyxPOzs7O01BNDFCOUJDLHFCOzs7Ozs7Ozs7WUFDTEMsYyxHQUFBLHdCQUFlQyxlQUFmLEVBQXdFO0FBQ3ZFLFVBQU1DLGVBQWUsR0FBRyxJQUFJaFUsY0FBSixDQUFtQitULGVBQW5CLENBQXhCO0FBQ0EsYUFBT0MsZUFBZSxDQUFDeFMsV0FBdkI7QUFDQSxLOzs7SUFKa0N5UyxjOztTQU9yQkoscUIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgQXBwU3RhcnR1cEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BcHBTdGFydHVwSGVscGVyXCI7XG5pbXBvcnQgT0RhdGFVdGlscyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhVXRpbHNcIjtcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2VcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvUm91dGVyUHJveHlcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xudHlwZSBSb3V0aW5nU2VydmljZVNldHRpbmdzID0ge307XG5jb25zdCBSb3V0aW5nU2VydmljZUV2ZW50aW5nID0gRXZlbnRQcm92aWRlci5leHRlbmQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZUV2ZW50aW5nXCIsIHtcblx0bWV0YWRhdGE6IHtcblx0XHRldmVudHM6IHtcblx0XHRcdFwicm91dGVNYXRjaGVkXCI6IHt9LFxuXHRcdFx0XCJhZnRlclJvdXRlTWF0Y2hlZFwiOiB7fVxuXHRcdH1cblx0fVxufSk7XG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0b01vZGVsITogT0RhdGFNb2RlbDtcblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXHRvUm91dGVyITogUm91dGVyO1xuXHRvUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvdXRib3VuZHM6IGFueTtcblx0X21UYXJnZXRzOiBhbnk7XG5cdF9tUm91dGVzOiBhbnk7XG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nOiBhbnk7XG5cdGJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3Q/OiBib29sZWFuO1xuXHRzQ3VycmVudFJvdXRlTmFtZT86IHN0cmluZztcblx0c0N1cnJlbnRSb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cdGFDdXJyZW50Vmlld3M/OiBhbnlbXTtcblx0bmF2aWdhdGlvbkluZm9RdWV1ZTogYW55W10gPSBbXTtcblx0c0NvbnRleHRQYXRoITogc3RyaW5nO1xuXHRfZm5PblJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXHRpbml0KCkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0XHR0aGlzLm9NZXRhTW9kZWwgPSB0aGlzLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHR0aGlzLmV2ZW50UHJvdmlkZXIgPSBuZXcgKFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgYXMgYW55KSgpO1xuXG5cdFx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvcm91dGluZ1wiKTtcblx0XHRcdGNvbnN0IG9Sb290Vmlld0NvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvcm9vdFZpZXdcIik7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnLCBvUm9vdFZpZXdDb25maWcpO1xuXG5cdFx0XHRjb25zdCBvQXBwQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLmFwcFwiKTtcblx0XHRcdHRoaXMub3V0Ym91bmRzID0gb0FwcENvbmZpZyAmJiBvQXBwQ29uZmlnLmNyb3NzTmF2aWdhdGlvbiAmJiBvQXBwQ29uZmlnLmNyb3NzTmF2aWdhdGlvbi5vdXRib3VuZHM7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXHRiZWZvcmVFeGl0KCkge1xuXHRcdHRoaXMub1JvdXRlci5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5PblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCB7fSk7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIGEgbWFuaWZlc3Qgcm91dGluZyBjb25maWd1cmF0aW9uIGZvciBpbnRlcm5hbCB1c2FnZS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Sb3V0aW5nQ29uZmlnIFRoZSByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Sb290Vmlld0NvbmZpZyBUaGUgcm9vdCB2aWV3IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnOiBhbnksIG9Sb290Vmlld0NvbmZpZzogYW55KSB7XG5cdFx0Y29uc3QgaXNGQ0wgPSBvUm9vdFZpZXdDb25maWcgJiYgb1Jvb3RWaWV3Q29uZmlnLnZpZXdOYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiO1xuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2YgdGFyZ2V0c1xuXHRcdHRoaXMuX21UYXJnZXRzID0ge307XG5cdFx0T2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0Ly8gVmlldyBsZXZlbCBmb3IgRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgdGFyZ2V0IHBhdHRlcm5cblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4odGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuLCAwKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHJvdXRlc1xuXHRcdHRoaXMuX21Sb3V0ZXMgPSB7fTtcblx0XHRmb3IgKGNvbnN0IHNSb3V0ZUtleSBpbiBvUm91dGluZ0NvbmZpZy5yb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZU1hbmlmZXN0SW5mbyA9IG9Sb3V0aW5nQ29uZmlnLnJvdXRlc1tzUm91dGVLZXldLFxuXHRcdFx0XHRhUm91dGVUYXJnZXRzID0gQXJyYXkuaXNBcnJheShvUm91dGVNYW5pZmVzdEluZm8udGFyZ2V0KSA/IG9Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXQgOiBbb1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldF0sXG5cdFx0XHRcdHNSb3V0ZU5hbWUgPSBBcnJheS5pc0FycmF5KG9Sb3V0aW5nQ29uZmlnLnJvdXRlcykgPyBvUm91dGVNYW5pZmVzdEluZm8ubmFtZSA6IHNSb3V0ZUtleSxcblx0XHRcdFx0c1JvdXRlUGF0dGVybiA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5wYXR0ZXJuO1xuXG5cdFx0XHQvLyBDaGVjayByb3V0ZSBwYXR0ZXJuOiBhbGwgcGF0dGVybnMgbmVlZCB0byBlbmQgd2l0aCAnOj9xdWVyeTonLCB0aGF0IHdlIHVzZSBmb3IgcGFyYW1ldGVyc1xuXHRcdFx0aWYgKHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIDwgOCB8fCBzUm91dGVQYXR0ZXJuLmluZGV4T2YoXCI6P3F1ZXJ5OlwiKSAhPT0gc1JvdXRlUGF0dGVybi5sZW5ndGggLSA4KSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiUGF0dGVybiBmb3Igcm91dGUgXCIgKyBzUm91dGVOYW1lICsgXCIgZG9lc24ndCBlbmQgd2l0aCAnOj9xdWVyeTonIDogXCIgKyBzUm91dGVQYXR0ZXJuKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlSb3V0ZUxldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1JvdXRlUGF0dGVybiwgMCk7XG5cdFx0XHR0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdID0ge1xuXHRcdFx0XHRuYW1lOiBzUm91dGVOYW1lLFxuXHRcdFx0XHRwYXR0ZXJuOiBzUm91dGVQYXR0ZXJuLFxuXHRcdFx0XHR0YXJnZXRzOiBhUm91dGVUYXJnZXRzLFxuXHRcdFx0XHRyb3V0ZUxldmVsOiBpUm91dGVMZXZlbFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgdGFyZ2V0cyBpbiB0aGUgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgcm91dGVcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVJvdXRlVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbaV1dLnBhcmVudDtcblx0XHRcdFx0aWYgKHNQYXJlbnRUYXJnZXROYW1lKSB7XG5cdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5wdXNoKHNQYXJlbnRUYXJnZXROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzRkNMKSB7XG5cdFx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSByb3V0ZSBwYXR0ZXJuXG5cdFx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPCBpUm91dGVMZXZlbCkge1xuXHRcdFx0XHRcdC8vIFRoZXJlIGFyZSBjYXNlcyB3aGVuIGRpZmZlcmVudCByb3V0ZXMgcG9pbnQgdG8gdGhlIHNhbWUgdGFyZ2V0LiBXZSB0YWtlIHRoZVxuXHRcdFx0XHRcdC8vIGxhcmdlc3Qgdmlld0xldmVsIGluIHRoYXQgY2FzZS5cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPSBpUm91dGVMZXZlbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZDTCBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBlcXVhbCB0byAtMVxuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IC0xO1xuXHRcdFx0fSBlbHNlIGlmIChhUm91dGVUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5jb250cm9sQWdncmVnYXRpb24gIT09IFwiYmVnaW5Db2x1bW5QYWdlc1wiKSB7XG5cdFx0XHRcdC8vIFdlJ3JlIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSAxIHRhcmdldCBmb3IgdGhlIHJvdXRlLCBhbmQgaXQncyBub3QgaW4gdGhlIGZpcnN0IGNvbHVtblxuXHRcdFx0XHQvLyAtLT4gdGhpcyBpcyBhIGZ1bGxzY3JlZW4gY29sdW1uIGFmdGVyIGFsbCBjb2x1bW5zIGluIHRoZSBGQ0wgaGF2ZSBiZWVuIHVzZWRcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uRkNMTGV2ZWwgPSAzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gT3RoZXIgRkNMIGNhc2VzXG5cdFx0XHRcdGFSb3V0ZVRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHN3aXRjaCAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAxO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb3BhZ2F0ZSB2aWV3TGV2ZWwsIGNvbnRleHRQYXR0ZXJuLCBGQ0xMZXZlbCBhbmQgY29udHJvbEFnZ3JlZ2F0aW9uIHRvIHBhcmVudCB0YXJnZXRzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdHdoaWxlICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ucGFyZW50KSB7XG5cdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0XHRzVGFyZ2V0TmFtZSA9IHNQYXJlbnRUYXJnZXROYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSByb290IGVudGl0eSBmb3IgdGhlIGFwcFxuXHRcdGNvbnN0IGFMZXZlbDBSb3V0ZU5hbWVzID0gW107XG5cdFx0Y29uc3QgYUxldmVsMVJvdXRlTmFtZXMgPSBbXTtcblx0XHRsZXQgc0RlZmF1bHRSb3V0ZU5hbWU7XG5cblx0XHRmb3IgKGNvbnN0IHNOYW1lIGluIHRoaXMuX21Sb3V0ZXMpIHtcblx0XHRcdGNvbnN0IGlMZXZlbCA9IHRoaXMuX21Sb3V0ZXNbc05hbWVdLnJvdXRlTGV2ZWw7XG5cdFx0XHRpZiAoaUxldmVsID09PSAwKSB7XG5cdFx0XHRcdGFMZXZlbDBSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpTGV2ZWwgPT09IDEpIHtcblx0XHRcdFx0YUxldmVsMVJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFMZXZlbDBSb3V0ZU5hbWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0c0RlZmF1bHRSb3V0ZU5hbWUgPSBhTGV2ZWwwUm91dGVOYW1lc1swXTtcblx0XHR9IGVsc2UgaWYgKGFMZXZlbDFSb3V0ZU5hbWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0c0RlZmF1bHRSb3V0ZU5hbWUgPSBhTGV2ZWwxUm91dGVOYW1lc1swXTtcblx0XHR9XG5cblx0XHRpZiAoc0RlZmF1bHRSb3V0ZU5hbWUpIHtcblx0XHRcdGNvbnN0IHNEZWZhdWx0VGFyZ2V0TmFtZSA9IHRoaXMuX21Sb3V0ZXNbc0RlZmF1bHRSb3V0ZU5hbWVdLnRhcmdldHMuc2xpY2UoLTEpWzBdO1xuXHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBcIlwiO1xuXHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucyAmJiB0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MpIHtcblx0XHRcdFx0Y29uc3Qgb1NldHRpbmdzID0gdGhpcy5fbVRhcmdldHNbc0RlZmF1bHRUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzO1xuXHRcdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCBcIi9cIiArIG9TZXR0aW5ncy5lbnRpdHlTZXQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCBvciBlbnRpdHlTZXQgbWlzc2luZyBpbiBkZWZhdWx0IHRhcmdldDogXCIgKyBzRGVmYXVsdFRhcmdldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IG5vIGRlZmF1bHQgcm91dGUgZm91bmQuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBjb3JyZWN0IHBhdGggdG8gdGhlIGRpZmZlcmVudCBwYWdlcywgaW5jbHVkaW5nIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cylcblx0XHRcdC5tYXAoKHNUYXJnZXRLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldEtleV07XG5cdFx0XHR9KVxuXHRcdFx0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhLnZpZXdMZXZlbCA8IGIudmlld0xldmVsID8gLTEgOiAxO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKCh0YXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBBZnRlciBzb3J0aW5nIHRoZSB0YXJnZXRzIHBlciBsZXZlbCB3ZSBjYW4gdGhlbiBnbyB0aHJvdWdoIHRoZWlyIG5hdmlnYXRpb24gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBhdGhzIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRpZiAodGFyZ2V0Lm9wdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRhcmdldC5vcHRpb25zLnNldHRpbmdzO1xuXHRcdFx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IHNldHRpbmdzLmNvbnRleHRQYXRoIHx8IChzZXR0aW5ncy5lbnRpdHlTZXQgPyBcIi9cIiArIHNldHRpbmdzLmVudGl0eVNldCA6IFwiXCIpO1xuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoICsgXCIvXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHNldHRpbmdzLm5hdmlnYXRpb24gfHwge30pLmZvckVhY2goKHNOYXZOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRSb3V0ZSA9IHRoaXMuX21Sb3V0ZXNbc2V0dGluZ3MubmF2aWdhdGlvbltzTmF2TmFtZV0uZGV0YWlsLnJvdXRlXTtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRSb3V0ZSAmJiB0YXJnZXRSb3V0ZS50YXJnZXRzKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFJvdXRlLnRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IXRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aFxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRhcmdldC52aWV3TGV2ZWwgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID0gXCIvXCIgKyBzTmF2TmFtZSArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggKyBzTmF2TmFtZSArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMge251bWJlcn0gVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gXCIvXCIgKyBzUGF0dGVybjtcblx0XHR9XG5cdFx0aWYgKHNQYXR0ZXJuLmxlbmd0aCkge1xuXHRcdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcblx0XHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdHRlcm4pIHx8IHNQYXR0ZXJuID09PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgKyt2aWV3TGV2ZWwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCB2aWV3TGV2ZWwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdmlld0xldmVsO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRSb3V0ZUluZm9ybWF0aW9uKHNSb3V0ZU5hbWU6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdO1xuXHR9XG5cblx0X2dldENvbXBvbmVudElkKHNPd25lcklkOiBhbnksIHNDb21wb25lbnRJZDogYW55KSB7XG5cdFx0aWYgKHNDb21wb25lbnRJZC5pbmRleE9mKHNPd25lcklkICsgXCItLS1cIikgPT09IDApIHtcblx0XHRcdHJldHVybiBzQ29tcG9uZW50SWQuc3Vic3RyKHNPd25lcklkLmxlbmd0aCArIDMpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbXBvbmVudElkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudEluc3RhbmNlIEluc3RhbmNlIG9mIHRoZSBjb21wb25lbnRcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YXJnZXRcblx0ICovXG5cdGdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnRJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgc1RhcmdldENvbXBvbmVudElkID0gdGhpcy5fZ2V0Q29tcG9uZW50SWQob0NvbXBvbmVudEluc3RhbmNlLl9zT3duZXJJZCwgb0NvbXBvbmVudEluc3RhbmNlLmdldElkKCkpO1xuXHRcdGxldCBzQ29ycmVjdFRhcmdldE5hbWUgPSBudWxsO1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmlkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdJZCA9PT0gc1RhcmdldENvbXBvbmVudElkKSB7XG5cdFx0XHRcdHNDb3JyZWN0VGFyZ2V0TmFtZSA9IHNUYXJnZXROYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzQ29ycmVjdFRhcmdldE5hbWUpO1xuXHR9XG5cblx0Z2V0TGFzdFNlbWFudGljTWFwcGluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZztcblx0fVxuXG5cdHNldExhc3RTZW1hbnRpY01hcHBpbmcob01hcHBpbmc6IGFueSkge1xuXHRcdHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgPSBvTWFwcGluZztcblx0fVxuXG5cdG5hdmlnYXRlVG8ob0NvbnRleHQ6IGFueSwgc1JvdXRlTmFtZTogYW55LCBtUGFyYW1ldGVyTWFwcGluZzogYW55LCBiUHJlc2VydmVIaXN0b3J5OiBhbnkpIHtcblx0XHRsZXQgc1RhcmdldFVSTFByb21pc2UsIGJJc1N0aWNreU1vZGU6IGJvb2xlYW47XG5cdFx0aWYgKG9Db250ZXh0LmdldE1vZGVsKCkgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdGlmICghbVBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlck1hcHBpbmcsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKChtUGFyYW1ldGVyczogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc1RhcmdldFVSTFByb21pc2UudGhlbigoc1RhcmdldFVSTDogYW55KSA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc1RhcmdldFVSTCwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHVybiBhIG1hcCBvZiByb3V0aW5nIHRhcmdldCBwYXJhbWV0ZXJzIHdoZXJlIHRoZSBiaW5kaW5nIHN5bnRheCBpcyByZXNvbHZlZCB0byB0aGUgY3VycmVudCBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgbWFwIGluIHRoZSBmb3JtYXQgW2s6IHN0cmluZ10gOiBDb21wbGV4QmluZGluZ1N5bnRheFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RhcmdldFJvdXRlIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byB0aGUgcm91dGluZyB0YXJnZXQgcGFyYW1ldGVyc1xuXHQgKi9cblx0cHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlcnM6IGFueSwgc1RhcmdldFJvdXRlOiBzdHJpbmcsIG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0bGV0IG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0Y29uc3QgYUNvbnRleHRQYXRoUGFydHMgPSBzQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3QgYUFsbFJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBPYmplY3Qua2V5cyhtUGFyYW1ldGVycykubWFwKChzUGFyYW1ldGVyS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uID0gbVBhcmFtZXRlcnNbc1BhcmFtZXRlcktleV07XG5cdFx0XHRcdC8vIFdlIGFzc3VtZSB0aGUgZGVmaW5lZCBwYXJhbWV0ZXJzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHRcdGNvbnN0IG9QYXJzZWRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbik7XG5cdFx0XHRcdGNvbnN0IGFQYXJ0cyA9IG9QYXJzZWRFeHByZXNzaW9uLnBhcnRzIHx8IFtvUGFyc2VkRXhwcmVzc2lvbl07XG5cdFx0XHRcdGNvbnN0IGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gYVBhcnRzLm1hcChmdW5jdGlvbihvUGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGFSZWxhdGl2ZVBhcnRzID0gb1BhdGhQYXJ0LnBhdGguc3BsaXQoXCIuLi9cIik7XG5cdFx0XHRcdFx0Ly8gV2UgZ28gdXAgdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0Y29uc3QgYUxvY2FsUGFydHMgPSBhQ29udGV4dFBhdGhQYXJ0cy5zbGljZSgwLCBhQ29udGV4dFBhdGhQYXJ0cy5sZW5ndGggLSBhUmVsYXRpdmVQYXJ0cy5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRhTG9jYWxQYXJ0cy5wdXNoKGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKTtcblxuXHRcdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBhTG9jYWxQYXJ0cy5qb2luKFwiL1wiKTtcblx0XHRcdFx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSAob01ldGFNb2RlbCBhcyBhbnkpLmdldE1ldGFDb250ZXh0KHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoc1Byb3BlcnR5UGF0aCkudGhlbihmdW5jdGlvbihvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IG9NZXRhQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNFZG1UeXBlID0gb1Byb3BlcnR5SW5mby4kVHlwZTtcblx0XHRcdFx0XHRcdHJldHVybiBPRGF0YVV0aWxzLmZvcm1hdExpdGVyYWwob1ZhbHVlLCBzRWRtVHlwZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbigoYVJlc29sdmVkUGFyYW1ldGVyczogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbihcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVyczogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9W11cblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihvUmVzb2x2ZWRQYXJhbWV0ZXI6IHsga2V5OiBhbnk7IHZhbHVlOiBhbnkgfSkge1xuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzW29SZXNvbHZlZFBhcmFtZXRlci5rZXldID0gb1Jlc29sdmVkUGFyYW1ldGVyLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcGFyc2UgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHJvdXRlIFwiICsgc1RhcmdldFJvdXRlKTtcblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtZXRlcnNQcm9taXNlO1xuXHR9XG5cblx0X2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXG5cdFx0RWRpdFN0YXRlLmNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlKCk7IC8vIFJlc2V0IFVJIHN0YXRlIHdoZW4gYWxsIGJpbmRpbmdzIGhhdmUgYmVlbiByZWZyZXNoZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgQ29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHtvYmplY3R9IFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIG1hcCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuY2hlY2tOb0hhc2hDaGFuZ2VdIE5hdmlnYXRlIHRvIHRoZSBjb250ZXh0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIFVSTFxuXHQgKiBAcGFyYW0ge1Byb21pc2V9IFttUGFyYW1ldGVycy5hc3luY0NvbnRleHRdIFRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgYXN5bmMsIG5hdmlnYXRlIHRvICguLi4pIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgUHJvbWlzZSB0byBiZSByZXNvbHZlZCBhbmQgdGhlbiBuYXZpZ2F0ZSBpbnRvIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJEZWZlcnJlZENvbnRleHRdIFRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgZGVmZXJyZWQgYXQgdGhlIHRhcmdldCBwYWdlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmVkaXRhYmxlXSBUaGUgdGFyZ2V0IHBhZ2Ugc2hhbGwgYmUgaW1tZWRpYXRlbHkgaW4gdGhlIGVkaXQgbW9kZSB0byBhdm9pZCBmbGlja2VyaW5nXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGxdIFRoZSBiUGVyc2lzdE9QU2Nyb2xsIHdpbGwgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nIHRvIGZpcnN0IHRhYlxuXHQgKiBAcGFyYW0ge251bWJlcn0gW21QYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsXSBgKzFgIGlmIHdlIGFkZCBhIGNvbHVtbiBpbiBGQ0wsIGAtMWAgdG8gcmVtb3ZlIGEgY29sdW1uLCAwIHRvIHN0YXkgb24gdGhlIHNhbWUgY29sdW1uXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVdIERvIG5hdmlnYXRpb24gd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcmVzZXJ2ZWQgY2FjaGUgbWVjaGFuaXNtXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJSZWNyZWF0ZUNvbnRleHRdIEZvcmNlIHJlLWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJGb3JjZUZvY3VzXSBGb3JjZXMgZm9jdXMgc2VsZWN0aW9uIGFmdGVyIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHtvYmplY3R9IFtvVmlld0RhdGFdIFZpZXcgZGF0YVxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29DdXJyZW50VGFyZ2V0SW5mb10gVGhlIHRhcmdldCBpbmZvcm1hdGlvbiBmcm9tIHdoaWNoIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRuYXZpZ2F0ZVRvQ29udGV4dChcblx0XHRvQ29udGV4dDogYW55LFxuXHRcdG1QYXJhbWV0ZXJzOlxuXHRcdFx0fCB7XG5cdFx0XHRcdFx0Y2hlY2tOb0hhc2hDaGFuZ2U/OiBib29sZWFuO1xuXHRcdFx0XHRcdGFzeW5jQ29udGV4dD86IFByb21pc2U8YW55Pjtcblx0XHRcdFx0XHRiRGVmZXJyZWRDb250ZXh0PzogYm9vbGVhbjtcblx0XHRcdFx0XHRlZGl0YWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0dHJhbnNpZW50PzogYm9vbGVhbjtcblx0XHRcdFx0XHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0XHR1cGRhdGVGQ0xMZXZlbD86IG51bWJlcjtcblx0XHRcdFx0XHRub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRiUmVjcmVhdGVDb250ZXh0PzogYm9vbGVhbjtcblx0XHRcdFx0XHRiRm9yY2VGb2N1cz86IGJvb2xlYW47XG5cdFx0XHRcdFx0dGFyZ2V0UGF0aD86IHN0cmluZztcblx0XHRcdFx0XHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJEcmFmdE5hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0ICB9XG5cdFx0XHR8IHVuZGVmaW5lZCxcblx0XHRvVmlld0RhdGE6IGFueSB8IHVuZGVmaW5lZCxcblx0XHRvQ3VycmVudFRhcmdldEluZm86IGFueSB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc1RhcmdldFJvdXRlOiBzdHJpbmcgPSBcIlwiLFxuXHRcdFx0b1JvdXRlUGFyYW1ldGVyc1Byb21pc2UsXG5cdFx0XHRiSXNTdGlja3lNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCkge1xuXHRcdFx0YklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdFx0Ly8gTWFuYWdlIHBhcmFtZXRlciBtYXBwaW5nXG5cdFx0aWYgKG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLnRhcmdldFBhdGggJiYgb1ZpZXdEYXRhICYmIG9WaWV3RGF0YS5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBvVmlld0RhdGEubmF2aWdhdGlvblttUGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHRzVGFyZ2V0Um91dGUgPSBvUm91dGVEZXRhaWwucm91dGU7XG5cblx0XHRcdGlmIChvUm91dGVEZXRhaWwucGFyYW1ldGVycykge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMsIHNUYXJnZXRSb3V0ZSwgb0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSdyZSBzdXBwb3NlZCB0byBuYXZpZ2F0ZSB0byB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwXG5cdFx0Ly8gQ2hlY2sgaWYgd2UgbmVlZCB0byBleGl0IGZyb20gdGhlIGFwcCBpbnN0ZWFkXG5cdFx0aWYgKHNUYXJnZXRQYXRoLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGNvbnRleHQgaXMgZGVmZXJyZWQgb3IgYXN5bmMsIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aFxuXHRcdGlmIChtUGFyYW1ldGVycz8uYXN5bmNDb250ZXh0IHx8IG1QYXJhbWV0ZXJzPy5iRGVmZXJyZWRDb250ZXh0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiguLi4pXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGxheW91dCBwYXJhbWV0ZXIgaWYgbmVlZGVkXG5cdFx0Y29uc3Qgc0xheW91dCA9IHRoaXMuX2NhbGN1bGF0ZUxheW91dChzVGFyZ2V0UGF0aCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBcIj9sYXlvdXQ9XCIgKyBzTGF5b3V0O1xuXHRcdH1cblxuXHRcdC8vIE5hdmlnYXRpb24gcGFyYW1ldGVycyBmb3IgbGF0ZXIgdXNhZ2Vcblx0XHRjb25zdCBvTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRvQXN5bmNDb250ZXh0OiBtUGFyYW1ldGVycz8uYXN5bmNDb250ZXh0LFxuXHRcdFx0YkRlZmVycmVkQ29udGV4dDogbVBhcmFtZXRlcnM/LmJEZWZlcnJlZENvbnRleHQsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IG1QYXJhbWV0ZXJzPy5lZGl0YWJsZSxcblx0XHRcdGJQZXJzaXN0T1BTY3JvbGw6IG1QYXJhbWV0ZXJzPy5iUGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0dXNlQ29udGV4dDogbVBhcmFtZXRlcnM/LnVwZGF0ZUZDTExldmVsID09PSAtMSB8fCBtUGFyYW1ldGVycz8uYlJlY3JlYXRlQ29udGV4dCA/IHVuZGVmaW5lZCA6IG9Db250ZXh0LFxuXHRcdFx0YkRyYWZ0TmF2aWdhdGlvbjogbVBhcmFtZXRlcnM/LmJEcmFmdE5hdmlnYXRpb24sXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBtUGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBtUGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyIDogdHJ1ZVxuXHRcdH07XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IG1FdmVudFBhcmFtZXRlcnM6IGFueSA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0aWYgKG1FdmVudFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIW1QYXJhbWV0ZXJzLmJGb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgbVBhcmFtZXRlcnMuZWRpdGFibGUgPT0gdHJ1ZSAmJiBzVGFyZ2V0UGF0aC5pbmRleE9mKFwiKC4uLilcIikgPT09IC0xKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5kZXhPZihcIj9cIikgPiAtMSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSBzdGFsZSBlcnJvciBtZXNzYWdlcyBmcm9tIExSIGFyZSBub3Qgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgbmF2aWdhdGlvbiB0byBPUC5cblx0XHRpZiAob0N1cnJlbnRUYXJnZXRJbmZvICYmIG9DdXJyZW50VGFyZ2V0SW5mby5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBvUm91dGVJbmZvID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzVGFyZ2V0UGF0aCk7XG5cdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdGlmIChvUm91dGUgJiYgb1JvdXRlLnRhcmdldHMgJiYgb1JvdXRlLnRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIG9UYXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVldWVcblx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0aWYgKHNUYXJnZXRSb3V0ZSAmJiBvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLnRoZW4oKG9Sb3V0ZVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8oc1RhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHQubmF2VG9IYXNoKHNUYXJnZXRQYXRoLCBmYWxzZSwgbVBhcmFtZXRlcnM/Lm5vUHJlc2VydmF0aW9uQ2FjaGUsIG1QYXJhbWV0ZXJzPy5iRm9yY2VGb2N1cywgIWJJc1N0aWNreU1vZGUpXG5cdFx0XHQudGhlbigoYk5hdmlnYXRlZDogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIGRpZCBub3QgaGFwcGVuIC0tPiByZW1vdmUgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBmcm9tIHRoZSBxdWV1ZSBhcyB0aGV5IHNob3VsZG4ndCBiZSB1c2VkXG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnBvcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmcjbmF2aWdhdGVUb1JvdXRlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHQvLyBGaXJzdCwgY2hlY2sgd2l0aCB0aGUgdGVjaG5pY2FsIHBhdGguIFdlIGhhdmUgdG8gdHJ5IGl0LCBiZWNhdXNlIGZvciBsZXZlbCA+IDEsIHdlXG5cdFx0Ly8gdXNlcyB0ZWNobmljYWwga2V5cyBldmVuIGlmIFNlbWFudGljIGtleXMgYXJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICgvXlteXFwoXFwpXStcXChbXlxcKFxcKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IGFueSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW15cXChdK1xcKFteXFwpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0aWYgKCFTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc0VudGl0eVNldE5hbWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayB0aGUgZW50aXR5IGlzIGRyYWZ0LWVuYWJsZWRcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdH1cblxuXHRfZ2V0UGF0aEZyb21Db250ZXh0KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRsZXQgc1BhdGg7XG5cblx0XHRpZiAob0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikgJiYgb0NvbnRleHQuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldEhlYWRlckNvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdHNQYXRoID0gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyAmJiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQpKSB7XG5cdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQsIHRydWUpO1xuXG5cdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0Ly8gY2xlYXIgdGhlIHByZXZpb3VzIG1hcHBpbmcsIG90aGVyd2lzZSB0aGUgb2xkIG1hcHBpbmcgaXMgdXNlZCBpbiBFZGl0RmxvdyN1cGRhdGVEb2N1bWVudFxuXHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0fSBlbHNlIGlmIChzU2VtYW50aWNQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHsgdGVjaG5pY2FsUGF0aDogc1BhdGgsIHNlbWFudGljUGF0aDogc1NlbWFudGljUGF0aCB9KTtcblx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChzUGF0aDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bGV0IEZDTExldmVsID0gbVBhcmFtZXRlcnMuRkNMTGV2ZWw7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuY2FsY3VsYXRlTGF5b3V0KEZDTExldmVsLCBzUGF0aCwgbVBhcmFtZXRlcnMuc0xheW91dCk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBiZWZvcmUgYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBEaXNwbGF5cyBhIGJ1c3kgaW5kaWNhdG9yLlxuXHQgKlxuXHQgKi9cblx0X2JlZm9yZVJvdXRlTWF0Y2hlZCgvKm9FdmVudDogRXZlbnQqLykge1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQpIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLmJSZWFzb25Jc0lhcHBTdGF0ZSA9IHRydWU7XG5cdFx0XHRvQXBwU3RhdGVIYW5kbGVyLnJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIWhpc3Rvcnkuc3RhdGUgfHwgaGlzdG9yeS5zdGF0ZS5mZUxldmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5yZXN0b3JlSGlzdG9yeSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXN0b3JpbmcgaGlzdG9yeVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHR9XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZWQob0RhdGE6IGFueSwgZm5GdW5jdGlvbj86IGFueSwgb0xpc3RlbmVyPzogYW55KSB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdGRldGFjaFJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdGF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKG9EYXRhOiBhbnksIGZuRnVuY3Rpb246IGFueSwgb0xpc3RlbmVyOiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBhbnksIG9MaXN0ZW5lcjogYW55KSB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGdldFJvdXRlRnJvbUhhc2gob1JvdXRlcjogYW55LCBvQXBwQ29tcG9uZW50OiBhbnkpIHtcblx0XHRjb25zdCBzSGFzaCA9IG9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5oYXNoO1xuXHRcdGNvbnN0IG9Sb3V0ZUluZm8gPSBvUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzSGFzaCk7XG5cdFx0cmV0dXJuIG9BcHBDb21wb25lbnRcblx0XHRcdC5nZXRNZXRhZGF0YSgpXG5cdFx0XHQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3JvdXRpbmcvcm91dGVzXCIpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uKG9Sb3V0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUm91dGUubmFtZSA9PT0gb1JvdXRlSW5mby5uYW1lO1xuXHRcdFx0fSlbMF07XG5cdH1cblx0Z2V0VGFyZ2V0c0Zyb21Sb3V0ZShvUm91dGU6IGFueSkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvUm91dGUudGFyZ2V0O1xuXHRcdGlmICh0eXBlb2Ygb1RhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIFt0aGlzLl9tVGFyZ2V0c1tvVGFyZ2V0XV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFUYXJnZXQ6IGFueVtdID0gW107XG5cdFx0XHRvVGFyZ2V0LmZvckVhY2goKHNUYXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHRhVGFyZ2V0LnB1c2godGhpcy5fbVRhcmdldHNbc1RhcmdldF0pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYVRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpbml0aWFsaXplUm91dGluZygpIHtcblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPVxuXHRcdFx0dGhpcy5vUm91dGVyXG5cdFx0XHRcdC5nZXRIYXNoQ2hhbmdlcigpXG5cdFx0XHRcdC5nZXRIYXNoKClcblx0XHRcdFx0LmluZGV4T2YoXCJzYXAtaWFwcC1zdGF0ZVwiKSAhPT0gLTE7XG5cdFx0Y29uc3QgaW5pdFByb21pc2UgPSB0aGlzLm9BcHBDb21wb25lbnRcblx0XHRcdC5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQudGhlbigob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3QgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMob1N0YXJ0dXBQYXJhbWV0ZXJzKS5sZW5ndGggIT09IDA7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0XHQvLyBNYW5hZ2Ugc3RhcnR1cCBwYXJhbWV0ZXJzIChpbiBjYXNlIG9mIG5vIGlhcHAtc3RhdGUpXG5cdFx0XHRcdGlmICghYklzSWFwcFN0YXRlICYmIGJIYXNTdGFydFVwUGFyYW1ldGVycyAmJiAhc0hhc2gpIHtcblx0XHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0uaW5kZXhPZihcImNyZWF0ZVwiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBEZWVwIGxpbmtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGluaXRQcm9taXNlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogYW55KSB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKHNOZXdIYXNoKTtcblx0XHRcdFx0XHR0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWVwTGlua1N0YXJ0dXBIYXNoKFxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpIGFzIGFueSlbXCJzYXAudWk1XCJdLnJvdXRpbmcsXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMsXG5cdFx0XHR0aGlzLm9Nb2RlbFxuXHRcdCkudGhlbigob0RlZXBMaW5rOiBhbnkpID0+IHtcblx0XHRcdGxldCBzSGFzaDtcblx0XHRcdGlmIChvRGVlcExpbmsuY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzVGVjaG5pY2FsUGF0aCA9IG9EZWVwTGluay5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkoc0hhc2gpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCkge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCkge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBuZXcgUm91dGluZ1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1JvdXRpbmdTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
968
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsIkV2ZW50UHJvdmlkZXIiLCJSb3V0aW5nU2VydmljZSIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwic2NvcGVUeXBlIiwib0FwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1JvdXRlciIsImdldFJvdXRlciIsIm9Sb3V0ZXJQcm94eSIsImdldFJvdXRlclByb3h5IiwiZXZlbnRQcm92aWRlciIsIm9Sb3V0aW5nQ29uZmlnIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9Sb290Vmlld0NvbmZpZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsImlzRkNMIiwidmlld05hbWUiLCJfbVRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwidGFyZ2V0cyIsImZvckVhY2giLCJzVGFyZ2V0TmFtZSIsImFzc2lnbiIsInRhcmdldE5hbWUiLCJjb250ZXh0UGF0dGVybiIsInVuZGVmaW5lZCIsInZpZXdMZXZlbCIsIl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybiIsIl9tUm91dGVzIiwic1JvdXRlS2V5Iiwicm91dGVzIiwib1JvdXRlTWFuaWZlc3RJbmZvIiwiYVJvdXRlVGFyZ2V0cyIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJsZW5ndGgiLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsImkiLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInB1c2giLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJvU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInNUYXJnZXRVUkwiLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJzUHJvcGVydHlQYXRoIiwiam9pbiIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFsbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib1ZpZXdEYXRhIiwib0N1cnJlbnRUYXJnZXRJbmZvIiwib1JvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJ0YXJnZXRQYXRoIiwib1JvdXRlRGV0YWlsIiwicGFyYW1ldGVycyIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImFzeW5jQ29udGV4dCIsImJEZWZlcnJlZENvbnRleHQiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsIm9Bc3luY0NvbnRleHQiLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJ1c2VDb250ZXh0IiwidXBkYXRlRkNMTGV2ZWwiLCJiUmVjcmVhdGVDb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJiTmF2aWdhdGVUb1NpYmxpbmdFbnRpdHkiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZUZvY3VzIiwidHJhbnNpZW50Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic1BhdGgiLCJ0ZXN0Iiwic1NlbWFudGljUGF0aCIsInRlY2huaWNhbFBhdGgiLCJzZW1hbnRpY1BhdGgiLCJfZmluZFBhdGhUb05hdmlnYXRlIiwiX2NoZWNrQ29udGV4dEZvclNlbWFudGljUGF0aCIsInNFbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiaXNEcmFmdFN1cHBvcnRlZCIsImlzQSIsImlzUmVsYXRpdmUiLCJnZXRIZWFkZXJDb250ZXh0Iiwic3Vic3RyaW5nIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJfYmVmb3JlUm91dGVNYXRjaGVkIiwiYlBsYWNlaG9sZGVyRW5hYmxlZCIsIlBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiX29uUm91dGVNYXRjaGVkIiwib0V2ZW50Iiwib0FwcFN0YXRlSGFuZGxlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImlzTG9ja2VkIiwidW5sb2NrIiwiZ2V0UGFyYW1ldGVycyIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJiUmVhc29uSXNJYXBwU3RhdGUiLCJyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCIsImdldFBhcmFtZXRlciIsImNvbmZpZyIsImhpc3RvcnkiLCJzdGF0ZSIsImZlTGV2ZWwiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImdldFJvdXRlRnJvbUhhc2giLCJzSGFzaCIsImdldEhhc2hDaGFuZ2VyIiwiaGFzaCIsImdldE1ldGFkYXRhIiwiZmlsdGVyIiwiZ2V0VGFyZ2V0c0Zyb21Sb3V0ZSIsImFUYXJnZXQiLCJzVGFyZ2V0IiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJiSXNJYXBwU3RhdGUiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJIYXNTdGFydFVwUGFyYW1ldGVycyIsInByZWZlcnJlZE1vZGUiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsIkFwcFN0YXJ0dXBIZWxwZXIiLCJnZXRDb250ZXh0UGF0aCIsImdldENyZWF0ZVN0YXJ0dXBIYXNoIiwic05ld0hhc2giLCJyZXBsYWNlSGFzaCIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJnZXRNYW5pZmVzdCIsInJvdXRpbmciLCJvRGVlcExpbmsiLCJjb250ZXh0Iiwic1RlY2huaWNhbFBhdGgiLCJnZXRPdXRib3VuZHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJvUm91dGluZ1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNCTUEsc0IsV0FETEMsY0FBYyxDQUFDLDZDQUFELEMsVUFFYkMsS0FBSyxFLFVBRUxBLEtBQUssRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFIOEJDLGE7Ozs7Ozs7Ozs7OztNQVd4QkMsYzs7Ozs7Ozs7Ozs7YUFnQlpDLG1CLEdBQTZCLEU7Ozs7Ozs7V0FHN0JDLEksR0FBQSxnQkFBTztBQUNOLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCOztBQUNBLFVBQUlELFFBQVEsQ0FBQ0UsU0FBVCxLQUF1QixXQUEzQixFQUF3QztBQUN2QyxhQUFLQyxhQUFMLEdBQXFCSCxRQUFRLENBQUNJLFdBQTlCO0FBQ0EsYUFBS0MsTUFB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VyxTQUFkLENBQXdCLENBQXhCLENBQVIsQ0FWc0IsQ0FVYztBQUNwQyxTQVhELE1BV08sSUFBSW1FLFNBQVMsQ0FBQzFCLElBQWQsRUFBb0I7QUFDMUJGLFVBQUFBLEtBQUssR0FBRzRCLFNBQVMsQ0FBQzFCLElBQWxCO0FBQ0E7O0FBRUQsWUFBSUYsS0FBSixFQUFXO0FBQ1Y7QUFDQyxVQUFBLE9BQUksQ0FBQ2xSLE9BQUwsQ0FBYW1SLGNBQWIsR0FBOEJ1QixXQUEvQixDQUFtRHhCLEtBQW5EO0FBQ0E7QUFDRCxPQXpCTSxDQUFQO0FBMEJBLEs7O1dBRUQrQixZLEdBQUEsd0JBQWU7QUFDZCxhQUFPLEtBQUt2UyxTQUFaO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0M2UixjLEdBQUEsMEJBQWlCO0FBQ2hCLGFBQU8sS0FBS3JPLFlBQVo7QUFDQSxLOztXQUNEZ1AsWSxHQUFBLHdCQUFvQjtBQUNuQixhQUFPLElBQVA7QUFDQSxLOzs7SUE5MUJrQ0MsTzs7OztNQWkyQjlCQyxxQjs7Ozs7Ozs7O1lBQ0xDLGMsR0FBQSx3QkFBZUMsZUFBZixFQUF3RTtBQUN2RSxVQUFNQyxlQUFlLEdBQUcsSUFBSW5VLGNBQUosQ0FBbUJrVSxlQUFuQixDQUF4QjtBQUNBLGFBQU9DLGVBQWUsQ0FBQzNTLFdBQXZCO0FBQ0EsSzs7O0lBSmtDNFMsYzs7U0FPckJKLHFCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgQXBwU3RhcnR1cEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BcHBTdGFydHVwSGVscGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cdEBldmVudCgpXG5cdGFmdGVyUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0b01vZGVsITogT0RhdGFNb2RlbDtcblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXHRvUm91dGVyITogUm91dGVyO1xuXHRvUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvdXRib3VuZHM6IGFueTtcblx0X21UYXJnZXRzOiBhbnk7XG5cdF9tUm91dGVzOiBhbnk7XG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXHRiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290PzogYm9vbGVhbjtcblx0c0N1cnJlbnRSb3V0ZU5hbWU/OiBzdHJpbmc7XG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXHRhQ3VycmVudFZpZXdzPzogYW55W107XG5cdG5hdmlnYXRpb25JbmZvUXVldWU6IGFueVtdID0gW107XG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblx0X2ZuT25Sb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dC5zY29wZVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdFx0dGhpcy5vTW9kZWwgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCk7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXHRcdFx0dGhpcy5ldmVudFByb3ZpZGVyID0gbmV3IChSb3V0aW5nU2VydmljZUV2ZW50aW5nIGFzIGFueSkoKTtcblxuXHRcdFx0Y29uc3Qgb1JvdXRpbmdDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3JvdXRpbmdcIik7XG5cdFx0XHRjb25zdCBvUm9vdFZpZXdDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3Jvb3RWaWV3XCIpO1xuXHRcdFx0dGhpcy5fcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZywgb1Jvb3RWaWV3Q29uZmlnKTtcblxuXHRcdFx0Y29uc3Qgb0FwcENvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcgJiYgb0FwcENvbmZpZy5jcm9zc05hdmlnYXRpb24gJiYgb0FwcENvbmZpZy5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblx0YmVmb3JlRXhpdCgpIHtcblx0XHR0aGlzLm9Sb3V0ZXIuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwge30pO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUm9vdFZpZXdDb25maWcgVGhlIHJvb3QgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogYW55LCBvUm9vdFZpZXdDb25maWc6IGFueSkge1xuXHRcdGNvbnN0IGlzRkNMID0gb1Jvb3RWaWV3Q29uZmlnICYmIG9Sb290Vmlld0NvbmZpZy52aWV3TmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIjtcblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHRhcmdldHNcblx0XHR0aGlzLl9tVGFyZ2V0cyA9IHt9O1xuXHRcdE9iamVjdC5rZXlzKG9Sb3V0aW5nQ29uZmlnLnRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXSA9IE9iamVjdC5hc3NpZ24oeyB0YXJnZXROYW1lOiBzVGFyZ2V0TmFtZSB9LCBvUm91dGluZ0NvbmZpZy50YXJnZXRzW3NUYXJnZXROYW1lXSk7XG5cblx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIEZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHRhcmdldCBwYXR0ZXJuXG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiwgMCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiByb3V0ZXNcblx0XHR0aGlzLl9tUm91dGVzID0ge307XG5cdFx0Zm9yIChjb25zdCBzUm91dGVLZXkgaW4gb1JvdXRpbmdDb25maWcucm91dGVzKSB7XG5cdFx0XHRjb25zdCBvUm91dGVNYW5pZmVzdEluZm8gPSBvUm91dGluZ0NvbmZpZy5yb3V0ZXNbc1JvdXRlS2V5XSxcblx0XHRcdFx0YVJvdXRlVGFyZ2V0cyA9IEFycmF5LmlzQXJyYXkob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCkgPyBvUm91dGVNYW5pZmVzdEluZm8udGFyZ2V0IDogW29Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXRdLFxuXHRcdFx0XHRzUm91dGVOYW1lID0gQXJyYXkuaXNBcnJheShvUm91dGluZ0NvbmZpZy5yb3V0ZXMpID8gb1JvdXRlTWFuaWZlc3RJbmZvLm5hbWUgOiBzUm91dGVLZXksXG5cdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblxuXHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdGlmIChzUm91dGVQYXR0ZXJuLmxlbmd0aCA8IDggfHwgc1JvdXRlUGF0dGVybi5pbmRleE9mKFwiOj9xdWVyeTpcIikgIT09IHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIC0gOCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIlBhdHRlcm4gZm9yIHJvdXRlIFwiICsgc1JvdXRlTmFtZSArIFwiIGRvZXNuJ3QgZW5kIHdpdGggJzo/cXVlcnk6JyA6IFwiICsgc1JvdXRlUGF0dGVybik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpUm91dGVMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNSb3V0ZVBhdHRlcm4sIDApO1xuXHRcdFx0dGhpcy5fbVJvdXRlc1tzUm91dGVOYW1lXSA9IHtcblx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0cGF0dGVybjogc1JvdXRlUGF0dGVybixcblx0XHRcdFx0dGFyZ2V0czogYVJvdXRlVGFyZ2V0cyxcblx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdH07XG5cblx0XHRcdC8vIEFkZCB0aGUgcGFyZW50IHRhcmdldHMgaW4gdGhlIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIHJvdXRlXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSb3V0ZVRhcmdldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzW2ldXS5wYXJlbnQ7XG5cdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMucHVzaChzUGFyZW50VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc0ZDTCkge1xuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBub24tRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcm91dGUgcGF0dGVyblxuXHRcdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsIDwgaVJvdXRlTGV2ZWwpIHtcblx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHQvLyBsYXJnZXN0IHZpZXdMZXZlbCBpbiB0aGF0IGNhc2UuXG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsID0gaVJvdXRlTGV2ZWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGQ0wgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgZXF1YWwgdG8gLTFcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uRkNMTGV2ZWwgPSAtMTtcblx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHQvLyBXZSdyZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgMSB0YXJnZXQgZm9yIHRoZSByb3V0ZSwgYW5kIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjb2x1bW5cblx0XHRcdFx0Ly8gLS0+IHRoaXMgaXMgYSBmdWxsc2NyZWVuIGNvbHVtbiBhZnRlciBhbGwgY29sdW1ucyBpbiB0aGUgRkNMIGhhdmUgYmVlbiB1c2VkXG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE90aGVyIEZDTCBjYXNlc1xuXHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lOiBhbnkpID0+IHtcblx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcm9wYWdhdGUgdmlld0xldmVsLCBjb250ZXh0UGF0dGVybiwgRkNMTGV2ZWwgYW5kIGNvbnRyb2xBZ2dyZWdhdGlvbiB0byBwYXJlbnQgdGFyZ2V0c1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdFx0c1RhcmdldE5hbWUgPSBzUGFyZW50VGFyZ2V0TmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnMgJiYgdGhpcy5fbVRhcmdldHNbc0RlZmF1bHRUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzKSB7XG5cdFx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncztcblx0XHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY29udGV4dFBhdGggfHwgXCIvXCIgKyBvU2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogY29udGV4dFBhdGggb3IgZW50aXR5U2V0IG1pc3NpbmcgaW4gZGVmYXVsdCB0YXJnZXQ6IFwiICsgc0RlZmF1bHRUYXJnZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBubyBkZWZhdWx0IHJvdXRlIGZvdW5kLlwiKTtcblx0XHR9XG5cblx0XHQvLyBXZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUgY29ycmVjdCBwYXRoIHRvIHRoZSBkaWZmZXJlbnQgcGFnZXMsIGluY2x1ZGluZyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpXG5cdFx0XHQubWFwKChzVGFyZ2V0S2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX21UYXJnZXRzW3NUYXJnZXRLZXldO1xuXHRcdFx0fSlcblx0XHRcdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgPCBiLnZpZXdMZXZlbCA/IC0xIDogMTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgodGFyZ2V0OiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gQWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cyBwZXIgbGV2ZWwgd2UgY2FuIHRoZW4gZ28gdGhyb3VnaCB0aGVpciBuYXZpZ2F0aW9uIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwYXRocyBhY2NvcmRpbmdseS5cblx0XHRcdFx0aWYgKHRhcmdldC5vcHRpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB0YXJnZXQub3B0aW9ucy5zZXR0aW5ncztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gXCIvXCIgKyBzZXR0aW5ncy5lbnRpdHlTZXQgOiBcIlwiKTtcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCAmJiBzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aCArIFwiL1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRPYmplY3Qua2V5cyhzZXR0aW5ncy5uYXZpZ2F0aW9uIHx8IHt9KS5mb3JFYWNoKChzTmF2TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0Um91dGUgPSB0aGlzLl9tUm91dGVzW3NldHRpbmdzLm5hdmlnYXRpb25bc05hdk5hbWVdLmRldGFpbC5yb3V0ZV07XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgdGFyZ2V0Um91dGUudGFyZ2V0cykge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRSb3V0ZS50YXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCF0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lICsgXCIvXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCArIHNOYXZOYW1lICsgXCIvXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyBhIHZpZXcgbGV2ZWwgZnJvbSBhIHBhdHRlcm4gYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBzZWdtZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXR0ZXJuIFRoZSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3TGV2ZWwgVGhlIGN1cnJlbnQgbGV2ZWwgb2Ygdmlld1xuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbGV2ZWxcblx0ICovXG5cdF9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybjogc3RyaW5nLCB2aWV3TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRpZiAoc1BhdHRlcm4gJiYgc1BhdHRlcm5bMF0gIT09IFwiL1wiICYmIHNQYXR0ZXJuWzBdICE9PSBcIj9cIikge1xuXHRcdFx0c1BhdHRlcm4gPSBcIi9cIiArIHNQYXR0ZXJuO1xuXHRcdH1cblx0XHRpZiAoc1BhdHRlcm4ubGVuZ3RoKSB7XG5cdFx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0dGVybikgfHwgc1BhdHRlcm4gPT09IFwiXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCArK3ZpZXdMZXZlbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sIHZpZXdMZXZlbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB2aWV3TGV2ZWw7XG5cdFx0fVxuXHR9XG5cblx0X2dldFJvdXRlSW5mb3JtYXRpb24oc1JvdXRlTmFtZTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV07XG5cdH1cblxuXHRfZ2V0VGFyZ2V0SW5mb3JtYXRpb24oc1RhcmdldE5hbWU6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IGFueSwgc0NvbXBvbmVudElkOiBhbnkpIHtcblx0XHRpZiAoc0NvbXBvbmVudElkLmluZGV4T2Yoc093bmVySWQgKyBcIi0tLVwiKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHIoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50SW5zdGFuY2UgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldFxuXHQgKi9cblx0Z2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudEluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChvQ29tcG9uZW50SW5zdGFuY2UuX3NPd25lcklkLCBvQ29tcG9uZW50SW5zdGFuY2UuZ2V0SWQoKSk7XG5cdFx0bGV0IHNDb3JyZWN0VGFyZ2V0TmFtZSA9IG51bGw7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uaWQgPT09IHNUYXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0lkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0c0NvcnJlY3RUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNDb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKSB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0bmF2aWdhdGVUbyhvQ29udGV4dDogYW55LCBzUm91dGVOYW1lOiBhbnksIG1QYXJhbWV0ZXJNYXBwaW5nOiBhbnksIGJQcmVzZXJ2ZUhpc3Rvcnk6IGFueSkge1xuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nLCBzUm91dGVOYW1lLCBvQ29udGV4dCkudGhlbigobVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNUYXJnZXRVUkxQcm9taXNlLnRoZW4oKHNUYXJnZXRVUkw6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIGJQcmVzZXJ2ZUhpc3RvcnksIGZhbHNlLCBmYWxzZSwgIWJJc1N0aWNreU1vZGUpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXR1cm4gYSBtYXAgb2Ygcm91dGluZyB0YXJnZXQgcGFyYW1ldGVycyB3aGVyZSB0aGUgYmluZGluZyBzeW50YXggaXMgcmVzb2x2ZWQgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBQYXJhbWV0ZXJzIG1hcCBpbiB0aGUgZm9ybWF0IFtrOiBzdHJpbmddIDogQ29tcGxleEJpbmRpbmdTeW50YXhcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBhbnksIHNUYXJnZXRSb3V0ZTogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGxldCBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IGFDb250ZXh0UGF0aFBhcnRzID0gc0NvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gT2JqZWN0LmtleXMobVBhcmFtZXRlcnMpLm1hcCgoc1BhcmFtZXRlcktleTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiA9IG1QYXJhbWV0ZXJzW3NQYXJhbWV0ZXJLZXldO1xuXHRcdFx0XHQvLyBXZSBhc3N1bWUgdGhlIGRlZmluZWQgcGFyYW1ldGVycyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRcdFx0XHRjb25zdCBvUGFyc2VkRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoZnVuY3Rpb24gKG9QYXRoUGFydDogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYVJlbGF0aXZlUGFydHMgPSBvUGF0aFBhcnQucGF0aC5zcGxpdChcIi4uL1wiKTtcblx0XHRcdFx0XHQvLyBXZSBnbyB1cCB0aGUgY3VycmVudCBjb250ZXh0IHBhdGggYXMgbWFueSB0aW1lcyBhcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRjb25zdCBhTG9jYWxQYXJ0cyA9IGFDb250ZXh0UGF0aFBhcnRzLnNsaWNlKDAsIGFDb250ZXh0UGF0aFBhcnRzLmxlbmd0aCAtIGFSZWxhdGl2ZVBhcnRzLmxlbmd0aCArIDEpO1xuXHRcdFx0XHRcdGFMb2NhbFBhcnRzLnB1c2goYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXG5cdFx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IChvTWV0YU1vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQoc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RQcm9wZXJ0eShzUHJvcGVydHlQYXRoKS50aGVuKGZ1bmN0aW9uIChvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IG9NZXRhQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNFZG1UeXBlID0gb1Byb3BlcnR5SW5mby4kVHlwZTtcblx0XHRcdFx0XHRcdHJldHVybiBPRGF0YVV0aWxzLmZvcm1hdExpdGVyYWwob1ZhbHVlLCBzRWRtVHlwZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbigoYVJlc29sdmVkUGFyYW1ldGVyczogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnM6IHsga2V5OiBhbnk7IHZhbHVlOiBhbnkgfVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9SZXNvbHZlZFBhcmFtZXRlcjogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9KSB7XG5cdFx0XHRcdFx0b1BhcmFtZXRlcnNbb1Jlc29sdmVkUGFyYW1ldGVyLmtleV0gPSBvUmVzb2x2ZWRQYXJhbWV0ZXIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlcnM7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgXCIgKyBzVGFyZ2V0Um91dGUpO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdH1cblxuXHRfZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0ge29iamVjdH0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgbWFwIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gW21QYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYkRlZmVycmVkQ29udGV4dF0gVGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBkZWZlcnJlZCBhdCB0aGUgdGFyZ2V0IHBhZ2Vcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbbVBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlJlY3JlYXRlQ29udGV4dF0gRm9yY2UgcmUtY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIHBhc3NlZCBhcyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29WaWV3RGF0YV0gVmlldyBkYXRhXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb0N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdG9Db250ZXh0OiBhbnksXG5cdFx0bVBhcmFtZXRlcnM6XG5cdFx0XHR8IHtcblx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0YXN5bmNDb250ZXh0PzogUHJvbWlzZTxhbnk+O1xuXHRcdFx0XHRcdGJEZWZlcnJlZENvbnRleHQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0XHR0cmFuc2llbnQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRcdFx0XHRcdG5vUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJSZWNyZWF0ZUNvbnRleHQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJGb3JjZUZvY3VzPzogYm9vbGVhbjtcblx0XHRcdFx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdFx0XHRcdFx0YkRyYWZ0TmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdFx0Yk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5PzogYm9vbGVhbjtcblx0XHRcdCAgfVxuXHRcdFx0fCB1bmRlZmluZWQsXG5cdFx0b1ZpZXdEYXRhOiBhbnkgfCB1bmRlZmluZWQsXG5cdFx0b0N1cnJlbnRUYXJnZXRJbmZvOiBhbnkgfCB1bmRlZmluZWRcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IHNUYXJnZXRSb3V0ZTogc3RyaW5nID0gXCJcIixcblx0XHRcdG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLFxuXHRcdFx0YklzU3RpY2t5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdFx0aWYgKG9Db250ZXh0LmdldE1vZGVsKCkgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy50YXJnZXRQYXRoICYmIG9WaWV3RGF0YSAmJiBvVmlld0RhdGEubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gb1ZpZXdEYXRhLm5hdmlnYXRpb25bbVBhcmFtZXRlcnMudGFyZ2V0UGF0aF0uZGV0YWlsO1xuXHRcdFx0c1RhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0b1JvdXRlUGFyYW1ldGVyc1Byb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzLCBzVGFyZ2V0Um91dGUsIG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgY29udGV4dCBpcyBkZWZlcnJlZCBvciBhc3luYywgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5hc3luY0NvbnRleHQgfHwgbVBhcmFtZXRlcnM/LmJEZWZlcnJlZENvbnRleHQpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKHNMYXlvdXQpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2xheW91dD1cIiArIHNMYXlvdXQ7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbyA9IHtcblx0XHRcdG9Bc3luY0NvbnRleHQ6IG1QYXJhbWV0ZXJzPy5hc3luY0NvbnRleHQsXG5cdFx0XHRiRGVmZXJyZWRDb250ZXh0OiBtUGFyYW1ldGVycz8uYkRlZmVycmVkQ29udGV4dCxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogbVBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogbVBhcmFtZXRlcnM/LmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHR1c2VDb250ZXh0OiBtUGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgPT09IC0xIHx8IG1QYXJhbWV0ZXJzPy5iUmVjcmVhdGVDb250ZXh0ID8gdW5kZWZpbmVkIDogb0NvbnRleHQsXG5cdFx0XHRiRHJhZnROYXZpZ2F0aW9uOiBtUGFyYW1ldGVycz8uYkRyYWZ0TmF2aWdhdGlvbixcblx0XHRcdGJTaG93UGxhY2Vob2xkZXI6IG1QYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IG1QYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0Yk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5OiBtUGFyYW1ldGVycz8uYk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5XG5cdFx0fTtcblxuXHRcdGlmIChtUGFyYW1ldGVycz8uY2hlY2tOb0hhc2hDaGFuZ2UpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBuZXcgaGFzaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHRcdGNvbnN0IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXJQcm94eS5nZXRIYXNoKCkucmVwbGFjZSgvWyY/XXsxfXNhcC1pYXBwLXN0YXRlPVtBLVowLTldKy8sIFwiXCIpO1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoID09PSBzQ3VycmVudEhhc2hOb0FwcFN0YXRlKSB7XG5cdFx0XHRcdC8vIFRoZSBoYXNoIGRvZXNuJ3QgY2hhbmdlLCBidXQgd2UgZmlyZSB0aGUgcm91dGVNYXRjaCBldmVudCB0byB0cmlnZ2VyIHBhZ2UgcmVmcmVzaCAvIGJpbmRpbmdcblx0XHRcdFx0Y29uc3QgbUV2ZW50UGFyYW1ldGVyczogYW55ID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaCh0aGlzLm9Sb3V0ZXJQcm94eS5nZXRIYXNoKCkpO1xuXHRcdFx0XHRpZiAobUV2ZW50UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhbVBhcmFtZXRlcnMuYkZvcmNlRm9jdXMpO1xuXG5cdFx0XHRcdHRoaXMuX2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1FdmVudFBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgbVBhcmFtZXRlcnMuZWRpdGFibGUgPT0gdHJ1ZSAmJiBzVGFyZ2V0UGF0aC5pbmRleE9mKFwiKC4uLilcIikgPT09IC0xKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5kZXhPZihcIj9cIikgPiAtMSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSBzdGFsZSBlcnJvciBtZXNzYWdlcyBmcm9tIExSIGFyZSBub3Qgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgbmF2aWdhdGlvbiB0byBPUC5cblx0XHRpZiAob0N1cnJlbnRUYXJnZXRJbmZvICYmIG9DdXJyZW50VGFyZ2V0SW5mby5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBvUm91dGVJbmZvID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzVGFyZ2V0UGF0aCk7XG5cdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdGlmIChvUm91dGUgJiYgb1JvdXRlLnRhcmdldHMgJiYgb1JvdXRlLnRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIG9UYXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVldWVcblx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0aWYgKHNUYXJnZXRSb3V0ZSAmJiBvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLnRoZW4oKG9Sb3V0ZVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8oc1RhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHlcblx0XHRcdC5uYXZUb0hhc2goc1RhcmdldFBhdGgsIGZhbHNlLCBtUGFyYW1ldGVycz8ubm9QcmVzZXJ2YXRpb25DYWNoZSwgbVBhcmFtZXRlcnM/LmJGb3JjZUZvY3VzLCAhYklzU3RpY2t5TW9kZSlcblx0XHRcdC50aGVuKChiTmF2aWdhdGVkOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCFiTmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucG9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmcjbmF2aWdhdGVUb1JvdXRlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHQvLyBGaXJzdCwgY2hlY2sgd2l0aCB0aGUgdGVjaG5pY2FsIHBhdGguIFdlIGhhdmUgdG8gdHJ5IGl0LCBiZWNhdXNlIGZvciBsZXZlbCA+IDEsIHdlXG5cdFx0Ly8gdXNlcyB0ZWNobmljYWwga2V5cyBldmVuIGlmIFNlbWFudGljIGtleXMgYXJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICgvXlteXFwoXFwpXStcXChbXlxcKFxcKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IGFueSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW15cXChdK1xcKFteXFwpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0aWYgKCFTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc0VudGl0eVNldE5hbWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayB0aGUgZW50aXR5IGlzIGRyYWZ0LWVuYWJsZWRcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdH1cblxuXHRfZ2V0UGF0aEZyb21Db250ZXh0KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRsZXQgc1BhdGg7XG5cblx0XHRpZiAob0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikgJiYgb0NvbnRleHQuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldEhlYWRlckNvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdHNQYXRoID0gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyAmJiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQpKSB7XG5cdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQsIHRydWUpO1xuXG5cdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0Ly8gY2xlYXIgdGhlIHByZXZpb3VzIG1hcHBpbmcsIG90aGVyd2lzZSB0aGUgb2xkIG1hcHBpbmcgaXMgdXNlZCBpbiBFZGl0RmxvdyN1cGRhdGVEb2N1bWVudFxuXHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0fSBlbHNlIGlmIChzU2VtYW50aWNQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHsgdGVjaG5pY2FsUGF0aDogc1BhdGgsIHNlbWFudGljUGF0aDogc1NlbWFudGljUGF0aCB9KTtcblx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChzUGF0aDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bGV0IEZDTExldmVsID0gbVBhcmFtZXRlcnMuRkNMTGV2ZWw7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuY2FsY3VsYXRlTGF5b3V0KFxuXHRcdFx0RkNMTGV2ZWwsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG1QYXJhbWV0ZXJzLnNMYXlvdXQsXG5cdFx0XHRtUGFyYW1ldGVycy5rZWVwQ3VycmVudExheW91dFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBiZWZvcmUgYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBEaXNwbGF5cyBhIGJ1c3kgaW5kaWNhdG9yLlxuXHQgKlxuXHQgKi9cblx0X2JlZm9yZVJvdXRlTWF0Y2hlZCgvKm9FdmVudDogRXZlbnQqLykge1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQpIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLmJSZWFzb25Jc0lhcHBTdGF0ZSA9IHRydWU7XG5cdFx0XHRvQXBwU3RhdGVIYW5kbGVyLnJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIWhpc3Rvcnkuc3RhdGUgfHwgaGlzdG9yeS5zdGF0ZS5mZUxldmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5yZXN0b3JlSGlzdG9yeSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVkKG9EYXRhOiBhbnksIGZuRnVuY3Rpb24/OiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRkZXRhY2hSb3V0ZU1hdGNoZWQoZm5GdW5jdGlvbjogYW55LCBvTGlzdGVuZXI/OiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogYW55LCBmbkZ1bmN0aW9uOiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IGFueSwgb0xpc3RlbmVyOiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0Z2V0Um91dGVGcm9tSGFzaChvUm91dGVyOiBhbnksIG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IHNIYXNoID0gb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmhhc2g7XG5cdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IG9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldE1ldGFkYXRhKClcblx0XHRcdC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvcm91dGluZy9yb3V0ZXNcIilcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Sb3V0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUm91dGUubmFtZSA9PT0gb1JvdXRlSW5mby5uYW1lO1xuXHRcdFx0fSlbMF07XG5cdH1cblx0Z2V0VGFyZ2V0c0Zyb21Sb3V0ZShvUm91dGU6IGFueSkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvUm91dGUudGFyZ2V0O1xuXHRcdGlmICh0eXBlb2Ygb1RhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIFt0aGlzLl9tVGFyZ2V0c1tvVGFyZ2V0XV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFUYXJnZXQ6IGFueVtdID0gW107XG5cdFx0XHRvVGFyZ2V0LmZvckVhY2goKHNUYXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHRhVGFyZ2V0LnB1c2godGhpcy5fbVRhcmdldHNbc1RhcmdldF0pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYVRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpbml0aWFsaXplUm91dGluZygpIHtcblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5kZXhPZihcInNhcC1pYXBwLXN0YXRlXCIpICE9PSAtMTtcblx0XHRjb25zdCBpbml0UHJvbWlzZSA9IHRoaXMub0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKClcblx0XHRcdC50aGVuKChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0XHRcdC8vIE1hbmFnZSBzdGFydHVwIHBhcmFtZXRlcnMgKGluIGNhc2Ugb2Ygbm8gaWFwcC1zdGF0ZSlcblx0XHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS5pbmRleE9mKFwiY3JlYXRlXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIG1vZGVcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIERlZXAgbGlua1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuX21hbmFnZURlZXBMaW5rU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGluaXRQcm9taXNlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogYW55KSB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKHNOZXdIYXNoKTtcblx0XHRcdFx0XHR0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWVwTGlua1N0YXJ0dXBIYXNoKFxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpIGFzIGFueSlbXCJzYXAudWk1XCJdLnJvdXRpbmcsXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMsXG5cdFx0XHR0aGlzLm9Nb2RlbFxuXHRcdCkudGhlbigob0RlZXBMaW5rOiBhbnkpID0+IHtcblx0XHRcdGxldCBzSGFzaDtcblx0XHRcdGlmIChvRGVlcExpbmsuY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzVGVjaG5pY2FsUGF0aCA9IG9EZWVwTGluay5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkoc0hhc2gpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCkge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCkge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBuZXcgUm91dGluZ1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1JvdXRpbmdTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==