@sapui5/sap.fe.core 1.112.0 → 1.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +70 -6
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +118 -3
  7. package/src/sap/fe/core/AppComponent-dbg.js +16 -6
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +21 -7
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +11 -10
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +14 -11
  15. package/src/sap/fe/core/CommonUtils-dbg.js +102 -175
  16. package/src/sap/fe/core/CommonUtils.js +1 -1
  17. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  18. package/src/sap/fe/core/CommonUtils.ts +114 -211
  19. package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
  20. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  21. package/src/sap/fe/core/ExtensionAPI.ts +2 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +32 -24
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +41 -29
  34. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
  35. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
  36. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
  40. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
  41. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +124 -57
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  45. package/src/sap/fe/core/controllerextensions/EditFlow.ts +146 -73
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +35 -74
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -78
  50. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +217 -127
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  53. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +227 -129
  54. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
  55. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
  57. package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
  58. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  59. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  61. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  62. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  65. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -14
  66. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +41 -24
  67. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.ts +64 -31
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +7 -9
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  77. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  78. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
  79. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
  80. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  81. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -2
  82. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +3 -3
  83. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating-dbg.js +52 -0
  84. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js +6 -0
  85. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js.map +1 -0
  86. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.ts +46 -0
  87. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
  88. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
  89. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
  90. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
  91. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +106 -205
  92. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  93. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  94. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +121 -216
  95. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +31 -4
  96. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  97. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  98. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +38 -3
  99. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  100. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  101. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  102. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  103. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
  104. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
  105. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
  106. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
  107. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +10 -6
  108. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  109. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  110. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +20 -11
  111. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
  112. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  113. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  114. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -9
  115. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +19 -15
  116. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  117. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  118. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +19 -22
  119. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
  120. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  121. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  122. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +68 -0
  123. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  124. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  125. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  126. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  127. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  128. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  129. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  130. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  131. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  132. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  133. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  134. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  135. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  136. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  137. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  138. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  139. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  140. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  141. package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
  142. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  143. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
  144. package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
  145. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  146. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -6
  147. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
  148. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  149. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  150. package/src/sap/fe/core/converters/ManifestWrapper.ts +7 -1
  151. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +49 -28
  152. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  153. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  154. package/src/sap/fe/core/converters/MetaModelConverter.ts +62 -30
  155. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  156. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  157. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  158. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  159. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +22 -7
  160. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  161. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  162. package/src/sap/fe/core/converters/annotations/DataField.ts +20 -7
  163. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +701 -681
  164. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  165. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  166. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -12
  167. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  168. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  169. package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
  170. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  171. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  172. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  173. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  174. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  175. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  176. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  177. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  178. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
  179. package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  180. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
  181. package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
  182. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
  183. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  184. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  185. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -4
  186. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +135 -85
  187. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  188. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  189. package/src/sap/fe/core/converters/controls/Common/Table.ts +189 -119
  190. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +56 -22
  191. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  192. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  193. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +67 -31
  194. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +137 -49
  195. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  196. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  197. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +166 -43
  198. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +33 -14
  199. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  200. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  201. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +31 -12
  202. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
  203. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  204. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  205. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +36 -23
  206. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +37 -15
  207. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  208. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  209. package/src/sap/fe/core/converters/helpers/Aggregation.ts +36 -20
  210. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
  211. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  212. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
  213. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
  214. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  215. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  216. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  217. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  218. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
  219. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  220. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  221. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -1
  222. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
  223. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  224. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  225. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +11 -11
  226. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +20 -17
  227. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  228. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  229. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +25 -56
  230. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +13 -13
  231. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  232. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  233. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -13
  234. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  235. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  236. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  237. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  238. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
  239. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  240. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  241. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -5
  242. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +13 -5
  243. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  244. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  245. package/src/sap/fe/core/formatters/ValueFormatter.ts +19 -9
  246. package/src/sap/fe/core/fpm/manifest.json +1 -1
  247. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
  248. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  249. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  250. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  251. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +58 -35
  252. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  253. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  254. package/src/sap/fe/core/helpers/DeleteHelper.ts +76 -54
  255. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +8 -4
  256. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  257. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  258. package/src/sap/fe/core/helpers/MassEditHelper.ts +7 -5
  259. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
  260. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  261. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  262. package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
  263. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
  264. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  265. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
  266. package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
  267. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
  268. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  269. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  270. package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
  271. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  272. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  273. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  274. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  275. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +19 -3
  276. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  277. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  278. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +21 -0
  279. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
  280. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  281. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  282. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +39 -5
  283. package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
  284. package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
  285. package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
  286. package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
  287. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +52 -26
  288. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  289. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  290. package/src/sap/fe/core/helpers/StableIdHelper.ts +49 -25
  291. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -1
  292. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  293. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  294. package/src/sap/fe/core/helpers/TypeGuards.ts +151 -1
  295. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +25 -2
  296. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  297. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  298. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +24 -0
  299. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  300. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  301. package/src/sap/fe/core/library-dbg.js +1 -1
  302. package/src/sap/fe/core/library-preload.js +123 -95
  303. package/src/sap/fe/core/library-preload.js.map +1 -1
  304. package/src/sap/fe/core/library.js +1 -1
  305. package/src/sap/fe/core/manifest.json +1 -1
  306. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
  307. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  308. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  309. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
  310. package/src/sap/fe/core/messagebundle.properties +6 -6
  311. package/src/sap/fe/core/messagebundle_ar.properties +5 -6
  312. package/src/sap/fe/core/messagebundle_bg.properties +11 -12
  313. package/src/sap/fe/core/messagebundle_ca.properties +3 -4
  314. package/src/sap/fe/core/messagebundle_cs.properties +3 -4
  315. package/src/sap/fe/core/messagebundle_cy.properties +3 -4
  316. package/src/sap/fe/core/messagebundle_da.properties +3 -4
  317. package/src/sap/fe/core/messagebundle_de.properties +11 -12
  318. package/src/sap/fe/core/messagebundle_el.properties +5 -6
  319. package/src/sap/fe/core/messagebundle_en.properties +3 -4
  320. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -5
  321. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +3 -4
  322. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -4
  323. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +3 -2
  324. package/src/sap/fe/core/messagebundle_es.properties +3 -4
  325. package/src/sap/fe/core/messagebundle_es_MX.properties +3 -4
  326. package/src/sap/fe/core/messagebundle_et.properties +3 -4
  327. package/src/sap/fe/core/messagebundle_fi.properties +3 -4
  328. package/src/sap/fe/core/messagebundle_fr.properties +3 -4
  329. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -12
  330. package/src/sap/fe/core/messagebundle_hi.properties +11 -12
  331. package/src/sap/fe/core/messagebundle_hr.properties +3 -4
  332. package/src/sap/fe/core/messagebundle_hu.properties +3 -4
  333. package/src/sap/fe/core/messagebundle_id.properties +11 -12
  334. package/src/sap/fe/core/messagebundle_it.properties +3 -4
  335. package/src/sap/fe/core/messagebundle_iw.properties +3 -4
  336. package/src/sap/fe/core/messagebundle_ja.properties +4 -5
  337. package/src/sap/fe/core/messagebundle_kk.properties +3 -4
  338. package/src/sap/fe/core/messagebundle_ko.properties +11 -12
  339. package/src/sap/fe/core/messagebundle_lt.properties +3 -4
  340. package/src/sap/fe/core/messagebundle_lv.properties +11 -12
  341. package/src/sap/fe/core/messagebundle_ms.properties +3 -4
  342. package/src/sap/fe/core/messagebundle_nl.properties +3 -4
  343. package/src/sap/fe/core/messagebundle_no.properties +3 -4
  344. package/src/sap/fe/core/messagebundle_pl.properties +11 -12
  345. package/src/sap/fe/core/messagebundle_pt.properties +3 -4
  346. package/src/sap/fe/core/messagebundle_pt_PT.properties +3 -4
  347. package/src/sap/fe/core/messagebundle_ro.properties +14 -15
  348. package/src/sap/fe/core/messagebundle_ru.properties +11 -12
  349. package/src/sap/fe/core/messagebundle_sh.properties +3 -4
  350. package/src/sap/fe/core/messagebundle_sk.properties +3 -4
  351. package/src/sap/fe/core/messagebundle_sl.properties +3 -4
  352. package/src/sap/fe/core/messagebundle_sv.properties +11 -12
  353. package/src/sap/fe/core/messagebundle_th.properties +3 -4
  354. package/src/sap/fe/core/messagebundle_tr.properties +3 -4
  355. package/src/sap/fe/core/messagebundle_uk.properties +3 -4
  356. package/src/sap/fe/core/messagebundle_vi.properties +3 -4
  357. package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -12
  358. package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -12
  359. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +22 -8
  360. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  361. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  362. package/src/sap/fe/core/rootView/RootViewBaseController.ts +17 -7
  363. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +36 -3
  364. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  365. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  366. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +37 -1
  367. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +13 -1
  368. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  369. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  370. package/src/sap/fe/core/services/NavigationServiceFactory.ts +13 -0
  371. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
  372. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  373. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  374. package/src/sap/fe/core/services/RoutingServiceFactory.ts +20 -2
  375. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
  376. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  377. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
  378. package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
  379. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +10 -7
  380. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  381. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  382. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +12 -13
  383. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +9 -3
  384. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  385. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  386. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +11 -15
  387. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
  388. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  389. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  390. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  391. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  392. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  393. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
  394. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  395. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  396. package/src/sap/fe/core/templating/DataModelPathHelper.ts +24 -18
  397. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
  398. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  399. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
  400. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
  401. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
  402. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  403. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  404. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -24
  405. package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
  406. package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
  407. package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
  408. package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
  409. package/src/sap/fe/core/templating/FilterHelper-dbg.js +12 -1
  410. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  411. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  412. package/src/sap/fe/core/templating/FilterHelper.ts +12 -0
  413. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
  414. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  415. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
  416. package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
  417. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
  418. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  419. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
  420. package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
  421. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
  422. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  423. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
  424. package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
  425. package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  426. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  427. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  428. package/src/sap/fe/core/templating/UIFormatters.ts +45 -34
  429. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
  430. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  431. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  432. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  433. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  434. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -84,7 +84,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
84
84
  return sHTML;
85
85
  }
86
86
  function fnFormatDescription() {
87
- return "(${" + 'description} ? ("<h2>Description</h2>" + ${' + 'description}) : "")';
87
+ return "(${" + 'description} ? (${' + 'description}) : "")';
88
88
  }
89
89
  /**
90
90
  * Calculates the highest priority message type(Error/Warning/Success/Information) from the available messages.
@@ -195,6 +195,8 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
195
195
  function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow, multi412) {
196
196
  let oMessageTemplate;
197
197
  if (!bStrictHandlingFlow) {
198
+ const descriptionBinding = '{= ${description} ? "<html><body>" + ' + fnFormatDescription() + ' + "</html></body>" : "" }';
199
+ const technicalDetailsBinding = '{= ${technicalDetails} ? "<html><body>" + ' + fnFormatTechnicalDetails() + ' + "</html></body>" : "" }';
198
200
  oMessageTemplate = new MessageItem(undefined, {
199
201
  counter: {
200
202
  path: "counter"
@@ -206,7 +208,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
206
208
  path: "type"
207
209
  },
208
210
  groupName: "{headerName}",
209
- description: "{= ${" + "description} || ${technicalDetails} ? " + '"<html><body>" + ' + fnFormatDescription() + " + " + fnFormatTechnicalDetails() + '"</body></html>"' + ' : "" }',
211
+ description: descriptionBinding + technicalDetailsBinding,
210
212
  markupDescription: true
211
213
  });
212
214
  } else if (multi412) {
@@ -550,7 +552,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
550
552
  var _aModelData$target3;
551
553
  const sElemeBindingPath = `${oElem.getRowBinding().getPath()}`;
552
554
  if (((_aModelData$target3 = aModelData.target) === null || _aModelData$target3 === void 0 ? void 0 : _aModelData$target3.indexOf(sElemeBindingPath)) === 0) {
553
- const allRowContexts = oElem.getRowBinding().getContexts();
555
+ const allRowContexts = oRowBinding.getCurrentContexts();
554
556
  allRowContexts.forEach(rowContext => {
555
557
  var _aModelData$target4;
556
558
  if ((_aModelData$target4 = aModelData.target) !== null && _aModelData$target4 !== void 0 && _aModelData$target4.includes(rowContext.getPath())) {
@@ -926,18 +928,18 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
926
928
  return !!oParentControl && oParentControl.isA("sap.ui.table.CreationRow");
927
929
  }
928
930
  function getTranslatedTextForMessageDialog(sHighestPriority) {
929
- const oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
931
+ const resourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
930
932
  switch (sHighestPriority) {
931
933
  case "Error":
932
- return oResourceBundle.getText("C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_TITLE_ERRORS");
934
+ return resourceBundle.getText("C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_TITLE_ERROR");
933
935
  case "Information":
934
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_INFO");
936
+ return resourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_INFO");
935
937
  case "Success":
936
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS");
938
+ return resourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS");
937
939
  case "Warning":
938
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_WARNINGS");
940
+ return resourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_WARNING");
939
941
  default:
940
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE");
942
+ return resourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE");
941
943
  }
942
944
  }
943
945
  function removeUnboundTransitionMessages() {
@@ -1002,11 +1004,13 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1002
1004
  }
1003
1005
  //TODO: This must be moved out of message handling
1004
1006
  function setMessageSubtitle(oTable, aContexts, message) {
1005
- const subtitleColumn = oTable.getParent().getIdentifierColumn();
1006
- const errorContext = aContexts.find(function (oContext) {
1007
- return message.getTargets()[0].indexOf(oContext.getPath()) !== -1;
1008
- });
1009
- message.additionalText = errorContext ? errorContext.getObject()[subtitleColumn] : undefined;
1007
+ if (message.additionalText === undefined) {
1008
+ const subtitleColumn = oTable.getParent().getIdentifierColumn();
1009
+ const errorContext = aContexts.find(function (oContext) {
1010
+ return message.getTargets()[0].indexOf(oContext.getPath()) !== -1;
1011
+ });
1012
+ message.additionalText = errorContext ? errorContext.getObject()[subtitleColumn] : undefined;
1013
+ }
1010
1014
  }
1011
1015
 
1012
1016
  /**
@@ -1218,4 +1222,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1218
1222
  };
1219
1223
  return messageHandling;
1220
1224
  }, false);
1221
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJNZXNzYWdlSXRlbSIsInVuZGVmaW5lZCIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwiY29udHJvbCIsInNBY3Rpb25OYW1lIiwiYk9ubHlGb3JUZXN0Iiwib25CZWZvcmVTaG93TWVzc2FnZSIsInZpZXdUeXBlIiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJzSGlnaGVzdFByaW9yaXR5Iiwic0hpZ2hlc3RQcmlvcml0eVRleHQiLCJhRmlsdGVycyIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsImJ5SWQiLCJlcnJvckZpZWxkQ29udHJvbCIsImZpZWxkUmFua2luRGlhbG9nIiwiRGlhbG9nIiwiZ2V0UGFyZW50IiwiZmluZEVsZW1lbnRzIiwiaW5kZXhPZiIsImZvY3VzIiwidGVzdCIsImNhc2VTZW5zaXRpdmUiLCJtZXNzYWdlQ29kZSIsImNvZGUiLCJNZXNzYWdlIiwibWVzc2FnZSIsInRleHQiLCJwZXJzaXN0ZW50IiwiSlNPTk1vZGVsIiwiYkhhc0V0YWdNZXNzYWdlIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsImdldENvZGUiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJhTW9kZWxEYXRhQXJyYXkiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImFDdXJyZW50Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJjdXJyZW50Q29udGV4dCIsImV4aXN0aW5nTWVzc2FnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhIiwib1VuaXF1ZU9iaiIsImZpbHRlciIsIm9iaiIsImlkIiwic2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIiwiZmlsdGVyZWRNZXNzYWdlcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJyZWplY3QiLCJ0aGVuIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJvTWVzc2FnZU9iamVjdCIsIm9Tb3J0ZXIiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsImdldEJpbmRpbmciLCJzb3J0IiwiaXNPcGVuIiwicmVzaXphYmxlIiwiZW5kQnV0dG9uIiwiY3VzdG9tSGVhZGVyIiwiQmFyIiwiY29udGVudE1pZGRsZSIsIlRleHQiLCJjb250ZW50TGVmdCIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJ2ZXJ0aWNhbFNjcm9sbGluZyIsImFmdGVyQ2xvc2UiLCJjYWxsIiwicmVtb3ZlQWxsQ29udGVudCIsImFkZENvbnRlbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJCdXR0b25UeXBlIiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsImNhdGNoIiwidGVjaG5pY2FsRGV0YWlscyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJhTW9kZWxEYXRhIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImFsbFJvd0NvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiaW5jbHVkZXMiLCJjb250ZXh0UGF0aCIsImlkZW50aWZpZXJDb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwicm93SWRlbnRpZmllciIsImNvbHVtblByb3BlcnR5TmFtZSIsImdldFRhYmxlQ29sUHJvcGVydHkiLCJzVGFibGVUYXJnZXRDb2xOYW1lIiwiZ2V0VGFibGVDb2xJbmZvIiwiZ2V0SGVhZGVyIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImdldENvbnRlbnQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsImlzQSIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50Iiwib0VsZW1lbnQiLCJnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9UYXJnZXRUYWJsZUluZm8iLCJoZWFkZXJOYW1lIiwiZ2V0SGVhZGVyVmlzaWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0VGl0bGUiLCJzTGFzdEFjdGlvblRleHQiLCJ0b1N0cmluZyIsImFNZXNzYWdlIiwic0dlbmVyYWxHcm91cFRleHQiLCJvVGFibGUiLCJmblNldEdyb3VwTmFtZSIsImdldFRhYmxlQW5kVGFyZ2V0SW5mbyIsInNDb250cm9sSWQiLCJiSXNDcmVhdGlvblJvdyIsIm9UYWJsZVJvd0NvbnRleHQiLCJnZXRDb250cm9sSWRzIiwiZmluZCIsInNJZCIsImlzQ29udHJvbEluVGFibGUiLCJpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwib1RhcmdldGVkQ29udHJvbCIsInNNZXNzYWdlU3VidGl0bGUiLCJzUm93U3VidGl0bGVWYWx1ZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImxhYmVsIiwib1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCIsInNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50IiwiZ2V0VmFsdWUiLCJnZXRUYWJsZUZpcnN0Q29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwib0JpbmRpbmdDb250ZXh0Iiwib01vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVGV4dEFubm90YXRpb25QYXRoIiwic1RleHRBcnJhbmdlbWVudCIsInNDb2RlVmFsdWUiLCJzVGV4dFZhbHVlIiwic0NvbXB1dGVkVmFsdWUiLCJzbGljZSIsInNFbnVtTnVtYmVyIiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsImdldFRhcmdldHMiLCJzcGxpdCIsInBvcCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJvQ29sdW1uIiwia2V5IiwiU3RyaW5nIiwiYXZhaWxhYmlsaXR5IiwiZ2V0SWQiLCJvUGFyZW50Q29udHJvbCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwibGlzdEJpbmRpbmciLCJTdGFydHNXaXRoIiwibWFwIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJiYWNrZW5kTWVzc2FnZXMiLCJhTWVzc2FnZXNUb0JlRGVsZXRlZCIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImFDb250ZXh0cyIsInN1YnRpdGxlQ29sdW1uIiwiZXJyb3JDb250ZXh0IiwiYWRkaXRpb25hbFRleHQiLCJvT2JqZWN0UGFnZUxheW91dCIsImdldFNlY3Rpb25zIiwiZ2V0VmlzaWJsZSIsImdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uIiwic3ViU2VjdGlvbiIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsIlJlZ0V4cCIsInNUYWJsZVRhcmdldENvbFByb3BlcnR5Iiwib1RhYmxlVGFyZ2V0Q29sIiwiZ2V0Q29sdW1ucyIsImNvbHVtbiIsImdldERhdGFQcm9wZXJ0eSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwicHJvcGVydHlJbmZvcyIsIm5hbWUiLCJhQ29sdW1ucyIsInRhYmxlQ29sdW1uIiwicmVsYXRpdmVQYXRoIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwic29tZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgQ29sdW1uIGZyb20gXCJzYXAvdWkvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW47XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmc7XG5cdHRhYmxlSGVhZGVyOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbldpdGhMYWJlbFR5cGUgPSBDb2x1bW4gJiB7XG5cdGxhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdG9Db250cm9sPzogQ29udHJvbCxcblx0XHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IGFueSxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpID0+IFByb21pc2U8YW55Pjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sIGlzTXVsdGk0MTI/OiBib29sZWFuKSA9PiBhbnk7XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gYW55O1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogQm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBhbnlcblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChvVGFibGU6IENvbnRyb2wsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcpID0+IGFueTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBhbnkpID0+IGFueTtcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW4sXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IGFueSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBUYWJsZSkgPT4gQ29sdW1uO1xuXHRnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogQm9vbGVhbikgPT4gYW55O1xuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IChcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogQ29udGV4dCxcblx0XHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG5cdCkgPT4gc3RyaW5nO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IGFueSkgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdHJldHVybiBcIigke1wiICsgJ2Rlc2NyaXB0aW9ufSA/IChcIjxoMj5EZXNjcmlwdGlvbjwvaDI+XCIgKyAkeycgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZy5mbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHlcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZ1xuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogYW55W10pIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudDogYW55ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpXTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcblx0Y29uc3QgYU1lc3NhZ2VzID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldE9iamVjdChcIi9cIik7XG5cdGxldCBiTWVzc2FnZXNNb2RpZmllZCA9IGZhbHNlO1xuXHRsZXQgc0V0YWdNZXNzYWdlID0gXCJcIjtcblx0YU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnksIGk6IGFueSkge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscyAmJiBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMiAmJiBvVGVjaG5pY2FsRGV0YWlscy5pc0NvbmN1cnJlbnRNb2RpZmljYXRpb24pIHtcblx0XHRcdGlmIChjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsOiBhbnkgPSBvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKTtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sIG11bHRpNDEyPzogYm9vbGVhbikge1xuXHRsZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIns9ICR7XCIgK1xuXHRcdFx0XHRcImRlc2NyaXB0aW9ufSB8fCAke3RlY2huaWNhbERldGFpbHN9ID8gXCIgK1xuXHRcdFx0XHQnXCI8aHRtbD48Ym9keT5cIiArICcgK1xuXHRcdFx0XHRmbkZvcm1hdERlc2NyaXB0aW9uKCkgK1xuXHRcdFx0XHRcIiArIFwiICtcblx0XHRcdFx0Zm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgK1xuXHRcdFx0XHQnXCI8L2JvZHk+PC9odG1sPlwiJyArXG5cdFx0XHRcdCcgOiBcIlwiIH0nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChtdWx0aTQxMikge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIntkZXNjcmlwdGlvbn1cIixcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGVcblx0XHR9XG5cdH0pO1xuXHRvTWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKSB7XG5cdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG9NZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRvTWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZnVuY3Rpb24gc2hvd1VuYm91bmRNZXNzYWdlcyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdG9Db250ZXh0PzogYW55LFxuXHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdGNvbnRyb2w/OiBDb250cm9sLFxuXHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IGFueSkgPT4gYW55LFxuXHR2aWV3VHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTxhbnk+IHtcblx0bGV0IGFUcmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBhbnkpIHtcblx0XHRcdGxldCBpbmRleCA9IEluZmluaXR5LFxuXHRcdFx0XHRvQ29udHJvbCA9IENvcmUuYnlJZChhQ29udHJvbElkc1swXSkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0XHRjb25zdCBlcnJvckZpZWxkQ29udHJvbCA9IENvcmUuYnlJZChhQ29udHJvbElkc1swXSkgYXMgQ29udHJvbDtcblx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9XG5cdFx0XHRcdFx0b0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2dcblx0XHRcdFx0XHRcdD8gKGVycm9yRmllbGRDb250cm9sLmdldFBhcmVudCgpIGFzIGFueSkuZmluZEVsZW1lbnRzKHRydWUpLmluZGV4T2YoZXJyb3JGaWVsZENvbnRyb2wpXG5cdFx0XHRcdFx0XHQ6IEluZmluaXR5O1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2cpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXggPiBmaWVsZFJhbmtpbkRpYWxvZykge1xuXHRcdFx0XHRcdFx0aW5kZXggPSBmaWVsZFJhbmtpbkRpYWxvZztcblx0XHRcdFx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGRpYWxvZydzIGNvbnRyb2xcblx0XHRcdFx0XHRcdGVycm9yRmllbGRDb250cm9sLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0YUZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdFx0dGVzdDogZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gb25seSB1bmJvdW5kIG1lc3NhZ2VzIGhhdmUgdG8gYmUgc2hvd24gc28gYWRkIGZpbHRlciBhY2NvcmRpbmdseVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwidGFyZ2V0XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiBcIlwiIH0pKTtcblx0fVxuXHRpZiAoYUN1c3RvbU1lc3NhZ2VzICYmIGFDdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhQ3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMoXG5cdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IChvTWVzc2FnZVZpZXcgJiYgKG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCkpIHx8IG5ldyBKU09OTW9kZWwoKTtcblx0Y29uc3QgYkhhc0V0YWdNZXNzYWdlID0gdGhpcy5tb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlciwgQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSwgY29uY3VycmVudEVkaXRGbGFnKTtcblxuXHRpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIpIHtcblx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggIT09IDApIHtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdH1cblx0bGV0IHNob3dNZXNzYWdlUGFyYW1ldGVyczogYW55O1xuXHRsZXQgYU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdID0gW107XG5cdGlmIChzaG93TWVzc2FnZURpYWxvZyB8fCAoIXNob3dNZXNzYWdlQm94ICYmICFvbkJlZm9yZVNob3dNZXNzYWdlKSkge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cblx0XHRcdC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRcdGNvbnN0IGFNZXNzYWdlczogYW55W10gPSBbXTtcblx0XHRcdGFDdXJyZW50Q29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvTWVzc2FnZSA9IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRhTWVzc2FnZXMucHVzaChvTWVzc2FnZSk7XG5cdFx0XHRcdGFNZXNzYWdlRGF0YUxpc3QgPSBhTWVzc2FnZXM7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBleGlzdGluZ01lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkpKSB7XG5cdFx0XHRcdGV4aXN0aW5nTWVzc2FnZXMgPSBvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9VbmlxdWVPYmo6IGFueSA9IHt9O1xuXG5cdFx0XHRhTW9kZWxEYXRhQXJyYXkgPSBhTWVzc2FnZURhdGFMaXN0LmNvbmNhdChleGlzdGluZ01lc3NhZ2VzKS5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRcdHJldHVybiAhb1VuaXF1ZU9ialtvYmouaWRdICYmIChvVW5pcXVlT2JqW29iai5pZF0gPSB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0fVxuXHR9XG5cdGlmIChvbkJlZm9yZVNob3dNZXNzYWdlKSB7XG5cdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0geyBzaG93TWVzc2FnZUJveCwgc2hvd01lc3NhZ2VEaWFsb2cgfTtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSBvbkJlZm9yZVNob3dNZXNzYWdlKGFUcmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VCb3g7XG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpIHtcblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5maWx0ZXJlZE1lc3NhZ2VzID8gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgOiBhTW9kZWxEYXRhQXJyYXk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xuXHRcdFx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhVHJhbnNpdGlvbk1lc3NhZ2VzKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKGFNb2RlbERhdGFBcnJheSwgY29udHJvbCwgc0FjdGlvbk5hbWUsIHZpZXdUeXBlKTtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTsgLy8gc2V0IHRoZSBtZXNzYWdlcyBoZXJlIHNvIHRoYXQgaWYgYW55IG9mIHRoZW0gYXJlIGZpbHRlcmVkIGZvciBBUEQsIHRoZXkgYXJlIGZpbHRlcmVkIGhlcmUgYXMgd2VsbC5cblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IGFSZXNvbHZlRnVuY3Rpb25zIHx8IFtdO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRcdENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRjb25zdCBiU3RyaWN0SGFuZGxpbmdGbG93ID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0XHRcdGNvbnN0IG9Tb3J0ZXIgPSBuZXcgU29ydGVyKFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAob2JqMTogYW55LCBvYmoyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQiA9IGdldE1lc3NhZ2VSYW5rKG9iajIpO1xuXG5cdFx0XHRcdFx0XHRpZiAocmFua0EgPCByYW5rQikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAocmFua0EgPiByYW5rQikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldy5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZykuc29ydChvU29ydGVyKTtcblxuXHRcdFx0XHRcdG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0b0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpXG5cdFx0XHRcdFx0XHRcdD8gb0RpYWxvZ1xuXHRcdFx0XHRcdFx0XHQ6IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnNbaV0uY2FsbCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCAgfSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdFx0XHRpZiAoYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9CdXR0b25UeXBlXCJdLCBmdW5jdGlvbiAoQnV0dG9uVHlwZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHQob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBhbnkpLmdldENvbnRlbnRNaWRkbGUoKVswXS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdFx0aWYgKGJPbmx5Rm9yVGVzdCkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvRGlhbG9nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFUcmFuc2l0aW9uTWVzc2FnZXNbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzICYmIGFNZXNzYWdlTGlzdC5pbmRleE9mKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMSkgfHxcblx0XHRcdFx0KHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGlmICghc2hvd01lc3NhZ2VQYXJhbWV0ZXJzIHx8ICFzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nKSB7XG5cdFx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxodG1sPjxib2R5PlwiO1xuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlLCB0cnVlKTtcblx0XHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGA8aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxicj5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2UuZ2V0Q29kZSgpICE9PSBcIjUwM1wiICYmIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKX06ICR7b01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldE1lc3NhZ2UoKX08L2h0bWw+PC9ib2R5PmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dDogYW55ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIkdlbmVyYWxcIjtcblx0XHR9IGVsc2UgaWYgKGFNb2RlbERhdGEudGFyZ2V0Py5sZW5ndGgpIHtcblx0XHRcdC8vIExSIGZsb3dcblx0XHRcdGlmICh2aWV3VHlwZSA9PT0gXCJMaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZUxSVGFibGUoY29udHJvbCwgYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2aWV3VHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0Ly8gT1AgRGlzcGxheSBtb2RlXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lLCBjb250cm9sKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9ICgob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBhbnkpLmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBhbnkpIHtcblx0Y29uc3Qgb1ZpZXdDb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Y29uc3Qgb3BMYXlvdXQ6IENvbnRyb2wgPSBjb250cm9sPy5nZXRDb250ZW50ICYmIGNvbnRyb2w/LmdldENvbnRlbnQoKVswXTtcblx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRpZiAob3BMYXlvdXQpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob3BMYXlvdXQpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0c3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRvRWxlbS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSBvRWxlbS5nZXRQYXJlbnQoKS5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3Jvd0lkZW50aWZpZXJ9LCAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhlYWRlck5hbWUgPSBvRWxlbS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJOYW1lID0gb1N1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7aGVhZGVyTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdC8vIGNoZWNrIGlmIE9QIGNvbnRleHQgcGF0aCBpcyBwYXJ0IG9mIHRhcmdldCwgc2V0IExhc3QgQWN0aW9uIGFzIGdyb3VwIG5hbWVcblx0XHRcdGNvbnN0IGhlYWRlck5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gaGVhZGVyTmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIkdlbmVyYWxcIjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBzTGFzdEFjdGlvblRleHQgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cdHJldHVybiBzQWN0aW9uTmFtZSA/IGAke3NMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCA6IFwiXCI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgcmFuayBiYXNlZCBvbiBNZXNzYWdlIEdyb3VwL0hlYWRlciBuYW1lLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIFNvcnRpbmcgbWVzc2FnZXMgaW4gTWVzc2FnZSBkaWFsb2dcbiAqIExhc3QgQWN0aW9uIHNob3VsZCBiZSBzaG93biBhdCB0b3AsIG5leHQgUm93IElkIGFuZCBsYXN0IEdlbmVyYWwuXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybnMgUmFuayBvZiBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VSYW5rKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpOiBudW1iZXIge1xuXHRpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJMYXN0IEFjdGlvblwiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiR2VuZXJhbFwiKSkge1xuXHRcdHJldHVybiAzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAyO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSB3aGljaCBjYW4gZWl0aGVyIEdlbmVyYWwgb3IgTGFzdCBBY3Rpb24uXG4gKlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogQm9vbGVhbikgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNHZW5lcmFsR3JvdXBUZXh0ID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0YU1lc3NhZ2VbXCJoZWFkZXJOYW1lXCJdID0gc0dlbmVyYWxHcm91cFRleHQ7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdGFibGUgcm93L2NvbHVtbiBpbmZvIGFuZCBzZXQgc3VidGl0bGUuXG4gKlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBCb29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogYW55XG4pIHtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUFuZFRhcmdldEluZm8ob1RhYmxlLCBhTWVzc2FnZSwgb0VsZW1lbnQsIG9Sb3dCaW5kaW5nKTtcblx0b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciA9IG9UYWJsZS5nZXRIZWFkZXIoKTtcblxuXHRsZXQgc0NvbnRyb2xJZCwgYklzQ3JlYXRpb25Sb3c7XG5cdGlmICghb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KSB7XG5cdFx0c0NvbnRyb2xJZCA9IGFNZXNzYWdlLmdldENvbnRyb2xJZHMoKS5maW5kKGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xJblRhYmxlKG9UYWJsZSwgc0lkKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChzQ29udHJvbElkKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBDb3JlLmJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0YklzQ3JlYXRpb25Sb3cgPSBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2wpO1xuXHR9XG5cblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHQvLyBpZiB0aGUgY29sdW1uIGlzIG5vdCBwcmVzZW50IG9uIFVJIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgaGF2ZSBhIHRhYmxlIGZpZWxkIGluIGl0LCB1c2UgTGFzdCBBY3Rpb24gZm9yIGdyb3VwaW5nXG5cdFx0aWYgKChhTWVzc2FnZSBhcyBhbnkpLnBlcnNpc3RlbnQgJiYgc0FjdGlvbk5hbWUpIHtcblx0XHRcdGZuU2V0R3JvdXBOYW1lKGFNZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdWJUaXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlU3VidGl0bGUoXG5cdFx0YU1lc3NhZ2UsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRvVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3dcblx0KTtcblxuXHRyZXR1cm4geyBvVGFyZ2V0VGFibGVJbmZvLCBzdWJUaXRsZSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgdGhlIHN1YnRpdGxlIGJhc2VkIG9uIFRhYmxlIFJvdy9Db2x1bW4gZGF0YS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0c1xuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gYklzQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBvVGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IENvbnRleHRbXSxcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW4sXG5cdG9UYWJsZTogVGFibGUsXG5cdGJJc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVzc2FnZVN1YnRpdGxlO1xuXHRsZXQgc1Jvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9UYWJsZSk7XG5cdGNvbnN0IHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSAob1RhYmxlIGFzIGFueSkuZ2V0UGFyZW50KCkuZ2V0SWRlbnRpZmllckNvbHVtbigpO1xuXHRjb25zdCBvQ29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIG9UYWJsZSk7XG5cdGlmIChiSXNDcmVhdGlvblJvdykge1xuXHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA/IHNUYWJsZVRhcmdldENvbE5hbWUgOiAob0NvbEZyb21UYWJsZVNldHRpbmdzIGFzIENvbHVtbldpdGhMYWJlbFR5cGUpLmxhYmVsXG5cdFx0XSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0b1RhYmxlLFxuXHRcdFx0b1RhYmxlUm93Q29udGV4dCxcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcblx0XHQpO1xuXHRcdGNvbnN0IHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoID0gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHQ/IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCIkUGF0aFwiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QXJyYW5nZW1lbnQgPVxuXHRcdFx0c1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggJiYgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnQvJEVudW1NZW1iZXJcIilcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmIChvVGFyZ2V0ZWRDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBVSSBlcnJvciBpcyBvbiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB0aGVuIGdldCB0aGUgY29udHJvbCBpbnB1dCBhcyB0aGUgcm93IGluZGljYXRvcjpcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSAob1RhcmdldGVkQ29udHJvbCBhcyBhbnkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sVmFsdWUoXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbWVzc2FnZSBzdWJ0aXRsZVxuXHRcdFx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0gbWVzc2FnZUhhbmRsaW5nLmRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbc1Jvd1N1YnRpdGxlVmFsdWUsIHNUYWJsZVRhcmdldENvbE5hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiKX06ICR7c1Jvd1N1YnRpdGxlVmFsdWV9LCAke1xuXHRcdFx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZVxuXHRcdFx0XHR9YDtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtzUm93U3VidGl0bGVWYWx1ZSwgb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIil9OiAke3NSb3dTdWJ0aXRsZVZhbHVlfWA7XG5cdFx0XHR9IGVsc2UgaWYgKCFzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc01lc3NhZ2VTdWJ0aXRsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRvVGFibGU6IFRhYmxlLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gKG9NZXRhTW9kZWwgYXMgYW55KT8uZ2V0TWV0YVBhdGgob1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdmFsdWUgb2YgZmlyc3QgQ29sdW1uIG9mIFRhYmxlLCB3aXRoIGl0cyB0ZXh0IEFycmFuZ2VtZW50LlxuICpcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUZXh0QW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBzVGV4dEFycmFuZ2VtZW50XG4gKiBAcmV0dXJucyBDb2x1bW4gVmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0NvZGVWYWx1ZSA9IChvVGFibGVSb3dDb250ZXh0IGFzIGFueSkuZ2V0VmFsdWUoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdGxldCBzVGV4dFZhbHVlO1xuXHRsZXQgc0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRpZiAoc1RleHRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdGlmIChzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGV4dCBhbm5vdGF0aW9uIHBhdGhcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LnNsaWNlKDAsIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5jb25jYXQoc1RleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGV4dEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRzVGV4dFZhbHVlID0gKG9UYWJsZVJvd0NvbnRleHQgYXMgYW55KS5nZXRWYWx1ZShzVGFibGVGaXJzdENvbFByb3BlcnR5KTtcblx0XHRpZiAoc1RleHRWYWx1ZSkge1xuXHRcdFx0aWYgKHNUZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0Y29uc3Qgc0VudW1OdW1iZXIgPSBzVGV4dEFycmFuZ2VtZW50LnNsaWNlKHNUZXh0QXJyYW5nZW1lbnQuaW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0c3dpdGNoIChzRW51bU51bWJlcikge1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0T25seVwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBzVGV4dFZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRGaXJzdFwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzVGV4dFZhbHVlfSAoJHtzQ29kZVZhbHVlfSlgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRMYXN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NDb2RlVmFsdWV9ICgke3NUZXh0VmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dFNlcGFyYXRlXCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNDb2RlVmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzQ29tcHV0ZWRWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBjb2x1bW4gaW5mbyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2Ugb2YgdGhlIG1lc3NhZ2UgcG9wb3Zlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9NZXNzYWdlIE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0gb1RhYmxlIE1kY1RhYmxlXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb2x1bW4gaW5mby5cbiAqL1xuZnVuY3Rpb24gZmV0Y2hDb2x1bW5JbmZvKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBUYWJsZSk6IENvbHVtbiB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUgYXMgYW55KVxuXHRcdC5nZXRQYXJlbnQoKVxuXHRcdC5nZXRUYWJsZURlZmluaXRpb24oKVxuXHRcdC5jb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ua2V5LnNwbGl0KFwiOjpcIikucG9wKCkgPT09IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmo7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXQgdGhlIENvbHVtbiBkYXRhIGRlcGVuZGluZyBvbiBpdHMgYXZhaWxhYmlsaXR5IGluIFRhYmxlLCB0aGlzIGlzIG5lZWRlZCBmb3Igc2V0dGluZyBzdWJ0aXRsZSBvZiBNZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvQ29sRnJvbVRhYmxlU2V0dGluZ3NcbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcmV0dXJucyBDb2x1bW4gZGF0YS5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lQ29sdW1uSW5mbyhvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IGFueSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IGFueSA9IHsgc0NvbHVtbkluZGljYXRvcjogU3RyaW5nLCBzQ29sdW1uVmFsdWU6IFN0cmluZyB9O1xuXHRpZiAob0NvbEZyb21UYWJsZVNldHRpbmdzKSB7XG5cdFx0Ly8gaWYgY29sdW1uIGlzIG5laXRoZXIgaW4gdGFibGUgZGVmaW5pdGlvbiBub3IgcGVyc29uYWxpemF0aW9uLCBzaG93IG9ubHkgcm93IHN1YnRpdGxlIHRleHRcblx0XHRpZiAob0NvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwidW5kZWZpbmVkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vaWYgY29sdW1uIGlzIGluIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBidXQgbm90IGluIHRhYmxlIGRlZmluaXRpb24sIHNob3cgQ29sdW1uIChIaWRkZW4pIDogPGNvbE5hbWU+XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfSAoJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFwiVF9DT0xVTU5fSU5ESUNBVE9SX0lOX1RBQkxFX0RFRklOSVRJT05cIlxuXHRcdFx0KX0pOiAke29Db2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbH1gO1xuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiSGlkZGVuXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFX0lORElDQVRPUl9VTktOT1dOXCIpO1xuXHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIlVua25vd25cIjtcblx0fVxuXHRyZXR1cm4gb0NvbHVtbkluZm87XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjaGVjayBpZiBhIGdpdmVuIGNvbnRyb2wgaWQgaXMgYSBwYXJ0IG9mIFRhYmxlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IFRhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2w6IGFueSA9IENvcmUuYnlJZChzQ29udHJvbElkKTtcblx0aWYgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIW9Db250cm9sLmlzQShcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBhbnkpIHtcblx0XHRcdHJldHVybiBvRWxlbS5nZXRJZCgpID09PSBvQ29udHJvbDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKSB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBhbnkpIHtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SU1wiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIik7XG5cdFx0Y2FzZSBcIlN1Y2Nlc3NcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdTXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seTogYm9vbGVhbiA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCksXG5cdFx0b01lc3NhZ2VNb2RlbCA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblx0bGV0IGFNZXNzYWdlczogYW55W10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLnBlcnNpc3RlbnQpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS50YXJnZXQgIT09IFwiXCIpIHx8ICghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0udGFyZ2V0IHx8IGFNZXNzYWdlc1tpXS50YXJnZXQgPT09IFwiXCIpKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPSBgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHtcblx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlXG5cdFx0XHR9YDtcblx0XHR9XG5cdH1cblx0Ly9GaWx0ZXJpbmcgbWVzc2FnZXMgYWdhaW4gaGVyZSB0byBhdm9pZCBzaG93aW5nIHB1cmUgdGVjaG5pY2FsIG1lc3NhZ2VzIHJhaXNlZCBieSB0aGUgbW9kZWxcblx0Y29uc3QgYmFja2VuZE1lc3NhZ2VzOiBhbnkgPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzICYmXG5cdFx0XHRcdCgoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0XHQoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YmFja2VuZE1lc3NhZ2VzLnB1c2goYVRyYW5zaXRpb25NZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiYWNrZW5kTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSB7XG5cdGNvbnN0IHN1YnRpdGxlQ29sdW1uID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBhbnkpLmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihvQ29udGV4dC5nZXRQYXRoKCkpICE9PSAtMTtcblx0fSk7XG5cdG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPSBlcnJvckNvbnRleHQgPyBlcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9PYmplY3RQYWdlTGF5b3V0IFRoZSBvYmplY3RQYWdlTGF5b3V0IG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZpc2libGUgc2VjdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCB8IE9iamVjdFBhZ2VMYXlvdXQpIHtcblx0cmV0dXJuIChvT2JqZWN0UGFnZUxheW91dCBhcyBPYmplY3RQYWdlTGF5b3V0KS5nZXRTZWN0aW9ucygpLmZpbHRlcihmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0cmV0dXJuIG9TZWN0aW9uLmdldFZpc2libGUoKTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgY29udHJvbCBpZHMgZnJvbSBtZXNzYWdlIGFyZSBhIHBhcnQgb2YgYSBnaXZlbiBzdWJzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiBmbkZpbHRlclVwb25JZHMob01lc3NhZ2VPYmplY3QuZ2V0Q29udHJvbElkcygpLCBvRWxlbSk7XG5cdFx0fSlcblx0XHQuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogYW55KSB7XG5cdC8vdGhpcyBmdW5jdGlvbiBlc2NhcGVzIGEgc3RyaW5nIHRvIHVzZSBpdCBhcyBhIHJlZ2V4XG5cdGNvbnN0IGZuUmVnRXhwZXNjYXBlID0gZnVuY3Rpb24gKHM6IHN0cmluZykge1xuXHRcdHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuXHR9O1xuXHQvLyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBhdGggb2YgdGhlIG1lc3NhZ2Ugd2UgcmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWUuXG5cdC8vIHRvIGFjaGlldmUgaXQgd2UgcmVtb3ZlIHRoZSBiaW5kaW5nQ29udGV4dCBwYXRoIGFuZCB0aGUgcm93IGJpbmRpbmcgcGF0aCBmcm9tIHRoZSB0YXJnZXRcblx0aWYgKCFvQ29udGV4dFBhdGgpIHtcblx0XHRvQ29udGV4dFBhdGggPSBuZXcgUmVnRXhwKFxuXHRcdFx0YCR7Zm5SZWdFeHBlc2NhcGUoYCR7b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHsob1RhYmxlIGFzIFRhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWApfVxcXFwoLipcXFxcKS9gXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLnJlcGxhY2Uob0NvbnRleHRQYXRoLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24gaWYgaXQgbWF0Y2hlcyB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGFyZ2V0IG9mIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBDb2x1bW4gbmFtZSBhbmQgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sSW5mbyhvVGFibGU6IENvbnRyb2wsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcpIHtcblx0bGV0IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZztcblx0bGV0IG9UYWJsZVRhcmdldENvbCA9IChvVGFibGUgYXMgVGFibGUpLmdldENvbHVtbnMoKS5maW5kKGZ1bmN0aW9uIChjb2x1bW46IGFueSkge1xuXHRcdHJldHVybiBjb2x1bW4uZ2V0RGF0YVByb3BlcnR5KCkgPT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk7XG5cdH0pO1xuXHRpZiAoIW9UYWJsZVRhcmdldENvbCkge1xuXHRcdC8qIElmIHRoZSB0YXJnZXQgY29sdW1uIGlzIG5vdCBmb3VuZCwgd2UgY2hlY2sgZm9yIGEgY3VzdG9tIGNvbHVtbiAqL1xuXHRcdGNvbnN0IG9DdXN0b21Db2x1bW4gPSAob1RhYmxlIGFzIFRhYmxlKVxuXHRcdFx0LmdldENvbnRyb2xEZWxlZ2F0ZSgpXG5cdFx0XHQuZ2V0Q29sdW1uc0ZvcihvVGFibGUpXG5cdFx0XHQuZmluZChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRcdGlmICghIW9Db2x1bW4udGVtcGxhdGUgJiYgb0NvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IG9DdXN0b21Db2x1bW47XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IChvVGFibGVUYXJnZXRDb2wgYXMgYW55KT8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IChvVGFibGUgYXMgYW55KVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlIGFzIFRhYmxlKS5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRvVGFibGVUYXJnZXRDb2wgPSBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluZGV4T2YoXCI6OkZpZWxkR3JvdXA6OlwiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uICh0YWJsZUNvbHVtbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0LyogY2hlY2sgaWYgdGhlIGNvbHVtbiB3aXRoIHRoZSBmaWVsZCBncm91cCBpcyB2aXNpYmxlIGluIHRoZSB0YWJsZTogKi9cblx0XHRcdGxldCBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBmYWxzZTtcblx0XHRcdGlmIChvVGFibGVUYXJnZXRDb2wgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsKSB7XG5cdFx0XHRcdGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IChvVGFibGUgYXMgVGFibGUpLmdldENvbHVtbnMoKS5zb21lKGZ1bmN0aW9uIChjb2x1bW46IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IChvVGFibGVUYXJnZXRDb2wgYXMgYW55KS5sYWJlbDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlICYmIChvVGFibGVUYXJnZXRDb2wgYXMgYW55KS5sYWJlbDtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlICYmIChvVGFibGVUYXJnZXRDb2wgYXMgYW55KS5rZXk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wgJiYgb1RhYmxlVGFyZ2V0Q29sLmdldEhlYWRlcigpO1xuXHR9XG5cdHJldHVybiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHNUYWJsZVRhcmdldENvbE5hbWUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgVGFibGUgYW5kIGNvbHVtbiBpbmZvIGlmIGFueSBvZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQgZnJvbSBNZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvTWVzc2FnZU9iamVjdFxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gbWF0Y2hpbmcgdGhlIG1lc3NhZ2UgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFuZFRhcmdldEluZm8ob1RhYmxlOiBUYWJsZSwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvRWxlbWVudDogYW55LCBvUm93QmluZGluZzogQmluZGluZyk6IFRhcmdldFRhYmxlSW5mb1R5cGUge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvOiBhbnkgPSB7fTtcblx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlLCBvTWVzc2FnZU9iamVjdCk7XG5cdGNvbnN0IG9UYWJsZUNvbEluZm8gPSBnZXRUYWJsZUNvbEluZm8ob1RhYmxlLCBvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMgPSBvRWxlbWVudC5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHQ/IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpXG5cdFx0OiAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk7XG5cdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCA9IG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLmZpbmQoZnVuY3Rpb24gKHJvd0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiByb3dDb250ZXh0ICYmIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5pbmRleE9mKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSA9PT0gMDtcblx0fSk7XG5cdHJldHVybiBvVGFyZ2V0VGFibGVJbmZvO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gYUNvbnRyb2xJZHNcbiAqIEBwYXJhbSBvSXRlbVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIG9uZSBvZiB0aGUgY29udHJvbHNcbiAqL1xuZnVuY3Rpb24gZm5GaWx0ZXJVcG9uSWRzKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGFDb250cm9sSWRzLnNvbWUoZnVuY3Rpb24gKHNDb250cm9sSWQpIHtcblx0XHRpZiAoc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgZ3JvdXAgbmFtZSBoYXZpbmcgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBzZWN0aW9uXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIGJNdWx0aXBsZVN1YlNlY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFRhYmxlSW5mb1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIEdyb3VwIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUoXG5cdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0c2VjdGlvbi5nZXRUaXRsZSgpICtcblx0XHQoc3ViU2VjdGlvbi5nZXRUaXRsZSgpICYmIGJNdWx0aXBsZVN1YlNlY3Rpb25zID8gYCwgJHtzdWJTZWN0aW9uLmdldFRpdGxlKCl9YCA6IFwiXCIpICtcblx0XHQob1RhcmdldFRhYmxlSW5mbyA/IGAsICR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyfWAgOiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbTogYW55KSB7XG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50ICE9PSBvRWxlbSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiBnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbixcblx0Z2V0TWVzc2FnZVJhbms6IGdldE1lc3NhZ2VSYW5rLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IGdldFRhYmxlRmlyc3RDb2xWYWx1ZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBa0NBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUFXO0VBQ3ZDLElBQUlFLFlBQW1CLEdBQUcsRUFBRTtFQUM1QixJQUFJQyxnQkFBdUIsR0FBRyxFQUFFO0VBQ2hDLElBQUlDLGlCQUF3QixHQUFHLEVBQUU7RUFDakMsSUFBSUMsT0FBZTtFQUNuQixJQUFJQyxXQUFtQjtFQUN2QixJQUFJQyxZQUF5QjtFQWtIN0IsU0FBU0Msd0JBQXdCLEdBQUc7SUFDbkMsSUFBSUMsa0JBQTBCOztJQUU5QjtJQUNBLFNBQVNDLFlBQVksQ0FBQ0MsU0FBYyxFQUFFO01BQ3JDLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBUSxHQUN0QixNQUFNLEdBQ05ELFNBQVMsQ0FBQ0MsUUFBUSxHQUNsQixXQUFXLEdBQ1hELFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsR0FBRyxDQUFDSixTQUFTLENBQUNDLFFBQVEsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFTCxTQUFTLENBQUNDLFFBQVEsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2pILFNBQVMsR0FDVCxJQUFJLEdBQ0pMLFNBQVMsQ0FBQ0MsUUFBUSxHQUNsQixvQkFBb0IsR0FDcEIsRUFBRTtJQUNOO0lBQ0E7SUFDQSxTQUFTSyxlQUFlLENBQUNOLFNBQWMsRUFBRTtNQUN4QyxJQUFJTyxLQUFLLEdBQUcsRUFBRTtNQUNkLElBQUlQLFNBQVMsQ0FBQ1EsU0FBUyxJQUFJUixTQUFTLENBQUNDLFFBQVEsSUFBSUQsU0FBUyxDQUFDUSxTQUFTLEtBQUtWLGtCQUFrQixF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
1225
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiZ2V0Q29kZSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiaWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwibWVzc2FnZUhhbmRsaW5nIiwidXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSIsInJlamVjdCIsInRoZW4iLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiYWZ0ZXJDbG9zZSIsImNhbGwiLCJyZW1vdmVBbGxDb250ZW50IiwiYWRkQ29udGVudCIsInNhcCIsInVpIiwicmVxdWlyZSIsIkJ1dHRvblR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwiY2F0Y2giLCJ0ZWNobmljYWxEZXRhaWxzIiwib3JpZ2luYWxNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsInJldHJ5QWZ0ZXJNZXNzYWdlIiwiZ2V0QWRkaXRpb25hbFRleHQiLCJnZXRNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFNb2RlbERhdGEiLCJzZXRHcm91cE5hbWVMUlRhYmxlIiwic2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSIsImdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSIsIm9FbGVtIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiaW5jbHVkZXMiLCJjb250ZXh0UGF0aCIsImlkZW50aWZpZXJDb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwicm93SWRlbnRpZmllciIsImNvbHVtblByb3BlcnR5TmFtZSIsImdldFRhYmxlQ29sUHJvcGVydHkiLCJzVGFibGVUYXJnZXRDb2xOYW1lIiwiZ2V0VGFibGVDb2xJbmZvIiwiZ2V0SGVhZGVyIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImdldENvbnRlbnQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsImlzQSIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50Iiwib0VsZW1lbnQiLCJnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9UYXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJzR2VuZXJhbEdyb3VwVGV4dCIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJvVGFyZ2V0ZWRDb250cm9sIiwic01lc3NhZ2VTdWJ0aXRsZSIsInNSb3dTdWJ0aXRsZVZhbHVlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzVGFibGVGaXJzdENvbFByb3BlcnR5Iiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwibGFiZWwiLCJvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbiIsInNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoIiwic1RhYmxlRmlyc3RDb2xUZXh0QXJyYW5nZW1lbnQiLCJnZXRWYWx1ZSIsImdldFRhYmxlRmlyc3RDb2xWYWx1ZSIsIm9Db2x1bW5JbmZvIiwiZGV0ZXJtaW5lQ29sdW1uSW5mbyIsInNDb2x1bW5JbmRpY2F0b3IiLCJzQ29sdW1uVmFsdWUiLCJvQmluZGluZ0NvbnRleHQiLCJvTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNUZXh0QW5ub3RhdGlvblBhdGgiLCJzVGV4dEFycmFuZ2VtZW50Iiwic0NvZGVWYWx1ZSIsInNUZXh0VmFsdWUiLCJzQ29tcHV0ZWRWYWx1ZSIsInNsaWNlIiwic0VudW1OdW1iZXIiLCJzQ29sTmFtZUZyb21NZXNzYWdlT2JqIiwiZ2V0VGFyZ2V0cyIsInNwbGl0IiwicG9wIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29sdW1ucyIsIm9Db2x1bW4iLCJrZXkiLCJTdHJpbmciLCJhdmFpbGFiaWxpdHkiLCJnZXRJZCIsIm9QYXJlbnRDb250cm9sIiwicmVzb3VyY2VCdW5kbGUiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsImxpc3RCaW5kaW5nIiwiU3RhcnRzV2l0aCIsIm1hcCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYmFja2VuZE1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJhQ29udGV4dHMiLCJhZGRpdGlvbmFsVGV4dCIsInN1YnRpdGxlQ29sdW1uIiwiZXJyb3JDb250ZXh0Iiwib09iamVjdFBhZ2VMYXlvdXQiLCJnZXRTZWN0aW9ucyIsImdldFZpc2libGUiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsInN1YlNlY3Rpb24iLCJmbkZpbHRlclVwb25JZHMiLCJhIiwiYiIsIm9Db250ZXh0UGF0aCIsImZuUmVnRXhwZXNjYXBlIiwicyIsInJlcGxhY2UiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXREYXRhUHJvcGVydHkiLCJvQ3VzdG9tQ29sdW1uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0Q29sdW1uc0ZvciIsInByb3BlcnR5SW5mb3MiLCJuYW1lIiwiYUNvbHVtbnMiLCJ0YWJsZUNvbHVtbiIsInJlbGF0aXZlUGF0aCIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsInNvbWUiLCJvVGFibGVDb2xJbmZvIiwib0l0ZW0iLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwic2VjdGlvbiIsImJNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYklzT3JwaGFuRWxlbWVudCIsImFFbGVtZW50cyIsIm9QYXJlbnRFbGVtZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IENvbHVtbiBmcm9tIFwic2FwL3VpL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFNZXNzYWdlRGF0YUxpc3Q6IGFueVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IGFueVtdID0gW107XG5sZXQgb0RpYWxvZzogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgb01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVdpdGhIZWFkZXIgPSBNZXNzYWdlICYge1xuXHRoZWFkZXJOYW1lPzogc3RyaW5nO1xuXHR0YXJnZXQ/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxUZXh0Pzogc3RyaW5nO1xufTtcblxudHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCBib29sZWFuO1xuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nO1xuXHR0YWJsZUhlYWRlcjogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxudHlwZSBDb2x1bW5XaXRoTGFiZWxUeXBlID0gQ29sdW1uICYge1xuXHRsYWJlbD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBhbnksIGJUcmFuc2l0aW9uT25seT86IGFueSkgPT4gYW55W107XG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IChcblx0XHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0XHRvQ29udGV4dD86IGFueSxcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRvQ29udHJvbD86IENvbnRyb2wsXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyczogYW55KSA9PiBhbnksXG5cdFx0dmlld1R5cGU/OiBzdHJpbmdcblx0KSA9PiBQcm9taXNlPGFueT47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpID0+IGFueTtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLCBpc011bHRpNDEyPzogYm9vbGVhbikgPT4gYW55O1xuXHRzZXRNZXNzYWdlU3VidGl0bGU6IChvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHZvaWQ7XG5cdGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0OiAob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wpID0+IGFueTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuXHQpID0+IHN0cmluZztcblx0YklzT3JwaGFuRWxlbWVudDogKG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSkgPT4gYm9vbGVhbjtcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiAoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nO1xuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiAoXG5cdFx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IEJvb2xlYW4sXG5cdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogYW55XG5cdCkgPT4gQ29sSW5mb0FuZFN1YnRpdGxlVHlwZTtcblx0Z2V0VGFibGVDb2xJbmZvOiAob1RhYmxlOiBDb250cm9sLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nKSA9PiBhbnk7XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogYW55KSA9PiBhbnk7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCBib29sZWFuLFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcblx0KSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiAob0NvbEZyb21UYWJsZVNldHRpbmdzOiBhbnksIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpID0+IENvbHVtbkluZm9UeXBlO1xuXHRmZXRjaENvbHVtbkluZm86IChvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogVGFibGUpID0+IENvbHVtbjtcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRnZXRNZXNzYWdlUmFuazogKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpID0+IG51bWJlcjtcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IEJvb2xlYW4pID0+IGFueTtcblx0Z2V0VGFibGVGaXJzdENvbFZhbHVlOiAoXG5cdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1RleHRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHRcdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuXHQpID0+IHN0cmluZztcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBhbnkpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IFRhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHIoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IGFueSkge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCkge1xuXHRyZXR1cm4gXCIoJHtcIiArICdkZXNjcmlwdGlvbn0gPyAoJHsnICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmcuZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IGFueVtdKSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQ6IGFueSA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKV07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55LCBpOiBhbnkpIHtcblx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMgJiYgb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnRhcmdldCA9IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCkge1xuXHRvRGlhbG9nLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbDogYW55ID0gb01lc3NhZ2VWaWV3LmdldE1vZGVsKCk7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpfSAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCJcblx0XHRcdFx0KX1gO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLCBtdWx0aTQxMj86IGJvb2xlYW4pIHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlXG5cdFx0fVxuXHR9KTtcblx0b01lc3NhZ2VWaWV3LnNldEdyb3VwSXRlbXModHJ1ZSk7XG5cdG9CYWNrQnV0dG9uID1cblx0XHRvQmFja0J1dHRvbiB8fFxuXHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0aWNvbjogSWNvblBvb2wuZ2V0SWNvblVSSShcIm5hdi1iYWNrXCIpLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRwcmVzczogZnVuY3Rpb24gKHRoaXM6IEJ1dHRvbikge1xuXHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRvTWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0b01lc3NhZ2VWaWV3LFxuXHRcdG9CYWNrQnV0dG9uXG5cdH07XG59XG5cbmZ1bmN0aW9uIHNob3dVbmJvdW5kTWVzc2FnZXMoXG5cdHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsXG5cdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRvQ29udGV4dD86IGFueSxcblx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRjb250cm9sPzogQ29udHJvbCxcblx0c0FjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGJPbmx5Rm9yVGVzdD86IGJvb2xlYW4sXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IGFueSxcblx0dmlld1R5cGU/OiBzdHJpbmdcbik6IFByb21pc2U8YW55PiB7XG5cdGxldCBhVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5O1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eVRleHQ7XG5cdGNvbnN0IGFGaWx0ZXJzID0gW25ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXTtcblx0bGV0IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG5cdFx0c2hvd01lc3NhZ2VCb3g6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuXHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gYVRyYW5zaXRpb25NZXNzYWdlcy5jb25jYXQoZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkpO1xuXHRcdC8vIHdlIG9ubHkgd2FudCB0byBzaG93IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgbm90IGJvdW5kIHN0YXRlIG1lc3NhZ2VzIGhlbmNlIGFkZCBhIGZpbHRlciBmb3IgdGhlIHNhbWVcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IHRydWUgfSkpO1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogYW55KSB7XG5cdFx0XHRsZXQgaW5kZXggPSBJbmZpbml0eSxcblx0XHRcdFx0b0NvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGNvbnN0IGJIYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXIsIENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksIGNvbmN1cnJlbnRFZGl0RmxhZyk7XG5cblx0aWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiKSB7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHR9XG5cdGxldCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IGFueTtcblx0bGV0IGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSA9IFtdO1xuXHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cgfHwgKCFzaG93TWVzc2FnZUJveCAmJiAhb25CZWZvcmVTaG93TWVzc2FnZSkpIHtcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhRmlsdGVycyksXG5cdFx0XHRhQ3VycmVudENvbnRleHRzID0gb0xpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdGlmIChhQ3VycmVudENvbnRleHRzICYmIGFDdXJyZW50Q29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0Ly8gRG9uJ3Qgc2hvdyBkaWFsb2cgaW5jYXNlIHRoZXJlIGFyZSBubyBlcnJvcnMgdG8gc2hvd1xuXG5cdFx0XHQvLyBpZiBmYWxzZSwgc2hvdyBtZXNzYWdlcyBpbiBkaWFsb2dcblx0XHRcdC8vIEFzIGZpdGVyaW5nIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGhlcmUgaGVuY2Vcblx0XHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdFx0Ly8gU28gd2UgY3JlYXRlIG5ldyBqc29uIG1vZGVsIHRvIHVzZSBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcuXG5cdFx0XHRjb25zdCBhTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRhQ3VycmVudENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgZXhpc3RpbmdNZXNzYWdlczogYW55W10gPSBbXTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpKSkge1xuXHRcdFx0XHRleGlzdGluZ01lc3NhZ2VzID0gb01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvVW5pcXVlT2JqOiBhbnkgPSB7fTtcblxuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmlkXSAmJiAob1VuaXF1ZU9ialtvYmouaWRdID0gdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdH1cblx0fVxuXHRpZiAob25CZWZvcmVTaG93TWVzc2FnZSkge1xuXHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHsgc2hvd01lc3NhZ2VCb3gsIHNob3dNZXNzYWdlRGlhbG9nIH07XG5cdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gb25CZWZvcmVTaG93TWVzc2FnZShhVHJhbnNpdGlvbk1lc3NhZ2VzLCBzaG93TWVzc2FnZVBhcmFtZXRlcnMpO1xuXHRcdHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94O1xuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRcdGlmIChzaG93TWVzc2FnZURpYWxvZyB8fCBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nKSB7XG5cdFx0XHRhTW9kZWxEYXRhQXJyYXkgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZmlsdGVyZWRNZXNzYWdlcyA/IHNob3dNZXNzYWdlUGFyYW1ldGVycy5maWx0ZXJlZE1lc3NhZ2VzIDogYU1vZGVsRGF0YUFycmF5O1xuXHRcdH1cblx0fVxuXHRpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWFDdXN0b21NZXNzYWdlcyAmJiAhYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIHRyYW5zaWVudCBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH0gZWxzZSBpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWFDdXN0b21NZXNzYWdlcykge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVRyYW5zaXRpb25NZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYVRyYW5zaXRpb25NZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShhTW9kZWxEYXRhQXJyYXksIGNvbnRyb2wsIHNBY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7IC8vIHNldCB0aGUgbWVzc2FnZXMgaGVyZSBzbyB0aGF0IGlmIGFueSBvZiB0aGVtIGFyZSBmaWx0ZXJlZCBmb3IgQVBELCB0aGV5IGFyZSBmaWx0ZXJlZCBoZXJlIGFzIHdlbGwuXG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHRDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRjb25zdCBvU29ydGVyID0gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IGFueSwgb2JqMjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQob1NvcnRlcik7XG5cblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKVxuXHRcdFx0XHRcdFx0XHQ/IG9EaWFsb2dcblx0XHRcdFx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhUmVzb2x2ZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQgIH0pO1xuXHRcdFx0XHRcdG9EaWFsb2cucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRcdFx0aWYgKGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24gKEJ1dHRvblR5cGU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkob01lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0KG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgYW55KS5nZXRDb250ZW50TWlkZGxlKClbMF0uc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0XHRcdGlmIChiT25seUZvclRlc3QpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUob0RpYWxvZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiBhTWVzc2FnZUxpc3QuaW5kZXhPZihvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKSA9PT0gLTEpIHx8XG5cdFx0XHRcdChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZylcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAoIXNob3dNZXNzYWdlUGFyYW1ldGVycyB8fCAhc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykge1xuXHRcdFx0XHRcdGFNZXNzYWdlTGlzdC5wdXNoKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgPGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnI+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VQYXJhbWV0ZXJzICYmIHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZSkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCl9OiAke29NZXNzYWdlLmdldE1lc3NhZ2UoKX08L2h0bWw+PC9ib2R5PmA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQ6IGFueSA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0XHRodG1sVGV4dDogZm9ybWF0dGVkVGV4dFN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCB7XG5cdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBuYW1lIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBkaWFsb2cuXG4gKlxuICogQHBhcmFtIGFNb2RlbERhdGFBcnJheSBNZXNzYWdlcyBhcnJheVxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHZpZXdUeXBlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUoXG5cdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG5cdGFNb2RlbERhdGFBcnJheS5mb3JFYWNoKChhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gXCJcIjtcblx0XHRpZiAoIWFNb2RlbERhdGEudGFyZ2V0Py5sZW5ndGggJiYgYU1vZGVsRGF0YS5nZXRDb2RlPy4oKSAhPT0gXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiKSB7XG5cdFx0XHQvLyB1bmJvdW5kIHRyYW5zaWl0b24gbWVzc2FnZXNcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gXCJHZW5lcmFsXCI7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKlxuICogQHBhcmFtIG9FbGVtXG4gKiBAcGFyYW0gYU1vZGVsRGF0YVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZUxSVGFibGUob0VsZW06IENvbnRyb2wgfCB1bmRlZmluZWQsIGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0gJiYgKG9FbGVtIGFzIFRhYmxlKS5nZXRSb3dCaW5kaW5nKCk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7KG9FbGVtIGFzIFRhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgYWxsUm93Q29udGV4dHMgPSAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBgJHtyb3dDb250ZXh0LmdldFBhdGgoKX0vYDtcblx0XHRcdFx0XHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG9FbGVtLmdldFBhcmVudCgpIGFzIGFueSkuZ2V0SWRlbnRpZmllckNvbHVtbigpO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uICYmIHJvd0NvbnRleHQuZ2V0T2JqZWN0KClbaWRlbnRpZmllckNvbHVtbl07XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uUHJvcGVydHlOYW1lID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sUHJvcGVydHkob0VsZW0sIGFNb2RlbERhdGEsIGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRjb25zdCB7IHNUYWJsZVRhcmdldENvbE5hbWUgfSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbEluZm8ob0VsZW0sIGNvbHVtblByb3BlcnR5TmFtZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0YXJnZXQgaGFzIHNvbWUgY29sdW1uIG5hbWUgYW5kIGNvbHVtbiBpcyB2aXNpYmxlIGluIFVJXG5cdFx0XHRcdFx0aWYgKGNvbHVtblByb3BlcnR5TmFtZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBoZWFkZXIgd2lsbCBiZSByb3cgSWRlbnRpZmllciwgaWYgZm91bmQgZnJvbSBhYm92ZSBjb2RlIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGFibGUgbmFtZVxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSByb3dJZGVudGlmaWVyID8gYCAke3Jvd0lkZW50aWZpZXJ9YCA6IChvRWxlbSBhcyBUYWJsZSkuZ2V0SGVhZGVyKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIGNvbHVtbiBkYXRhIG5vdCBmb3VuZCAobWF5IGJlIHRoZSBjb2x1bW4gaXMgaGlkZGVuKSwgYWRkIGdyb3VwaW5nIGFzIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKlxuICogQHBhcmFtIGFNb2RlbERhdGEgTWVzc2FnZSBPYmplY3RcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSAgQWN0aW9uIG5hbWVcbiAqIEBwYXJhbSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IGFueSkge1xuXHRjb25zdCBvVmlld0NvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvcExheW91dDogQ29udHJvbCA9IGNvbnRyb2w/LmdldENvbnRlbnQgJiYgY29udHJvbD8uZ2V0Q29udGVudCgpWzBdO1xuXHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdGlmIChvcExheW91dCkge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvcExheW91dCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRzdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IHRydWU7XG5cdFx0XHRcdFx0XHRsZXQgY2hpbGRUYWJsZUVsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRcdG9FbGVtLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvRWxlbWVudC5pc0EoXCJzYXAubS5UYWJsZVwiKSB8fCBvRWxlbWVudC5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKT8uZ2V0UGF0aCgpfWA7XG5cdFx0XHRcdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkVGFibGVFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0b1Jvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgb1RhcmdldFRhYmxlSW5mbyB9ID0gb2JqO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNldFNlY3Rpb25OYW1lSW5Hcm91cCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IG9FbGVtLmdldFBhcmVudCgpLmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpZGVudGlmaWVyQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb0VsZW0uZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImFkZGl0aW9uYWxUZXh0XCJdID0gYCR7cm93SWRlbnRpZmllcn0sICR7b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVyTmFtZSA9IG9FbGVtLmdldEhlYWRlclZpc2libGUoKSAmJiBvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFoZWFkZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBvU3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVyTmFtZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtoZWFkZXJOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgT1AgY29udGV4dCBwYXRoIGlzIHBhcnQgb2YgdGFyZ2V0LCBzZXQgTGFzdCBBY3Rpb24gYXMgZ3JvdXAgbmFtZVxuXHRcdFx0Y29uc3QgaGVhZGVyTmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiR2VuZXJhbFwiO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBSYW5rIG9mIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVJhbmsob2JqOiBNZXNzYWdlV2l0aEhlYWRlcik6IG51bWJlciB7XG5cdGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkxhc3QgQWN0aW9uXCIpKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH0gZWxzZSBpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJHZW5lcmFsXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIHdoaWNoIGNhbiBlaXRoZXIgR2VuZXJhbCBvciBMYXN0IEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIGJJc0dlbmVyYWxHcm91cE5hbWVcbiAqL1xuY29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBCb29sZWFuKSA9PiB7XG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0dlbmVyYWxHcm91cFRleHQgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBzR2VuZXJhbEdyb3VwVGV4dDtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBzZXRTZWN0aW9uTmFtZUluR3JvdXBcbiAqIEBwYXJhbSBmblNldEdyb3VwTmFtZVxuICogQHJldHVybnMgVGFibGUgaW5mbyBhbmQgU3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b1RhYmxlOiBUYWJsZSxcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IEJvb2xlYW4sXG5cdGZuU2V0R3JvdXBOYW1lOiBhbnlcbikge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IENvcmUuYnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoKGFNZXNzYWdlIGFzIGFueSkucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbE5hbWVcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBiSXNDcmVhdGlvblJvd1xuICogQHBhcmFtIG9UYXJnZXRlZENvbnRyb2xcbiAqIEByZXR1cm5zIE1lc3NhZ2Ugc3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdWJ0aXRsZShcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgYm9vbGVhbixcblx0b1RhYmxlOiBUYWJsZSxcblx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZXNzYWdlU3VidGl0bGU7XG5cdGxldCBzUm93U3VidGl0bGVWYWx1ZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1RhYmxlKTtcblx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IChvVGFibGUgYXMgYW55KS5nZXRQYXJlbnQoKS5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdGNvbnN0IG9Db2xGcm9tVGFibGVTZXR0aW5ncyA9IG1lc3NhZ2VIYW5kbGluZy5mZXRjaENvbHVtbkluZm8obWVzc2FnZSwgb1RhYmxlKTtcblx0aWYgKGJJc0NyZWF0aW9uUm93KSB7XG5cdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtcblx0XHRcdHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFX0NSRUFUSU9OX1JPV19JTkRJQ0FUT1JcIiksXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID8gc1RhYmxlVGFyZ2V0Q29sTmFtZSA6IChvQ29sRnJvbVRhYmxlU2V0dGluZ3MgYXMgQ29sdW1uV2l0aExhYmVsVHlwZSkubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdFx0XHRvVGFibGUsXG5cdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggPSBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHRzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAob1RhYmxlUm93QmluZGluZ0NvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIHNldCBSb3cgc3VidGl0bGUgdGV4dFxuXHRcdFx0aWYgKG9UYXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IChvVGFyZ2V0ZWRDb250cm9sIGFzIGFueSkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlUm93Q29udGV4dCAmJiBzVGFibGVGaXJzdENvbFByb3BlcnR5KSB7XG5cdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0XHRcdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5LFxuXHRcdFx0XHRcdG9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xUZXh0QXJyYW5nZW1lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0Ly8gc2V0IHRoZSBtZXNzYWdlIHN1YnRpdGxlXG5cdFx0XHRjb25zdCBvQ29sdW1uSW5mbzogQ29sdW1uSW5mb1R5cGUgPSBtZXNzYWdlSGFuZGxpbmcuZGV0ZXJtaW5lQ29sdW1uSW5mbyhvQ29sRnJvbVRhYmxlU2V0dGluZ3MsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0aWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtzUm93U3VidGl0bGVWYWx1ZSwgc1RhYmxlVGFyZ2V0Q29sTmFtZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XXCIpfTogJHtzUm93U3VidGl0bGVWYWx1ZX0sICR7XG5cdFx0XHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXG5cdFx0XHRcdH1gO1xuXHRcdFx0fSBlbHNlIGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIlVua25vd25cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW3NSb3dTdWJ0aXRsZVZhbHVlLCBvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiKX06ICR7c1Jvd1N1YnRpdGxlVmFsdWV9YDtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIikgKyBcIjogXCIgKyBzVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzTWVzc2FnZVN1YnRpdGxlO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGV4dCBBbm5vdGF0aW9uLCB0aGlzIGlzIG5lZWRlZCB0byBzZXQgc3VidGl0bGUgb2YgTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIEJpbmRpbmcgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdG9UYWJsZTogVGFibGUsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmdcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9CaW5kaW5nQ29udGV4dDtcblx0aWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9UYWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGggPSAob01ldGFNb2RlbCBhcyBhbnkpPy5nZXRNZXRhUGF0aChvVGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0aWYgKG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHQvJFBhdGhgKSkge1xuXHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9CaW5kaW5nQ29udGV4dDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB2YWx1ZSBvZiBmaXJzdCBDb2x1bW4gb2YgVGFibGUsIHdpdGggaXRzIHRleHQgQXJyYW5nZW1lbnQuXG4gKlxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEBwYXJhbSBvVGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gc1RleHRBbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIHNUZXh0QXJyYW5nZW1lbnRcbiAqIEByZXR1cm5zIENvbHVtbiBWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbFZhbHVlKFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IENvbnRleHQsXG5cdHNUZXh0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRjb25zdCBzQ29kZVZhbHVlID0gKG9UYWJsZVJvd0NvbnRleHQgYXMgYW55KS5nZXRWYWx1ZShzVGFibGVGaXJzdENvbFByb3BlcnR5KTtcblx0bGV0IHNUZXh0VmFsdWU7XG5cdGxldCBzQ29tcHV0ZWRWYWx1ZSA9IHNDb2RlVmFsdWU7XG5cdGlmIChzVGV4dEFubm90YXRpb25QYXRoKSB7XG5cdFx0aWYgKHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly8gdGhlIHRhcmdldCBwcm9wZXJ0eSBpcyByZXBsYWNlZCB3aXRoIHRoZSB0ZXh0IGFubm90YXRpb24gcGF0aFxuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IHNUYWJsZUZpcnN0Q29sUHJvcGVydHkuc2xpY2UoMCwgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LmNvbmNhdChzVGV4dEFubm90YXRpb25QYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IHNUZXh0QW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHNUZXh0VmFsdWUgPSAob1RhYmxlUm93Q29udGV4dCBhcyBhbnkpLmdldFZhbHVlKHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpO1xuXHRcdGlmIChzVGV4dFZhbHVlKSB7XG5cdFx0XHRpZiAoc1RleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHRjb25zdCBzRW51bU51bWJlciA9IHNUZXh0QXJyYW5nZW1lbnQuc2xpY2Uoc1RleHRBcnJhbmdlbWVudC5pbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0XHRzd2l0Y2ggKHNFbnVtTnVtYmVyKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRPbmx5XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNUZXh0VmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dEZpcnN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dExhc3RcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c0NvZGVWYWx1ZX0gKCR7c1RleHRWYWx1ZX0pYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0U2VwYXJhdGVcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gc0NvZGVWYWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c1RleHRWYWx1ZX0gKCR7c0NvZGVWYWx1ZX0pYDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNDb21wdXRlZFZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbHVtbiBpbmZvIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGUgbWVzc2FnZSBwb3BvdmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5mdW5jdGlvbiBmZXRjaENvbHVtbkluZm8ob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IFRhYmxlKTogQ29sdW1uIHtcblx0Y29uc3Qgc0NvbE5hbWVGcm9tTWVzc2FnZU9iaiA9IG9NZXNzYWdlPy5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRyZXR1cm4gKG9UYWJsZSBhcyBhbnkpXG5cdFx0LmdldFBhcmVudCgpXG5cdFx0LmdldFRhYmxlRGVmaW5pdGlvbigpXG5cdFx0LmNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5rZXkuc3BsaXQoXCI6OlwiKS5wb3AoKSA9PT0gc0NvbE5hbWVGcm9tTWVzc2FnZU9iajtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogYW55LCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogQ29sdW1uSW5mb1R5cGUge1xuXHRjb25zdCBvQ29sdW1uSW5mbzogYW55ID0geyBzQ29sdW1uSW5kaWNhdG9yOiBTdHJpbmcsIHNDb2x1bW5WYWx1ZTogU3RyaW5nIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfSU5ESUNBVE9SX1VOS05PV05cIik7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNDb250cm9sSWRcbiAqIEByZXR1cm5zIFRydWUgaWYgY29udHJvbCBpcyBwYXJ0IG9mIHRhYmxlLlxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xJblRhYmxlKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZyk6IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29udHJvbDogYW55ID0gQ29yZS5ieUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBKFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IGFueSkge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpIHtcblx0bGV0IG9QYXJlbnRDb250cm9sID0gb0NvbnRyb2w/LmdldFBhcmVudCgpO1xuXHR3aGlsZSAoXG5cdFx0b1BhcmVudENvbnRyb2wgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLm0uQ29sdW1uTGlzdEl0ZW1cIilcblx0KSB7XG5cdFx0b1BhcmVudENvbnRyb2wgPSBvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdHJldHVybiAhIW9QYXJlbnRDb250cm9sICYmIG9QYXJlbnRDb250cm9sLmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seTogYm9vbGVhbiA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCksXG5cdFx0b01lc3NhZ2VNb2RlbCA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblx0bGV0IGFNZXNzYWdlczogYW55W10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLnBlcnNpc3RlbnQpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS50YXJnZXQgIT09IFwiXCIpIHx8ICghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0udGFyZ2V0IHx8IGFNZXNzYWdlc1tpXS50YXJnZXQgPT09IFwiXCIpKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPSBgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHtcblx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlXG5cdFx0XHR9YDtcblx0XHR9XG5cdH1cblx0Ly9GaWx0ZXJpbmcgbWVzc2FnZXMgYWdhaW4gaGVyZSB0byBhdm9pZCBzaG93aW5nIHB1cmUgdGVjaG5pY2FsIG1lc3NhZ2VzIHJhaXNlZCBieSB0aGUgbW9kZWxcblx0Y29uc3QgYmFja2VuZE1lc3NhZ2VzOiBhbnkgPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzICYmXG5cdFx0XHRcdCgoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0XHQoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YmFja2VuZE1lc3NhZ2VzLnB1c2goYVRyYW5zaXRpb25NZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiYWNrZW5kTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgYW55KS5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmRleE9mKG9Db250ZXh0LmdldFBhdGgoKSkgIT09IC0xO1xuXHRcdH0pO1xuXHRcdG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPSBlcnJvckNvbnRleHQgPyBlcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZpc2libGUgc2VjdGlvbnMgZnJvbSBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sIHwgT2JqZWN0UGFnZUxheW91dCkge1xuXHRyZXR1cm4gKG9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCkuZmlsdGVyKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRyZXR1cm4gb1NlY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBjb250cm9sIGlkcyBmcm9tIG1lc3NhZ2UgYXJlIGEgcGFydCBvZiBhIGdpdmVuIHN1YnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBvTWVzc2FnZU9iamVjdFxuICogQHJldHVybnMgU3ViU2VjdGlvbiBtYXRjaGluZyBjb250cm9sIGlkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcik6IFVJNUVsZW1lbnRbXSB7XG5cdHJldHVybiBzdWJTZWN0aW9uXG5cdFx0LmZpbmRFbGVtZW50cyh0cnVlLCAob0VsZW06IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIGZuRmlsdGVyVXBvbklkcyhvTWVzc2FnZU9iamVjdC5nZXRDb250cm9sSWRzKCksIG9FbGVtKTtcblx0XHR9KVxuXHRcdC5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdFx0Ly8gY29udHJvbHMgYXJlIHNvcnRlZCBpbiBvcmRlciB0byBoYXZlIHRoZSB0YWJsZSBvbiB0b3Agb2YgdGhlIGFycmF5XG5cdFx0XHQvLyBpdCB3aWxsIGhlbHAgdG8gY29tcHV0ZSB0aGUgc3VidGl0bGUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gdGhlIHR5cGUgb2YgcmVsYXRlZCBjb250cm9sc1xuXHRcdFx0aWYgKGEuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAhYi5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAxO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZUNvbFByb3BlcnR5KG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBhbnkpIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG5cdH07XG5cdC8vIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgbWVzc2FnZSB3ZSByZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZS5cblx0Ly8gdG8gYWNoaWV2ZSBpdCB3ZSByZW1vdmUgdGhlIGJpbmRpbmdDb250ZXh0IHBhdGggYW5kIHRoZSByb3cgYmluZGluZyBwYXRoIGZyb20gdGhlIHRhcmdldFxuXHRpZiAoIW9Db250ZXh0UGF0aCkge1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRgJHtmblJlZ0V4cGVzY2FwZShgJHtvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8keyhvVGFibGUgYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YCl9XFxcXCguKlxcXFwpL2Bcblx0XHQpO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIENvbHVtbiBuYW1lIGFuZCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2xJbmZvKG9UYWJsZTogQ29udHJvbCwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZykge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nO1xuXHRsZXQgb1RhYmxlVGFyZ2V0Q29sID0gKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29sdW1ucygpLmZpbmQoZnVuY3Rpb24gKGNvbHVtbjogYW55KSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXREYXRhUHJvcGVydHkoKSA9PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0fSk7XG5cdGlmICghb1RhYmxlVGFyZ2V0Q29sKSB7XG5cdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBjdXN0b20gY29sdW1uICovXG5cdFx0Y29uc3Qgb0N1c3RvbUNvbHVtbiA9IChvVGFibGUgYXMgVGFibGUpXG5cdFx0XHQuZ2V0Q29udHJvbERlbGVnYXRlKClcblx0XHRcdC5nZXRDb2x1bW5zRm9yKG9UYWJsZSlcblx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0aWYgKCEhb0NvbHVtbi50ZW1wbGF0ZSAmJiBvQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fFxuXHRcdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0b1RhYmxlVGFyZ2V0Q29sID0gb0N1c3RvbUNvbHVtbjtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gKG9UYWJsZSBhcyBhbnkpXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9PT0gb0NvbHVtbi5nZXREYXRhUHJvcGVydHkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmdldEhlYWRlcigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGZpZWxkIGdyb3VwICovXG5cdFx0XHRjb25zdCBhQ29sdW1ucyA9IChvVGFibGUgYXMgVGFibGUpLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmdldENvbHVtbnNGb3Iob1RhYmxlKTtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0XHRpZiAob0NvbHVtbi5rZXkuaW5kZXhPZihcIjo6RmllbGRHcm91cDo6XCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29sdW1uLnByb3BlcnR5SW5mb3M/LmZpbmQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKHRhYmxlQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKG9UYWJsZVRhcmdldENvbCAmJiAob1RhYmxlVGFyZ2V0Q29sIGFzIGFueSkubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbHVtbi5nZXRIZWFkZXIoKSA9PT0gKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmtleTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVRhcmdldENvbCAmJiBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGU6IFRhYmxlLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9FbGVtZW50OiBhbnksIG9Sb3dCaW5kaW5nOiBCaW5kaW5nKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IGFueSA9IHt9O1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID0gb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHR9KTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvID8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YCA6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtOiBhbnkpIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUFrQ0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsSUFBSUUsWUFBbUIsR0FBRyxFQUFFO0VBQzVCLElBQUlDLGdCQUF1QixHQUFHLEVBQUU7RUFDaEMsSUFBSUMsaUJBQXdCLEdBQUcsRUFBRTtFQUNqQyxJQUFJQyxPQUFlO0VBQ25CLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFlBQXlCO0VBa0g3QixTQUFTQyx3QkFBd0IsR0FBRztJQUNuQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWSxDQUFDQyxTQUFjLEVBQUU7TUFDckMsT0FBT0EsU0FBUyxDQUFDQyxRQUFRLEdBQ3RCLE1BQU0sR0FDTkQsU0FBUyxDQUFDQyxRQUFRLEdBQ2xCLFdBQVcsR0FDWEQsU0FBUyxDQUFDQyxRQUFRLENBQUNDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxHQUFHLENBQUNKLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUVMLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDakgsU0FBUyxHQUNULElBQUksR0FDSkwsU0FBUyxDQUFDQyxRQUFRLEdBQ2xCLG9CQUFvQixHQUNw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