react-native-chart-kit 7.0.0-next.1 → 7.0.0-next.3

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 (427) hide show
  1. package/README.md +89 -521
  2. package/dist/charts/line/LineChart.d.ts +3 -3
  3. package/dist/charts/line/LineChart.js +1 -1
  4. package/dist/v2/core/data/index.d.ts +3 -0
  5. package/dist/v2/core/data/index.d.ts.map +1 -0
  6. package/dist/v2/core/data/index.js +1 -0
  7. package/dist/v2/core/data/normalize.d.ts +8 -0
  8. package/dist/v2/core/data/normalize.d.ts.map +1 -0
  9. package/dist/v2/core/data/normalize.js +229 -0
  10. package/dist/v2/core/data/normalizeValues.d.ts +16 -0
  11. package/dist/v2/core/data/normalizeValues.d.ts.map +1 -0
  12. package/dist/v2/core/data/normalizeValues.js +96 -0
  13. package/dist/v2/core/data/types.d.ts +161 -0
  14. package/dist/v2/core/data/types.d.ts.map +1 -0
  15. package/dist/v2/core/data/types.js +1 -0
  16. package/dist/v2/core/geometry/areaPath.d.ts +3 -0
  17. package/dist/v2/core/geometry/areaPath.d.ts.map +1 -0
  18. package/dist/v2/core/geometry/areaPath.js +36 -0
  19. package/dist/v2/core/geometry/barRects.d.ts +44 -0
  20. package/dist/v2/core/geometry/barRects.d.ts.map +1 -0
  21. package/dist/v2/core/geometry/barRects.js +201 -0
  22. package/dist/v2/core/geometry/contributionHeatmap.d.ts +49 -0
  23. package/dist/v2/core/geometry/contributionHeatmap.d.ts.map +1 -0
  24. package/dist/v2/core/geometry/contributionHeatmap.js +107 -0
  25. package/dist/v2/core/geometry/horizontalBarRects.d.ts +27 -0
  26. package/dist/v2/core/geometry/horizontalBarRects.d.ts.map +1 -0
  27. package/dist/v2/core/geometry/horizontalBarRects.js +202 -0
  28. package/dist/v2/core/geometry/index.d.ts +12 -0
  29. package/dist/v2/core/geometry/index.d.ts.map +1 -0
  30. package/dist/v2/core/geometry/index.js +11 -0
  31. package/dist/v2/core/geometry/lineDecimation.d.ts +8 -0
  32. package/dist/v2/core/geometry/lineDecimation.d.ts.map +1 -0
  33. package/dist/v2/core/geometry/lineDecimation.js +110 -0
  34. package/dist/v2/core/geometry/linePath.d.ts +5 -0
  35. package/dist/v2/core/geometry/linePath.d.ts.map +1 -0
  36. package/dist/v2/core/geometry/linePath.js +98 -0
  37. package/dist/v2/core/geometry/lineSeries.d.ts +29 -0
  38. package/dist/v2/core/geometry/lineSeries.d.ts.map +1 -0
  39. package/dist/v2/core/geometry/lineSeries.js +51 -0
  40. package/dist/v2/core/geometry/path.d.ts +6 -0
  41. package/dist/v2/core/geometry/path.d.ts.map +1 -0
  42. package/dist/v2/core/geometry/path.js +24 -0
  43. package/dist/v2/core/geometry/pieArcs.d.ts +29 -0
  44. package/dist/v2/core/geometry/pieArcs.d.ts.map +1 -0
  45. package/dist/v2/core/geometry/pieArcs.js +142 -0
  46. package/dist/v2/core/geometry/progressRings.d.ts +30 -0
  47. package/dist/v2/core/geometry/progressRings.d.ts.map +1 -0
  48. package/dist/v2/core/geometry/progressRings.js +104 -0
  49. package/dist/v2/core/geometry/types.d.ts +32 -0
  50. package/dist/v2/core/geometry/types.d.ts.map +1 -0
  51. package/dist/v2/core/geometry/types.js +1 -0
  52. package/dist/v2/core/index.d.ts +6 -0
  53. package/dist/v2/core/index.d.ts.map +1 -0
  54. package/dist/v2/core/index.js +6 -0
  55. package/dist/v2/core/interaction/index.d.ts +5 -0
  56. package/dist/v2/core/interaction/index.d.ts.map +1 -0
  57. package/dist/v2/core/interaction/index.js +2 -0
  58. package/dist/v2/core/interaction/viewport.d.ts +71 -0
  59. package/dist/v2/core/interaction/viewport.d.ts.map +1 -0
  60. package/dist/v2/core/interaction/viewport.js +216 -0
  61. package/dist/v2/core/interaction/viewportTransform.d.ts +17 -0
  62. package/dist/v2/core/interaction/viewportTransform.d.ts.map +1 -0
  63. package/dist/v2/core/interaction/viewportTransform.js +70 -0
  64. package/dist/v2/core/layout/autoPadding.d.ts +3 -0
  65. package/dist/v2/core/layout/autoPadding.d.ts.map +1 -0
  66. package/dist/v2/core/layout/autoPadding.js +33 -0
  67. package/dist/v2/core/layout/chartBox.d.ts +5 -0
  68. package/dist/v2/core/layout/chartBox.d.ts.map +1 -0
  69. package/dist/v2/core/layout/chartBox.js +22 -0
  70. package/dist/v2/core/layout/debugLayout.d.ts +3 -0
  71. package/dist/v2/core/layout/debugLayout.d.ts.map +1 -0
  72. package/dist/v2/core/layout/debugLayout.js +20 -0
  73. package/dist/v2/core/layout/index.d.ts +8 -0
  74. package/dist/v2/core/layout/index.d.ts.map +1 -0
  75. package/dist/v2/core/layout/index.js +6 -0
  76. package/dist/v2/core/layout/labelCollision.d.ts +3 -0
  77. package/dist/v2/core/layout/labelCollision.d.ts.map +1 -0
  78. package/dist/v2/core/layout/labelCollision.js +90 -0
  79. package/dist/v2/core/layout/legendLayout.d.ts +3 -0
  80. package/dist/v2/core/layout/legendLayout.d.ts.map +1 -0
  81. package/dist/v2/core/layout/legendLayout.js +39 -0
  82. package/dist/v2/core/layout/tooltipPlacement.d.ts +3 -0
  83. package/dist/v2/core/layout/tooltipPlacement.d.ts.map +1 -0
  84. package/dist/v2/core/layout/tooltipPlacement.js +76 -0
  85. package/dist/v2/core/layout/types.d.ts +114 -0
  86. package/dist/v2/core/layout/types.d.ts.map +1 -0
  87. package/dist/v2/core/layout/types.js +1 -0
  88. package/dist/v2/core/scales/band.d.ts +15 -0
  89. package/dist/v2/core/scales/band.d.ts.map +1 -0
  90. package/dist/v2/core/scales/band.js +34 -0
  91. package/dist/v2/core/scales/domain.d.ts +6 -0
  92. package/dist/v2/core/scales/domain.d.ts.map +1 -0
  93. package/dist/v2/core/scales/domain.js +109 -0
  94. package/dist/v2/core/scales/index.d.ts +7 -0
  95. package/dist/v2/core/scales/index.d.ts.map +1 -0
  96. package/dist/v2/core/scales/index.js +5 -0
  97. package/dist/v2/core/scales/linear.d.ts +8 -0
  98. package/dist/v2/core/scales/linear.d.ts.map +1 -0
  99. package/dist/v2/core/scales/linear.js +22 -0
  100. package/dist/v2/core/scales/ticks.d.ts +4 -0
  101. package/dist/v2/core/scales/ticks.d.ts.map +1 -0
  102. package/dist/v2/core/scales/ticks.js +111 -0
  103. package/dist/v2/core/scales/time.d.ts +8 -0
  104. package/dist/v2/core/scales/time.d.ts.map +1 -0
  105. package/dist/v2/core/scales/time.js +23 -0
  106. package/dist/v2/core/scales/types.d.ts +46 -0
  107. package/dist/v2/core/scales/types.d.ts.map +1 -0
  108. package/dist/v2/core/scales/types.js +1 -0
  109. package/dist/v2/index.d.ts +1 -0
  110. package/dist/v2/index.js +1 -0
  111. package/dist/v2/react-native/charts/bar/BarChart.d.ts +6 -0
  112. package/dist/v2/react-native/charts/bar/BarChart.d.ts.map +1 -0
  113. package/dist/v2/react-native/charts/bar/BarChart.js +199 -0
  114. package/dist/v2/react-native/charts/bar/BarChartSurface.d.ts +36 -0
  115. package/dist/v2/react-native/charts/bar/BarChartSurface.d.ts.map +1 -0
  116. package/dist/v2/react-native/charts/bar/BarChartSurface.js +134 -0
  117. package/dist/v2/react-native/charts/bar/StackedBarChart.d.ts +4 -0
  118. package/dist/v2/react-native/charts/bar/StackedBarChart.d.ts.map +1 -0
  119. package/dist/v2/react-native/charts/bar/StackedBarChart.js +9 -0
  120. package/dist/v2/react-native/charts/bar/accessibility.d.ts +31 -0
  121. package/dist/v2/react-native/charts/bar/accessibility.d.ts.map +1 -0
  122. package/dist/v2/react-native/charts/bar/accessibility.js +87 -0
  123. package/dist/v2/react-native/charts/bar/interaction.d.ts +18 -0
  124. package/dist/v2/react-native/charts/bar/interaction.d.ts.map +1 -0
  125. package/dist/v2/react-native/charts/bar/interaction.js +62 -0
  126. package/dist/v2/react-native/charts/bar/model.d.ts +3 -0
  127. package/dist/v2/react-native/charts/bar/model.d.ts.map +1 -0
  128. package/dist/v2/react-native/charts/bar/model.js +326 -0
  129. package/dist/v2/react-native/charts/bar/modelUtils.d.ts +27 -0
  130. package/dist/v2/react-native/charts/bar/modelUtils.d.ts.map +1 -0
  131. package/dist/v2/react-native/charts/bar/modelUtils.js +58 -0
  132. package/dist/v2/react-native/charts/bar/options.d.ts +7 -0
  133. package/dist/v2/react-native/charts/bar/options.d.ts.map +1 -0
  134. package/dist/v2/react-native/charts/bar/options.js +49 -0
  135. package/dist/v2/react-native/charts/bar/rendererSafety.d.ts +12 -0
  136. package/dist/v2/react-native/charts/bar/rendererSafety.d.ts.map +1 -0
  137. package/dist/v2/react-native/charts/bar/rendererSafety.js +31 -0
  138. package/dist/v2/react-native/charts/bar/selectionAnimation.d.ts +42 -0
  139. package/dist/v2/react-native/charts/bar/selectionAnimation.d.ts.map +1 -0
  140. package/dist/v2/react-native/charts/bar/selectionAnimation.js +158 -0
  141. package/dist/v2/react-native/charts/bar/stackedCompat.d.ts +55 -0
  142. package/dist/v2/react-native/charts/bar/stackedCompat.d.ts.map +1 -0
  143. package/dist/v2/react-native/charts/bar/stackedCompat.js +105 -0
  144. package/dist/v2/react-native/charts/bar/tooltip.d.ts +11 -0
  145. package/dist/v2/react-native/charts/bar/tooltip.d.ts.map +1 -0
  146. package/dist/v2/react-native/charts/bar/tooltip.js +18 -0
  147. package/dist/v2/react-native/charts/bar/tooltipModel.d.ts +33 -0
  148. package/dist/v2/react-native/charts/bar/tooltipModel.d.ts.map +1 -0
  149. package/dist/v2/react-native/charts/bar/tooltipModel.js +46 -0
  150. package/dist/v2/react-native/charts/bar/tooltipPlacement.d.ts +9 -0
  151. package/dist/v2/react-native/charts/bar/tooltipPlacement.d.ts.map +1 -0
  152. package/dist/v2/react-native/charts/bar/tooltipPlacement.js +9 -0
  153. package/dist/v2/react-native/charts/bar/types.d.ts +211 -0
  154. package/dist/v2/react-native/charts/bar/types.d.ts.map +1 -0
  155. package/dist/v2/react-native/charts/bar/types.js +1 -0
  156. package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.d.ts +10 -0
  157. package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.d.ts.map +1 -0
  158. package/dist/v2/react-native/charts/bar/useAnimatedTooltipModel.js +87 -0
  159. package/dist/v2/react-native/charts/bar/viewport.d.ts +20 -0
  160. package/dist/v2/react-native/charts/bar/viewport.d.ts.map +1 -0
  161. package/dist/v2/react-native/charts/bar/viewport.js +47 -0
  162. package/dist/v2/react-native/charts/contribution/ContributionGraph.d.ts +13 -0
  163. package/dist/v2/react-native/charts/contribution/ContributionGraph.d.ts.map +1 -0
  164. package/dist/v2/react-native/charts/contribution/ContributionGraph.js +159 -0
  165. package/dist/v2/react-native/charts/contribution/accessibility.d.ts +25 -0
  166. package/dist/v2/react-native/charts/contribution/accessibility.d.ts.map +1 -0
  167. package/dist/v2/react-native/charts/contribution/accessibility.js +50 -0
  168. package/dist/v2/react-native/charts/contribution/interaction.d.ts +23 -0
  169. package/dist/v2/react-native/charts/contribution/interaction.d.ts.map +1 -0
  170. package/dist/v2/react-native/charts/contribution/interaction.js +75 -0
  171. package/dist/v2/react-native/charts/contribution/model.d.ts +17 -0
  172. package/dist/v2/react-native/charts/contribution/model.d.ts.map +1 -0
  173. package/dist/v2/react-native/charts/contribution/model.js +102 -0
  174. package/dist/v2/react-native/charts/contribution/types.d.ts +71 -0
  175. package/dist/v2/react-native/charts/contribution/types.d.ts.map +1 -0
  176. package/dist/v2/react-native/charts/contribution/types.js +1 -0
  177. package/dist/v2/react-native/charts/line/AreaChart.d.ts +3 -0
  178. package/dist/v2/react-native/charts/line/AreaChart.d.ts.map +1 -0
  179. package/dist/v2/react-native/charts/line/AreaChart.js +3 -0
  180. package/dist/v2/react-native/charts/line/ChartSurface.d.ts +16 -0
  181. package/dist/v2/react-native/charts/line/ChartSurface.d.ts.map +1 -0
  182. package/dist/v2/react-native/charts/line/ChartSurface.js +151 -0
  183. package/dist/v2/react-native/charts/line/LineChart.d.ts +6 -0
  184. package/dist/v2/react-native/charts/line/LineChart.d.ts.map +1 -0
  185. package/dist/v2/react-native/charts/line/LineChart.js +294 -0
  186. package/dist/v2/react-native/charts/line/StickyYAxis.d.ts +15 -0
  187. package/dist/v2/react-native/charts/line/StickyYAxis.d.ts.map +1 -0
  188. package/dist/v2/react-native/charts/line/StickyYAxis.js +26 -0
  189. package/dist/v2/react-native/charts/line/accessibility.d.ts +34 -0
  190. package/dist/v2/react-native/charts/line/accessibility.d.ts.map +1 -0
  191. package/dist/v2/react-native/charts/line/accessibility.js +103 -0
  192. package/dist/v2/react-native/charts/line/axisLabels.d.ts +37 -0
  193. package/dist/v2/react-native/charts/line/axisLabels.d.ts.map +1 -0
  194. package/dist/v2/react-native/charts/line/axisLabels.js +55 -0
  195. package/dist/v2/react-native/charts/line/debugLayout.d.ts +26 -0
  196. package/dist/v2/react-native/charts/line/debugLayout.d.ts.map +1 -0
  197. package/dist/v2/react-native/charts/line/debugLayout.js +77 -0
  198. package/dist/v2/react-native/charts/line/debugOverlay.d.ts +9 -0
  199. package/dist/v2/react-native/charts/line/debugOverlay.d.ts.map +1 -0
  200. package/dist/v2/react-native/charts/line/debugOverlay.js +30 -0
  201. package/dist/v2/react-native/charts/line/defaultTooltip.d.ts +3 -0
  202. package/dist/v2/react-native/charts/line/defaultTooltip.d.ts.map +1 -0
  203. package/dist/v2/react-native/charts/line/defaultTooltip.js +17 -0
  204. package/dist/v2/react-native/charts/line/interaction.d.ts +82 -0
  205. package/dist/v2/react-native/charts/line/interaction.d.ts.map +1 -0
  206. package/dist/v2/react-native/charts/line/interaction.js +94 -0
  207. package/dist/v2/react-native/charts/line/legend.d.ts +35 -0
  208. package/dist/v2/react-native/charts/line/legend.d.ts.map +1 -0
  209. package/dist/v2/react-native/charts/line/legend.js +95 -0
  210. package/dist/v2/react-native/charts/line/markers.d.ts +11 -0
  211. package/dist/v2/react-native/charts/line/markers.d.ts.map +1 -0
  212. package/dist/v2/react-native/charts/line/markers.js +52 -0
  213. package/dist/v2/react-native/charts/line/options.d.ts +172 -0
  214. package/dist/v2/react-native/charts/line/options.d.ts.map +1 -0
  215. package/dist/v2/react-native/charts/line/options.js +168 -0
  216. package/dist/v2/react-native/charts/line/outsidePressSurfaces.d.ts +15 -0
  217. package/dist/v2/react-native/charts/line/outsidePressSurfaces.d.ts.map +1 -0
  218. package/dist/v2/react-native/charts/line/outsidePressSurfaces.js +37 -0
  219. package/dist/v2/react-native/charts/line/overviewProps.d.ts +45 -0
  220. package/dist/v2/react-native/charts/line/overviewProps.d.ts.map +1 -0
  221. package/dist/v2/react-native/charts/line/overviewProps.js +4 -0
  222. package/dist/v2/react-native/charts/line/rangeSelector.d.ts +19 -0
  223. package/dist/v2/react-native/charts/line/rangeSelector.d.ts.map +1 -0
  224. package/dist/v2/react-native/charts/line/rangeSelector.js +185 -0
  225. package/dist/v2/react-native/charts/line/rangeSelectorConfig.d.ts +38 -0
  226. package/dist/v2/react-native/charts/line/rangeSelectorConfig.d.ts.map +1 -0
  227. package/dist/v2/react-native/charts/line/rangeSelectorConfig.js +41 -0
  228. package/dist/v2/react-native/charts/line/referenceLabelPlacement.d.ts +21 -0
  229. package/dist/v2/react-native/charts/line/referenceLabelPlacement.d.ts.map +1 -0
  230. package/dist/v2/react-native/charts/line/referenceLabelPlacement.js +113 -0
  231. package/dist/v2/react-native/charts/line/references.d.ts +62 -0
  232. package/dist/v2/react-native/charts/line/references.d.ts.map +1 -0
  233. package/dist/v2/react-native/charts/line/references.js +156 -0
  234. package/dist/v2/react-native/charts/line/renderer.d.ts +4 -0
  235. package/dist/v2/react-native/charts/line/renderer.d.ts.map +1 -0
  236. package/dist/v2/react-native/charts/line/renderer.js +23 -0
  237. package/dist/v2/react-native/charts/line/responders.d.ts +13 -0
  238. package/dist/v2/react-native/charts/line/responders.d.ts.map +1 -0
  239. package/dist/v2/react-native/charts/line/responders.js +62 -0
  240. package/dist/v2/react-native/charts/line/selection.d.ts +31 -0
  241. package/dist/v2/react-native/charts/line/selection.d.ts.map +1 -0
  242. package/dist/v2/react-native/charts/line/selection.js +26 -0
  243. package/dist/v2/react-native/charts/line/seriesInput.d.ts +4 -0
  244. package/dist/v2/react-native/charts/line/seriesInput.d.ts.map +1 -0
  245. package/dist/v2/react-native/charts/line/seriesInput.js +13 -0
  246. package/dist/v2/react-native/charts/line/seriesStyles.d.ts +20 -0
  247. package/dist/v2/react-native/charts/line/seriesStyles.d.ts.map +1 -0
  248. package/dist/v2/react-native/charts/line/seriesStyles.js +33 -0
  249. package/dist/v2/react-native/charts/line/stickyYAxisLayout.d.ts +6 -0
  250. package/dist/v2/react-native/charts/line/stickyYAxisLayout.d.ts.map +1 -0
  251. package/dist/v2/react-native/charts/line/stickyYAxisLayout.js +2 -0
  252. package/dist/v2/react-native/charts/line/text.d.ts +7 -0
  253. package/dist/v2/react-native/charts/line/text.d.ts.map +1 -0
  254. package/dist/v2/react-native/charts/line/text.js +7 -0
  255. package/dist/v2/react-native/charts/line/thresholdRendering.d.ts +28 -0
  256. package/dist/v2/react-native/charts/line/thresholdRendering.d.ts.map +1 -0
  257. package/dist/v2/react-native/charts/line/thresholdRendering.js +145 -0
  258. package/dist/v2/react-native/charts/line/tooltip.d.ts +70 -0
  259. package/dist/v2/react-native/charts/line/tooltip.d.ts.map +1 -0
  260. package/dist/v2/react-native/charts/line/tooltip.js +87 -0
  261. package/dist/v2/react-native/charts/line/types.d.ts +371 -0
  262. package/dist/v2/react-native/charts/line/types.d.ts.map +1 -0
  263. package/dist/v2/react-native/charts/line/types.js +1 -0
  264. package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.d.ts +13 -0
  265. package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.d.ts.map +1 -0
  266. package/dist/v2/react-native/charts/line/useAnimatedTooltipModel.js +84 -0
  267. package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.d.ts +5 -0
  268. package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.d.ts.map +1 -0
  269. package/dist/v2/react-native/charts/line/useAnimatedYAxisLabels.js +141 -0
  270. package/dist/v2/react-native/charts/line/useChartModel.d.ts +103 -0
  271. package/dist/v2/react-native/charts/line/useChartModel.d.ts.map +1 -0
  272. package/dist/v2/react-native/charts/line/useChartModel.js +367 -0
  273. package/dist/v2/react-native/charts/line/useDebugLayout.d.ts +16 -0
  274. package/dist/v2/react-native/charts/line/useDebugLayout.d.ts.map +1 -0
  275. package/dist/v2/react-native/charts/line/useDebugLayout.js +35 -0
  276. package/dist/v2/react-native/charts/line/utils.d.ts +10 -0
  277. package/dist/v2/react-native/charts/line/utils.d.ts.map +1 -0
  278. package/dist/v2/react-native/charts/line/utils.js +40 -0
  279. package/dist/v2/react-native/charts/line/viewportInteraction.d.ts +3 -0
  280. package/dist/v2/react-native/charts/line/viewportInteraction.d.ts.map +1 -0
  281. package/dist/v2/react-native/charts/line/viewportInteraction.js +1 -0
  282. package/dist/v2/react-native/charts/line/viewportPinchZoom.d.ts +2 -0
  283. package/dist/v2/react-native/charts/line/viewportPinchZoom.d.ts.map +1 -0
  284. package/dist/v2/react-native/charts/line/viewportPinchZoom.js +1 -0
  285. package/dist/v2/react-native/charts/line/xLabelCandidates.d.ts +13 -0
  286. package/dist/v2/react-native/charts/line/xLabelCandidates.d.ts.map +1 -0
  287. package/dist/v2/react-native/charts/line/xLabelCandidates.js +23 -0
  288. package/dist/v2/react-native/charts/line/xLabels.d.ts +39 -0
  289. package/dist/v2/react-native/charts/line/xLabels.d.ts.map +1 -0
  290. package/dist/v2/react-native/charts/line/xLabels.js +289 -0
  291. package/dist/v2/react-native/charts/line/xScale.d.ts +6 -0
  292. package/dist/v2/react-native/charts/line/xScale.d.ts.map +1 -0
  293. package/dist/v2/react-native/charts/line/xScale.js +25 -0
  294. package/dist/v2/react-native/charts/line/yAxisModel.d.ts +29 -0
  295. package/dist/v2/react-native/charts/line/yAxisModel.d.ts.map +1 -0
  296. package/dist/v2/react-native/charts/line/yAxisModel.js +39 -0
  297. package/dist/v2/react-native/charts/pie/PieChart.d.ts +7 -0
  298. package/dist/v2/react-native/charts/pie/PieChart.d.ts.map +1 -0
  299. package/dist/v2/react-native/charts/pie/PieChart.js +253 -0
  300. package/dist/v2/react-native/charts/pie/accessibility.d.ts +28 -0
  301. package/dist/v2/react-native/charts/pie/accessibility.d.ts.map +1 -0
  302. package/dist/v2/react-native/charts/pie/accessibility.js +49 -0
  303. package/dist/v2/react-native/charts/pie/activeSlice.d.ts +15 -0
  304. package/dist/v2/react-native/charts/pie/activeSlice.d.ts.map +1 -0
  305. package/dist/v2/react-native/charts/pie/activeSlice.js +26 -0
  306. package/dist/v2/react-native/charts/pie/arcLabels.d.ts +32 -0
  307. package/dist/v2/react-native/charts/pie/arcLabels.d.ts.map +1 -0
  308. package/dist/v2/react-native/charts/pie/arcLabels.js +191 -0
  309. package/dist/v2/react-native/charts/pie/interaction.d.ts +26 -0
  310. package/dist/v2/react-native/charts/pie/interaction.d.ts.map +1 -0
  311. package/dist/v2/react-native/charts/pie/interaction.js +66 -0
  312. package/dist/v2/react-native/charts/pie/model.d.ts +15 -0
  313. package/dist/v2/react-native/charts/pie/model.d.ts.map +1 -0
  314. package/dist/v2/react-native/charts/pie/model.js +157 -0
  315. package/dist/v2/react-native/charts/pie/selectionAnimation.d.ts +33 -0
  316. package/dist/v2/react-native/charts/pie/selectionAnimation.d.ts.map +1 -0
  317. package/dist/v2/react-native/charts/pie/selectionAnimation.js +121 -0
  318. package/dist/v2/react-native/charts/pie/sliceSeparator.d.ts +7 -0
  319. package/dist/v2/react-native/charts/pie/sliceSeparator.d.ts.map +1 -0
  320. package/dist/v2/react-native/charts/pie/sliceSeparator.js +26 -0
  321. package/dist/v2/react-native/charts/pie/slices.d.ts +20 -0
  322. package/dist/v2/react-native/charts/pie/slices.d.ts.map +1 -0
  323. package/dist/v2/react-native/charts/pie/slices.js +54 -0
  324. package/dist/v2/react-native/charts/pie/types.d.ts +165 -0
  325. package/dist/v2/react-native/charts/pie/types.d.ts.map +1 -0
  326. package/dist/v2/react-native/charts/pie/types.js +1 -0
  327. package/dist/v2/react-native/charts/progress/ProgressChart.d.ts +7 -0
  328. package/dist/v2/react-native/charts/progress/ProgressChart.d.ts.map +1 -0
  329. package/dist/v2/react-native/charts/progress/ProgressChart.js +111 -0
  330. package/dist/v2/react-native/charts/progress/accessibility.d.ts +26 -0
  331. package/dist/v2/react-native/charts/progress/accessibility.d.ts.map +1 -0
  332. package/dist/v2/react-native/charts/progress/accessibility.js +71 -0
  333. package/dist/v2/react-native/charts/progress/animation.d.ts +36 -0
  334. package/dist/v2/react-native/charts/progress/animation.d.ts.map +1 -0
  335. package/dist/v2/react-native/charts/progress/animation.js +103 -0
  336. package/dist/v2/react-native/charts/progress/model.d.ts +14 -0
  337. package/dist/v2/react-native/charts/progress/model.d.ts.map +1 -0
  338. package/dist/v2/react-native/charts/progress/model.js +133 -0
  339. package/dist/v2/react-native/charts/progress/types.d.ts +72 -0
  340. package/dist/v2/react-native/charts/progress/types.d.ts.map +1 -0
  341. package/dist/v2/react-native/charts/progress/types.js +1 -0
  342. package/dist/v2/react-native/index.d.ts +24 -0
  343. package/dist/v2/react-native/index.d.ts.map +1 -0
  344. package/dist/v2/react-native/index.js +14 -0
  345. package/dist/v2/react-native/selection/ChartSelectionProvider.d.ts +27 -0
  346. package/dist/v2/react-native/selection/ChartSelectionProvider.d.ts.map +1 -0
  347. package/dist/v2/react-native/selection/ChartSelectionProvider.js +92 -0
  348. package/dist/v2/react-native/selection/index.d.ts +2 -0
  349. package/dist/v2/react-native/selection/index.d.ts.map +1 -0
  350. package/dist/v2/react-native/selection/index.js +1 -0
  351. package/dist/v2/react-native/selection/scope.d.ts +16 -0
  352. package/dist/v2/react-native/selection/scope.d.ts.map +1 -0
  353. package/dist/v2/react-native/selection/scope.js +18 -0
  354. package/dist/v2/react-native/theme/index.d.ts +4 -0
  355. package/dist/v2/react-native/theme/index.d.ts.map +1 -0
  356. package/dist/v2/react-native/theme/index.js +2 -0
  357. package/dist/v2/react-native/theme/presets.d.ts +84 -0
  358. package/dist/v2/react-native/theme/presets.d.ts.map +1 -0
  359. package/dist/v2/react-native/theme/presets.js +298 -0
  360. package/dist/v2/react-native/theme/provider.d.ts +20 -0
  361. package/dist/v2/react-native/theme/provider.d.ts.map +1 -0
  362. package/dist/v2/react-native/theme/provider.js +27 -0
  363. package/dist/v2/react-native/viewport/bounds.d.ts +7 -0
  364. package/dist/v2/react-native/viewport/bounds.d.ts.map +1 -0
  365. package/dist/v2/react-native/viewport/bounds.js +7 -0
  366. package/dist/v2/react-native/viewport/config.d.ts +13 -0
  367. package/dist/v2/react-native/viewport/config.d.ts.map +1 -0
  368. package/dist/v2/react-native/viewport/config.js +64 -0
  369. package/dist/v2/react-native/viewport/pan.d.ts +23 -0
  370. package/dist/v2/react-native/viewport/pan.d.ts.map +1 -0
  371. package/dist/v2/react-native/viewport/pan.js +110 -0
  372. package/dist/v2/react-native/viewport/pinchZoom.d.ts +17 -0
  373. package/dist/v2/react-native/viewport/pinchZoom.d.ts.map +1 -0
  374. package/dist/v2/react-native/viewport/pinchZoom.js +131 -0
  375. package/dist/v2/react-native/viewport/types.d.ts +55 -0
  376. package/dist/v2/react-native/viewport/types.d.ts.map +1 -0
  377. package/dist/v2/react-native/viewport/types.js +1 -0
  378. package/dist/v2/svg-renderer/capabilities.d.ts +3 -0
  379. package/dist/v2/svg-renderer/capabilities.d.ts.map +1 -0
  380. package/dist/v2/svg-renderer/capabilities.js +12 -0
  381. package/dist/v2/svg-renderer/clipPath.d.ts +4 -0
  382. package/dist/v2/svg-renderer/clipPath.d.ts.map +1 -0
  383. package/dist/v2/svg-renderer/clipPath.js +35 -0
  384. package/dist/v2/svg-renderer/defs.d.ts +6 -0
  385. package/dist/v2/svg-renderer/defs.d.ts.map +1 -0
  386. package/dist/v2/svg-renderer/defs.js +18 -0
  387. package/dist/v2/svg-renderer/ensureConsole.d.ts +4 -0
  388. package/dist/v2/svg-renderer/ensureConsole.d.ts.map +1 -0
  389. package/dist/v2/svg-renderer/ensureConsole.js +54 -0
  390. package/dist/v2/svg-renderer/hitRegions.d.ts +3 -0
  391. package/dist/v2/svg-renderer/hitRegions.d.ts.map +1 -0
  392. package/dist/v2/svg-renderer/hitRegions.js +6 -0
  393. package/dist/v2/svg-renderer/index.d.ts +14 -0
  394. package/dist/v2/svg-renderer/index.d.ts.map +1 -0
  395. package/dist/v2/svg-renderer/index.js +13 -0
  396. package/dist/v2/svg-renderer/layerOrder.d.ts +19 -0
  397. package/dist/v2/svg-renderer/layerOrder.d.ts.map +1 -0
  398. package/dist/v2/svg-renderer/layerOrder.js +18 -0
  399. package/dist/v2/svg-renderer/layers.d.ts +3 -0
  400. package/dist/v2/svg-renderer/layers.d.ts.map +1 -0
  401. package/dist/v2/svg-renderer/layers.js +4 -0
  402. package/dist/v2/svg-renderer/primitives.d.ts +12 -0
  403. package/dist/v2/svg-renderer/primitives.d.ts.map +1 -0
  404. package/dist/v2/svg-renderer/primitives.js +13 -0
  405. package/dist/v2/svg-renderer/renderer.d.ts +4 -0
  406. package/dist/v2/svg-renderer/renderer.d.ts.map +1 -0
  407. package/dist/v2/svg-renderer/renderer.js +24 -0
  408. package/dist/v2/svg-renderer/symbolGeometry.d.ts +6 -0
  409. package/dist/v2/svg-renderer/symbolGeometry.d.ts.map +1 -0
  410. package/dist/v2/svg-renderer/symbolGeometry.js +10 -0
  411. package/dist/v2/svg-renderer/symbols.d.ts +3 -0
  412. package/dist/v2/svg-renderer/symbols.d.ts.map +1 -0
  413. package/dist/v2/svg-renderer/symbols.js +23 -0
  414. package/dist/v2/svg-renderer/testIds.d.ts +2 -0
  415. package/dist/v2/svg-renderer/testIds.d.ts.map +1 -0
  416. package/dist/v2/svg-renderer/testIds.js +10 -0
  417. package/dist/v2/svg-renderer/textMeasurement.d.ts +4 -0
  418. package/dist/v2/svg-renderer/textMeasurement.d.ts.map +1 -0
  419. package/dist/v2/svg-renderer/textMeasurement.js +37 -0
  420. package/dist/v2/svg-renderer/types.d.ts +134 -0
  421. package/dist/v2/svg-renderer/types.d.ts.map +1 -0
  422. package/dist/v2/svg-renderer/types.js +1 -0
  423. package/package.json +56 -50
  424. package/v2/index.d.ts +1 -0
  425. package/v2/index.js +1 -0
  426. package/v2/package.json +6 -0
  427. package/scripts/chartkit-codemod.mjs +0 -256
@@ -478,4 +478,4 @@ var LineChart = /** @class */ (function (_super) {
478
478
  return LineChart;
479
479
  }(AbstractChart));
480
480
  export default LineChart;
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZUNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NoYXJ0cy9saW5lL0xpbmVDaGFydC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQW9CLE1BQU0sT0FBTyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUVMLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxNQUFNLEVBQ04sQ0FBQyxFQUNELElBQUksRUFDSixPQUFPLEVBQ1AsUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBQ0osTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLGFBR04sTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFOUQsSUFBTSxlQUFlLEdBQUcsVUFBQyxLQUFjLEVBQUUsUUFBZ0I7SUFDdkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxD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RSxVQUFvQixFQUNoQyxZQUFZLEVBQUUsWUFBc0IsRUFDcEMsZ0JBQWdCLGtCQUFBLEVBQ2hCLDZCQUE2QiwrQkFBQSxJQUM3QixDQUNOO1lBQUEsRUFBRSxDQUFDLENBQ0g7WUFBQSxDQUFDLENBQUMsQ0FDQTtjQUFBLENBQUMsU0FBUztnQkFDUixTQUFTLHVCQUNKLE1BQU0sS0FDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDbkIsVUFBVSxZQUFBLEVBQ1YsWUFBWSxjQUFBLElBQ1osQ0FDTjtZQUFBLEVBQUUsQ0FBQyxDQUNMO1VBQUEsRUFBRSxDQUFDLENBQ0w7UUFBQSxFQUFFLEdBQUcsQ0FDTDtRQUFBLENBQUMsaUJBQWlCLElBQUksQ0FDcEIsQ0FBQyxVQUFVLENBQ1QsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUMvQixxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM1Qyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUN0QyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUN4QixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUN0QjtvQkFDRTt3QkFDRSxXQUFXLEVBQUU7NEJBQ1gsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLDZCQUE2QixFQUFFO3lCQUNwRDtxQkFDRjtpQkFDRixFQUNELEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUMzQixDQUFDLENBQ0YsVUFBVSxDQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNmLENBQ0gsQ0FDSDtNQUFBLEVBQUUsSUFBSSxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFDSCxnQkFBQztBQUFELENBQUMsQUExekJELENBQXdCLGFBQWEsR0EwekJwQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWQsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHRJbnB1dCxcbiAgVmlldyxcbiAgVmlld1N0eWxlXG59IGZyb20gXCJyZWFjdC1uYXRpdmVcIjtcbmltcG9ydCB7XG4gIENpcmNsZSxcbiAgRyxcbiAgUGF0aCxcbiAgUG9seWdvbixcbiAgUG9seWxpbmUsXG4gIFJlY3QsXG4gIFN2Z1xufSBmcm9tIFwicmVhY3QtbmF0aXZlLXN2Z1wiO1xuXG5pbXBvcnQgQWJzdHJhY3RDaGFydCwge1xuICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICBBYnN0cmFjdENoYXJ0UHJvcHNcbn0gZnJvbSBcIi4uLy4uL3NoYXJlZC9BYnN0cmFjdENoYXJ0XCI7XG5pbXBvcnQgeyBDaGFydERhdGEsIERhdGFzZXQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXROdW1iZXJQcm9wIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC91dGlsc1wiO1xuaW1wb3J0IHsgTGVnZW5kSXRlbSB9IGZyb20gXCIuL0xlZ2VuZEl0ZW1cIjtcblxubGV0IEFuaW1hdGVkQ2lyY2xlID0gQW5pbWF0ZWQuY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoQ2lyY2xlKTtcblxuY29uc3QgZ2V0RmluaXRlTnVtYmVyID0gKHZhbHVlOiB1bmtub3duLCBmYWxsYmFjazogbnVtYmVyKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZmFsbGJhY2s7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IGZhbGxiYWNrO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBMaW5lQ2hhcnREYXRhIGV4dGVuZHMgQ2hhcnREYXRhIHtcbiAgbGVnZW5kPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNoYXJ0UHJvcHMgZXh0ZW5kcyBBYnN0cmFjdENoYXJ0UHJvcHMge1xuICAvKipcbiAgICogRGF0YSBmb3IgdGhlIGNoYXJ0LlxuICAgKlxuICAgKiBFeGFtcGxlIGZyb20gW2RvY3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9pbmRpZXNwaXJpdC9yZWFjdC1uYXRpdmUtY2hhcnQta2l0I2xpbmUtY2hhcnQpOlxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNvbnN0IGRhdGEgPSB7XG4gICAqICAgbGFiZWxzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnXSxcbiAgICogICBkYXRhc2V0czogW3tcbiAgICogICAgIGRhdGE6IFsgMjAsIDQ1LCAyOCwgODAsIDk5LCA0MyBdLFxuICAgKiAgICAgY29sb3I6IChvcGFjaXR5ID0gMSkgPT4gYHJnYmEoMTM0LCA2NSwgMjQ0LCAke29wYWNpdHl9KWAsIC8vIG9wdGlvbmFsXG4gICAqICAgICBzdHJva2VXaWR0aDogMiAvLyBvcHRpb25hbFxuICAgKiAgIH1dLFxuICAgKiAgIGxlZ2VuZDogW1wiUmFpbnkgRGF5c1wiLCBcIlN1bm55IERheXNcIiwgXCJTbm93eSBEYXlzXCJdIC8vIG9wdGlvbmFsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBkYXRhOiBMaW5lQ2hhcnREYXRhO1xuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGNoYXJ0LCB1c2UgJ0RpbWVuc2lvbnMnIGxpYnJhcnkgdG8gZ2V0IHRoZSB3aWR0aCBvZiB5b3VyIHNjcmVlbiBmb3IgcmVzcG9uc2l2ZS5cbiAgICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTaG93IGRvdHMgb24gdGhlIGxpbmUgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aERvdHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyBzaGFkb3cgZm9yIGxpbmUgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aFNoYWRvdz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93IGlubmVyIGRhc2hlZCBsaW5lcyAtIGRlZmF1bHQ6IFRydWUuXG4gICAqL1xuXG4gIHdpdGhTY3JvbGxhYmxlRG90PzogYm9vbGVhbjtcbiAgd2l0aElubmVyTGluZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyBvdXRlciBkYXNoZWQgbGluZXMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aE91dGVyTGluZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyB2ZXJ0aWNhbCBsaW5lcyAtIGRlZmF1bHQ6IFRydWUuXG4gICAqL1xuICB3aXRoVmVydGljYWxMaW5lcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93IGhvcml6b250YWwgbGluZXMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aEhvcml6b250YWxMaW5lcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93IHZlcnRpY2FsIGxhYmVscyAtIGRlZmF1bHQ6IFRydWUuXG4gICAqL1xuICB3aXRoVmVydGljYWxMYWJlbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyBob3Jpem9udGFsIGxhYmVscyAtIGRlZmF1bHQ6IFRydWUuXG4gICAqL1xuICB3aXRoSG9yaXpvbnRhbExhYmVscz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZW5kZXIgY2hhcnRzIGZyb20gMCBub3QgZnJvbSB0aGUgbWluaW11bSB2YWx1ZS4gLSBkZWZhdWx0OiBGYWxzZS5cbiAgICovXG4gIGZyb21aZXJvPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByZXBlbmQgdGV4dCB0byBob3Jpem9udGFsIGxhYmVscyAtLSBkZWZhdWx0OiAnJy5cbiAgICovXG4gIHlBeGlzTGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBcHBlbmQgdGV4dCB0byBob3Jpem9udGFsIGxhYmVscyAtLSBkZWZhdWx0OiAnJy5cbiAgICovXG4gIHlBeGlzU3VmZml4Pzogc3RyaW5nO1xuICAvKipcbiAgICogUHJlcGVuZCB0ZXh0IHRvIHZlcnRpY2FsIGxhYmVscyAtLSBkZWZhdWx0OiAnJy5cbiAgICovXG4gIHhBeGlzTGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGNoYXJ0LCBzZWUgZXhhbXBsZTpcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBjaGFydENvbmZpZyA9IHtcbiAgICogICBiYWNrZ3JvdW5kR3JhZGllbnRGcm9tOiBcIiMxRTI5MjNcIixcbiAgICogICBiYWNrZ3JvdW5kR3JhZGllbnRGcm9tT3BhY2l0eTogMCxcbiAgICogICBiYWNrZ3JvdW5kR3JhZGllbnRUbzogXCIjMDgxMzBEXCIsXG4gICAqICAgYmFja2dyb3VuZEdyYWRpZW50VG9PcGFjaXR5OiAwLjUsXG4gICAqICAgY29sb3I6IChvcGFjaXR5ID0gMSkgPT4gYHJnYmEoMjYsIDI1NSwgMTQ2LCAke29wYWNpdHl9KWAsXG4gICAqICAgbGFiZWxDb2xvcjogKG9wYWNpdHkgPSAxKSA9PiBgcmdiYSgyNiwgMjU1LCAxNDYsICR7b3BhY2l0eX0pYCxcbiAgICogICBzdHJva2VXaWR0aDogMiwgLy8gb3B0aW9uYWwsIGRlZmF1bHQgM1xuICAgKiAgIGJhclBlcmNlbnRhZ2U6IDAuNVxuICAgKiB9O1xuICAgKiBgYGBcbiAgICovXG4gIGNoYXJ0Q29uZmlnPzogQWJzdHJhY3RDaGFydENvbmZpZztcblxuICAvKipcbiAgICogRGl2aWRlIGF4aXMgcXVhbnRpdHkgYnkgdGhlIGlucHV0IG51bWJlciAtLSBkZWZhdWx0OiAxLlxuICAgKi9cbiAgeUF4aXNJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmaW5lcyBpZiBjaGFydCBpcyB0cmFuc3BhcmVudFxuICAgKi9cbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIFt3aG9sZSBidW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2luZGllc3Bpcml0L3JlYWN0LW5hdGl2ZS1jaGFydC1raXQvYmxvYi9tYXN0ZXIvc3JjL2NoYXJ0cy9saW5lL0xpbmVDaGFydC50c3gpXG4gICAqIG9mIHN0dWZmIGFuZCBjYW4gcmVuZGVyIGV4dHJhIGVsZW1lbnRzLFxuICAgKiBzdWNoIGFzIGRhdGEgcG9pbnQgaW5mbyBvciBhZGRpdGlvbmFsIG1hcmt1cC5cbiAgICovXG4gIGRlY29yYXRvcj86IEZ1bmN0aW9uO1xuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIGRhdGEgcG9pbnQgaXMgY2xpY2tlZC5cbiAgICovXG4gIG9uRGF0YVBvaW50Q2xpY2s/OiAoZGF0YToge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBkYXRhc2V0OiBEYXRhc2V0O1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgZ2V0Q29sb3I6IChvcGFjaXR5OiBudW1iZXIpID0+IHN0cmluZztcbiAgfSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFN0eWxlIG9mIHRoZSBjb250YWluZXIgdmlldyBvZiB0aGUgY2hhcnQuXG4gICAqL1xuICBzdHlsZT86IFBhcnRpYWw8Vmlld1N0eWxlPjtcbiAgLyoqXG4gICAqIEFkZCB0aGlzIHByb3AgdG8gbWFrZSB0aGUgbGluZSBjaGFydCBzbW9vdGggYW5kIGN1cnZ5LlxuICAgKlxuICAgKiBbRXhhbXBsZV0oaHR0cHM6Ly9naXRodWIuY29tL2luZGllc3Bpcml0L3JlYWN0LW5hdGl2ZS1jaGFydC1raXQjYmV6aWVyLWxpbmUtY2hhcnQpXG4gICAqL1xuICBiZXppZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG90IGNvbG9yIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgY29sb3JzIG9mIGRvdHMgaW4gYSBsaW5lIGNoYXJ0LlxuICAgKiBUYWtlcyBgKGRhdGFQb2ludCwgZGF0YVBvaW50SW5kZXgpYCBhcyBhcmd1bWVudHMuXG4gICAqL1xuICBnZXREb3RDb2xvcj86IChkYXRhUG9pbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVycyBhZGRpdGlvbmFsIGNvbnRlbnQgZm9yIGRvdHMgaW4gYSBsaW5lIGNoYXJ0LlxuICAgKiBUYWtlcyBgKHt4LCB5LCBpbmRleH0pYCBhcyBhcmd1bWVudHMuXG4gICAqL1xuICByZW5kZXJEb3RDb250ZW50PzogKHBhcmFtczoge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBpbmRleERhdGE6IG51bWJlcjtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAvKipcbiAgICogUm90YXRpb24gYW5nbGUgb2YgdGhlIGhvcml6b250YWwgbGFiZWxzIC0gZGVmYXVsdCAwIChkZWdyZWVzKS5cbiAgICovXG4gIGhvcml6b250YWxMYWJlbFJvdGF0aW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogUm90YXRpb24gYW5nbGUgb2YgdGhlIHZlcnRpY2FsIGxhYmVscyAtIGRlZmF1bHQgMCAoZGVncmVlcykuXG4gICAqL1xuICB2ZXJ0aWNhbExhYmVsUm90YXRpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPZmZzZXQgZm9yIFkgYXhpcyBsYWJlbHMuXG4gICAqL1xuICB5TGFiZWxzT2Zmc2V0PzogbnVtYmVyO1xuICAvKipcbiAgICogT2Zmc2V0IGZvciBYIGF4aXMgbGFiZWxzLlxuICAgKi9cbiAgeExhYmVsc09mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGluZGljZXMgb2YgdGhlIGRhdGEgcG9pbnRzIHlvdSBkb24ndCB3YW50IHRvIGRpc3BsYXkuXG4gICAqL1xuICBoaWRlUG9pbnRzQXRJbmRleD86IG51bWJlcltdO1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgZGlzcGxheSB2YWx1ZSBvZiB0aGUgWSBsYWJlbC5cbiAgICogVGFrZXMgdGhlIHkgdmFsdWUgYXMgYXJndW1lbnQgYW5kIHNob3VsZCByZXR1cm4gdGhlIGRlc2lyYWJsZSBzdHJpbmcuXG4gICAqL1xuICBmb3JtYXRZTGFiZWw/OiAoeVZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3BsYXkgdmFsdWUgb2YgdGhlIFggbGFiZWwuXG4gICAqIFRha2VzIHRoZSBYIHZhbHVlIGFzIGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIHRoZSBkZXNpcmFibGUgc3RyaW5nLlxuICAgKi9cbiAgZm9ybWF0WExhYmVsPzogKHhWYWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm92aWRlIHByb3BzIGZvciBhIGRhdGEgcG9pbnQgZG90LlxuICAgKi9cbiAgZ2V0RG90UHJvcHM/OiAoZGF0YVBvaW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IG9iamVjdDtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCBsaW5lc1xuICAgKi9cbiAgc2VnbWVudHM/OiBudW1iZXI7XG59XG5cbnR5cGUgTGluZUNoYXJ0U3RhdGUgPSB7XG4gIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0OiBBbmltYXRlZC5WYWx1ZTtcbn07XG5cbmNsYXNzIExpbmVDaGFydCBleHRlbmRzIEFic3RyYWN0Q2hhcnQ8TGluZUNoYXJ0UHJvcHMsIExpbmVDaGFydFN0YXRlPiB7XG4gIGxhYmVsID0gUmVhY3QuY3JlYXRlUmVmPFRleHRJbnB1dD4oKTtcblxuICBzdGF0ZSA9IHtcbiAgICBzY3JvbGxhYmxlRG90SG9yaXpvbnRhbE9mZnNldDogbmV3IEFuaW1hdGVkLlZhbHVlKDApXG4gIH07XG5cbiAgZ2V0Q29sb3IgPSAoZGF0YXNldDogRGF0YXNldCwgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIChkYXRhc2V0LmNvbG9yIHx8IHRoaXMucHJvcHMuY2hhcnRDb25maWcuY29sb3IpKG9wYWNpdHkpO1xuICB9O1xuXG4gIGdldFN0cm9rZVdpZHRoID0gKGRhdGFzZXQ6IERhdGFzZXQpID0+IHtcbiAgICByZXR1cm4gZGF0YXNldC5zdHJva2VXaWR0aCB8fCB0aGlzLnByb3BzLmNoYXJ0Q29uZmlnLnN0cm9rZVdpZHRoIHx8IDM7XG4gIH07XG5cbiAgZ2V0Q2hhcnRSaWdodFBhZGRpbmcgPSAoZGF0YTogRGF0YXNldFtdLCB3aXRoRG90czogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHByb3BzRm9yRG90cyA9IHRoaXMucHJvcHMuY2hhcnRDb25maWc/LnByb3BzRm9yRG90cyA/PyB7fTtcbiAgICBjb25zdCBkb3RSYWRpdXMgPSB3aXRoRG90cyA/IGdldEZpbml0ZU51bWJlcihwcm9wc0ZvckRvdHMuciwgNCkgOiAwO1xuICAgIGNvbnN0IGRvdFN0cm9rZVdpZHRoID0gd2l0aERvdHNcbiAgICAgID8gZ2V0RmluaXRlTnVtYmVyKHByb3BzRm9yRG90cy5zdHJva2VXaWR0aCwgMClcbiAgICAgIDogMDtcbiAgICBjb25zdCBtYXhTdHJva2VXaWR0aCA9IGRhdGEucmVkdWNlKFxuICAgICAgKG1heFdpZHRoLCBkYXRhc2V0KSA9PiBNYXRoLm1heChtYXhXaWR0aCwgdGhpcy5nZXRTdHJva2VXaWR0aChkYXRhc2V0KSksXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiBNYXRoLmNlaWwoXG4gICAgICBNYXRoLm1heCg0LCBkb3RSYWRpdXMgKyBkb3RTdHJva2VXaWR0aCAvIDIsIG1heFN0cm9rZVdpZHRoIC8gMilcbiAgICApO1xuICB9O1xuXG4gIGdldERhdGFzID0gKGRhdGE6IERhdGFzZXRbXSk6IG51bWJlcltdID0+IHtcbiAgICByZXR1cm4gZGF0YS5yZWR1Y2UoXG4gICAgICAoYWNjLCBpdGVtKSA9PlxuICAgICAgICBpdGVtLmRhdGEgPyBbLi4uYWNjLCAuLi50aGlzLmdldFZhbGlkRGF0YShpdGVtLmRhdGEpXSA6IGFjYyxcbiAgICAgIFtdXG4gICAgKTtcbiAgfTtcblxuICBnZXRTdHJva2VEYXNoQXJyYXkgPSAoZGF0YXNldDogRGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IHsgc3Ryb2tlRGFzaEFycmF5IH0gPSBkYXRhc2V0O1xuXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3Ryb2tlRGFzaEFycmF5KVxuICAgICAgPyBzdHJva2VEYXNoQXJyYXkuam9pbihcIixcIilcbiAgICAgIDogc3Ryb2tlRGFzaEFycmF5O1xuICB9O1xuXG4gIGdldFByb3BzRm9yRG90cyA9ICh4OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHsgZ2V0RG90UHJvcHMsIGNoYXJ0Q29uZmlnIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREb3RQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZ2V0RG90UHJvcHMoeCwgaSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm9wc0ZvckRvdHMgPSB7fSB9ID0gY2hhcnRDb25maWc7XG5cbiAgICByZXR1cm4geyByOiBcIjRcIiwgLi4ucHJvcHNGb3JEb3RzIH07XG4gIH07XG5cbiAgcmVuZGVyRG90cyA9ICh7XG4gICAgZGF0YSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgb25EYXRhUG9pbnRDbGlja1xuICB9OiBQaWNrPFxuICAgIEFic3RyYWN0Q2hhcnRDb25maWcsXG4gICAgXCJkYXRhXCIgfCBcIndpZHRoXCIgfCBcImhlaWdodFwiIHwgXCJwYWRkaW5nUmlnaHRcIiB8IFwicGFkZGluZ1RvcFwiXG4gID4gJiB7XG4gICAgb25EYXRhUG9pbnRDbGljazogTGluZUNoYXJ0UHJvcHNbXCJvbkRhdGFQb2ludENsaWNrXCJdO1xuICB9KSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0OiBSZWFjdE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGdldERvdENvbG9yLFxuICAgICAgaGlkZVBvaW50c0F0SW5kZXggPSBbXSxcbiAgICAgIHJlbmRlckRvdENvbnRlbnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHhNYXggPSB0aGlzLmdldFhNYXhWYWx1ZXMoZGF0YSk7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhc2V0LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXRhc2V0LndpdGhEb3RzID09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgIGRhdGFzZXQuZGF0YS5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgIGlmIChoaWRlUG9pbnRzQXRJbmRleC5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN4ID0gcGFkZGluZ1JpZ2h0ICsgKGkgKiAod2lkdGggLSBwYWRkaW5nUmlnaHQpKSAvIHhNYXg7XG5cbiAgICAgICAgY29uc3QgY3kgPVxuICAgICAgICAgICgoYmFzZUhlaWdodCAtIHRoaXMuY2FsY0hlaWdodCh4LCBkYXRhcywgaGVpZ2h0KSkgLyA0KSAqIDMgK1xuICAgICAgICAgIHBhZGRpbmdUb3A7XG5cbiAgICAgICAgY29uc3Qgb25QcmVzc0luID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghb25EYXRhUG9pbnRDbGljayB8fCBoaWRlUG9pbnRzQXRJbmRleC5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uRGF0YVBvaW50Q2xpY2soe1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICB2YWx1ZTogeCxcbiAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICB4OiBjeCxcbiAgICAgICAgICAgIHk6IGN5LFxuICAgICAgICAgICAgZ2V0Q29sb3I6IChvcGFjaXR5KSA9PiB0aGlzLmdldENvbG9yKGRhdGFzZXQsIG9wYWNpdHkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByZXNzUHJvcHMgPSB7IG9uUHJlc3NJbiwgb25DbGljazogb25QcmVzc0luIH0gYXMgYW55O1xuXG4gICAgICAgIG91dHB1dC5wdXNoKFxuICAgICAgICAgIDxDaXJjbGVcbiAgICAgICAgICAgIGtleT17YGRvdC0ke2RhdGFzZXRJbmRleH0tJHtpfWB9XG4gICAgICAgICAgICBjeD17Y3h9XG4gICAgICAgICAgICBjeT17Y3l9XG4gICAgICAgICAgICBmaWxsPXtcbiAgICAgICAgICAgICAgdHlwZW9mIGdldERvdENvbG9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGdldERvdENvbG9yKHgsIGkpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdldENvbG9yKGRhdGFzZXQsIDAuOSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHsuLi5wcmVzc1Byb3BzfVxuICAgICAgICAgICAgey4uLnRoaXMuZ2V0UHJvcHNGb3JEb3RzKHgsIGkpfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIDxDaXJjbGVcbiAgICAgICAgICAgIGtleT17YGRvdC10b3VjaC0ke2RhdGFzZXRJbmRleH0tJHtpfWB9XG4gICAgICAgICAgICBjeD17Y3h9XG4gICAgICAgICAgICBjeT17Y3l9XG4gICAgICAgICAgICByPVwiMTRcIlxuICAgICAgICAgICAgZmlsbD1cIiNmZmZcIlxuICAgICAgICAgICAgZmlsbE9wYWNpdHk9ezB9XG4gICAgICAgICAgICB7Li4ucHJlc3NQcm9wc31cbiAgICAgICAgICAvPixcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtgZG90LWNvbnRlbnQtJHtkYXRhc2V0SW5kZXh9LSR7aX1gfT5cbiAgICAgICAgICAgIHtyZW5kZXJEb3RDb250ZW50KHsgeDogY3gsIHk6IGN5LCBpbmRleDogaSwgaW5kZXhEYXRhOiB4IH0pfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmVuZGVyU2Nyb2xsYWJsZURvdCA9ICh7XG4gICAgZGF0YSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQsXG4gICAgc2Nyb2xsYWJsZURvdEZpbGwsXG4gICAgc2Nyb2xsYWJsZURvdFN0cm9rZUNvbG9yLFxuICAgIHNjcm9sbGFibGVEb3RTdHJva2VXaWR0aCxcbiAgICBzY3JvbGxhYmxlRG90UmFkaXVzLFxuICAgIHNjcm9sbGFibGVJbmZvVmlld1N0eWxlLFxuICAgIHNjcm9sbGFibGVJbmZvVGV4dFN0eWxlLFxuICAgIHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvciA9ICh4KSA9PiBgJHt4fWAsXG4gICAgc2Nyb2xsYWJsZUluZm9TaXplLFxuICAgIHNjcm9sbGFibGVJbmZvT2Zmc2V0XG4gIH06IEFic3RyYWN0Q2hhcnRDb25maWcgJiB7XG4gICAgb25EYXRhUG9pbnRDbGljazogTGluZUNoYXJ0UHJvcHNbXCJvbkRhdGFQb2ludENsaWNrXCJdO1xuICAgIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0OiBBbmltYXRlZC5WYWx1ZTtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGxldCB2bDogbnVtYmVyW10gPSBbXTtcblxuICAgIGNvbnN0IHBlckRhdGEgPSB3aWR0aCAvIGRhdGFbMF0uZGF0YS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFbMF0uZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZsLnB1c2goaW5kZXggKiBwZXJEYXRhKTtcbiAgICB9XG4gICAgbGV0IGxhc3RJbmRleDogbnVtYmVyO1xuXG4gICAgc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuYWRkTGlzdGVuZXIoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHZhbHVlLnZhbHVlIC8gcGVyRGF0YTtcbiAgICAgIGlmICghbGFzdEluZGV4KSB7XG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJzID0gTWF0aC5mbG9vcihpbmRleCk7XG4gICAgICBsZXQgcGVyY2VudCA9IGluZGV4IC0gYWJzO1xuICAgICAgYWJzID0gZGF0YVswXS5kYXRhLmxlbmd0aCAtIGFicyAtIDE7XG5cbiAgICAgIGlmIChpbmRleCA+PSBkYXRhWzBdLmRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmxhYmVsLmN1cnJlbnQuc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihNYXRoLmZsb29yKGRhdGFbMF0uZGF0YVswXSkpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgLy8gdG8gcmlnaHRcblxuICAgICAgICAgIGNvbnN0IGJhc2UgPSBkYXRhWzBdLmRhdGFbYWJzXTtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gZGF0YVswXS5kYXRhW2FicyAtIDFdO1xuICAgICAgICAgIGlmIChwcmV2ID4gYmFzZSkge1xuICAgICAgICAgICAgbGV0IHJlc3QgPSBwcmV2IC0gYmFzZTtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuY3VycmVudC5zZXROYXRpdmVQcm9wcyh7XG4gICAgICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGJhc2UgKyBwZXJjZW50ICogcmVzdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXN0ID0gYmFzZSAtIHByZXY7XG4gICAgICAgICAgICB0aGlzLmxhYmVsLmN1cnJlbnQuc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgICAgICAgICB0ZXh0OiBzY3JvbGxhYmxlSW5mb1RleHREZWNvcmF0b3IoXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihiYXNlIC0gcGVyY2VudCAqIHJlc3QpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0byBsZWZ0XG5cbiAgICAgICAgICBjb25zdCBiYXNlID0gZGF0YVswXS5kYXRhW2FicyAtIDFdO1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBkYXRhWzBdLmRhdGFbYWJzXTtcbiAgICAgICAgICBwZXJjZW50ID0gMSAtIHBlcmNlbnQ7XG4gICAgICAgICAgaWYgKG5leHQgPiBiYXNlKSB7XG4gICAgICAgICAgICBsZXQgcmVzdCA9IG5leHQgLSBiYXNlO1xuICAgICAgICAgICAgdGhpcy5sYWJlbC5jdXJyZW50LnNldE5hdGl2ZVByb3BzKHtcbiAgICAgICAgICAgICAgdGV4dDogc2Nyb2xsYWJsZUluZm9UZXh0RGVjb3JhdG9yKFxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoYmFzZSArIHBlcmNlbnQgKiByZXN0KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3QgPSBiYXNlIC0gbmV4dDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuY3VycmVudC5zZXROYXRpdmVQcm9wcyh7XG4gICAgICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGJhc2UgLSBwZXJjZW50ICogcmVzdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICB9KTtcblxuICAgIGRhdGEuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgICBpZiAoZGF0YXNldC53aXRoU2Nyb2xsYWJsZURvdCA9PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwZXJEYXRhID0gd2lkdGggLyBkYXRhc2V0LmRhdGEubGVuZ3RoO1xuICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgbGV0IHlWYWx1ZXMgPSBbXTtcbiAgICAgIGxldCB4VmFsdWVzID0gW107XG5cbiAgICAgIGxldCB5VmFsdWVzTGFiZWwgPSBbXTtcbiAgICAgIGxldCB4VmFsdWVzTGFiZWwgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFzZXQuZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goaW5kZXggKiBwZXJEYXRhKTtcbiAgICAgICAgY29uc3QgeXZhbCA9XG4gICAgICAgICAgKChiYXNlSGVpZ2h0IC1cbiAgICAgICAgICAgIHRoaXMuY2FsY0hlaWdodChcbiAgICAgICAgICAgICAgZGF0YXNldC5kYXRhW2RhdGFzZXQuZGF0YS5sZW5ndGggLSBpbmRleCAtIDFdLFxuICAgICAgICAgICAgICBkYXRhcyxcbiAgICAgICAgICAgICAgaGVpZ2h0XG4gICAgICAgICAgICApKSAvXG4gICAgICAgICAgICA0KSAqXG4gICAgICAgICAgICAzICtcbiAgICAgICAgICBwYWRkaW5nVG9wO1xuICAgICAgICB5VmFsdWVzLnB1c2goeXZhbCk7XG4gICAgICAgIGNvbnN0IHh2YWwgPVxuICAgICAgICAgIHBhZGRpbmdSaWdodCArXG4gICAgICAgICAgKChkYXRhc2V0LmRhdGEubGVuZ3RoIC0gaW5kZXggLSAxKSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC9cbiAgICAgICAgICAgIGRhdGFzZXQuZGF0YS5sZW5ndGg7XG4gICAgICAgIHhWYWx1ZXMucHVzaCh4dmFsKTtcblxuICAgICAgICB5VmFsdWVzTGFiZWwucHVzaChcbiAgICAgICAgICB5dmFsIC0gKHNjcm9sbGFibGVJbmZvU2l6ZS5oZWlnaHQgKyBzY3JvbGxhYmxlSW5mb09mZnNldClcbiAgICAgICAgKTtcbiAgICAgICAgeFZhbHVlc0xhYmVsLnB1c2goeHZhbCAtIHNjcm9sbGFibGVJbmZvU2l6ZS53aWR0aCAvIDIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVYID0gc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuaW50ZXJwb2xhdGUoe1xuICAgICAgICBpbnB1dFJhbmdlOiB2YWx1ZXMsXG4gICAgICAgIG91dHB1dFJhbmdlOiB4VmFsdWVzLFxuICAgICAgICBleHRyYXBvbGF0ZTogXCJjbGFtcFwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHJhbnNsYXRlWSA9IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0LmludGVycG9sYXRlKHtcbiAgICAgICAgaW5wdXRSYW5nZTogdmFsdWVzLFxuICAgICAgICBvdXRwdXRSYW5nZTogeVZhbHVlcyxcbiAgICAgICAgZXh0cmFwb2xhdGU6IFwiY2xhbXBcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxhYmVsVHJhbnNsYXRlWCA9IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0LmludGVycG9sYXRlKHtcbiAgICAgICAgaW5wdXRSYW5nZTogdmFsdWVzLFxuICAgICAgICBvdXRwdXRSYW5nZTogeFZhbHVlc0xhYmVsLFxuICAgICAgICBleHRyYXBvbGF0ZTogXCJjbGFtcFwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGFiZWxUcmFuc2xhdGVZID0gc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuaW50ZXJwb2xhdGUoe1xuICAgICAgICBpbnB1dFJhbmdlOiB2YWx1ZXMsXG4gICAgICAgIG91dHB1dFJhbmdlOiB5VmFsdWVzTGFiZWwsXG4gICAgICAgIGV4dHJhcG9sYXRlOiBcImNsYW1wXCJcbiAgICAgIH0pO1xuXG4gICAgICBvdXRwdXQucHVzaChcbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBrZXk9e2BzY3JvbGxhYmxlLWluZm8tJHtkYXRhc2V0SW5kZXh9YH1cbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUluZm9WaWV3U3R5bGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgIHsgdHJhbnNsYXRlWDogbGFiZWxUcmFuc2xhdGVYIH0sXG4gICAgICAgICAgICAgICAgeyB0cmFuc2xhdGVZOiBsYWJlbFRyYW5zbGF0ZVkgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB3aWR0aDogc2Nyb2xsYWJsZUluZm9TaXplLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbGFibGVJbmZvU2l6ZS5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdfVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgb25MYXlvdXQ9eygpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sYWJlbC5jdXJyZW50LnNldE5hdGl2ZVByb3BzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzY3JvbGxhYmxlSW5mb1RleHREZWNvcmF0b3IoXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGRhdGFbMF0uZGF0YVtkYXRhWzBdLmRhdGEubGVuZ3RoIC0gMV0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17c2Nyb2xsYWJsZUluZm9UZXh0U3R5bGV9XG4gICAgICAgICAgICByZWY9e3RoaXMubGFiZWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PixcbiAgICAgICAgPEFuaW1hdGVkQ2lyY2xlXG4gICAgICAgICAga2V5PXtgc2Nyb2xsYWJsZS1kb3QtJHtkYXRhc2V0SW5kZXh9YH1cbiAgICAgICAgICBjeD17dHJhbnNsYXRlWH1cbiAgICAgICAgICBjeT17dHJhbnNsYXRlWX1cbiAgICAgICAgICByPXtzY3JvbGxhYmxlRG90UmFkaXVzfVxuICAgICAgICAgIHN0cm9rZT17c2Nyb2xsYWJsZURvdFN0cm9rZUNvbG9yfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXtzY3JvbGxhYmxlRG90U3Ryb2tlV2lkdGh9XG4gICAgICAgICAgZmlsbD17c2Nyb2xsYWJsZURvdEZpbGx9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICByZW5kZXJTaGFkb3cgPSAoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBkYXRhLFxuICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgfTogUGljazxcbiAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgIFwiZGF0YVwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwicGFkZGluZ1JpZ2h0XCIgfCBcInBhZGRpbmdUb3BcIlxuICA+ICYge1xuICAgIHVzZUNvbG9yRnJvbURhdGFzZXQ6IEFic3RyYWN0Q2hhcnRDb25maWdbXCJ1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0XCJdO1xuICB9KSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYmV6aWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJCZXppZXJTaGFkb3coe1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgIHBhZGRpbmdUb3AsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcbiAgICBjb25zdCB4TWF4ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGEubWFwKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBvbHlnb25cbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHBvaW50cz17XG4gICAgICAgICAgICBkYXRhc2V0LmRhdGFcbiAgICAgICAgICAgICAgLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBwYWRkaW5nUmlnaHQgKyAoaSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC8geE1heDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgICAgICAgICAgKChiYXNlSGVpZ2h0IC0gdGhpcy5jYWxjSGVpZ2h0KGQsIGRhdGFzLCBoZWlnaHQpKSAvIDQpICogMyArXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3h9LCR7eX1gO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbihcIiBcIikgK1xuICAgICAgICAgICAgYCAke1xuICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgK1xuICAgICAgICAgICAgICAoKHdpZHRoIC0gcGFkZGluZ1JpZ2h0KSAvIHhNYXgpICogKGRhdGFzZXQuZGF0YS5sZW5ndGggLSAxKVxuICAgICAgICAgICAgfSwke1xuICAgICAgICAgICAgICAoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcFxuICAgICAgICAgICAgfSAke3BhZGRpbmdSaWdodH0sJHsoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcH1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXG4gICAgICAgICAgICBgZmlsbFNoYWRvd0dyYWRpZW50RnJvbSR7dXNlQ29sb3JGcm9tRGF0YXNldCA/IGBfJHtpbmRleH1gIDogXCJcIn1gXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHJva2VXaWR0aD17MH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyTGluZSA9ICh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdSaWdodCxcbiAgICBwYWRkaW5nVG9wLFxuICAgIGRhdGEsXG4gICAgbGluZWpvaW5UeXBlXG4gIH06IFBpY2s8XG4gICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICBcImRhdGFcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCIgfCBcImxpbmVqb2luVHlwZVwiXG4gID4pID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5iZXppZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckJlemllckxpbmUoe1xuICAgICAgICBkYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgIHBhZGRpbmdUb3BcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcbiAgICBjb25zdCB4TWF4ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEpO1xuXG4gICAgZGF0YS5mb3JFYWNoKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGxhc3RQb2ludDogc3RyaW5nO1xuICAgICAgY29uc3QgcG9pbnRzID0gZGF0YXNldC5kYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAoZCA9PT0gbnVsbCkgcmV0dXJuIGxhc3RQb2ludDtcbiAgICAgICAgY29uc3QgeCA9IChpICogKHdpZHRoIC0gcGFkZGluZ1JpZ2h0KSkgLyB4TWF4ICsgcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoKGJhc2VIZWlnaHQgLSB0aGlzLmNhbGNIZWlnaHQoZCwgZGF0YXMsIGhlaWdodCkpIC8gNCkgKiAzICtcbiAgICAgICAgICBwYWRkaW5nVG9wO1xuICAgICAgICBsYXN0UG9pbnQgPSBgJHt4fSwke3l9YDtcbiAgICAgICAgcmV0dXJuIGAke3h9LCR7eX1gO1xuICAgICAgfSk7XG5cbiAgICAgIG91dHB1dC5wdXNoKFxuICAgICAgICA8UG9seWxpbmVcbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHN0cm9rZUxpbmVqb2luPXtsaW5lam9pblR5cGV9XG4gICAgICAgICAgcG9pbnRzPXtwb2ludHMuam9pbihcIiBcIil9XG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZT17dGhpcy5nZXRDb2xvcihkYXRhc2V0LCAwLjIpfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXt0aGlzLmdldFN0cm9rZVdpZHRoKGRhdGFzZXQpfVxuICAgICAgICAgIHN0cm9rZURhc2hhcnJheT17dGhpcy5nZXRTdHJva2VEYXNoQXJyYXkoZGF0YXNldCl9XG4gICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldD17ZGF0YXNldC5zdHJva2VEYXNoT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgZ2V0WE1heFZhbHVlcyA9IChkYXRhOiBEYXRhc2V0W10pID0+IHtcbiAgICByZXR1cm4gZGF0YS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgoY3VyLmRhdGEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICByZXR1cm4geE1heCA+IGFjYyA/IHhNYXggOiBhY2M7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgZ2V0QmV6aWVyTGluZVBvaW50cyA9IChcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcGFkZGluZ1JpZ2h0LFxuICAgICAgcGFkZGluZ1RvcCxcbiAgICAgIGRhdGFcbiAgICB9OiBQaWNrPFxuICAgICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICAgIFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCIgfCBcImRhdGFcIlxuICAgID5cbiAgKSA9PiB7XG4gICAgaWYgKGRhdGFzZXQuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIk0wLDBcIjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhcyA9IHRoaXMuZ2V0RGF0YXMoZGF0YSk7XG4gICAgY29uc3QgeE1heCA9IHRoaXMuZ2V0WE1heFZhbHVlcyhkYXRhKTtcblxuICAgIGNvbnN0IHggPSAoaTogbnVtYmVyKSA9PlxuICAgICAgTWF0aC5mbG9vcihwYWRkaW5nUmlnaHQgKyAoaSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC8geE1heCk7XG5cbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGNvbnN0IHkgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB5SGVpZ2h0ID0gdGhpcy5jYWxjSGVpZ2h0KGRhdGFzZXQuZGF0YVtpXSwgZGF0YXMsIGhlaWdodCk7XG5cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgoYmFzZUhlaWdodCAtIHlIZWlnaHQpIC8gNCkgKiAzICsgcGFkZGluZ1RvcCk7XG4gICAgfTtcblxuICAgIHJldHVybiBbYE0ke3goMCl9LCR7eSgwKX1gXVxuICAgICAgLmNvbmNhdChcbiAgICAgICAgZGF0YXNldC5kYXRhLnNsaWNlKDAsIC0xKS5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCB4X21pZCA9ICh4KGkpICsgeChpICsgMSkpIC8gMjtcbiAgICAgICAgICBjb25zdCB5X21pZCA9ICh5KGkpICsgeShpICsgMSkpIC8gMjtcbiAgICAgICAgICBjb25zdCBjcF94MSA9ICh4X21pZCArIHgoaSkpIC8gMjtcbiAgICAgICAgICBjb25zdCBjcF94MiA9ICh4X21pZCArIHgoaSArIDEpKSAvIDI7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGBRICR7Y3BfeDF9LCAke3koaSl9LCAke3hfbWlkfSwgJHt5X21pZH1gICtcbiAgICAgICAgICAgIGAgUSAke2NwX3gyfSwgJHt5KGkgKyAxKX0sICR7eChpICsgMSl9LCAke3koaSArIDEpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmpvaW4oXCIgXCIpO1xuICB9O1xuXG4gIHJlbmRlckJlemllckxpbmUgPSAoe1xuICAgIGRhdGEsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdSaWdodCxcbiAgICBwYWRkaW5nVG9wXG4gIH06IFBpY2s8XG4gICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICBcImRhdGFcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCJcbiAgPikgPT4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoZGF0YXNldCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0QmV6aWVyTGluZVBvaW50cyhkYXRhc2V0LCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHBhZGRpbmdSaWdodCxcbiAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYXRoXG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBkPXtyZXN1bHR9XG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZT17dGhpcy5nZXRDb2xvcihkYXRhc2V0LCAwLjIpfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXt0aGlzLmdldFN0cm9rZVdpZHRoKGRhdGFzZXQpfVxuICAgICAgICAgIHN0cm9rZURhc2hhcnJheT17dGhpcy5nZXRTdHJva2VEYXNoQXJyYXkoZGF0YXNldCl9XG4gICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldD17ZGF0YXNldC5zdHJva2VEYXNoT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXJCZXppZXJTaGFkb3cgPSAoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBkYXRhLFxuICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgfTogUGljazxcbiAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgIFwiZGF0YVwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwicGFkZGluZ1JpZ2h0XCIgfCBcInBhZGRpbmdUb3BcIlxuICA+ICYge1xuICAgIHVzZUNvbG9yRnJvbURhdGFzZXQ6IEFic3RyYWN0Q2hhcnRDb25maWdbXCJ1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0XCJdO1xuICB9KSA9PlxuICAgIGRhdGEubWFwKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgeE1heCA9IHRoaXMuZ2V0WE1heFZhbHVlcyhkYXRhKTtcbiAgICAgIGNvbnN0IGQgPVxuICAgICAgICB0aGlzLmdldEJlemllckxpbmVQb2ludHMoZGF0YXNldCwge1xuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pICtcbiAgICAgICAgYCBMJHtcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgK1xuICAgICAgICAgICgod2lkdGggLSBwYWRkaW5nUmlnaHQpIC8geE1heCkgKiAoZGF0YXNldC5kYXRhLmxlbmd0aCAtIDEpXG4gICAgICAgIH0sJHtcbiAgICAgICAgICAoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcFxuICAgICAgICB9IEwke3BhZGRpbmdSaWdodH0sJHsoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcH0gWmA7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYXRoXG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBkPXtkfVxuICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXG4gICAgICAgICAgICBgZmlsbFNoYWRvd0dyYWRpZW50RnJvbSR7dXNlQ29sb3JGcm9tRGF0YXNldCA/IGBfJHtpbmRleH1gIDogXCJcIn1gXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHJva2VXaWR0aD17MH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgcmVuZGVyTGVnZW5kID0gKHdpZHRoLCBsZWdlbmRPZmZzZXQpID0+IHtcbiAgICBjb25zdCB7IGxlZ2VuZCwgZGF0YXNldHMgfSA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICBjb25zdCBiYXNlTGVnZW5kSXRlbVggPSB3aWR0aCAvIChsZWdlbmQubGVuZ3RoICsgMSk7XG5cbiAgICByZXR1cm4gbGVnZW5kLm1hcCgobGVnZW5kSXRlbSwgaSkgPT4gKFxuICAgICAgPEcga2V5PXtgbGVnZW5kLSR7aX1gfT5cbiAgICAgICAgPExlZ2VuZEl0ZW1cbiAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICBpY29uQ29sb3I9e3RoaXMuZ2V0Q29sb3IoZGF0YXNldHNbaV0sIDAuOSl9XG4gICAgICAgICAgYmFzZUxlZ2VuZEl0ZW1YPXtiYXNlTGVnZW5kSXRlbVh9XG4gICAgICAgICAgbGVnZW5kVGV4dD17bGVnZW5kSXRlbX1cbiAgICAgICAgICBsYWJlbFByb3BzPXt7IC4uLnRoaXMuZ2V0UHJvcHNGb3JMYWJlbHMoKSB9fVxuICAgICAgICAgIGxlZ2VuZE9mZnNldD17bGVnZW5kT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgPC9HPlxuICAgICkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGRhdGEsXG4gICAgICB3aXRoU2Nyb2xsYWJsZURvdCA9IGZhbHNlLFxuICAgICAgd2l0aFNoYWRvdyA9IHRydWUsXG4gICAgICB3aXRoRG90cyA9IHRydWUsXG4gICAgICB3aXRoSW5uZXJMaW5lcyA9IHRydWUsXG4gICAgICB3aXRoT3V0ZXJMaW5lcyA9IHRydWUsXG4gICAgICB3aXRoSG9yaXpvbnRhbExpbmVzID0gdHJ1ZSxcbiAgICAgIHdpdGhWZXJ0aWNhbExpbmVzID0gdHJ1ZSxcbiAgICAgIHdpdGhIb3Jpem9udGFsTGFiZWxzID0gdHJ1ZSxcbiAgICAgIHdpdGhWZXJ0aWNhbExhYmVscyA9IHRydWUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgZGVjb3JhdG9yLFxuICAgICAgb25EYXRhUG9pbnRDbGljayxcbiAgICAgIHZlcnRpY2FsTGFiZWxSb3RhdGlvbiA9IDAsXG4gICAgICBob3Jpem9udGFsTGFiZWxSb3RhdGlvbiA9IDAsXG4gICAgICBmb3JtYXRZTGFiZWwgPSAoeUxhYmVsKSA9PiB5TGFiZWwsXG4gICAgICBmb3JtYXRYTGFiZWwgPSAoeExhYmVsKSA9PiB4TGFiZWwsXG4gICAgICBzZWdtZW50cyxcbiAgICAgIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gICAgICBjaGFydENvbmZpZ1xuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBzY3JvbGxhYmxlRG90SG9yaXpvbnRhbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGxhYmVscyA9IFtdIH0gPSBkYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIGJvcmRlclJhZGl1cyA9IDAsXG4gICAgICBwYWRkaW5nVG9wID0gMTYsXG4gICAgICBwYWRkaW5nUmlnaHQgPSA2NCxcbiAgICAgIG1hcmdpbiA9IDAsXG4gICAgICBtYXJnaW5SaWdodCA9IDAsXG4gICAgICBwYWRkaW5nQm90dG9tID0gMFxuICAgIH0gPSBzdHlsZTtcblxuICAgIGNvbnN0IGNoYXJ0UmlnaHRQYWRkaW5nID0gdGhpcy5nZXRDaGFydFJpZ2h0UGFkZGluZyhcbiAgICAgIGRhdGEuZGF0YXNldHMsXG4gICAgICB3aXRoRG90c1xuICAgICk7XG4gICAgY29uc3QgY2hhcnRXaWR0aCA9IE1hdGgubWF4KFxuICAgICAgd2lkdGggLSBjaGFydFJpZ2h0UGFkZGluZyxcbiAgICAgIGdldEZpbml0ZU51bWJlcihwYWRkaW5nUmlnaHQsIDY0KSArIDFcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgd2lkdGg6IGNoYXJ0V2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB2ZXJ0aWNhbExhYmVsUm90YXRpb24sXG4gICAgICBob3Jpem9udGFsTGFiZWxSb3RhdGlvblxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhcyA9IHRoaXMuZ2V0RGF0YXMoZGF0YS5kYXRhc2V0cyk7XG4gICAgY29uc3QgZmlyc3REYXRhc2V0ID0gZGF0YS5kYXRhc2V0c1swXSB8fCB7IGRhdGE6IFtdIH07XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZURhdGEgPVxuICAgICAgd2l0aFNjcm9sbGFibGVEb3QgJiZcbiAgICAgIGRhdGEuZGF0YXNldHMuc29tZSgoZGF0YXNldCkgPT4gZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCB4QXhpc0RhdGFJbnRlcnZhbENvdW50ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEuZGF0YXNldHMpO1xuICAgIGNvbnN0IHhBeGlzTGFiZWxJbnRlcnZhbENvdW50ID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIDEsIDEpO1xuXG4gICAgbGV0IGNvdW50ID0gTWF0aC5taW4oLi4uZGF0YXMpID09PSBNYXRoLm1heCguLi5kYXRhcykgPyAxIDogNDtcbiAgICBpZiAoc2VnbWVudHMpIHtcbiAgICAgIGNvdW50ID0gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgbGVnZW5kT2Zmc2V0ID0gdGhpcy5wcm9wcy5kYXRhLmxlZ2VuZCA/IGhlaWdodCAqIDAuMTUgOiAwO1xuICAgIGNvbnN0IGJhY2tncm91bmRSYWRpdXMgPSBnZXROdW1iZXJQcm9wKGJvcmRlclJhZGl1cyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPFN2Z1xuICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgKHBhZGRpbmdCb3R0b20gYXMgbnVtYmVyKSArIGxlZ2VuZE9mZnNldH1cbiAgICAgICAgICB3aWR0aD17d2lkdGggLSAobWFyZ2luIGFzIG51bWJlcikgKiAyIC0gKG1hcmdpblJpZ2h0IGFzIG51bWJlcil9XG4gICAgICAgID5cbiAgICAgICAgICA8UmVjdFxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgbGVnZW5kT2Zmc2V0fVxuICAgICAgICAgICAgcng9e2JhY2tncm91bmRSYWRpdXN9XG4gICAgICAgICAgICByeT17YmFja2dyb3VuZFJhZGl1c31cbiAgICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXCJiYWNrZ3JvdW5kR3JhZGllbnRcIil9XG4gICAgICAgICAgICBmaWxsT3BhY2l0eT17dHJhbnNwYXJlbnQgPyAwIDogMX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmRhdGEubGVnZW5kICYmIHRoaXMucmVuZGVyTGVnZW5kKHdpZHRoLCBsZWdlbmRPZmZzZXQpfVxuICAgICAgICAgIDxHIHg9XCIwXCIgeT17bGVnZW5kT2Zmc2V0fT5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckRlZnMoe1xuICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxHPlxuICAgICAgICAgICAgICB7d2l0aEhvcml6b250YWxMaW5lcyAmJlxuICAgICAgICAgICAgICAgICh3aXRoSW5uZXJMaW5lc1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnJlbmRlckhvcml6b250YWxMaW5lcyh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiB3aXRoT3V0ZXJMaW5lc1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucmVuZGVySG9yaXpvbnRhbExpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhIb3Jpem9udGFsTGFiZWxzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJIb3Jpem9udGFsTGFiZWxzKHtcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBmb3JtYXRZTGFiZWwsXG4gICAgICAgICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiBjaGFydENvbmZpZy5kZWNpbWFsUGxhY2VzXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhWZXJ0aWNhbExpbmVzICYmXG4gICAgICAgICAgICAgICAgKHdpdGhJbm5lckxpbmVzXG4gICAgICAgICAgICAgICAgICA/IHRoaXMucmVuZGVyVmVydGljYWxMaW5lcyh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZpcnN0RGF0YXNldC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICB4QXhpc0ludGVydmFsQ291bnQ6IHhBeGlzRGF0YUludGVydmFsQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogd2l0aE91dGVyTGluZXNcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJlbmRlclZlcnRpY2FsTGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhWZXJ0aWNhbExhYmVscyAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVmVydGljYWxMYWJlbHMoe1xuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICB4QXhpc0ludGVydmFsQ291bnQ6IHhBeGlzTGFiZWxJbnRlcnZhbENvdW50LFxuICAgICAgICAgICAgICAgICAgZm9ybWF0WExhYmVsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyTGluZSh7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgICAgPEc+XG4gICAgICAgICAgICAgIHt3aXRoU2hhZG93ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTaGFkb3coe1xuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgdXNlQ29sb3JGcm9tRGF0YXNldDogY2hhcnRDb25maWcudXNlU2hhZG93Q29sb3JGcm9tRGF0YXNldFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgICAgPEc+XG4gICAgICAgICAgICAgIHt3aXRoRG90cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRG90cyh7XG4gICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBvbkRhdGFQb2ludENsaWNrXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge2hhc1Njcm9sbGFibGVEYXRhICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTY3JvbGxhYmxlRG90KHtcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBwYWRkaW5nUmlnaHQgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgb25EYXRhUG9pbnRDbGljayxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge2RlY29yYXRvciAmJlxuICAgICAgICAgICAgICAgIGRlY29yYXRvcih7XG4gICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgIDwvRz5cbiAgICAgICAgPC9Tdmc+XG4gICAgICAgIHt3aXRoU2Nyb2xsYWJsZURvdCAmJiAoXG4gICAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmFic29sdXRlRmlsbH1cbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17eyB3aWR0aDogd2lkdGggKiAyIH19XG4gICAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3I9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsRXZlbnRUaHJvdHRsZT17MTZ9XG4gICAgICAgICAgICBvblNjcm9sbD17QW5pbWF0ZWQuZXZlbnQoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDoge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50T2Zmc2V0OiB7IHg6IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0IH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHsgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSB9XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICAgICAgYm91bmNlcz17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVDaGFydDtcbiJdfQ==
481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZUNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NoYXJ0cy9saW5lL0xpbmVDaGFydC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQW9CLE1BQU0sT0FBTyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUVMLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxNQUFNLEVBQ04sQ0FBQyxFQUNELElBQUksRUFDSixPQUFPLEVBQ1AsUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBQ0osTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLGFBR04sTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFOUQsSUFBTSxlQUFlLEdBQUcsVUFBQyxLQUFjLEVBQUUsUUFBZ0I7SUFDdkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxD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RSxVQUFvQixFQUNoQyxZQUFZLEVBQUUsWUFBc0IsRUFDcEMsZ0JBQWdCLGtCQUFBLEVBQ2hCLDZCQUE2QiwrQkFBQSxJQUM3QixDQUNOO1lBQUEsRUFBRSxDQUFDLENBQ0g7WUFBQSxDQUFDLENBQUMsQ0FDQTtjQUFBLENBQUMsU0FBUztnQkFDUixTQUFTLHVCQUNKLE1BQU0sS0FDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDbkIsVUFBVSxZQUFBLEVBQ1YsWUFBWSxjQUFBLElBQ1osQ0FDTjtZQUFBLEVBQUUsQ0FBQyxDQUNMO1VBQUEsRUFBRSxDQUFDLENBQ0w7UUFBQSxFQUFFLEdBQUcsQ0FDTDtRQUFBLENBQUMsaUJBQWlCLElBQUksQ0FDcEIsQ0FBQyxVQUFVLENBQ1QsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUMvQixxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM1Qyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUN0QyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUN4QixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUN0QjtvQkFDRTt3QkFDRSxXQUFXLEVBQUU7NEJBQ1gsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLDZCQUE2QixFQUFFO3lCQUNwRDtxQkFDRjtpQkFDRixFQUNELEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUMzQixDQUFDLENBQ0YsVUFBVSxDQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNmLENBQ0gsQ0FDSDtNQUFBLEVBQUUsSUFBSSxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFDSCxnQkFBQztBQUFELENBQUMsQUExekJELENBQXdCLGFBQWEsR0EwekJwQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWQsXG4gIFNjcm9sbFZpZXcsXG4gIFN0eWxlU2hlZXQsXG4gIFRleHRJbnB1dCxcbiAgVmlldyxcbiAgVmlld1N0eWxlXG59IGZyb20gXCJyZWFjdC1uYXRpdmVcIjtcbmltcG9ydCB7XG4gIENpcmNsZSxcbiAgRyxcbiAgUGF0aCxcbiAgUG9seWdvbixcbiAgUG9seWxpbmUsXG4gIFJlY3QsXG4gIFN2Z1xufSBmcm9tIFwicmVhY3QtbmF0aXZlLXN2Z1wiO1xuXG5pbXBvcnQgQWJzdHJhY3RDaGFydCwge1xuICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICBBYnN0cmFjdENoYXJ0UHJvcHNcbn0gZnJvbSBcIi4uLy4uL3NoYXJlZC9BYnN0cmFjdENoYXJ0XCI7XG5pbXBvcnQgeyBDaGFydERhdGEsIERhdGFzZXQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXROdW1iZXJQcm9wIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC91dGlsc1wiO1xuaW1wb3J0IHsgTGVnZW5kSXRlbSB9IGZyb20gXCIuL0xlZ2VuZEl0ZW1cIjtcblxubGV0IEFuaW1hdGVkQ2lyY2xlID0gQW5pbWF0ZWQuY3JlYXRlQW5pbWF0ZWRDb21wb25lbnQoQ2lyY2xlKTtcblxuY29uc3QgZ2V0RmluaXRlTnVtYmVyID0gKHZhbHVlOiB1bmtub3duLCBmYWxsYmFjazogbnVtYmVyKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZmFsbGJhY2s7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IGZhbGxiYWNrO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBMaW5lQ2hhcnREYXRhIGV4dGVuZHMgQ2hhcnREYXRhIHtcbiAgbGVnZW5kPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNoYXJ0UHJvcHMgZXh0ZW5kcyBBYnN0cmFjdENoYXJ0UHJvcHMge1xuICAvKipcbiAgICogRGF0YSBmb3IgdGhlIGNoYXJ0LlxuICAgKlxuICAgKiBFeGFtcGxlIGZyb20gW2RvY3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydC1raXQvcmVhY3QtbmF0aXZlLWNoYXJ0LWtpdCNsaW5lLWNoYXJ0KTpcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBkYXRhID0ge1xuICAgKiAgIGxhYmVsczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJ10sXG4gICAqICAgZGF0YXNldHM6IFt7XG4gICAqICAgICBkYXRhOiBbIDIwLCA0NSwgMjgsIDgwLCA5OSwgNDMgXSxcbiAgICogICAgIGNvbG9yOiAob3BhY2l0eSA9IDEpID0+IGByZ2JhKDEzNCwgNjUsIDI0NCwgJHtvcGFjaXR5fSlgLCAvLyBvcHRpb25hbFxuICAgKiAgICAgc3Ryb2tlV2lkdGg6IDIgLy8gb3B0aW9uYWxcbiAgICogICB9XSxcbiAgICogICBsZWdlbmQ6IFtcIlJhaW55IERheXNcIiwgXCJTdW5ueSBEYXlzXCIsIFwiU25vd3kgRGF5c1wiXSAvLyBvcHRpb25hbFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZGF0YTogTGluZUNoYXJ0RGF0YTtcbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSBjaGFydCwgdXNlICdEaW1lbnNpb25zJyBsaWJyYXJ5IHRvIGdldCB0aGUgd2lkdGggb2YgeW91ciBzY3JlZW4gZm9yIHJlc3BvbnNpdmUuXG4gICAqL1xuICB3aWR0aDogbnVtYmVyO1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBjaGFydC5cbiAgICovXG4gIGhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogU2hvdyBkb3RzIG9uIHRoZSBsaW5lIC0gZGVmYXVsdDogVHJ1ZS5cbiAgICovXG4gIHdpdGhEb3RzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3cgc2hhZG93IGZvciBsaW5lIC0gZGVmYXVsdDogVHJ1ZS5cbiAgICovXG4gIHdpdGhTaGFkb3c/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyBpbm5lciBkYXNoZWQgbGluZXMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cblxuICB3aXRoU2Nyb2xsYWJsZURvdD86IGJvb2xlYW47XG4gIHdpdGhJbm5lckxpbmVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3cgb3V0ZXIgZGFzaGVkIGxpbmVzIC0gZGVmYXVsdDogVHJ1ZS5cbiAgICovXG4gIHdpdGhPdXRlckxpbmVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3cgdmVydGljYWwgbGluZXMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aFZlcnRpY2FsTGluZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyBob3Jpem9udGFsIGxpbmVzIC0gZGVmYXVsdDogVHJ1ZS5cbiAgICovXG4gIHdpdGhIb3Jpem9udGFsTGluZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdyB2ZXJ0aWNhbCBsYWJlbHMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aFZlcnRpY2FsTGFiZWxzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3cgaG9yaXpvbnRhbCBsYWJlbHMgLSBkZWZhdWx0OiBUcnVlLlxuICAgKi9cbiAgd2l0aEhvcml6b250YWxMYWJlbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVuZGVyIGNoYXJ0cyBmcm9tIDAgbm90IGZyb20gdGhlIG1pbmltdW0gdmFsdWUuIC0gZGVmYXVsdDogRmFsc2UuXG4gICAqL1xuICBmcm9tWmVybz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmVwZW5kIHRleHQgdG8gaG9yaXpvbnRhbCBsYWJlbHMgLS0gZGVmYXVsdDogJycuXG4gICAqL1xuICB5QXhpc0xhYmVsPzogc3RyaW5nO1xuICAvKipcbiAgICogQXBwZW5kIHRleHQgdG8gaG9yaXpvbnRhbCBsYWJlbHMgLS0gZGVmYXVsdDogJycuXG4gICAqL1xuICB5QXhpc1N1ZmZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByZXBlbmQgdGV4dCB0byB2ZXJ0aWNhbCBsYWJlbHMgLS0gZGVmYXVsdDogJycuXG4gICAqL1xuICB4QXhpc0xhYmVsPzogc3RyaW5nO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBjaGFydCwgc2VlIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogY29uc3QgY2hhcnRDb25maWcgPSB7XG4gICAqICAgYmFja2dyb3VuZEdyYWRpZW50RnJvbTogXCIjMUUyOTIzXCIsXG4gICAqICAgYmFja2dyb3VuZEdyYWRpZW50RnJvbU9wYWNpdHk6IDAsXG4gICAqICAgYmFja2dyb3VuZEdyYWRpZW50VG86IFwiIzA4MTMwRFwiLFxuICAgKiAgIGJhY2tncm91bmRHcmFkaWVudFRvT3BhY2l0eTogMC41LFxuICAgKiAgIGNvbG9yOiAob3BhY2l0eSA9IDEpID0+IGByZ2JhKDI2LCAyNTUsIDE0NiwgJHtvcGFjaXR5fSlgLFxuICAgKiAgIGxhYmVsQ29sb3I6IChvcGFjaXR5ID0gMSkgPT4gYHJnYmEoMjYsIDI1NSwgMTQ2LCAke29wYWNpdHl9KWAsXG4gICAqICAgc3Ryb2tlV2lkdGg6IDIsIC8vIG9wdGlvbmFsLCBkZWZhdWx0IDNcbiAgICogICBiYXJQZXJjZW50YWdlOiAwLjVcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBjaGFydENvbmZpZz86IEFic3RyYWN0Q2hhcnRDb25maWc7XG5cbiAgLyoqXG4gICAqIERpdmlkZSBheGlzIHF1YW50aXR5IGJ5IHRoZSBpbnB1dCBudW1iZXIgLS0gZGVmYXVsdDogMS5cbiAgICovXG4gIHlBeGlzSW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaWYgY2hhcnQgaXMgdHJhbnNwYXJlbnRcbiAgICovXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBbd2hvbGUgYnVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydC1raXQvcmVhY3QtbmF0aXZlLWNoYXJ0LWtpdC9ibG9iL21hc3Rlci9zcmMvY2hhcnRzL2xpbmUvTGluZUNoYXJ0LnRzeClcbiAgICogb2Ygc3R1ZmYgYW5kIGNhbiByZW5kZXIgZXh0cmEgZWxlbWVudHMsXG4gICAqIHN1Y2ggYXMgZGF0YSBwb2ludCBpbmZvIG9yIGFkZGl0aW9uYWwgbWFya3VwLlxuICAgKi9cbiAgZGVjb3JhdG9yPzogRnVuY3Rpb247XG4gIC8qKlxuICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgZGF0YSBwb2ludCBpcyBjbGlja2VkLlxuICAgKi9cbiAgb25EYXRhUG9pbnRDbGljaz86IChkYXRhOiB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGRhdGFzZXQ6IERhdGFzZXQ7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBnZXRDb2xvcjogKG9wYWNpdHk6IG51bWJlcikgPT4gc3RyaW5nO1xuICB9KSA9PiB2b2lkO1xuICAvKipcbiAgICogU3R5bGUgb2YgdGhlIGNvbnRhaW5lciB2aWV3IG9mIHRoZSBjaGFydC5cbiAgICovXG4gIHN0eWxlPzogUGFydGlhbDxWaWV3U3R5bGU+O1xuICAvKipcbiAgICogQWRkIHRoaXMgcHJvcCB0byBtYWtlIHRoZSBsaW5lIGNoYXJ0IHNtb290aCBhbmQgY3VydnkuXG4gICAqXG4gICAqIFtFeGFtcGxlXShodHRwczovL2dpdGh1Yi5jb20vY2hhcnQta2l0L3JlYWN0LW5hdGl2ZS1jaGFydC1raXQjYmV6aWVyLWxpbmUtY2hhcnQpXG4gICAqL1xuICBiZXppZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG90IGNvbG9yIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgY29sb3JzIG9mIGRvdHMgaW4gYSBsaW5lIGNoYXJ0LlxuICAgKiBUYWtlcyBgKGRhdGFQb2ludCwgZGF0YVBvaW50SW5kZXgpYCBhcyBhcmd1bWVudHMuXG4gICAqL1xuICBnZXREb3RDb2xvcj86IChkYXRhUG9pbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVycyBhZGRpdGlvbmFsIGNvbnRlbnQgZm9yIGRvdHMgaW4gYSBsaW5lIGNoYXJ0LlxuICAgKiBUYWtlcyBgKHt4LCB5LCBpbmRleH0pYCBhcyBhcmd1bWVudHMuXG4gICAqL1xuICByZW5kZXJEb3RDb250ZW50PzogKHBhcmFtczoge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBpbmRleERhdGE6IG51bWJlcjtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAvKipcbiAgICogUm90YXRpb24gYW5nbGUgb2YgdGhlIGhvcml6b250YWwgbGFiZWxzIC0gZGVmYXVsdCAwIChkZWdyZWVzKS5cbiAgICovXG4gIGhvcml6b250YWxMYWJlbFJvdGF0aW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogUm90YXRpb24gYW5nbGUgb2YgdGhlIHZlcnRpY2FsIGxhYmVscyAtIGRlZmF1bHQgMCAoZGVncmVlcykuXG4gICAqL1xuICB2ZXJ0aWNhbExhYmVsUm90YXRpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPZmZzZXQgZm9yIFkgYXhpcyBsYWJlbHMuXG4gICAqL1xuICB5TGFiZWxzT2Zmc2V0PzogbnVtYmVyO1xuICAvKipcbiAgICogT2Zmc2V0IGZvciBYIGF4aXMgbGFiZWxzLlxuICAgKi9cbiAgeExhYmVsc09mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGluZGljZXMgb2YgdGhlIGRhdGEgcG9pbnRzIHlvdSBkb24ndCB3YW50IHRvIGRpc3BsYXkuXG4gICAqL1xuICBoaWRlUG9pbnRzQXRJbmRleD86IG51bWJlcltdO1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgZGlzcGxheSB2YWx1ZSBvZiB0aGUgWSBsYWJlbC5cbiAgICogVGFrZXMgdGhlIHkgdmFsdWUgYXMgYXJndW1lbnQgYW5kIHNob3VsZCByZXR1cm4gdGhlIGRlc2lyYWJsZSBzdHJpbmcuXG4gICAqL1xuICBmb3JtYXRZTGFiZWw/OiAoeVZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3BsYXkgdmFsdWUgb2YgdGhlIFggbGFiZWwuXG4gICAqIFRha2VzIHRoZSBYIHZhbHVlIGFzIGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIHRoZSBkZXNpcmFibGUgc3RyaW5nLlxuICAgKi9cbiAgZm9ybWF0WExhYmVsPzogKHhWYWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm92aWRlIHByb3BzIGZvciBhIGRhdGEgcG9pbnQgZG90LlxuICAgKi9cbiAgZ2V0RG90UHJvcHM/OiAoZGF0YVBvaW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IG9iamVjdDtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCBsaW5lc1xuICAgKi9cbiAgc2VnbWVudHM/OiBudW1iZXI7XG59XG5cbnR5cGUgTGluZUNoYXJ0U3RhdGUgPSB7XG4gIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0OiBBbmltYXRlZC5WYWx1ZTtcbn07XG5cbmNsYXNzIExpbmVDaGFydCBleHRlbmRzIEFic3RyYWN0Q2hhcnQ8TGluZUNoYXJ0UHJvcHMsIExpbmVDaGFydFN0YXRlPiB7XG4gIGxhYmVsID0gUmVhY3QuY3JlYXRlUmVmPFRleHRJbnB1dD4oKTtcblxuICBzdGF0ZSA9IHtcbiAgICBzY3JvbGxhYmxlRG90SG9yaXpvbnRhbE9mZnNldDogbmV3IEFuaW1hdGVkLlZhbHVlKDApXG4gIH07XG5cbiAgZ2V0Q29sb3IgPSAoZGF0YXNldDogRGF0YXNldCwgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIChkYXRhc2V0LmNvbG9yIHx8IHRoaXMucHJvcHMuY2hhcnRDb25maWcuY29sb3IpKG9wYWNpdHkpO1xuICB9O1xuXG4gIGdldFN0cm9rZVdpZHRoID0gKGRhdGFzZXQ6IERhdGFzZXQpID0+IHtcbiAgICByZXR1cm4gZGF0YXNldC5zdHJva2VXaWR0aCB8fCB0aGlzLnByb3BzLmNoYXJ0Q29uZmlnLnN0cm9rZVdpZHRoIHx8IDM7XG4gIH07XG5cbiAgZ2V0Q2hhcnRSaWdodFBhZGRpbmcgPSAoZGF0YTogRGF0YXNldFtdLCB3aXRoRG90czogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHByb3BzRm9yRG90cyA9IHRoaXMucHJvcHMuY2hhcnRDb25maWc/LnByb3BzRm9yRG90cyA/PyB7fTtcbiAgICBjb25zdCBkb3RSYWRpdXMgPSB3aXRoRG90cyA/IGdldEZpbml0ZU51bWJlcihwcm9wc0ZvckRvdHMuciwgNCkgOiAwO1xuICAgIGNvbnN0IGRvdFN0cm9rZVdpZHRoID0gd2l0aERvdHNcbiAgICAgID8gZ2V0RmluaXRlTnVtYmVyKHByb3BzRm9yRG90cy5zdHJva2VXaWR0aCwgMClcbiAgICAgIDogMDtcbiAgICBjb25zdCBtYXhTdHJva2VXaWR0aCA9IGRhdGEucmVkdWNlKFxuICAgICAgKG1heFdpZHRoLCBkYXRhc2V0KSA9PiBNYXRoLm1heChtYXhXaWR0aCwgdGhpcy5nZXRTdHJva2VXaWR0aChkYXRhc2V0KSksXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiBNYXRoLmNlaWwoXG4gICAgICBNYXRoLm1heCg0LCBkb3RSYWRpdXMgKyBkb3RTdHJva2VXaWR0aCAvIDIsIG1heFN0cm9rZVdpZHRoIC8gMilcbiAgICApO1xuICB9O1xuXG4gIGdldERhdGFzID0gKGRhdGE6IERhdGFzZXRbXSk6IG51bWJlcltdID0+IHtcbiAgICByZXR1cm4gZGF0YS5yZWR1Y2UoXG4gICAgICAoYWNjLCBpdGVtKSA9PlxuICAgICAgICBpdGVtLmRhdGEgPyBbLi4uYWNjLCAuLi50aGlzLmdldFZhbGlkRGF0YShpdGVtLmRhdGEpXSA6IGFjYyxcbiAgICAgIFtdXG4gICAgKTtcbiAgfTtcblxuICBnZXRTdHJva2VEYXNoQXJyYXkgPSAoZGF0YXNldDogRGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IHsgc3Ryb2tlRGFzaEFycmF5IH0gPSBkYXRhc2V0O1xuXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3Ryb2tlRGFzaEFycmF5KVxuICAgICAgPyBzdHJva2VEYXNoQXJyYXkuam9pbihcIixcIilcbiAgICAgIDogc3Ryb2tlRGFzaEFycmF5O1xuICB9O1xuXG4gIGdldFByb3BzRm9yRG90cyA9ICh4OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHsgZ2V0RG90UHJvcHMsIGNoYXJ0Q29uZmlnIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREb3RQcm9wcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZ2V0RG90UHJvcHMoeCwgaSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm9wc0ZvckRvdHMgPSB7fSB9ID0gY2hhcnRDb25maWc7XG5cbiAgICByZXR1cm4geyByOiBcIjRcIiwgLi4ucHJvcHNGb3JEb3RzIH07XG4gIH07XG5cbiAgcmVuZGVyRG90cyA9ICh7XG4gICAgZGF0YSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgb25EYXRhUG9pbnRDbGlja1xuICB9OiBQaWNrPFxuICAgIEFic3RyYWN0Q2hhcnRDb25maWcsXG4gICAgXCJkYXRhXCIgfCBcIndpZHRoXCIgfCBcImhlaWdodFwiIHwgXCJwYWRkaW5nUmlnaHRcIiB8IFwicGFkZGluZ1RvcFwiXG4gID4gJiB7XG4gICAgb25EYXRhUG9pbnRDbGljazogTGluZUNoYXJ0UHJvcHNbXCJvbkRhdGFQb2ludENsaWNrXCJdO1xuICB9KSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0OiBSZWFjdE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGdldERvdENvbG9yLFxuICAgICAgaGlkZVBvaW50c0F0SW5kZXggPSBbXSxcbiAgICAgIHJlbmRlckRvdENvbnRlbnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHhNYXggPSB0aGlzLmdldFhNYXhWYWx1ZXMoZGF0YSk7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhc2V0LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXRhc2V0LndpdGhEb3RzID09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgIGRhdGFzZXQuZGF0YS5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgIGlmIChoaWRlUG9pbnRzQXRJbmRleC5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN4ID0gcGFkZGluZ1JpZ2h0ICsgKGkgKiAod2lkdGggLSBwYWRkaW5nUmlnaHQpKSAvIHhNYXg7XG5cbiAgICAgICAgY29uc3QgY3kgPVxuICAgICAgICAgICgoYmFzZUhlaWdodCAtIHRoaXMuY2FsY0hlaWdodCh4LCBkYXRhcywgaGVpZ2h0KSkgLyA0KSAqIDMgK1xuICAgICAgICAgIHBhZGRpbmdUb3A7XG5cbiAgICAgICAgY29uc3Qgb25QcmVzc0luID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghb25EYXRhUG9pbnRDbGljayB8fCBoaWRlUG9pbnRzQXRJbmRleC5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uRGF0YVBvaW50Q2xpY2soe1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICB2YWx1ZTogeCxcbiAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICB4OiBjeCxcbiAgICAgICAgICAgIHk6IGN5LFxuICAgICAgICAgICAgZ2V0Q29sb3I6IChvcGFjaXR5KSA9PiB0aGlzLmdldENvbG9yKGRhdGFzZXQsIG9wYWNpdHkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByZXNzUHJvcHMgPSB7IG9uUHJlc3NJbiwgb25DbGljazogb25QcmVzc0luIH0gYXMgYW55O1xuXG4gICAgICAgIG91dHB1dC5wdXNoKFxuICAgICAgICAgIDxDaXJjbGVcbiAgICAgICAgICAgIGtleT17YGRvdC0ke2RhdGFzZXRJbmRleH0tJHtpfWB9XG4gICAgICAgICAgICBjeD17Y3h9XG4gICAgICAgICAgICBjeT17Y3l9XG4gICAgICAgICAgICBmaWxsPXtcbiAgICAgICAgICAgICAgdHlwZW9mIGdldERvdENvbG9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGdldERvdENvbG9yKHgsIGkpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdldENvbG9yKGRhdGFzZXQsIDAuOSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHsuLi5wcmVzc1Byb3BzfVxuICAgICAgICAgICAgey4uLnRoaXMuZ2V0UHJvcHNGb3JEb3RzKHgsIGkpfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIDxDaXJjbGVcbiAgICAgICAgICAgIGtleT17YGRvdC10b3VjaC0ke2RhdGFzZXRJbmRleH0tJHtpfWB9XG4gICAgICAgICAgICBjeD17Y3h9XG4gICAgICAgICAgICBjeT17Y3l9XG4gICAgICAgICAgICByPVwiMTRcIlxuICAgICAgICAgICAgZmlsbD1cIiNmZmZcIlxuICAgICAgICAgICAgZmlsbE9wYWNpdHk9ezB9XG4gICAgICAgICAgICB7Li4ucHJlc3NQcm9wc31cbiAgICAgICAgICAvPixcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtgZG90LWNvbnRlbnQtJHtkYXRhc2V0SW5kZXh9LSR7aX1gfT5cbiAgICAgICAgICAgIHtyZW5kZXJEb3RDb250ZW50KHsgeDogY3gsIHk6IGN5LCBpbmRleDogaSwgaW5kZXhEYXRhOiB4IH0pfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmVuZGVyU2Nyb2xsYWJsZURvdCA9ICh7XG4gICAgZGF0YSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQsXG4gICAgc2Nyb2xsYWJsZURvdEZpbGwsXG4gICAgc2Nyb2xsYWJsZURvdFN0cm9rZUNvbG9yLFxuICAgIHNjcm9sbGFibGVEb3RTdHJva2VXaWR0aCxcbiAgICBzY3JvbGxhYmxlRG90UmFkaXVzLFxuICAgIHNjcm9sbGFibGVJbmZvVmlld1N0eWxlLFxuICAgIHNjcm9sbGFibGVJbmZvVGV4dFN0eWxlLFxuICAgIHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvciA9ICh4KSA9PiBgJHt4fWAsXG4gICAgc2Nyb2xsYWJsZUluZm9TaXplLFxuICAgIHNjcm9sbGFibGVJbmZvT2Zmc2V0XG4gIH06IEFic3RyYWN0Q2hhcnRDb25maWcgJiB7XG4gICAgb25EYXRhUG9pbnRDbGljazogTGluZUNoYXJ0UHJvcHNbXCJvbkRhdGFQb2ludENsaWNrXCJdO1xuICAgIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0OiBBbmltYXRlZC5WYWx1ZTtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGxldCB2bDogbnVtYmVyW10gPSBbXTtcblxuICAgIGNvbnN0IHBlckRhdGEgPSB3aWR0aCAvIGRhdGFbMF0uZGF0YS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFbMF0uZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZsLnB1c2goaW5kZXggKiBwZXJEYXRhKTtcbiAgICB9XG4gICAgbGV0IGxhc3RJbmRleDogbnVtYmVyO1xuXG4gICAgc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuYWRkTGlzdGVuZXIoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHZhbHVlLnZhbHVlIC8gcGVyRGF0YTtcbiAgICAgIGlmICghbGFzdEluZGV4KSB7XG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJzID0gTWF0aC5mbG9vcihpbmRleCk7XG4gICAgICBsZXQgcGVyY2VudCA9IGluZGV4IC0gYWJzO1xuICAgICAgYWJzID0gZGF0YVswXS5kYXRhLmxlbmd0aCAtIGFicyAtIDE7XG5cbiAgICAgIGlmIChpbmRleCA+PSBkYXRhWzBdLmRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmxhYmVsLmN1cnJlbnQuc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihNYXRoLmZsb29yKGRhdGFbMF0uZGF0YVswXSkpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgLy8gdG8gcmlnaHRcblxuICAgICAgICAgIGNvbnN0IGJhc2UgPSBkYXRhWzBdLmRhdGFbYWJzXTtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gZGF0YVswXS5kYXRhW2FicyAtIDFdO1xuICAgICAgICAgIGlmIChwcmV2ID4gYmFzZSkge1xuICAgICAgICAgICAgbGV0IHJlc3QgPSBwcmV2IC0gYmFzZTtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuY3VycmVudC5zZXROYXRpdmVQcm9wcyh7XG4gICAgICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGJhc2UgKyBwZXJjZW50ICogcmVzdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXN0ID0gYmFzZSAtIHByZXY7XG4gICAgICAgICAgICB0aGlzLmxhYmVsLmN1cnJlbnQuc2V0TmF0aXZlUHJvcHMoe1xuICAgICAgICAgICAgICB0ZXh0OiBzY3JvbGxhYmxlSW5mb1RleHREZWNvcmF0b3IoXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihiYXNlIC0gcGVyY2VudCAqIHJlc3QpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0byBsZWZ0XG5cbiAgICAgICAgICBjb25zdCBiYXNlID0gZGF0YVswXS5kYXRhW2FicyAtIDFdO1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBkYXRhWzBdLmRhdGFbYWJzXTtcbiAgICAgICAgICBwZXJjZW50ID0gMSAtIHBlcmNlbnQ7XG4gICAgICAgICAgaWYgKG5leHQgPiBiYXNlKSB7XG4gICAgICAgICAgICBsZXQgcmVzdCA9IG5leHQgLSBiYXNlO1xuICAgICAgICAgICAgdGhpcy5sYWJlbC5jdXJyZW50LnNldE5hdGl2ZVByb3BzKHtcbiAgICAgICAgICAgICAgdGV4dDogc2Nyb2xsYWJsZUluZm9UZXh0RGVjb3JhdG9yKFxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoYmFzZSArIHBlcmNlbnQgKiByZXN0KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3QgPSBiYXNlIC0gbmV4dDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuY3VycmVudC5zZXROYXRpdmVQcm9wcyh7XG4gICAgICAgICAgICAgIHRleHQ6IHNjcm9sbGFibGVJbmZvVGV4dERlY29yYXRvcihcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGJhc2UgLSBwZXJjZW50ICogcmVzdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICB9KTtcblxuICAgIGRhdGEuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgICBpZiAoZGF0YXNldC53aXRoU2Nyb2xsYWJsZURvdCA9PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwZXJEYXRhID0gd2lkdGggLyBkYXRhc2V0LmRhdGEubGVuZ3RoO1xuICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgbGV0IHlWYWx1ZXMgPSBbXTtcbiAgICAgIGxldCB4VmFsdWVzID0gW107XG5cbiAgICAgIGxldCB5VmFsdWVzTGFiZWwgPSBbXTtcbiAgICAgIGxldCB4VmFsdWVzTGFiZWwgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFzZXQuZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goaW5kZXggKiBwZXJEYXRhKTtcbiAgICAgICAgY29uc3QgeXZhbCA9XG4gICAgICAgICAgKChiYXNlSGVpZ2h0IC1cbiAgICAgICAgICAgIHRoaXMuY2FsY0hlaWdodChcbiAgICAgICAgICAgICAgZGF0YXNldC5kYXRhW2RhdGFzZXQuZGF0YS5sZW5ndGggLSBpbmRleCAtIDFdLFxuICAgICAgICAgICAgICBkYXRhcyxcbiAgICAgICAgICAgICAgaGVpZ2h0XG4gICAgICAgICAgICApKSAvXG4gICAgICAgICAgICA0KSAqXG4gICAgICAgICAgICAzICtcbiAgICAgICAgICBwYWRkaW5nVG9wO1xuICAgICAgICB5VmFsdWVzLnB1c2goeXZhbCk7XG4gICAgICAgIGNvbnN0IHh2YWwgPVxuICAgICAgICAgIHBhZGRpbmdSaWdodCArXG4gICAgICAgICAgKChkYXRhc2V0LmRhdGEubGVuZ3RoIC0gaW5kZXggLSAxKSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC9cbiAgICAgICAgICAgIGRhdGFzZXQuZGF0YS5sZW5ndGg7XG4gICAgICAgIHhWYWx1ZXMucHVzaCh4dmFsKTtcblxuICAgICAgICB5VmFsdWVzTGFiZWwucHVzaChcbiAgICAgICAgICB5dmFsIC0gKHNjcm9sbGFibGVJbmZvU2l6ZS5oZWlnaHQgKyBzY3JvbGxhYmxlSW5mb09mZnNldClcbiAgICAgICAgKTtcbiAgICAgICAgeFZhbHVlc0xhYmVsLnB1c2goeHZhbCAtIHNjcm9sbGFibGVJbmZvU2l6ZS53aWR0aCAvIDIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVYID0gc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuaW50ZXJwb2xhdGUoe1xuICAgICAgICBpbnB1dFJhbmdlOiB2YWx1ZXMsXG4gICAgICAgIG91dHB1dFJhbmdlOiB4VmFsdWVzLFxuICAgICAgICBleHRyYXBvbGF0ZTogXCJjbGFtcFwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHJhbnNsYXRlWSA9IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0LmludGVycG9sYXRlKHtcbiAgICAgICAgaW5wdXRSYW5nZTogdmFsdWVzLFxuICAgICAgICBvdXRwdXRSYW5nZTogeVZhbHVlcyxcbiAgICAgICAgZXh0cmFwb2xhdGU6IFwiY2xhbXBcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxhYmVsVHJhbnNsYXRlWCA9IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0LmludGVycG9sYXRlKHtcbiAgICAgICAgaW5wdXRSYW5nZTogdmFsdWVzLFxuICAgICAgICBvdXRwdXRSYW5nZTogeFZhbHVlc0xhYmVsLFxuICAgICAgICBleHRyYXBvbGF0ZTogXCJjbGFtcFwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGFiZWxUcmFuc2xhdGVZID0gc2Nyb2xsYWJsZURvdEhvcml6b250YWxPZmZzZXQuaW50ZXJwb2xhdGUoe1xuICAgICAgICBpbnB1dFJhbmdlOiB2YWx1ZXMsXG4gICAgICAgIG91dHB1dFJhbmdlOiB5VmFsdWVzTGFiZWwsXG4gICAgICAgIGV4dHJhcG9sYXRlOiBcImNsYW1wXCJcbiAgICAgIH0pO1xuXG4gICAgICBvdXRwdXQucHVzaChcbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBrZXk9e2BzY3JvbGxhYmxlLWluZm8tJHtkYXRhc2V0SW5kZXh9YH1cbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUluZm9WaWV3U3R5bGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogW1xuICAgICAgICAgICAgICAgIHsgdHJhbnNsYXRlWDogbGFiZWxUcmFuc2xhdGVYIH0sXG4gICAgICAgICAgICAgICAgeyB0cmFuc2xhdGVZOiBsYWJlbFRyYW5zbGF0ZVkgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB3aWR0aDogc2Nyb2xsYWJsZUluZm9TaXplLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbGFibGVJbmZvU2l6ZS5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdfVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgb25MYXlvdXQ9eygpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sYWJlbC5jdXJyZW50LnNldE5hdGl2ZVByb3BzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzY3JvbGxhYmxlSW5mb1RleHREZWNvcmF0b3IoXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGRhdGFbMF0uZGF0YVtkYXRhWzBdLmRhdGEubGVuZ3RoIC0gMV0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17c2Nyb2xsYWJsZUluZm9UZXh0U3R5bGV9XG4gICAgICAgICAgICByZWY9e3RoaXMubGFiZWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PixcbiAgICAgICAgPEFuaW1hdGVkQ2lyY2xlXG4gICAgICAgICAga2V5PXtgc2Nyb2xsYWJsZS1kb3QtJHtkYXRhc2V0SW5kZXh9YH1cbiAgICAgICAgICBjeD17dHJhbnNsYXRlWH1cbiAgICAgICAgICBjeT17dHJhbnNsYXRlWX1cbiAgICAgICAgICByPXtzY3JvbGxhYmxlRG90UmFkaXVzfVxuICAgICAgICAgIHN0cm9rZT17c2Nyb2xsYWJsZURvdFN0cm9rZUNvbG9yfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXtzY3JvbGxhYmxlRG90U3Ryb2tlV2lkdGh9XG4gICAgICAgICAgZmlsbD17c2Nyb2xsYWJsZURvdEZpbGx9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICByZW5kZXJTaGFkb3cgPSAoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBkYXRhLFxuICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgfTogUGljazxcbiAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgIFwiZGF0YVwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwicGFkZGluZ1JpZ2h0XCIgfCBcInBhZGRpbmdUb3BcIlxuICA+ICYge1xuICAgIHVzZUNvbG9yRnJvbURhdGFzZXQ6IEFic3RyYWN0Q2hhcnRDb25maWdbXCJ1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0XCJdO1xuICB9KSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYmV6aWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJCZXppZXJTaGFkb3coe1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgIHBhZGRpbmdUb3AsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcbiAgICBjb25zdCB4TWF4ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGEubWFwKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBvbHlnb25cbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHBvaW50cz17XG4gICAgICAgICAgICBkYXRhc2V0LmRhdGFcbiAgICAgICAgICAgICAgLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBwYWRkaW5nUmlnaHQgKyAoaSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC8geE1heDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgICAgICAgICAgKChiYXNlSGVpZ2h0IC0gdGhpcy5jYWxjSGVpZ2h0KGQsIGRhdGFzLCBoZWlnaHQpKSAvIDQpICogMyArXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3h9LCR7eX1gO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbihcIiBcIikgK1xuICAgICAgICAgICAgYCAke1xuICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgK1xuICAgICAgICAgICAgICAoKHdpZHRoIC0gcGFkZGluZ1JpZ2h0KSAvIHhNYXgpICogKGRhdGFzZXQuZGF0YS5sZW5ndGggLSAxKVxuICAgICAgICAgICAgfSwke1xuICAgICAgICAgICAgICAoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcFxuICAgICAgICAgICAgfSAke3BhZGRpbmdSaWdodH0sJHsoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcH1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXG4gICAgICAgICAgICBgZmlsbFNoYWRvd0dyYWRpZW50RnJvbSR7dXNlQ29sb3JGcm9tRGF0YXNldCA/IGBfJHtpbmRleH1gIDogXCJcIn1gXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHJva2VXaWR0aD17MH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyTGluZSA9ICh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdSaWdodCxcbiAgICBwYWRkaW5nVG9wLFxuICAgIGRhdGEsXG4gICAgbGluZWpvaW5UeXBlXG4gIH06IFBpY2s8XG4gICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICBcImRhdGFcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCIgfCBcImxpbmVqb2luVHlwZVwiXG4gID4pID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5iZXppZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckJlemllckxpbmUoe1xuICAgICAgICBkYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgIHBhZGRpbmdUb3BcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGNvbnN0IGRhdGFzID0gdGhpcy5nZXREYXRhcyhkYXRhKTtcbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcbiAgICBjb25zdCB4TWF4ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEpO1xuXG4gICAgZGF0YS5mb3JFYWNoKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGxhc3RQb2ludDogc3RyaW5nO1xuICAgICAgY29uc3QgcG9pbnRzID0gZGF0YXNldC5kYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAoZCA9PT0gbnVsbCkgcmV0dXJuIGxhc3RQb2ludDtcbiAgICAgICAgY29uc3QgeCA9IChpICogKHdpZHRoIC0gcGFkZGluZ1JpZ2h0KSkgLyB4TWF4ICsgcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoKGJhc2VIZWlnaHQgLSB0aGlzLmNhbGNIZWlnaHQoZCwgZGF0YXMsIGhlaWdodCkpIC8gNCkgKiAzICtcbiAgICAgICAgICBwYWRkaW5nVG9wO1xuICAgICAgICBsYXN0UG9pbnQgPSBgJHt4fSwke3l9YDtcbiAgICAgICAgcmV0dXJuIGAke3h9LCR7eX1gO1xuICAgICAgfSk7XG5cbiAgICAgIG91dHB1dC5wdXNoKFxuICAgICAgICA8UG9seWxpbmVcbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHN0cm9rZUxpbmVqb2luPXtsaW5lam9pblR5cGV9XG4gICAgICAgICAgcG9pbnRzPXtwb2ludHMuam9pbihcIiBcIil9XG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZT17dGhpcy5nZXRDb2xvcihkYXRhc2V0LCAwLjIpfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXt0aGlzLmdldFN0cm9rZVdpZHRoKGRhdGFzZXQpfVxuICAgICAgICAgIHN0cm9rZURhc2hhcnJheT17dGhpcy5nZXRTdHJva2VEYXNoQXJyYXkoZGF0YXNldCl9XG4gICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldD17ZGF0YXNldC5zdHJva2VEYXNoT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgZ2V0WE1heFZhbHVlcyA9IChkYXRhOiBEYXRhc2V0W10pID0+IHtcbiAgICByZXR1cm4gZGF0YS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgoY3VyLmRhdGEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICByZXR1cm4geE1heCA+IGFjYyA/IHhNYXggOiBhY2M7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgZ2V0QmV6aWVyTGluZVBvaW50cyA9IChcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcGFkZGluZ1JpZ2h0LFxuICAgICAgcGFkZGluZ1RvcCxcbiAgICAgIGRhdGFcbiAgICB9OiBQaWNrPFxuICAgICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICAgIFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCIgfCBcImRhdGFcIlxuICAgID5cbiAgKSA9PiB7XG4gICAgaWYgKGRhdGFzZXQuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIk0wLDBcIjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhcyA9IHRoaXMuZ2V0RGF0YXMoZGF0YSk7XG4gICAgY29uc3QgeE1heCA9IHRoaXMuZ2V0WE1heFZhbHVlcyhkYXRhKTtcblxuICAgIGNvbnN0IHggPSAoaTogbnVtYmVyKSA9PlxuICAgICAgTWF0aC5mbG9vcihwYWRkaW5nUmlnaHQgKyAoaSAqICh3aWR0aCAtIHBhZGRpbmdSaWdodCkpIC8geE1heCk7XG5cbiAgICBjb25zdCBiYXNlSGVpZ2h0ID0gdGhpcy5jYWxjQmFzZUhlaWdodChkYXRhcywgaGVpZ2h0KTtcblxuICAgIGNvbnN0IHkgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB5SGVpZ2h0ID0gdGhpcy5jYWxjSGVpZ2h0KGRhdGFzZXQuZGF0YVtpXSwgZGF0YXMsIGhlaWdodCk7XG5cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgoYmFzZUhlaWdodCAtIHlIZWlnaHQpIC8gNCkgKiAzICsgcGFkZGluZ1RvcCk7XG4gICAgfTtcblxuICAgIHJldHVybiBbYE0ke3goMCl9LCR7eSgwKX1gXVxuICAgICAgLmNvbmNhdChcbiAgICAgICAgZGF0YXNldC5kYXRhLnNsaWNlKDAsIC0xKS5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCB4X21pZCA9ICh4KGkpICsgeChpICsgMSkpIC8gMjtcbiAgICAgICAgICBjb25zdCB5X21pZCA9ICh5KGkpICsgeShpICsgMSkpIC8gMjtcbiAgICAgICAgICBjb25zdCBjcF94MSA9ICh4X21pZCArIHgoaSkpIC8gMjtcbiAgICAgICAgICBjb25zdCBjcF94MiA9ICh4X21pZCArIHgoaSArIDEpKSAvIDI7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGBRICR7Y3BfeDF9LCAke3koaSl9LCAke3hfbWlkfSwgJHt5X21pZH1gICtcbiAgICAgICAgICAgIGAgUSAke2NwX3gyfSwgJHt5KGkgKyAxKX0sICR7eChpICsgMSl9LCAke3koaSArIDEpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmpvaW4oXCIgXCIpO1xuICB9O1xuXG4gIHJlbmRlckJlemllckxpbmUgPSAoe1xuICAgIGRhdGEsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdSaWdodCxcbiAgICBwYWRkaW5nVG9wXG4gIH06IFBpY2s8XG4gICAgQWJzdHJhY3RDaGFydENvbmZpZyxcbiAgICBcImRhdGFcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCJcbiAgPikgPT4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoZGF0YXNldCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0QmV6aWVyTGluZVBvaW50cyhkYXRhc2V0LCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHBhZGRpbmdSaWdodCxcbiAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYXRoXG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBkPXtyZXN1bHR9XG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZT17dGhpcy5nZXRDb2xvcihkYXRhc2V0LCAwLjIpfVxuICAgICAgICAgIHN0cm9rZVdpZHRoPXt0aGlzLmdldFN0cm9rZVdpZHRoKGRhdGFzZXQpfVxuICAgICAgICAgIHN0cm9rZURhc2hhcnJheT17dGhpcy5nZXRTdHJva2VEYXNoQXJyYXkoZGF0YXNldCl9XG4gICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldD17ZGF0YXNldC5zdHJva2VEYXNoT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXJCZXppZXJTaGFkb3cgPSAoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBkYXRhLFxuICAgIHVzZUNvbG9yRnJvbURhdGFzZXRcbiAgfTogUGljazxcbiAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgIFwiZGF0YVwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwicGFkZGluZ1JpZ2h0XCIgfCBcInBhZGRpbmdUb3BcIlxuICA+ICYge1xuICAgIHVzZUNvbG9yRnJvbURhdGFzZXQ6IEFic3RyYWN0Q2hhcnRDb25maWdbXCJ1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0XCJdO1xuICB9KSA9PlxuICAgIGRhdGEubWFwKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgeE1heCA9IHRoaXMuZ2V0WE1heFZhbHVlcyhkYXRhKTtcbiAgICAgIGNvbnN0IGQgPVxuICAgICAgICB0aGlzLmdldEJlemllckxpbmVQb2ludHMoZGF0YXNldCwge1xuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pICtcbiAgICAgICAgYCBMJHtcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgK1xuICAgICAgICAgICgod2lkdGggLSBwYWRkaW5nUmlnaHQpIC8geE1heCkgKiAoZGF0YXNldC5kYXRhLmxlbmd0aCAtIDEpXG4gICAgICAgIH0sJHtcbiAgICAgICAgICAoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcFxuICAgICAgICB9IEwke3BhZGRpbmdSaWdodH0sJHsoaGVpZ2h0IC8gNCkgKiAzICsgcGFkZGluZ1RvcH0gWmA7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYXRoXG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBkPXtkfVxuICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXG4gICAgICAgICAgICBgZmlsbFNoYWRvd0dyYWRpZW50RnJvbSR7dXNlQ29sb3JGcm9tRGF0YXNldCA/IGBfJHtpbmRleH1gIDogXCJcIn1gXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHJva2VXaWR0aD17MH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgcmVuZGVyTGVnZW5kID0gKHdpZHRoLCBsZWdlbmRPZmZzZXQpID0+IHtcbiAgICBjb25zdCB7IGxlZ2VuZCwgZGF0YXNldHMgfSA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICBjb25zdCBiYXNlTGVnZW5kSXRlbVggPSB3aWR0aCAvIChsZWdlbmQubGVuZ3RoICsgMSk7XG5cbiAgICByZXR1cm4gbGVnZW5kLm1hcCgobGVnZW5kSXRlbSwgaSkgPT4gKFxuICAgICAgPEcga2V5PXtgbGVnZW5kLSR7aX1gfT5cbiAgICAgICAgPExlZ2VuZEl0ZW1cbiAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICBpY29uQ29sb3I9e3RoaXMuZ2V0Q29sb3IoZGF0YXNldHNbaV0sIDAuOSl9XG4gICAgICAgICAgYmFzZUxlZ2VuZEl0ZW1YPXtiYXNlTGVnZW5kSXRlbVh9XG4gICAgICAgICAgbGVnZW5kVGV4dD17bGVnZW5kSXRlbX1cbiAgICAgICAgICBsYWJlbFByb3BzPXt7IC4uLnRoaXMuZ2V0UHJvcHNGb3JMYWJlbHMoKSB9fVxuICAgICAgICAgIGxlZ2VuZE9mZnNldD17bGVnZW5kT2Zmc2V0fVxuICAgICAgICAvPlxuICAgICAgPC9HPlxuICAgICkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGRhdGEsXG4gICAgICB3aXRoU2Nyb2xsYWJsZURvdCA9IGZhbHNlLFxuICAgICAgd2l0aFNoYWRvdyA9IHRydWUsXG4gICAgICB3aXRoRG90cyA9IHRydWUsXG4gICAgICB3aXRoSW5uZXJMaW5lcyA9IHRydWUsXG4gICAgICB3aXRoT3V0ZXJMaW5lcyA9IHRydWUsXG4gICAgICB3aXRoSG9yaXpvbnRhbExpbmVzID0gdHJ1ZSxcbiAgICAgIHdpdGhWZXJ0aWNhbExpbmVzID0gdHJ1ZSxcbiAgICAgIHdpdGhIb3Jpem9udGFsTGFiZWxzID0gdHJ1ZSxcbiAgICAgIHdpdGhWZXJ0aWNhbExhYmVscyA9IHRydWUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgZGVjb3JhdG9yLFxuICAgICAgb25EYXRhUG9pbnRDbGljayxcbiAgICAgIHZlcnRpY2FsTGFiZWxSb3RhdGlvbiA9IDAsXG4gICAgICBob3Jpem9udGFsTGFiZWxSb3RhdGlvbiA9IDAsXG4gICAgICBmb3JtYXRZTGFiZWwgPSAoeUxhYmVsKSA9PiB5TGFiZWwsXG4gICAgICBmb3JtYXRYTGFiZWwgPSAoeExhYmVsKSA9PiB4TGFiZWwsXG4gICAgICBzZWdtZW50cyxcbiAgICAgIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gICAgICBjaGFydENvbmZpZ1xuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBzY3JvbGxhYmxlRG90SG9yaXpvbnRhbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGxhYmVscyA9IFtdIH0gPSBkYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIGJvcmRlclJhZGl1cyA9IDAsXG4gICAgICBwYWRkaW5nVG9wID0gMTYsXG4gICAgICBwYWRkaW5nUmlnaHQgPSA2NCxcbiAgICAgIG1hcmdpbiA9IDAsXG4gICAgICBtYXJnaW5SaWdodCA9IDAsXG4gICAgICBwYWRkaW5nQm90dG9tID0gMFxuICAgIH0gPSBzdHlsZTtcblxuICAgIGNvbnN0IGNoYXJ0UmlnaHRQYWRkaW5nID0gdGhpcy5nZXRDaGFydFJpZ2h0UGFkZGluZyhcbiAgICAgIGRhdGEuZGF0YXNldHMsXG4gICAgICB3aXRoRG90c1xuICAgICk7XG4gICAgY29uc3QgY2hhcnRXaWR0aCA9IE1hdGgubWF4KFxuICAgICAgd2lkdGggLSBjaGFydFJpZ2h0UGFkZGluZyxcbiAgICAgIGdldEZpbml0ZU51bWJlcihwYWRkaW5nUmlnaHQsIDY0KSArIDFcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgd2lkdGg6IGNoYXJ0V2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB2ZXJ0aWNhbExhYmVsUm90YXRpb24sXG4gICAgICBob3Jpem9udGFsTGFiZWxSb3RhdGlvblxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhcyA9IHRoaXMuZ2V0RGF0YXMoZGF0YS5kYXRhc2V0cyk7XG4gICAgY29uc3QgZmlyc3REYXRhc2V0ID0gZGF0YS5kYXRhc2V0c1swXSB8fCB7IGRhdGE6IFtdIH07XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZURhdGEgPVxuICAgICAgd2l0aFNjcm9sbGFibGVEb3QgJiZcbiAgICAgIGRhdGEuZGF0YXNldHMuc29tZSgoZGF0YXNldCkgPT4gZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCB4QXhpc0RhdGFJbnRlcnZhbENvdW50ID0gdGhpcy5nZXRYTWF4VmFsdWVzKGRhdGEuZGF0YXNldHMpO1xuICAgIGNvbnN0IHhBeGlzTGFiZWxJbnRlcnZhbENvdW50ID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIDEsIDEpO1xuXG4gICAgbGV0IGNvdW50ID0gTWF0aC5taW4oLi4uZGF0YXMpID09PSBNYXRoLm1heCguLi5kYXRhcykgPyAxIDogNDtcbiAgICBpZiAoc2VnbWVudHMpIHtcbiAgICAgIGNvdW50ID0gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgbGVnZW5kT2Zmc2V0ID0gdGhpcy5wcm9wcy5kYXRhLmxlZ2VuZCA/IGhlaWdodCAqIDAuMTUgOiAwO1xuICAgIGNvbnN0IGJhY2tncm91bmRSYWRpdXMgPSBnZXROdW1iZXJQcm9wKGJvcmRlclJhZGl1cyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPFN2Z1xuICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgKHBhZGRpbmdCb3R0b20gYXMgbnVtYmVyKSArIGxlZ2VuZE9mZnNldH1cbiAgICAgICAgICB3aWR0aD17d2lkdGggLSAobWFyZ2luIGFzIG51bWJlcikgKiAyIC0gKG1hcmdpblJpZ2h0IGFzIG51bWJlcil9XG4gICAgICAgID5cbiAgICAgICAgICA8UmVjdFxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgbGVnZW5kT2Zmc2V0fVxuICAgICAgICAgICAgcng9e2JhY2tncm91bmRSYWRpdXN9XG4gICAgICAgICAgICByeT17YmFja2dyb3VuZFJhZGl1c31cbiAgICAgICAgICAgIGZpbGw9e3RoaXMuZ2V0R3JhZGllbnRVcmwoXCJiYWNrZ3JvdW5kR3JhZGllbnRcIil9XG4gICAgICAgICAgICBmaWxsT3BhY2l0eT17dHJhbnNwYXJlbnQgPyAwIDogMX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmRhdGEubGVnZW5kICYmIHRoaXMucmVuZGVyTGVnZW5kKHdpZHRoLCBsZWdlbmRPZmZzZXQpfVxuICAgICAgICAgIDxHIHg9XCIwXCIgeT17bGVnZW5kT2Zmc2V0fT5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckRlZnMoe1xuICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxHPlxuICAgICAgICAgICAgICB7d2l0aEhvcml6b250YWxMaW5lcyAmJlxuICAgICAgICAgICAgICAgICh3aXRoSW5uZXJMaW5lc1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnJlbmRlckhvcml6b250YWxMaW5lcyh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiB3aXRoT3V0ZXJMaW5lc1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucmVuZGVySG9yaXpvbnRhbExpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhIb3Jpem9udGFsTGFiZWxzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJIb3Jpem9udGFsTGFiZWxzKHtcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBmb3JtYXRZTGFiZWwsXG4gICAgICAgICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiBjaGFydENvbmZpZy5kZWNpbWFsUGxhY2VzXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhWZXJ0aWNhbExpbmVzICYmXG4gICAgICAgICAgICAgICAgKHdpdGhJbm5lckxpbmVzXG4gICAgICAgICAgICAgICAgICA/IHRoaXMucmVuZGVyVmVydGljYWxMaW5lcyh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZpcnN0RGF0YXNldC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICB4QXhpc0ludGVydmFsQ291bnQ6IHhBeGlzRGF0YUludGVydmFsQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogd2l0aE91dGVyTGluZXNcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJlbmRlclZlcnRpY2FsTGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3dpdGhWZXJ0aWNhbExhYmVscyAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVmVydGljYWxMYWJlbHMoe1xuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICB4QXhpc0ludGVydmFsQ291bnQ6IHhBeGlzTGFiZWxJbnRlcnZhbENvdW50LFxuICAgICAgICAgICAgICAgICAgZm9ybWF0WExhYmVsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyTGluZSh7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgICAgPEc+XG4gICAgICAgICAgICAgIHt3aXRoU2hhZG93ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTaGFkb3coe1xuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0IGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgdXNlQ29sb3JGcm9tRGF0YXNldDogY2hhcnRDb25maWcudXNlU2hhZG93Q29sb3JGcm9tRGF0YXNldFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgICAgPEc+XG4gICAgICAgICAgICAgIHt3aXRoRG90cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRG90cyh7XG4gICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodCBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBvbkRhdGFQb2ludENsaWNrXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge2hhc1Njcm9sbGFibGVEYXRhICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTY3JvbGxhYmxlRG90KHtcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNoYXJ0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBwYWRkaW5nUmlnaHQgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgb25EYXRhUG9pbnRDbGljayxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0c+XG4gICAgICAgICAgICA8Rz5cbiAgICAgICAgICAgICAge2RlY29yYXRvciAmJlxuICAgICAgICAgICAgICAgIGRlY29yYXRvcih7XG4gICAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9HPlxuICAgICAgICAgIDwvRz5cbiAgICAgICAgPC9Tdmc+XG4gICAgICAgIHt3aXRoU2Nyb2xsYWJsZURvdCAmJiAoXG4gICAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXtTdHlsZVNoZWV0LmFic29sdXRlRmlsbH1cbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17eyB3aWR0aDogd2lkdGggKiAyIH19XG4gICAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3I9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsRXZlbnRUaHJvdHRsZT17MTZ9XG4gICAgICAgICAgICBvblNjcm9sbD17QW5pbWF0ZWQuZXZlbnQoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDoge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50T2Zmc2V0OiB7IHg6IHNjcm9sbGFibGVEb3RIb3Jpem9udGFsT2Zmc2V0IH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHsgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSB9XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICAgICAgYm91bmNlcz17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvVmlldz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVDaGFydDtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export { normalizeCartesianData, normalizeLegacyContributionData, normalizeLegacyLineData, normalizeLegacyPieData, normalizeLegacyProgressData, normalizeLegacyStackedBarData } from "./normalize";
2
+ export type { CartesianSeriesInput, ChartKitWarning, ChartKitWarningCode, ChartXValue, ChartYValue, LegacyContributionValue, LegacyDataset, LegacyLineData, LegacyPieDataItem, LegacyProgressData, LegacyStackedBarData, NormalizeCartesianInput, NormalizeLegacyContributionOptions, NormalizeLegacyPieOptions, NormalizeLegacyStackedBarOptions, NormalizeOptions, NormalizedCartesianData, NormalizedContributionData, NormalizedContributionDay, NormalizedDataPoint, NormalizedPieData, NormalizedPieSlice, NormalizedProgressData, NormalizedProgressRing, NormalizedSeries, NormalizedStackedBarData, NormalizedStackedBarGroup, NormalizedStackedBarSegment } from "./types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,kCAAkC,EAClC,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export { normalizeCartesianData, normalizeLegacyContributionData, normalizeLegacyLineData, normalizeLegacyPieData, normalizeLegacyProgressData, normalizeLegacyStackedBarData } from "./normalize";
@@ -0,0 +1,8 @@
1
+ import type { LegacyContributionValue, LegacyLineData, LegacyPieDataItem, LegacyProgressData, LegacyStackedBarData, NormalizeCartesianInput, NormalizeLegacyContributionOptions, NormalizeLegacyPieOptions, NormalizeLegacyStackedBarOptions, NormalizeOptions, NormalizedCartesianData, NormalizedContributionData, NormalizedPieData, NormalizedProgressData, NormalizedStackedBarData } from "./types";
2
+ export declare const normalizeCartesianData: <TData extends Record<string, unknown>>(input: NormalizeCartesianInput<TData>, options?: NormalizeOptions) => NormalizedCartesianData<TData>;
3
+ export declare const normalizeLegacyLineData: (data: LegacyLineData, options?: NormalizeOptions) => NormalizedCartesianData<LegacyLineData>;
4
+ export declare const normalizeLegacyPieData: (data: LegacyPieDataItem[], options?: NormalizeLegacyPieOptions) => NormalizedPieData<LegacyPieDataItem>;
5
+ export declare const normalizeLegacyProgressData: (input: LegacyProgressData, options?: NormalizeOptions) => NormalizedProgressData;
6
+ export declare const normalizeLegacyStackedBarData: (data: LegacyStackedBarData, options?: NormalizeLegacyStackedBarOptions) => NormalizedStackedBarData<Array<number | null | undefined>>;
7
+ export declare const normalizeLegacyContributionData: <TData extends LegacyContributionValue = LegacyContributionValue>(values: TData[], options: NormalizeLegacyContributionOptions) => NormalizedContributionData<TData>;
8
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/data/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,kCAAkC,EAClC,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAG1B,iBAAiB,EAEjB,sBAAsB,EAGtB,wBAAwB,EAGzB,MAAM,SAAS,CAAC;AA+BjB,eAAO,MAAM,sBAAsB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,OAAO,uBAAuB,CAAC,KAAK,CAAC,EACrC,UAAS,gBAAqB,KAC7B,uBAAuB,CAAC,KAAK,CAoD/B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,cAAc,EACpB,UAAS,gBAAqB,KAC7B,uBAAuB,CAAC,cAAc,CA8CxC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,iBAAiB,EAAE,EACzB,UAAS,yBAA8B,KACtC,iBAAiB,CAAC,iBAAiB,CA0CrC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,OAAO,kBAAkB,EACzB,UAAS,gBAAqB,KAC7B,sBAsCF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,MAAM,oBAAoB,EAC1B,UAAS,gCAAqC,KAC7C,wBAAwB,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAyD3D,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,KAAK,SAAS,uBAAuB,GAAG,uBAAuB,EAE/D,QAAQ,KAAK,EAAE,EACf,SAAS,kCAAkC,KAC1C,0BAA0B,CAAC,KAAK,CAwElC,CAAC"}
@@ -0,0 +1,229 @@
1
+ import { createWarningCollector, getBeginningTimeForDate, millisecondsInOneDay, normalizeDateValue, normalizeNumberValue, normalizeXValue, shiftDate } from "./normalizeValues";
2
+ const getSeriesInputs = (input) => {
3
+ if (input.series && input.series.length > 0) {
4
+ return input.series;
5
+ }
6
+ if (input.yKeys && input.yKeys.length > 0) {
7
+ return input.yKeys.map((yKey) => ({ yKey }));
8
+ }
9
+ if (input.yKey) {
10
+ return [{ yKey: input.yKey }];
11
+ }
12
+ return [];
13
+ };
14
+ export const normalizeCartesianData = (input, options = {}) => {
15
+ const collector = createWarningCollector(options);
16
+ const seriesInputs = getSeriesInputs(input);
17
+ const series = seriesInputs.map((seriesInput, seriesIndex) => {
18
+ const key = seriesInput.key ?? seriesInput.yKey;
19
+ const label = seriesInput.label ?? key;
20
+ const points = input.data.map((row, rowIndex) => {
21
+ const x = normalizeXValue(row[input.xKey], rowIndex, `data[${rowIndex}].${input.xKey}`, collector);
22
+ const value = normalizeNumberValue(row[seriesInput.yKey], `data[${rowIndex}].${seriesInput.yKey}`, collector);
23
+ return {
24
+ index: rowIndex,
25
+ x,
26
+ value,
27
+ defined: value !== null,
28
+ raw: row
29
+ };
30
+ });
31
+ const normalizedSeries = {
32
+ key: String(key || `series-${seriesIndex}`),
33
+ label: String(label || key || `Series ${seriesIndex + 1}`),
34
+ points
35
+ };
36
+ if (seriesInput.color !== undefined) {
37
+ normalizedSeries.color = seriesInput.color;
38
+ }
39
+ return normalizedSeries;
40
+ });
41
+ return {
42
+ kind: "cartesian",
43
+ xKey: input.xKey,
44
+ series,
45
+ rows: input.data,
46
+ warnings: collector.warnings
47
+ };
48
+ };
49
+ export const normalizeLegacyLineData = (data, options = {}) => {
50
+ const collector = createWarningCollector(options);
51
+ const maxPointCount = Math.max(data.labels?.length ?? 0, ...data.datasets.map((dataset) => dataset.data.length));
52
+ const rows = Array.from({ length: maxPointCount }, () => data);
53
+ const series = data.datasets.map((dataset, datasetIndex) => {
54
+ const key = String(dataset.key ?? `series-${datasetIndex}`);
55
+ const label = data.legend?.[datasetIndex] ?? key;
56
+ const points = Array.from({ length: maxPointCount }, (_, pointIndex) => {
57
+ const value = normalizeNumberValue(dataset.data[pointIndex], `datasets[${datasetIndex}].data[${pointIndex}]`, collector);
58
+ return {
59
+ index: pointIndex,
60
+ x: data.labels?.[pointIndex] ?? pointIndex,
61
+ value,
62
+ defined: value !== null,
63
+ raw: data
64
+ };
65
+ });
66
+ return {
67
+ key,
68
+ label,
69
+ points
70
+ };
71
+ });
72
+ return {
73
+ kind: "cartesian",
74
+ xKey: "labels",
75
+ series,
76
+ rows,
77
+ warnings: collector.warnings
78
+ };
79
+ };
80
+ export const normalizeLegacyPieData = (data, options = {}) => {
81
+ const accessor = options.accessor ?? "population";
82
+ const collector = createWarningCollector(options);
83
+ const slices = data.map((item, index) => {
84
+ let value = normalizeNumberValue(item[accessor], `data[${index}].${accessor}`, collector);
85
+ if (value !== null && value < 0) {
86
+ collector.warn({
87
+ code: "negative-pie-value",
88
+ message: `Expected non-negative pie value at data[${index}].${accessor}; normalized to null.`,
89
+ path: `data[${index}].${accessor}`
90
+ });
91
+ value = null;
92
+ }
93
+ const slice = {
94
+ index,
95
+ label: item.name ?? `Slice ${index + 1}`,
96
+ value,
97
+ defined: value !== null,
98
+ raw: item
99
+ };
100
+ if (item.color !== undefined) {
101
+ slice.color = item.color;
102
+ }
103
+ return slice;
104
+ });
105
+ return {
106
+ kind: "pie",
107
+ accessor,
108
+ slices,
109
+ warnings: collector.warnings
110
+ };
111
+ };
112
+ export const normalizeLegacyProgressData = (input, options = {}) => {
113
+ const collector = createWarningCollector(options);
114
+ const data = Array.isArray(input) ? input : input.data;
115
+ const labels = Array.isArray(input) ? undefined : input.labels;
116
+ const colors = Array.isArray(input) ? undefined : input.colors;
117
+ const rings = data.map((rawValue, index) => {
118
+ const value = normalizeNumberValue(rawValue, `data[${index}]`, collector);
119
+ if (value !== null && (value < 0 || value > 1)) {
120
+ collector.warn({
121
+ code: "progress-out-of-range",
122
+ message: `Expected progress value at data[${index}] to be between 0 and 1.`,
123
+ path: `data[${index}]`
124
+ });
125
+ }
126
+ const ring = {
127
+ index,
128
+ value,
129
+ defined: value !== null
130
+ };
131
+ if (labels?.[index] !== undefined) {
132
+ ring.label = labels[index];
133
+ }
134
+ if (colors?.[index] !== undefined) {
135
+ ring.color = colors[index];
136
+ }
137
+ return ring;
138
+ });
139
+ return {
140
+ kind: "progress",
141
+ rings,
142
+ warnings: collector.warnings
143
+ };
144
+ };
145
+ export const normalizeLegacyStackedBarData = (data, options = {}) => {
146
+ const collector = createWarningCollector(options);
147
+ const segmentCount = Math.max(data.legend.length, data.barColors.length, ...data.data.map((group) => group.length));
148
+ const groups = data.data.map((group, groupIndex) => {
149
+ const segments = Array.from({ length: segmentCount }, (_, segmentIndex) => {
150
+ const value = normalizeNumberValue(group[segmentIndex], `data[${groupIndex}][${segmentIndex}]`, collector);
151
+ const segment = {
152
+ index: groupIndex,
153
+ seriesIndex: segmentIndex,
154
+ label: data.legend[segmentIndex] ?? `Series ${segmentIndex + 1}`,
155
+ value,
156
+ defined: value !== null,
157
+ raw: group
158
+ };
159
+ if (data.barColors[segmentIndex] !== undefined) {
160
+ segment.color = data.barColors[segmentIndex];
161
+ }
162
+ return segment;
163
+ });
164
+ return {
165
+ index: groupIndex,
166
+ label: data.labels[groupIndex] ?? String(groupIndex),
167
+ total: segments.reduce((total, segment) => total + (segment.value ?? 0), 0),
168
+ segments,
169
+ raw: group
170
+ };
171
+ });
172
+ return {
173
+ kind: "stacked-bar",
174
+ legend: data.legend,
175
+ colors: data.barColors,
176
+ percentile: options.percentile ?? false,
177
+ groups,
178
+ warnings: collector.warnings
179
+ };
180
+ };
181
+ export const normalizeLegacyContributionData = (values, options) => {
182
+ const collector = createWarningCollector(options);
183
+ const accessor = options.accessor ?? "count";
184
+ const endDate = normalizeDateValue(options.endDate, "endDate", collector) ??
185
+ getBeginningTimeForDate(new Date(0));
186
+ const startDate = shiftDate(endDate, -Math.max(options.numDays, 0) + 1);
187
+ const emptyValue = options.emptyValue === undefined ? 0 : options.emptyValue;
188
+ const valuesByIndex = new Map();
189
+ values.forEach((value, valueIndex) => {
190
+ const date = normalizeDateValue(value.date, `values[${valueIndex}].date`, collector);
191
+ if (!date) {
192
+ return;
193
+ }
194
+ const dayIndex = Math.floor((date.valueOf() - startDate.valueOf()) / millisecondsInOneDay);
195
+ if (dayIndex < 0 || dayIndex >= options.numDays) {
196
+ collector.warn({
197
+ code: "contribution-out-of-range",
198
+ message: `Contribution date at values[${valueIndex}].date falls outside the configured range.`,
199
+ path: `values[${valueIndex}].date`
200
+ });
201
+ return;
202
+ }
203
+ valuesByIndex.set(dayIndex, value);
204
+ });
205
+ const days = Array.from({ length: Math.max(options.numDays, 0) }, (_, dayIndex) => {
206
+ const raw = valuesByIndex.get(dayIndex);
207
+ const value = raw
208
+ ? normalizeNumberValue(raw[accessor], `valuesByDate[${dayIndex}].${accessor}`, collector)
209
+ : emptyValue;
210
+ const day = {
211
+ index: dayIndex,
212
+ date: shiftDate(startDate, dayIndex),
213
+ value,
214
+ defined: value !== null
215
+ };
216
+ if (raw !== undefined) {
217
+ day.raw = raw;
218
+ }
219
+ return day;
220
+ });
221
+ return {
222
+ kind: "contribution",
223
+ accessor,
224
+ startDate,
225
+ endDate,
226
+ days,
227
+ warnings: collector.warnings
228
+ };
229
+ };
@@ -0,0 +1,16 @@
1
+ import type { ChartKitWarning, ChartXValue, ChartYValue, NormalizeOptions } from "./types";
2
+ export declare const millisecondsInOneDay: number;
3
+ export type WarningCollector = {
4
+ warnings: ChartKitWarning[];
5
+ warn: (warning: ChartKitWarning) => void;
6
+ };
7
+ export declare const createWarningCollector: (options?: NormalizeOptions) => {
8
+ warnings: ChartKitWarning[];
9
+ warn: (warning: ChartKitWarning) => void;
10
+ };
11
+ export declare const normalizeXValue: (value: unknown, fallback: number, path: string, collector: WarningCollector) => ChartXValue;
12
+ export declare const normalizeNumberValue: (value: unknown, path: string, collector: WarningCollector) => ChartYValue;
13
+ export declare const shiftDate: (date: Date, numDays: number) => Date;
14
+ export declare const getBeginningTimeForDate: (date: Date) => Date;
15
+ export declare const normalizeDateValue: (value: unknown, path: string, collector: WarningCollector) => Date | null;
16
+ //# sourceMappingURL=normalizeValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeValues.d.ts","sourceRoot":"","sources":["../../src/data/normalizeValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAS,gBAAqB;;oBAKjD,eAAe;CAKlC,CAAC;AAUF,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU,MAAM,EAChB,MAAM,MAAM,EACZ,WAAW,gBAAgB,KAC1B,WAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,OAAO,EACd,MAAM,MAAM,EACZ,WAAW,gBAAgB,KAC1B,WA0BF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAIvD,CAAC;AAWF,eAAO,MAAM,uBAAuB,GAAI,MAAM,IAAI,KAAG,IAUpD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,EACd,MAAM,MAAM,EACZ,WAAW,gBAAgB,KAC1B,IAAI,GAAG,IA4CT,CAAC"}