@sapui5/sap.fe.core 1.102.2 → 1.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,19 +2,19 @@
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/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/helpers/BindingExpression", "../controls/Common/DataVisualization", "../controls/Common/KPI", "../helpers/ID", "../ManifestSettings"], function (Action, FilterBar, ConfigurableObject, BindingExpression, DataVisualization, KPI, ID, ManifestSettings) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/helpers/BindingToolkit", "../controls/Common/DataVisualization", "../controls/Common/KPI", "../helpers/ID", "../ManifestSettings"], function (Action, FilterBar, ConfigurableObject, BindingToolkit, DataVisualization, KPI, ID, ManifestSettings) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var VisualizationType = ManifestSettings.VisualizationType;
10
10
  var VariantManagementType = ManifestSettings.VariantManagementType;
11
11
  var TemplateType = ManifestSettings.TemplateType;
12
- var TableID = ID.TableID;
13
- var IconTabBarID = ID.IconTabBarID;
14
- var FilterVariantManagementID = ID.FilterVariantManagementID;
15
- var FilterBarID = ID.FilterBarID;
16
- var CustomTabID = ID.CustomTabID;
17
- var ChartID = ID.ChartID;
12
+ var getTableID = ID.getTableID;
13
+ var getIconTabBarID = ID.getIconTabBarID;
14
+ var getFilterVariantManagementID = ID.getFilterVariantManagementID;
15
+ var getFilterBarID = ID.getFilterBarID;
16
+ var getCustomTabID = ID.getCustomTabID;
17
+ var getChartID = ID.getChartID;
18
18
  var getKPIDefinitions = KPI.getKPIDefinitions;
19
19
  var isSelectionPresentationCompliant = DataVisualization.isSelectionPresentationCompliant;
20
20
  var isPresentationCompliant = DataVisualization.isPresentationCompliant;
@@ -24,8 +24,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
24
24
  var getDefaultLineItem = DataVisualization.getDefaultLineItem;
25
25
  var getDefaultChart = DataVisualization.getDefaultChart;
26
26
  var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
27
- var compileBinding = BindingExpression.compileBinding;
28
- var annotationExpression = BindingExpression.annotationExpression;
27
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
28
+ var compileExpression = BindingToolkit.compileExpression;
29
29
  var insertCustomElements = ConfigurableObject.insertCustomElements;
30
30
  var getSelectionFields = FilterBar.getSelectionFields;
31
31
  var getManifestFilterFields = FilterBar.getManifestFilterFields;
@@ -48,8 +48,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
48
48
 
49
49
  /**
50
50
  * Retrieves all list report tables.
51
- * @param {ListReportViewDefinition[]} views The list report views configured in the manifest
52
- * @returns {TableVisualization[]} The list report table
51
+ *
52
+ * @param views The list report views configured in the manifest
53
+ * @returns The list report table
53
54
  */
54
55
  function getTableVisualizations(views) {
55
56
  var tables = [];
@@ -99,10 +100,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
99
100
  /**
100
101
  * Find a visualization annotation that can be used for rendering the list report.
101
102
  *
102
- * @param {EntityType} entityType The current EntityType
103
+ * @param entityType The current EntityType
103
104
  * @param converterContext
104
105
  * @param bIsALP
105
- * @returns {LineItem | PresentationVariantTypeTypes | undefined} A compliant annotation for rendering the list report
106
+ * @returns A compliant annotation for rendering the list report
106
107
  */
107
108
 
108
109
 
@@ -167,14 +168,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
167
168
  var title = "";
168
169
  var selectionVariantPath = "";
169
170
 
170
- var isMultipleViewConfiguration = function (config) {
171
- return config.key !== undefined;
171
+ var isMultipleViewConfiguration = function (currentConfig) {
172
+ return currentConfig.key !== undefined;
172
173
  };
173
174
 
174
- var createVisualization = function (presentation, isPrimary) {
175
+ var createVisualization = function (currentPresentation, isPrimary) {
175
176
  var defaultVisualization;
176
177
 
177
- var _iterator = _createForOfIteratorHelper(presentation.visualizations),
178
+ var _iterator = _createForOfIteratorHelper(currentPresentation.visualizations),
178
179
  _step;
179
180
 
180
181
  try {
@@ -197,7 +198,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
197
198
  _iterator.f();
198
199
  }
199
200
 
200
- var presentationCreated = Object.assign({}, presentation);
201
+ var presentationCreated = Object.assign({}, currentPresentation);
201
202
 
202
203
  if (defaultVisualization) {
203
204
  presentationCreated.visualizations = [defaultVisualization];
@@ -261,7 +262,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
261
262
  var resolvedTarget = converterContext.getEntityTypeAnnotation(config.annotationPath);
262
263
  var viewAnnotation = resolvedTarget.annotation;
263
264
  converterContext = resolvedTarget.converterContext;
264
- title = compileBinding(annotationExpression(viewAnnotation.Text)); // Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
265
+ title = compileExpression(getExpressionFromAnnotation(viewAnnotation.Text)); // Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
265
266
 
266
267
  presentation.visualizations.forEach(function (visualizationDefinition, index) {
267
268
  switch (visualizationDefinition.type) {
@@ -272,9 +273,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
272
273
  paths: []
273
274
  };
274
275
 
275
- if (!config.keepPreviousPresonalization) {
276
+ if (!config.keepPreviousPersonalization) {
276
277
  // Need to override Table Id to match with Tab Key (currently only table is managed in multiple view mode)
277
- tableVisualization.annotation.id = TableID(config.key || "", "LineItem");
278
+ tableVisualization.annotation.id = getTableID(config.key || "", "LineItem");
278
279
  }
279
280
 
280
281
  config = config;
@@ -298,7 +299,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
298
299
 
299
300
  case VisualizationType.Chart:
300
301
  var chartVisualization = presentation.visualizations[index];
301
- chartVisualization.id = ChartID(config.key || "", "Chart");
302
+ chartVisualization.id = getChartID(config.key || "", "Chart");
302
303
  chartVisualization.multiViews = true;
303
304
  break;
304
305
 
@@ -330,7 +331,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
330
331
  var _title = config.label,
331
332
  fragment = config.template,
332
333
  type = config.type,
333
- customTabId = CustomTabID(config.key || ""),
334
+ customTabId = getCustomTabID(config.key || ""),
334
335
  _visible2 = config.visible;
335
336
  return {
336
337
  title: _title,
@@ -371,7 +372,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
371
372
  } else {
372
373
  path = path;
373
374
  var manifestWrapper = converterContext.getManifestWrapper(),
374
- viewConverterContext = converterContext.getConverterContextFor(path.contextPath || path.entitySet && "/" + path.entitySet || converterContext.getContextPath()),
375
+ viewConverterContext = converterContext.getConverterContextFor(path.contextPath || path.entitySet && "/".concat(path.entitySet) || converterContext.getContextPath()),
375
376
  entityType = viewConverterContext.getEntityType();
376
377
 
377
378
  if (entityType && viewConverterContext) {
@@ -396,7 +397,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
396
397
  converterContext: viewConverterContext,
397
398
  annotation: annotation,
398
399
  annotationPath: path.annotationPath,
399
- keepPreviousPresonalization: path.keepPreviousPresonalization,
400
+ keepPreviousPersonalization: path.keepPreviousPersonalization,
400
401
  key: path.key,
401
402
  visible: path.visible
402
403
  });
@@ -423,6 +424,21 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
423
424
  });
424
425
  };
425
426
 
427
+ var getMultiViewsControl = function (converterContext, views) {
428
+ var manifestWrapper = converterContext.getManifestWrapper();
429
+ var viewsDefinition = manifestWrapper.getViewConfiguration();
430
+
431
+ if (views.length > 1 && !hasMultiVisualizations(converterContext)) {
432
+ return {
433
+ showTabCounts: viewsDefinition ? (viewsDefinition === null || viewsDefinition === void 0 ? void 0 : viewsDefinition.showCounts) || manifestWrapper.hasMultipleEntitySets() : undefined,
434
+ // with multi EntitySets, tab counts are displayed by default
435
+ id: getIconTabBarID()
436
+ };
437
+ }
438
+
439
+ return undefined;
440
+ };
441
+
426
442
  function getAlpViewConfig(converterContext, viewConfigs) {
427
443
  var entityType = converterContext.getEntityType();
428
444
  var annotation = getCompliantVisualizationAnnotation(entityType, converterContext, true);
@@ -456,6 +472,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
456
472
  return viewConfigs;
457
473
  }
458
474
 
475
+ function hasMultiVisualizations(converterContext) {
476
+ return converterContext.getManifestWrapper().hasMultipleVisualizations() || converterContext.getTemplateType() === TemplateType.AnalyticalListPage;
477
+ }
478
+
459
479
  var getHeaderActions = function (converterContext) {
460
480
  var manifestWrapper = converterContext.getManifestWrapper();
461
481
  return insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext));
@@ -479,7 +499,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
479
499
  * Creates the ListReportDefinition for multiple entity sets (multiple table mode).
480
500
  *
481
501
  * @param converterContext The converter context
482
- * @returns {ListReportDefinition} The list report definition based on annotation + manifest
502
+ * @returns The list report definition based on annotation + manifest
483
503
  */
484
504
 
485
505
 
@@ -498,8 +518,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
498
518
  var viewsDefinition = manifestWrapper.getViewConfiguration();
499
519
  var hasMultipleEntitySets = manifestWrapper.hasMultipleEntitySets();
500
520
  var views = getViews(converterContext, viewsDefinition);
501
- var showTabCounts = viewsDefinition ? (viewsDefinition === null || viewsDefinition === void 0 ? void 0 : viewsDefinition.showCounts) || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
502
-
503
521
  var lrTableVisualizations = getTableVisualizations(views);
504
522
  var lrChartVisualizations = getChartVisualizations(views);
505
523
  var showPinnableToggle = lrTableVisualizations.some(function (table) {
@@ -507,8 +525,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
507
525
  });
508
526
  var singleTableId = "";
509
527
  var singleChartId = "";
510
- var filterBarId = FilterBarID(sContextPath);
511
- var filterVariantManagementID = FilterVariantManagementID(filterBarId);
528
+ var filterBarId = getFilterBarID(sContextPath);
529
+ var filterVariantManagementID = getFilterVariantManagementID(filterBarId);
512
530
  var fbConfig = manifestWrapper.getFilterConfiguration();
513
531
  var filterInitialLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout.toLowerCase() : "compact";
514
532
  var filterLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout.toLowerCase() : "compact";
@@ -531,7 +549,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
531
549
  var defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {}; // Sort header actions according to position attributes in manifest
532
550
 
533
551
  var headerActions = getHeaderActions(converterContext);
534
- var hasMultiVisualizations = manifestWrapper.hasMultipleVisualizations() || converterContext.getTemplateType() === TemplateType.AnalyticalListPage;
552
+ var multiViewControl = getMultiViewsControl(converterContext, views);
535
553
 
536
554
  if (hasMultipleEntitySets) {
537
555
  checkChartFilterBarId(views, filterBarId);
@@ -542,19 +560,15 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
542
560
  }).concat(lrChartVisualizations.map(function (visualization) {
543
561
  return visualization.id;
544
562
  }));
545
- var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : []));
546
- var iconTabBarId = "fe::TabMultipleMode";
547
- var displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
548
- var stickySubheaderProvider = displayMultiVisualizations && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? iconTabBarId : undefined;
563
+ var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(multiViewControl ? [multiViewControl.id] : []));
564
+ var stickySubheaderProvider = multiViewControl && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? multiViewControl.id : undefined;
549
565
  return {
550
566
  mainEntitySet: sContextPath,
551
- mainEntityType: sContextPath + "/",
552
- displayMultiVisualizations: displayMultiVisualizations,
553
- iconTabBarId: iconTabBarId,
567
+ mainEntityType: "".concat(sContextPath, "/"),
568
+ multiViewsControl: multiViewControl,
554
569
  stickySubheaderProvider: stickySubheaderProvider,
555
570
  singleTableId: singleTableId,
556
571
  singleChartId: singleChartId,
557
- showTabCounts: showTabCounts,
558
572
  headerActions: headerActions,
559
573
  showPinnableToggle: showPinnableToggle,
560
574
  filterBar: {
@@ -572,8 +586,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
572
586
  id: filterVariantManagementID,
573
587
  targetControlIds: targetControlIds.join(",")
574
588
  },
575
- isMultiEntitySets: hasMultipleEntitySets,
576
- hasMultiVisualizations: hasMultiVisualizations,
589
+ hasMultiVisualizations: hasMultiVisualizations(converterContext),
577
590
  templateType: manifestWrapper.getTemplateType(),
578
591
  useSemanticDateRange: useSemanticDateRange,
579
592
  filterInitialLayout: filterInitialLayout,
@@ -649,4 +662,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
649
662
 
650
663
  return _exports;
651
664
  }, false);
652
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwia2V5IiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsInZpc2libGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInZpZXdBbm5vdGF0aW9uIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24iLCJUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsIkNoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiRmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJJY29uVGFiQmFySUQiLCJpY29uVGFiQmFySWQiLCJkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyIsInN0aWNreVN1YmhlYWRlclByb3ZpZGVyIiwiZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsImlzTXVsdGlFbnRpdHlTZXRzIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTQSxzQkFBVCxDQUFnQ0MsS0FBaEMsRUFBeUY7QUFDeEYsUUFBTUMsTUFBNEIsR0FBRyxFQUFyQztBQUNBRCxJQUFBQSxLQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFVQyxJQUFWLEVBQWdCO0FBQzdC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QUEwRTtBQUN6RXVGLFlBQUFBLGFBQWEsR0FBSXRJLE1BQUQsQ0FBb0MrQyxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUksQ0FBQ3dGLGFBQUQsSUFBbUJ2SSxNQUFELENBQW9DZ0QsY0FBMUQsRUFBMEU7QUFDekV1RixZQUFBQSxhQUFhLEdBQUl2SSxNQUFELENBQW9DZ0QsY0FBcEMsSUFBc0QsRUFBdEU7QUFDQTs7QUFDRCxjQUFJdUYsYUFBYSxJQUFJRCxhQUFyQixFQUFvQztBQUNuQztBQUNBO0FBQ0Q7QUFaSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYU47O0FBQ0QsUUFBSUEsYUFBYSxJQUFJQyxhQUFyQixFQUFvQztBQUNuQyxhQUFPO0FBQ05jLFFBQUFBLE9BQU8sRUFBRWQsYUFESDtBQUVOZSxRQUFBQSxPQUFPLEVBQUVoQjtBQUZILE9BQVA7QUFJQTs7QUFDRCxXQUFPcEcsU0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IEJhc2VBY3Rpb24sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0Q3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLFxuXHRGaWx0ZXJGaWVsZCxcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgZ2V0S1BJRGVmaW5pdGlvbnMsIEtQSURlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHsgQ2hhcnRJRCwgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBJY29uVGFiQmFySUQsIFRhYmxlSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0ZGlzcGxheU11bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdGljb25UYWJCYXJJZDogc3RyaW5nO1xuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZTtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG5cdGhpZGVGaWx0ZXJCYXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVmlld0RlZmluaXRpb24gPSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHRjaGFydENvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICogQHBhcmFtIHtMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXX0gdmlld3MgVGhlIGxpc3QgcmVwb3J0IHZpZXdzIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyB7VGFibGVWaXN1YWxpemF0aW9uW119IFRoZSBsaXN0IHJlcG9ydCB0YWJsZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiSXNBTFBcbiAqIEByZXR1cm5zIHtMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJJc0FMUDogQm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uICh2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0bGV0IGNvbmZpZyA9IHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uO1xuXHRpZiAoY29uZmlnLmNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRsZXQgY29udmVydGVyQ29udGV4dCA9IGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0bGV0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0Y29uZmlnLmFubm90YXRpb25cblx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoY29uZmlnLmFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0KTtcblx0XHRsZXQgdGFibGVDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCBjaGFydENvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGNvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZVZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbiAocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRcdFx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoaXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oaXRlbS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdFx0YW5ub3RhdGlvblxuXHRcdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pLmlkO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihcblx0XHRcdFx0cHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVDb250cm9sSWQgPSAoc2Vjb25kYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKS5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0aWYgKHByaW1hcnlWaXN1YWxpemF0aW9uICYmIHNlY29uZGFyeVZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9IGNvbmZpZy52aXNpYmxlO1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRcdFx0XHRcdHByaW1hcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHNlY29uZGFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHRcdFx0ZGVmYXVsdFBhdGgsXG5cdFx0XHRcdFx0dmlzaWJsZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRpZiAocHJpbWFyeSAmJiBwcmltYXJ5Lmxlbmd0aCAmJiBzZWNvbmRhcnkgJiYgc2Vjb25kYXJ5Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0UHJlc2VudGF0aW9uKHByaW1hcnlbMF0pLCBnZXRQcmVzZW50YXRpb24oc2Vjb25kYXJ5WzBdKV0sXG5cdFx0XHRcdFx0KGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuZGVmYXVsdFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKGNvbmZpZykpIHtcblx0XHRcdC8vIGtleSBleGlzdHMgb25seSBvbiBtdWx0aSB0YWJsZXMgbW9kZVxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2aWV3QW5ub3RhdGlvbjogVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChcblx0XHRcdFx0XHRcdFx0XHRjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG5cdFx0XHRcdFx0XHRcdCkuU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gQ2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoLFxuXHRcdFx0dmlzaWJsZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIiksXG5cdFx0XHR2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIFwiL1wiICsgcGF0aC5lbnRpdHlTZXQpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCgodmlld0NvbnZlcnRlckNvbmZpZykgPT4ge1xuXHRcdHJldHVybiBnZXRWaWV3KHZpZXdDb252ZXJ0ZXJDb25maWcpO1xuXHR9KTtcbn07XG5cbmZ1bmN0aW9uIGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiBjaGFydC50ZXJtIH1dO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiB0YWJsZS50ZXJtIH1dO1xuXHRcdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHByaW1hcnk6IHByaW1hcnksXG5cdFx0XHRcdHNlY29uZGFyeTogc2Vjb25kYXJ5LFxuXHRcdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbmZpZ3M7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uICh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgJiYgdmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgIT09IGZpbHRlckJhcklkKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgPSBmaWx0ZXJCYXJJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIG11bHRpcGxlIGVudGl0eSBzZXRzIChtdWx0aXBsZSB0YWJsZSBtb2RlKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtMaXN0UmVwb3J0RGVmaW5pdGlvbn0gVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IHNob3dUYWJDb3VudHMgPSB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgaGFzTXVsdGlwbGVFbnRpdHlTZXRzIDogdW5kZWZpbmVkOyAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBsckNoYXJ0VmlzdWFsaXphdGlvbnMgPSBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3Qgc2hvd1Bpbm5hYmxlVG9nZ2xlID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zLnNvbWUoKHRhYmxlKSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZmlsdGVySW5pdGlhbExheW91dCA9IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8uaW5pdGlhbExheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IGZpbHRlckxheW91dCA9IGZiQ29uZmlnPy5sYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5sYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZSA9IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSA6IHRydWU7XG5cblx0Y29uc3Qgb0NvbmZpZyA9IGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dCwgdmlld3MpO1xuXHRpZiAob0NvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBvQ29uZmlnLmNoYXJ0SWQ7XG5cdFx0c2luZ2xlVGFibGVJZCA9IG9Db25maWcudGFibGVJZDtcblx0fVxuXG5cdC8vIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG5cdC8vIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cblx0Y29uc3QgaGlkZUZpbHRlckJhciA9IG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmIHNpbmdsZUNoYXJ0SWQgPT09IFwiXCI7XG5cdGNvbnN0IGxyRmlsdGVyUHJvcGVydGllcyA9IGdldFNlbGVjdGlvbkZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlVmlzdWFsaXphdGlvbnMpO1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc2VsZWN0aW9uRmllbGRzO1xuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc1Byb3BlcnR5SW5mbztcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoKGxyVGFibGVWaXN1YWxpemF0aW9ucywgbHJDaGFydFZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzID0gdXNlU2VtYW50aWNEYXRlUmFuZ2UgPyBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyhnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSkgOiB7fTtcblxuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25JZHMgPSBsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdH0pXG5cdFx0LmNvbmNhdChcblx0XHRcdGxyQ2hhcnRWaXN1YWxpemF0aW9ucy5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbXG5cdFx0Li4uKGhpZGVGaWx0ZXJCYXIgPyBbXSA6IFtmaWx0ZXJCYXJJZF0pLFxuXHRcdC4uLihtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKSAhPT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB2aXN1YWxpemF0aW9uSWRzIDogW10pLFxuXHRcdC4uLighaGFzTXVsdGlWaXN1YWxpemF0aW9ucyAmJiB2aWV3cy5sZW5ndGggPiAxID8gW0ljb25UYWJCYXJJRCgpXSA6IFtdKVxuXHRdO1xuXG5cdGNvbnN0IGljb25UYWJCYXJJZCA9IFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiO1xuXHRjb25zdCBkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyA9IHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnM7XG5cdGNvbnN0IHN0aWNreVN1YmhlYWRlclByb3ZpZGVyID1cblx0XHRkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBpY29uVGFiQmFySWQgOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHtcblx0XHRtYWluRW50aXR5U2V0OiBzQ29udGV4dFBhdGgsXG5cdFx0bWFpbkVudGl0eVR5cGU6IHNDb250ZXh0UGF0aCArIFwiL1wiLFxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdGljb25UYWJCYXJJZCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
665
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3VycmVudENvbmZpZyIsImtleSIsImNyZWF0ZVZpc3VhbGl6YXRpb24iLCJjdXJyZW50UHJlc2VudGF0aW9uIiwiaXNQcmltYXJ5IiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0UHJlc2VudGF0aW9uIiwiaXRlbSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiY3JlYXRlQWxwVmlldyIsInByZXNlbnRhdGlvbnMiLCJkZWZhdWx0UGF0aCIsImlkIiwidmlzaWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24iLCJnZXRUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsImdldE11bHRpVmlld3NDb250cm9sIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwic2hvd1RhYkNvdW50cyIsInNob3dDb3VudHMiLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJnZXRJY29uVGFiQmFySUQiLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZ2V0RmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJtdWx0aVZpZXdDb250cm9sIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJzdGlja3lTdWJoZWFkZXJQcm92aWRlciIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsIm1haW5FbnRpdHlTZXQiLCJtYWluRW50aXR5VHlwZSIsIm11bHRpVmlld3NDb250cm9sIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTQSxzQkFBVCxDQUFnQ0MsS0FBaEMsRUFBeUY7QUFDeEYsUUFBTUMsTUFB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Q0FBQ2dELGNBQUwsSUFBdUJoRCxJQUFJLENBQUMrQyxjQUFoQyxFQUFnRDtBQUMvQzZGLFlBQUFBLGFBQWEsR0FBRzVJLElBQUksQ0FBQ2dELGNBQXJCO0FBQ0EyRixZQUFBQSxhQUFhLEdBQUczSSxJQUFJLENBQUMrQyxjQUFyQjtBQUNBO0FBQ0E7QUFDRDtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTRCxLQVpELE1BWU87QUFBQSxrREFDV2xELEtBRFg7QUFBQTs7QUFBQTtBQUNOLCtEQUF3QjtBQUFBLGNBQWZHLE1BQWU7QUFDdkJBLFVBQUFBLE1BQUksR0FBR0EsTUFBUDs7QUFDQSxjQUFJLENBQUMySSxhQUFELElBQW1CM0ksTUFBRCxDQUFvQytDLGNBQTFELEVBQTBFO0FBQ3pFNEYsWUFBQUEsYUFBYSxHQUFJM0ksTUFBRCxDQUFvQytDLGNBQXBDLElBQXNELEVBQXRFO0FBQ0E7O0FBQ0QsY0FBSSxDQUFDNkYsYUFBRCxJQUFtQjVJLE1BQUQsQ0FBb0NnRCxjQUExRCxFQUEwRTtBQUN6RTRGLFlBQUFBLGFBQWEsR0FBSTVJLE1BQUQsQ0FBb0NnRCxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUk0RixhQUFhLElBQUlELGFBQXJCLEVBQW9DO0FBQ25DO0FBQ0E7QUFDRDtBQVpLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhTjs7QUFDRCxRQUFJQSxhQUFhLElBQUlDLGFBQXJCLEVBQW9DO0FBQ25DLGFBQU87QUFDTmMsUUFBQUEsT0FBTyxFQUFFZCxhQURIO0FBRU5lLFFBQUFBLE9BQU8sRUFBRWhCO0FBRkgsT0FBUDtBQUlBOztBQUNELFdBQU96RyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLCBGaWx0ZXJGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRTZWxlY3Rpb25GaWVsZHNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsIERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLUElEZWZpbml0aW9uIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IGdldEtQSURlZmluaXRpb25zIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IGdldENoYXJ0SUQsIGdldEN1c3RvbVRhYklELCBnZXRGaWx0ZXJCYXJJRCwgZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCwgZ2V0SWNvblRhYkJhcklELCBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWYXJpYW50TWFuYWdlbWVudFR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxudHlwZSBWaWV3QW5ub3RhdGlvbnMgPSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uVmFyaWFudDtcbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gJiB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiA9IHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uID0gQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiAmIHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xudHlwZSBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb247XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gVmlld0NvbmZpZ3VyYXRpb24gJiB7XG5cdGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxudHlwZSBEZWZhdWx0U2VtYW50aWNEYXRlID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0bXVsdGlWaWV3c0NvbnRyb2w/OiBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb247IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcblx0aGlkZUZpbHRlckJhcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHR0YWJsZUNvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdHRhYmxlcy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENoYXJ0VmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgY2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGNoYXJ0cy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY2hhcnRzO1xufVxuXG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG5cbi8qKlxuICogRmluZCBhIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gYklzQUxQXG4gKiBAcmV0dXJucyBBIGNvbXBsaWFudCBhbm5vdGF0aW9uIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRiSXNBTFA6IEJvb2xlYW5cbik6IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJQVkNvbXBsYWludCA9IGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudCk7XG5cdFx0aWYgKCFiUFZDb21wbGFpbnQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlKTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICghYklzQUxQKSB7XG5cdFx0Y29uc3QgZGVmYXVsdExpbmVJdGVtID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChkZWZhdWx0TGluZUl0ZW0pIHtcblx0XHRcdHJldHVybiBkZWZhdWx0TGluZUl0ZW07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGdldFZpZXcgPSBmdW5jdGlvbiAodmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb246IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiB7XG5cdGxldCBjb25maWcgPSB2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjtcblx0aWYgKGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0bGV0IGNvbnZlcnRlckNvbnRleHQgPSBjb25maWcuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdCk7XG5cdFx0bGV0IHRhYmxlQ29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgY2hhcnRDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50Q29uZmlnOiBWaWV3Q29uZmlndXJhdGlvbik6IGN1cnJlbnRDb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGN1cnJlbnRDb25maWcgYXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbikua2V5ICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRQcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbikge1xuXHRcdFx0bGV0IGRlZmF1bHRWaXN1YWxpemF0aW9uO1xuXHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGN1cnJlbnRQcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50UHJlc2VudGF0aW9uKTtcblx0XHRcdGlmIChkZWZhdWx0VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRwcmVzZW50YXRpb25DcmVhdGVkLnZpc3VhbGl6YXRpb25zID0gW2RlZmF1bHRWaXN1YWxpemF0aW9uXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25DcmVhdGVkO1xuXHRcdH07XG5cdFx0Y29uc3QgZ2V0UHJlc2VudGF0aW9uID0gZnVuY3Rpb24gKGl0ZW06IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGl0ZW0uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdGFubm90YXRpb25cblx0XHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbjtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZUFscFZpZXcgPSBmdW5jdGlvbiAoXG5cdFx0XHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdFx0XHRjaGFydENvbnRyb2xJZCA9IChwcmltYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uKS5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlQ29udHJvbElkID0gKHNlY29uZGFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbikuYW5ub3RhdGlvbi5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdHZpc2libGVcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAocHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucz8ubGVuZ3RoID09PSAyICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIik7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHx8XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0aWYgKHByaW1hcnkgJiYgcHJpbWFyeS5sZW5ndGggJiYgc2Vjb25kYXJ5ICYmIHNlY29uZGFyeS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldFByZXNlbnRhdGlvbihwcmltYXJ5WzBdKSwgZ2V0UHJlc2VudGF0aW9uKHNlY29uZGFyeVswXSldLFxuXHRcdFx0XHRcdChjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmRlZmF1bHRQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlY29uZGFyeUl0ZW1zIGluIHRoZSBWaWV3cyBpcyBub3QgcHJlc2VudFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbihjb25maWcpKSB7XG5cdFx0XHQvLyBrZXkgZXhpc3RzIG9ubHkgb24gbXVsdGkgdGFibGVzIG1vZGVcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbigoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgdmlld0Fubm90YXRpb246IFZpZXdBbm5vdGF0aW9ucyA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb247XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZpZXdBbm5vdGF0aW9uLlRleHQpKTtcblx0XHRcdC8vIE5lZWQgdG8gbG9vcCBvbiB0YWJsZSBpbnRvIHZpZXdzIHNpbmNlIG11bHRpIHRhYmxlIG1vZGUgZ2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKGhpZGRlbiBmaWx0ZXJzIG9yIFRhYmxlIElkKVxuXHRcdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlOlxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBUYWJsZVZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyB8fCB7fTtcblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IGZpbHRlcnMuaGlkZGVuRmlsdGVycyB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0XHRcdFx0aWYgKCEoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdC8vIE5lZWQgdG8gb3ZlcnJpZGUgVGFibGUgSWQgdG8gbWF0Y2ggd2l0aCBUYWIgS2V5IChjdXJyZW50bHkgb25seSB0YWJsZSBpcyBtYW5hZ2VkIGluIG11bHRpcGxlIHZpZXcgbW9kZSlcblx0XHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQgPSBnZXRUYWJsZUlEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJMaW5lSXRlbVwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0XHRpZiAoY29uZmlnICYmIGNvbmZpZy5hbm5vdGF0aW9uICYmIGNvbmZpZy5hbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb25maWcuYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0XHRcdFx0XHQvL01EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHRcdFx0XHRcdC8vYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdFx0XHRcdFx0Ly9UbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgcmVsYXRlZCB0byB0aGUgVGFiIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRcdFx0XHRcdFx0Ly9jYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycy5wYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvblZhcmlhbnRQYXRoIH0pO1xuXHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyA9IGZpbHRlcnM7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24uaWQgPSBnZXRDaGFydElEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0XHRcdGNoYXJ0VmlzdWFsaXphdGlvbi5tdWx0aVZpZXdzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHRcdH0gZWxzZSBpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0Y2hhcnRDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5pZDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJlc2VudGF0aW9uLFxuXHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdHRpdGxlLFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGgsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gZ2V0Q3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKSxcblx0XHRcdHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCxcblx0XHRcdHZpc2libGVcblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c2V0dGluZ3NWaWV3czogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRpZiAoc2V0dGluZ3NWaWV3cykge1xuXHRcdHNldHRpbmdzVmlld3MucGF0aHMuZm9yRWFjaCgocGF0aDogVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0aWYgKHNldHRpbmdzVmlld3MucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoKHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24pLnRlbXBsYXRlKSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFwiQ3VzdG9tXCIsXG5cdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0cGF0aC5jb250ZXh0UGF0aCB8fCAocGF0aC5lbnRpdHlTZXQgJiYgYC8ke3BhdGguZW50aXR5U2V0fWApIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCgodmlld0NvbnZlcnRlckNvbmZpZykgPT4ge1xuXHRcdHJldHVybiBnZXRWaWV3KHZpZXdDb252ZXJ0ZXJDb25maWcpO1xuXHR9KTtcbn07XG5cbmNvbnN0IGdldE11bHRpVmlld3NDb250cm9sID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW11cbik6IE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0aWYgKHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hvd1RhYkNvdW50czogdmlld3NEZWZpbml0aW9uID8gdmlld3NEZWZpbml0aW9uPy5zaG93Q291bnRzIHx8IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSA6IHVuZGVmaW5lZCwgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRcdFx0aWQ6IGdldEljb25UYWJCYXJJRCgpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZnVuY3Rpb24gaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uICh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgJiYgdmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgIT09IGZpbHRlckJhcklkKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgPSBmaWx0ZXJCYXJJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIG11bHRpcGxlIGVudGl0eSBzZXRzIChtdWx0aXBsZSB0YWJsZSBtb2RlKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IExpc3RSZXBvcnREZWZpbml0aW9uIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVudGl0eVNldCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaXNzdWUgSSdkIHNheVxuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiQW4gRW50aXR5U2V0IGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGlzcGxheSBhIExpc3RSZXBvcnQsIHBsZWFzZSBhZGp1c3QgeW91ciBgZW50aXR5U2V0YCBwcm9wZXJ0eSB0byBwb2ludCB0byBvbmUuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaGFzTXVsdGlwbGVFbnRpdHlTZXRzID0gbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10gPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKCh0YWJsZSkgPT4gdGFibGUuY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKTtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiO1xuXHRsZXQgc2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGNvbnN0IGZpbHRlckJhcklkID0gZ2V0RmlsdGVyQmFySUQoc0NvbnRleHRQYXRoKTtcblx0Y29uc3QgZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCA9IGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQoZmlsdGVyQmFySWQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXG5cdGNvbnN0IG9Db25maWcgPSBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKG9Db25maWcpIHtcblx0XHRzaW5nbGVDaGFydElkID0gb0NvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBvQ29uZmlnLnRhYmxlSWQ7XG5cdH1cblxuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSBtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IHVzZVNlbWFudGljRGF0ZVJhbmdlID8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpIDoge307XG5cblx0Ly8gU29ydCBoZWFkZXIgYWN0aW9ucyBhY2NvcmRpbmcgdG8gcG9zaXRpb24gYXR0cmlidXRlcyBpbiBtYW5pZmVzdFxuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbXVsdGlWaWV3Q29udHJvbCA9IGdldE11bHRpVmlld3NDb250cm9sKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKG11bHRpVmlld0NvbnRyb2wgPyBbbXVsdGlWaWV3Q29udHJvbC5pZF0gOiBbXSlcblx0XTtcblxuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiB7XG5cdFx0bWFpbkVudGl0eVNldDogc0NvbnRleHRQYXRoLFxuXHRcdG1haW5FbnRpdHlUeXBlOiBgJHtzQ29udGV4dFBhdGh9L2AsXG5cdFx0bXVsdGlWaWV3c0NvbnRyb2w6IG11bHRpVmlld0NvbnRyb2wsXG5cdFx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaFxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkOiBoaWRlRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=