@kepler.gl/components 3.0.0 → 3.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (669) hide show
  1. package/package.json +26 -27
  2. package/dist/bottom-widget.d.ts +0 -19
  3. package/dist/bottom-widget.js +0 -166
  4. package/dist/common/action-panel.d.ts +0 -27
  5. package/dist/common/action-panel.js +0 -132
  6. package/dist/common/animation-control/animation-control.d.ts +0 -25
  7. package/dist/common/animation-control/animation-control.js +0 -113
  8. package/dist/common/animation-control/animation-controller.d.ts +0 -19
  9. package/dist/common/animation-control/animation-controller.js +0 -318
  10. package/dist/common/animation-control/animation-speed-slider.d.ts +0 -12
  11. package/dist/common/animation-control/animation-speed-slider.js +0 -100
  12. package/dist/common/animation-control/animation-window-control.d.ts +0 -20
  13. package/dist/common/animation-control/animation-window-control.js +0 -68
  14. package/dist/common/animation-control/floating-time-display.d.ts +0 -9
  15. package/dist/common/animation-control/floating-time-display.js +0 -161
  16. package/dist/common/animation-control/play-control.d.ts +0 -12
  17. package/dist/common/animation-control/play-control.js +0 -63
  18. package/dist/common/animation-control/playback-controls.d.ts +0 -55
  19. package/dist/common/animation-control/playback-controls.js +0 -182
  20. package/dist/common/animation-control/reset-control.d.ts +0 -9
  21. package/dist/common/animation-control/reset-control.js +0 -53
  22. package/dist/common/animation-control/speed-control.d.ts +0 -12
  23. package/dist/common/animation-control/speed-control.js +0 -68
  24. package/dist/common/animation-control/window-action-control.d.ts +0 -11
  25. package/dist/common/animation-control/window-action-control.js +0 -69
  26. package/dist/common/checkbox.d.ts +0 -35
  27. package/dist/common/checkbox.js +0 -139
  28. package/dist/common/color-legend.d.ts +0 -39
  29. package/dist/common/color-legend.js +0 -231
  30. package/dist/common/data-table/button.d.ts +0 -8
  31. package/dist/common/data-table/button.js +0 -46
  32. package/dist/common/data-table/canvas.d.ts +0 -2
  33. package/dist/common/data-table/canvas.js +0 -32
  34. package/dist/common/data-table/cell-size.d.ts +0 -43
  35. package/dist/common/data-table/cell-size.js +0 -206
  36. package/dist/common/data-table/display-format.d.ts +0 -25
  37. package/dist/common/data-table/display-format.js +0 -149
  38. package/dist/common/data-table/grid.d.ts +0 -10
  39. package/dist/common/data-table/grid.js +0 -139
  40. package/dist/common/data-table/header-cell.d.ts +0 -28
  41. package/dist/common/data-table/header-cell.js +0 -169
  42. package/dist/common/data-table/index.d.ts +0 -101
  43. package/dist/common/data-table/index.js +0 -523
  44. package/dist/common/data-table/option-dropdown.d.ts +0 -28
  45. package/dist/common/data-table/option-dropdown.js +0 -195
  46. package/dist/common/dataset-label.d.ts +0 -10
  47. package/dist/common/dataset-label.js +0 -36
  48. package/dist/common/error-boundary.d.ts +0 -16
  49. package/dist/common/error-boundary.js +0 -83
  50. package/dist/common/field-selector.d.ts +0 -50
  51. package/dist/common/field-selector.js +0 -202
  52. package/dist/common/field-token.d.ts +0 -58
  53. package/dist/common/field-token.js +0 -54
  54. package/dist/common/file-uploader/file-drop.d.ts +0 -54
  55. package/dist/common/file-uploader/file-drop.js +0 -232
  56. package/dist/common/file-uploader/file-upload-progress.d.ts +0 -8
  57. package/dist/common/file-uploader/file-upload-progress.js +0 -103
  58. package/dist/common/file-uploader/file-upload.d.ts +0 -23
  59. package/dist/common/file-uploader/file-upload.js +0 -304
  60. package/dist/common/file-uploader/upload-button.d.ts +0 -8
  61. package/dist/common/file-uploader/upload-button.js +0 -74
  62. package/dist/common/flex-container.d.ts +0 -3
  63. package/dist/common/flex-container.js +0 -23
  64. package/dist/common/histogram-plot.d.ts +0 -3
  65. package/dist/common/histogram-plot.js +0 -120
  66. package/dist/common/icon-button.d.ts +0 -13
  67. package/dist/common/icon-button.js +0 -32
  68. package/dist/common/icons/add.d.ts +0 -9
  69. package/dist/common/icons/add.js +0 -58
  70. package/dist/common/icons/anchor_window.d.ts +0 -11
  71. package/dist/common/icons/anchor_window.js +0 -39
  72. package/dist/common/icons/arrow-down-alt.d.ts +0 -9
  73. package/dist/common/icons/arrow-down-alt.js +0 -58
  74. package/dist/common/icons/arrow-down-small.d.ts +0 -14
  75. package/dist/common/icons/arrow-down-small.js +0 -72
  76. package/dist/common/icons/arrow-down-solid.d.ts +0 -9
  77. package/dist/common/icons/arrow-down-solid.js +0 -58
  78. package/dist/common/icons/arrow-down.d.ts +0 -9
  79. package/dist/common/icons/arrow-down.js +0 -58
  80. package/dist/common/icons/arrow-left.d.ts +0 -9
  81. package/dist/common/icons/arrow-left.js +0 -61
  82. package/dist/common/icons/arrow-right.d.ts +0 -9
  83. package/dist/common/icons/arrow-right.js +0 -58
  84. package/dist/common/icons/arrow-up-alt.d.ts +0 -9
  85. package/dist/common/icons/arrow-up-alt.js +0 -59
  86. package/dist/common/icons/arrow-up-solid.d.ts +0 -9
  87. package/dist/common/icons/arrow-up-solid.js +0 -58
  88. package/dist/common/icons/arrow-up.d.ts +0 -9
  89. package/dist/common/icons/arrow-up.js +0 -58
  90. package/dist/common/icons/base.d.ts +0 -29
  91. package/dist/common/icons/base.js +0 -96
  92. package/dist/common/icons/bug.d.ts +0 -9
  93. package/dist/common/icons/bug.js +0 -60
  94. package/dist/common/icons/calendar.d.ts +0 -10
  95. package/dist/common/icons/calendar.js +0 -66
  96. package/dist/common/icons/cancel.d.ts +0 -9
  97. package/dist/common/icons/cancel.js +0 -58
  98. package/dist/common/icons/checkmark.d.ts +0 -10
  99. package/dist/common/icons/checkmark.js +0 -65
  100. package/dist/common/icons/clipboard.d.ts +0 -9
  101. package/dist/common/icons/clipboard.js +0 -59
  102. package/dist/common/icons/clock.d.ts +0 -9
  103. package/dist/common/icons/clock.js +0 -60
  104. package/dist/common/icons/close.d.ts +0 -9
  105. package/dist/common/icons/close.js +0 -63
  106. package/dist/common/icons/code-alt.d.ts +0 -9
  107. package/dist/common/icons/code-alt.js +0 -62
  108. package/dist/common/icons/copy.d.ts +0 -9
  109. package/dist/common/icons/copy.js +0 -64
  110. package/dist/common/icons/crosshairs.d.ts +0 -9
  111. package/dist/common/icons/crosshairs.js +0 -62
  112. package/dist/common/icons/cube-3d.d.ts +0 -9
  113. package/dist/common/icons/cube-3d.js +0 -62
  114. package/dist/common/icons/cursor-click.d.ts +0 -9
  115. package/dist/common/icons/cursor-click.js +0 -62
  116. package/dist/common/icons/cursor-point.d.ts +0 -14
  117. package/dist/common/icons/cursor-point.js +0 -69
  118. package/dist/common/icons/data-table.d.ts +0 -10
  119. package/dist/common/icons/data-table.js +0 -59
  120. package/dist/common/icons/db.d.ts +0 -10
  121. package/dist/common/icons/db.js +0 -59
  122. package/dist/common/icons/delete.d.ts +0 -9
  123. package/dist/common/icons/delete.js +0 -60
  124. package/dist/common/icons/docs.d.ts +0 -9
  125. package/dist/common/icons/docs.js +0 -74
  126. package/dist/common/icons/drag-n-drop.d.ts +0 -9
  127. package/dist/common/icons/drag-n-drop.js +0 -60
  128. package/dist/common/icons/draw-polygon.d.ts +0 -10
  129. package/dist/common/icons/draw-polygon.js +0 -78
  130. package/dist/common/icons/effects/brightness-contrast.d.ts +0 -14
  131. package/dist/common/icons/effects/brightness-contrast.js +0 -88
  132. package/dist/common/icons/effects/color-halftone.d.ts +0 -14
  133. package/dist/common/icons/effects/color-halftone.js +0 -127
  134. package/dist/common/icons/effects/dot-screen.d.ts +0 -14
  135. package/dist/common/icons/effects/dot-screen.js +0 -122
  136. package/dist/common/icons/effects/edge-work.d.ts +0 -14
  137. package/dist/common/icons/effects/edge-work.js +0 -81
  138. package/dist/common/icons/effects/hexagonal-pixelate.d.ts +0 -14
  139. package/dist/common/icons/effects/hexagonal-pixelate.js +0 -148
  140. package/dist/common/icons/effects/hue-saturation.d.ts +0 -14
  141. package/dist/common/icons/effects/hue-saturation.js +0 -79
  142. package/dist/common/icons/effects/ink.d.ts +0 -14
  143. package/dist/common/icons/effects/ink.js +0 -78
  144. package/dist/common/icons/effects/light-and-shadow.d.ts +0 -14
  145. package/dist/common/icons/effects/light-and-shadow.js +0 -67
  146. package/dist/common/icons/effects/magic-wand.d.ts +0 -14
  147. package/dist/common/icons/effects/magic-wand.js +0 -79
  148. package/dist/common/icons/effects/magnify.d.ts +0 -14
  149. package/dist/common/icons/effects/magnify.js +0 -86
  150. package/dist/common/icons/effects/noise.d.ts +0 -14
  151. package/dist/common/icons/effects/noise.js +0 -132
  152. package/dist/common/icons/effects/sepia.d.ts +0 -14
  153. package/dist/common/icons/effects/sepia.js +0 -79
  154. package/dist/common/icons/effects/tilt-shift.d.ts +0 -14
  155. package/dist/common/icons/effects/tilt-shift.js +0 -88
  156. package/dist/common/icons/effects/triangle-blur.d.ts +0 -14
  157. package/dist/common/icons/effects/triangle-blur.js +0 -83
  158. package/dist/common/icons/effects/vibrance.d.ts +0 -14
  159. package/dist/common/icons/effects/vibrance.js +0 -79
  160. package/dist/common/icons/effects/vignette.d.ts +0 -14
  161. package/dist/common/icons/effects/vignette.js +0 -72
  162. package/dist/common/icons/effects/zoom-blur.d.ts +0 -14
  163. package/dist/common/icons/effects/zoom-blur.js +0 -107
  164. package/dist/common/icons/email.d.ts +0 -9
  165. package/dist/common/icons/email.js +0 -62
  166. package/dist/common/icons/expand.d.ts +0 -9
  167. package/dist/common/icons/expand.js +0 -60
  168. package/dist/common/icons/eye-seen.d.ts +0 -9
  169. package/dist/common/icons/eye-seen.js +0 -60
  170. package/dist/common/icons/eye-unseen.d.ts +0 -9
  171. package/dist/common/icons/eye-unseen.js +0 -60
  172. package/dist/common/icons/file-type.d.ts +0 -8
  173. package/dist/common/icons/file-type.js +0 -45
  174. package/dist/common/icons/file.d.ts +0 -9
  175. package/dist/common/icons/file.js +0 -58
  176. package/dist/common/icons/files.d.ts +0 -9
  177. package/dist/common/icons/files.js +0 -60
  178. package/dist/common/icons/filter-funnel.d.ts +0 -9
  179. package/dist/common/icons/filter-funnel.js +0 -58
  180. package/dist/common/icons/free-window.d.ts +0 -11
  181. package/dist/common/icons/free-window.js +0 -39
  182. package/dist/common/icons/gear.d.ts +0 -9
  183. package/dist/common/icons/gear.js +0 -60
  184. package/dist/common/icons/globe.d.ts +0 -15
  185. package/dist/common/icons/globe.js +0 -72
  186. package/dist/common/icons/hash.d.ts +0 -9
  187. package/dist/common/icons/hash.js +0 -58
  188. package/dist/common/icons/histogram.d.ts +0 -9
  189. package/dist/common/icons/histogram.js +0 -59
  190. package/dist/common/icons/index.d.ts +0 -102
  191. package/dist/common/icons/index.js +0 -812
  192. package/dist/common/icons/info.d.ts +0 -12
  193. package/dist/common/icons/info.js +0 -72
  194. package/dist/common/icons/layers.d.ts +0 -9
  195. package/dist/common/icons/layers.js +0 -58
  196. package/dist/common/icons/left-arrow.d.ts +0 -9
  197. package/dist/common/icons/left-arrow.js +0 -62
  198. package/dist/common/icons/legend.d.ts +0 -9
  199. package/dist/common/icons/legend.js +0 -58
  200. package/dist/common/icons/line-chart.d.ts +0 -9
  201. package/dist/common/icons/line-chart.js +0 -58
  202. package/dist/common/icons/location-marker.d.ts +0 -14
  203. package/dist/common/icons/location-marker.js +0 -77
  204. package/dist/common/icons/login.d.ts +0 -9
  205. package/dist/common/icons/login.js +0 -61
  206. package/dist/common/icons/logout.d.ts +0 -9
  207. package/dist/common/icons/logout.js +0 -60
  208. package/dist/common/icons/map-icon.d.ts +0 -11
  209. package/dist/common/icons/map-icon.js +0 -66
  210. package/dist/common/icons/map.d.ts +0 -11
  211. package/dist/common/icons/map.js +0 -66
  212. package/dist/common/icons/messages.d.ts +0 -9
  213. package/dist/common/icons/messages.js +0 -58
  214. package/dist/common/icons/minus.d.ts +0 -9
  215. package/dist/common/icons/minus.js +0 -58
  216. package/dist/common/icons/moon.d.ts +0 -14
  217. package/dist/common/icons/moon.js +0 -77
  218. package/dist/common/icons/order-by-dataset.d.ts +0 -12
  219. package/dist/common/icons/order-by-dataset.js +0 -39
  220. package/dist/common/icons/order-by-list.d.ts +0 -12
  221. package/dist/common/icons/order-by-list.js +0 -31
  222. package/dist/common/icons/pause.d.ts +0 -9
  223. package/dist/common/icons/pause.js +0 -58
  224. package/dist/common/icons/picture.d.ts +0 -9
  225. package/dist/common/icons/picture.js +0 -60
  226. package/dist/common/icons/pin.d.ts +0 -9
  227. package/dist/common/icons/pin.js +0 -66
  228. package/dist/common/icons/play.d.ts +0 -9
  229. package/dist/common/icons/play.js +0 -58
  230. package/dist/common/icons/polygon.d.ts +0 -10
  231. package/dist/common/icons/polygon.js +0 -80
  232. package/dist/common/icons/rectangle.d.ts +0 -10
  233. package/dist/common/icons/rectangle.js +0 -81
  234. package/dist/common/icons/reduce.d.ts +0 -9
  235. package/dist/common/icons/reduce.js +0 -61
  236. package/dist/common/icons/reset.d.ts +0 -9
  237. package/dist/common/icons/reset.js +0 -58
  238. package/dist/common/icons/rocket.d.ts +0 -9
  239. package/dist/common/icons/rocket.js +0 -58
  240. package/dist/common/icons/save.d.ts +0 -9
  241. package/dist/common/icons/save.js +0 -60
  242. package/dist/common/icons/save2.d.ts +0 -9
  243. package/dist/common/icons/save2.js +0 -64
  244. package/dist/common/icons/search.d.ts +0 -9
  245. package/dist/common/icons/search.js +0 -60
  246. package/dist/common/icons/settings.d.ts +0 -9
  247. package/dist/common/icons/settings.js +0 -60
  248. package/dist/common/icons/share.d.ts +0 -9
  249. package/dist/common/icons/share.js +0 -58
  250. package/dist/common/icons/split.d.ts +0 -9
  251. package/dist/common/icons/split.js +0 -86
  252. package/dist/common/icons/square-select.d.ts +0 -9
  253. package/dist/common/icons/square-select.js +0 -60
  254. package/dist/common/icons/sun.d.ts +0 -14
  255. package/dist/common/icons/sun.js +0 -93
  256. package/dist/common/icons/sunrise.d.ts +0 -14
  257. package/dist/common/icons/sunrise.js +0 -89
  258. package/dist/common/icons/sunset.d.ts +0 -14
  259. package/dist/common/icons/sunset.js +0 -89
  260. package/dist/common/icons/trash.d.ts +0 -9
  261. package/dist/common/icons/trash.js +0 -60
  262. package/dist/common/icons/vert-dots.d.ts +0 -9
  263. package/dist/common/icons/vert-dots.js +0 -96
  264. package/dist/common/icons/vert-three-dots.d.ts +0 -9
  265. package/dist/common/icons/vert-three-dots.js +0 -71
  266. package/dist/common/icons/warning-sign.d.ts +0 -15
  267. package/dist/common/icons/warning-sign.js +0 -80
  268. package/dist/common/icons/warning.d.ts +0 -10
  269. package/dist/common/icons/warning.js +0 -73
  270. package/dist/common/image-preview.d.ts +0 -15
  271. package/dist/common/image-preview.js +0 -71
  272. package/dist/common/index.d.ts +0 -3
  273. package/dist/common/index.js +0 -273
  274. package/dist/common/info-helper.d.ts +0 -10
  275. package/dist/common/info-helper.js +0 -75
  276. package/dist/common/item-selector/accessor.d.ts +0 -7
  277. package/dist/common/item-selector/accessor.js +0 -39
  278. package/dist/common/item-selector/chickleted-input.d.ts +0 -22
  279. package/dist/common/item-selector/chickleted-input.js +0 -176
  280. package/dist/common/item-selector/dropdown-list.d.ts +0 -72
  281. package/dist/common/item-selector/dropdown-list.js +0 -295
  282. package/dist/common/item-selector/item-selector.d.ts +0 -47
  283. package/dist/common/item-selector/item-selector.js +0 -351
  284. package/dist/common/item-selector/typeahead.d.ts +0 -117
  285. package/dist/common/item-selector/typeahead.js +0 -498
  286. package/dist/common/line-chart.d.ts +0 -34
  287. package/dist/common/line-chart.js +0 -126
  288. package/dist/common/loading-spinner.d.ts +0 -9
  289. package/dist/common/loading-spinner.js +0 -56
  290. package/dist/common/logo.d.ts +0 -8
  291. package/dist/common/logo.js +0 -82
  292. package/dist/common/map-layer-selector.d.ts +0 -13
  293. package/dist/common/map-layer-selector.js +0 -48
  294. package/dist/common/modal.d.ts +0 -64
  295. package/dist/common/modal.js +0 -208
  296. package/dist/common/portaled.d.ts +0 -578
  297. package/dist/common/portaled.js +0 -340
  298. package/dist/common/progress-bar.d.ts +0 -12
  299. package/dist/common/progress-bar.js +0 -54
  300. package/dist/common/range-brush.d.ts +0 -19
  301. package/dist/common/range-brush.js +0 -326
  302. package/dist/common/range-plot.d.ts +0 -39
  303. package/dist/common/range-plot.js +0 -137
  304. package/dist/common/range-slider.d.ts +0 -34
  305. package/dist/common/range-slider.js +0 -329
  306. package/dist/common/slider/mouse-event.d.ts +0 -27
  307. package/dist/common/slider/mouse-event.js +0 -129
  308. package/dist/common/slider/slider-bar-handle.d.ts +0 -29
  309. package/dist/common/slider/slider-bar-handle.js +0 -115
  310. package/dist/common/slider/slider-handle.d.ts +0 -33
  311. package/dist/common/slider/slider-handle.js +0 -162
  312. package/dist/common/slider/slider.d.ts +0 -72
  313. package/dist/common/slider/slider.js +0 -247
  314. package/dist/common/styled-components.d.ts +0 -128
  315. package/dist/common/styled-components.js +0 -531
  316. package/dist/common/switch.d.ts +0 -16
  317. package/dist/common/switch.js +0 -30
  318. package/dist/common/time-range-slider-time-title.d.ts +0 -9
  319. package/dist/common/time-range-slider-time-title.js +0 -74
  320. package/dist/common/time-range-slider.d.ts +0 -35
  321. package/dist/common/time-range-slider.js +0 -131
  322. package/dist/common/time-slider-marker.d.ts +0 -21
  323. package/dist/common/time-slider-marker.js +0 -141
  324. package/dist/common/timeline-slider.d.ts +0 -13
  325. package/dist/common/timeline-slider.js +0 -153
  326. package/dist/common/tippy-tooltip.d.ts +0 -6
  327. package/dist/common/tippy-tooltip.js +0 -134
  328. package/dist/common/toolbar-item.d.ts +0 -14
  329. package/dist/common/toolbar-item.js +0 -73
  330. package/dist/common/toolbar.d.ts +0 -5
  331. package/dist/common/toolbar.js +0 -33
  332. package/dist/common/vertical-toolbar.d.ts +0 -3
  333. package/dist/common/vertical-toolbar.js +0 -22
  334. package/dist/connect/keplergl-connect.d.ts +0 -9
  335. package/dist/connect/keplergl-connect.js +0 -51
  336. package/dist/connect/with-local-selector.d.ts +0 -6
  337. package/dist/connect/with-local-selector.js +0 -110
  338. package/dist/container.d.ts +0 -39
  339. package/dist/container.js +0 -222
  340. package/dist/context.d.ts +0 -27
  341. package/dist/context.js +0 -49
  342. package/dist/dnd-context.d.ts +0 -13
  343. package/dist/dnd-context.js +0 -157
  344. package/dist/editor/editor.d.ts +0 -31
  345. package/dist/editor/editor.js +0 -253
  346. package/dist/editor/feature-action-panel.d.ts +0 -32
  347. package/dist/editor/feature-action-panel.js +0 -171
  348. package/dist/effects/compact-color-picker.d.ts +0 -10
  349. package/dist/effects/compact-color-picker.js +0 -130
  350. package/dist/effects/effect-configurator.d.ts +0 -17
  351. package/dist/effects/effect-configurator.js +0 -302
  352. package/dist/effects/effect-list.d.ts +0 -15
  353. package/dist/effects/effect-list.js +0 -153
  354. package/dist/effects/effect-manager.d.ts +0 -22
  355. package/dist/effects/effect-manager.js +0 -142
  356. package/dist/effects/effect-panel-header.d.ts +0 -45
  357. package/dist/effects/effect-panel-header.js +0 -206
  358. package/dist/effects/effect-panel.d.ts +0 -24
  359. package/dist/effects/effect-panel.js +0 -149
  360. package/dist/effects/effect-time-configurator.d.ts +0 -20
  361. package/dist/effects/effect-time-configurator.js +0 -340
  362. package/dist/effects/effect-time-selector.d.ts +0 -16
  363. package/dist/effects/effect-time-selector.js +0 -181
  364. package/dist/effects/effect-time-slider.d.ts +0 -34
  365. package/dist/effects/effect-time-slider.js +0 -220
  366. package/dist/effects/effect-type-dropdown-list.d.ts +0 -18
  367. package/dist/effects/effect-type-dropdown-list.js +0 -77
  368. package/dist/effects/effect-type-list-item.d.ts +0 -22
  369. package/dist/effects/effect-type-list-item.js +0 -105
  370. package/dist/effects/effect-type-selector.d.ts +0 -30
  371. package/dist/effects/effect-type-selector.js +0 -92
  372. package/dist/effects/side-panel-title.d.ts +0 -7
  373. package/dist/effects/side-panel-title.js +0 -47
  374. package/dist/effects/timezone-selector.d.ts +0 -19
  375. package/dist/effects/timezone-selector.js +0 -71
  376. package/dist/filter-animation-controller.d.ts +0 -17
  377. package/dist/filter-animation-controller.js +0 -73
  378. package/dist/filters/components.d.ts +0 -3
  379. package/dist/filters/components.js +0 -20
  380. package/dist/filters/filter-panels/filter-panel-with-field-select.d.ts +0 -10
  381. package/dist/filters/filter-panels/filter-panel-with-field-select.js +0 -90
  382. package/dist/filters/filter-panels/multi-select-filter-panel.d.ts +0 -9
  383. package/dist/filters/filter-panels/multi-select-filter-panel.js +0 -56
  384. package/dist/filters/filter-panels/new-filter-panel.d.ts +0 -12
  385. package/dist/filters/filter-panels/new-filter-panel.js +0 -78
  386. package/dist/filters/filter-panels/polygon-filter-panel.d.ts +0 -9
  387. package/dist/filters/filter-panels/polygon-filter-panel.js +0 -80
  388. package/dist/filters/filter-panels/range-filter-panel.d.ts +0 -9
  389. package/dist/filters/filter-panels/range-filter-panel.js +0 -56
  390. package/dist/filters/filter-panels/single-select-filter-panel.d.ts +0 -9
  391. package/dist/filters/filter-panels/single-select-filter-panel.js +0 -56
  392. package/dist/filters/filter-panels/time-range-filter-panel.d.ts +0 -8
  393. package/dist/filters/filter-panels/time-range-filter-panel.js +0 -84
  394. package/dist/filters/filter-panels/types.d.ts +0 -36
  395. package/dist/filters/filter-panels/types.js +0 -6
  396. package/dist/filters/index.d.ts +0 -7
  397. package/dist/filters/index.js +0 -64
  398. package/dist/filters/multi-select-filter.d.ts +0 -3
  399. package/dist/filters/multi-select-filter.js +0 -37
  400. package/dist/filters/polygon-filter.d.ts +0 -4
  401. package/dist/filters/polygon-filter.js +0 -88
  402. package/dist/filters/range-filter.d.ts +0 -8
  403. package/dist/filters/range-filter.js +0 -38
  404. package/dist/filters/single-select-filter.d.ts +0 -3
  405. package/dist/filters/single-select-filter.js +0 -46
  406. package/dist/filters/time-range-filter.d.ts +0 -29
  407. package/dist/filters/time-range-filter.js +0 -72
  408. package/dist/filters/time-widget-top.d.ts +0 -8
  409. package/dist/filters/time-widget-top.js +0 -103
  410. package/dist/filters/time-widget.d.ts +0 -10
  411. package/dist/filters/time-widget.js +0 -115
  412. package/dist/filters/types.d.ts +0 -58
  413. package/dist/filters/types.js +0 -6
  414. package/dist/geocoder/geocoder.d.ts +0 -31
  415. package/dist/geocoder/geocoder.js +0 -319
  416. package/dist/geocoder-panel.d.ts +0 -31
  417. package/dist/geocoder-panel.js +0 -232
  418. package/dist/hooks/use-cloud-list-provider.d.ts +0 -11
  419. package/dist/hooks/use-cloud-list-provider.js +0 -57
  420. package/dist/hooks/use-dnd-effects.d.ts +0 -9
  421. package/dist/hooks/use-dnd-effects.js +0 -88
  422. package/dist/hooks/use-dnd-layers.d.ts +0 -9
  423. package/dist/hooks/use-dnd-layers.js +0 -95
  424. package/dist/hooks/use-feature-flags.d.ts +0 -5
  425. package/dist/hooks/use-feature-flags.js +0 -21
  426. package/dist/index.d.ts +0 -233
  427. package/dist/index.js +0 -2514
  428. package/dist/injector.d.ts +0 -29
  429. package/dist/injector.js +0 -178
  430. package/dist/kepler-gl.d.ts +0 -323
  431. package/dist/kepler-gl.js +0 -603
  432. package/dist/layer-animation-controller.d.ts +0 -13
  433. package/dist/layer-animation-controller.js +0 -58
  434. package/dist/map/coordinate-info.d.ts +0 -7
  435. package/dist/map/coordinate-info.js +0 -51
  436. package/dist/map/effects/effect-control.d.ts +0 -16
  437. package/dist/map/effects/effect-control.js +0 -62
  438. package/dist/map/layer-hover-info.d.ts +0 -13
  439. package/dist/map/layer-hover-info.js +0 -224
  440. package/dist/map/layer-selector-panel.d.ts +0 -21
  441. package/dist/map/layer-selector-panel.js +0 -98
  442. package/dist/map/lazy-tippy.d.ts +0 -7
  443. package/dist/map/lazy-tippy.js +0 -74
  444. package/dist/map/locale-panel.d.ts +0 -16
  445. package/dist/map/locale-panel.js +0 -91
  446. package/dist/map/map-control-panel.d.ts +0 -19
  447. package/dist/map/map-control-panel.js +0 -152
  448. package/dist/map/map-control-toolbar.d.ts +0 -2
  449. package/dist/map/map-control-toolbar.js +0 -25
  450. package/dist/map/map-control-tooltip.d.ts +0 -8
  451. package/dist/map/map-control-tooltip.js +0 -41
  452. package/dist/map/map-control.d.ts +0 -53
  453. package/dist/map/map-control.js +0 -80
  454. package/dist/map/map-draw-panel.d.ts +0 -20
  455. package/dist/map/map-draw-panel.js +0 -114
  456. package/dist/map/map-legend-panel.d.ts +0 -35
  457. package/dist/map/map-legend-panel.js +0 -178
  458. package/dist/map/map-legend.d.ts +0 -55
  459. package/dist/map/map-legend.js +0 -254
  460. package/dist/map/map-popover-content.d.ts +0 -28
  461. package/dist/map/map-popover-content.js +0 -35
  462. package/dist/map/map-popover.d.ts +0 -33
  463. package/dist/map/map-popover.js +0 -276
  464. package/dist/map/split-map-button.d.ts +0 -20
  465. package/dist/map/split-map-button.js +0 -76
  466. package/dist/map/toggle-3d-button.d.ts +0 -17
  467. package/dist/map/toggle-3d-button.js +0 -65
  468. package/dist/map-container.d.ts +0 -72
  469. package/dist/map-container.js +0 -1003
  470. package/dist/map-view-state-context.d.ts +0 -17
  471. package/dist/map-view-state-context.js +0 -117
  472. package/dist/maps-layout.d.ts +0 -12
  473. package/dist/maps-layout.js +0 -64
  474. package/dist/modal-container.d.ts +0 -59
  475. package/dist/modal-container.js +0 -473
  476. package/dist/modals/add-map-style-modal.d.ts +0 -16
  477. package/dist/modals/add-map-style-modal.js +0 -242
  478. package/dist/modals/cloud-components/cloud-header.d.ts +0 -8
  479. package/dist/modals/cloud-components/cloud-header.js +0 -65
  480. package/dist/modals/cloud-components/cloud-item.d.ts +0 -5
  481. package/dist/modals/cloud-components/cloud-item.js +0 -72
  482. package/dist/modals/cloud-components/cloud-item.spec.d.ts +0 -1
  483. package/dist/modals/cloud-components/cloud-item.spec.js +0 -105
  484. package/dist/modals/cloud-components/cloud-maps.d.ts +0 -8
  485. package/dist/modals/cloud-components/cloud-maps.js +0 -63
  486. package/dist/modals/cloud-components/cloud-maps.spec.d.ts +0 -1
  487. package/dist/modals/cloud-components/cloud-maps.spec.js +0 -112
  488. package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
  489. package/dist/modals/cloud-components/provider-loading.js +0 -29
  490. package/dist/modals/cloud-components/provider-select.d.ts +0 -7
  491. package/dist/modals/cloud-components/provider-select.js +0 -40
  492. package/dist/modals/cloud-tile.d.ts +0 -15
  493. package/dist/modals/cloud-tile.js +0 -253
  494. package/dist/modals/data-table-modal.d.ts +0 -37
  495. package/dist/modals/data-table-modal.js +0 -316
  496. package/dist/modals/delete-data-modal.d.ts +0 -10
  497. package/dist/modals/delete-data-modal.js +0 -54
  498. package/dist/modals/error-display.d.ts +0 -6
  499. package/dist/modals/error-display.js +0 -39
  500. package/dist/modals/export-data-modal.d.ts +0 -23
  501. package/dist/modals/export-data-modal.js +0 -212
  502. package/dist/modals/export-image-modal.d.ts +0 -16
  503. package/dist/modals/export-image-modal.js +0 -136
  504. package/dist/modals/export-map-modal/components.d.ts +0 -8
  505. package/dist/modals/export-map-modal/components.js +0 -51
  506. package/dist/modals/export-map-modal/export-html-map.d.ts +0 -12
  507. package/dist/modals/export-map-modal/export-html-map.js +0 -138
  508. package/dist/modals/export-map-modal/export-json-map.d.ts +0 -9
  509. package/dist/modals/export-map-modal/export-json-map.js +0 -100
  510. package/dist/modals/export-map-modal/export-map-modal.d.ts +0 -27
  511. package/dist/modals/export-map-modal/export-map-modal.js +0 -103
  512. package/dist/modals/image-modal-container.d.ts +0 -16
  513. package/dist/modals/image-modal-container.js +0 -64
  514. package/dist/modals/load-data-modal.d.ts +0 -36
  515. package/dist/modals/load-data-modal.js +0 -98
  516. package/dist/modals/load-storage-map.d.ts +0 -5
  517. package/dist/modals/load-storage-map.js +0 -95
  518. package/dist/modals/load-storage-map.spec.d.ts +0 -1
  519. package/dist/modals/load-storage-map.spec.js +0 -237
  520. package/dist/modals/loading-dialog.d.ts +0 -7
  521. package/dist/modals/loading-dialog.js +0 -48
  522. package/dist/modals/modal-dialog.d.ts +0 -2
  523. package/dist/modals/modal-dialog.js +0 -20
  524. package/dist/modals/modal-tabs.d.ts +0 -27
  525. package/dist/modals/modal-tabs.js +0 -99
  526. package/dist/modals/overwrite-map-modal.d.ts +0 -16
  527. package/dist/modals/overwrite-map-modal.js +0 -107
  528. package/dist/modals/save-map-modal.d.ts +0 -28
  529. package/dist/modals/save-map-modal.js +0 -206
  530. package/dist/modals/save-map-modal.spec.d.ts +0 -1
  531. package/dist/modals/save-map-modal.spec.js +0 -218
  532. package/dist/modals/share-map-modal.d.ts +0 -26
  533. package/dist/modals/share-map-modal.js +0 -195
  534. package/dist/modals/share-map-modal.spec.d.ts +0 -1
  535. package/dist/modals/share-map-modal.spec.js +0 -202
  536. package/dist/modals/status-panel.d.ts +0 -13
  537. package/dist/modals/status-panel.js +0 -83
  538. package/dist/modals/storage-map-viewer.d.ts +0 -21
  539. package/dist/modals/storage-map-viewer.js +0 -127
  540. package/dist/notification-panel/notification-item.d.ts +0 -67
  541. package/dist/notification-panel/notification-item.js +0 -185
  542. package/dist/notification-panel.d.ts +0 -13
  543. package/dist/notification-panel.js +0 -86
  544. package/dist/plot-container.d.ts +0 -24
  545. package/dist/plot-container.js +0 -268
  546. package/dist/side-panel/add-by-dataset-button.d.ts +0 -12
  547. package/dist/side-panel/add-by-dataset-button.js +0 -153
  548. package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
  549. package/dist/side-panel/cloud-storage-dropdown.js +0 -46
  550. package/dist/side-panel/common/dataset-info.d.ts +0 -10
  551. package/dist/side-panel/common/dataset-info.js +0 -43
  552. package/dist/side-panel/common/dataset-tag.d.ts +0 -17
  553. package/dist/side-panel/common/dataset-tag.js +0 -72
  554. package/dist/side-panel/common/dataset-title.d.ts +0 -22
  555. package/dist/side-panel/common/dataset-title.js +0 -171
  556. package/dist/side-panel/common/source-data-catalog.d.ts +0 -28
  557. package/dist/side-panel/common/source-data-catalog.js +0 -62
  558. package/dist/side-panel/common/source-data-selector.d.ts +0 -8
  559. package/dist/side-panel/common/source-data-selector.js +0 -80
  560. package/dist/side-panel/common/types.d.ts +0 -43
  561. package/dist/side-panel/common/types.js +0 -6
  562. package/dist/side-panel/custom-panel.d.ts +0 -8
  563. package/dist/side-panel/custom-panel.js +0 -43
  564. package/dist/side-panel/filter-manager.d.ts +0 -32
  565. package/dist/side-panel/filter-manager.js +0 -223
  566. package/dist/side-panel/filter-panel/add-filter-button.d.ts +0 -8
  567. package/dist/side-panel/filter-panel/add-filter-button.js +0 -34
  568. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +0 -24
  569. package/dist/side-panel/filter-panel/filter-panel-header.js +0 -67
  570. package/dist/side-panel/filter-panel/filter-panel.d.ts +0 -23
  571. package/dist/side-panel/filter-panel/filter-panel.js +0 -131
  572. package/dist/side-panel/interaction-manager.d.ts +0 -18
  573. package/dist/side-panel/interaction-manager.js +0 -54
  574. package/dist/side-panel/interaction-panel/brush-config.d.ts +0 -15
  575. package/dist/side-panel/interaction-panel/brush-config.js +0 -54
  576. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +0 -21
  577. package/dist/side-panel/interaction-panel/interaction-panel.js +0 -143
  578. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +0 -30
  579. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +0 -266
  580. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +0 -37
  581. package/dist/side-panel/interaction-panel/tooltip-config.js +0 -176
  582. package/dist/side-panel/layer-manager.d.ts +0 -42
  583. package/dist/side-panel/layer-manager.js +0 -240
  584. package/dist/side-panel/layer-panel/add-layer-button.d.ts +0 -8
  585. package/dist/side-panel/layer-panel/add-layer-button.js +0 -34
  586. package/dist/side-panel/layer-panel/color-palette.d.ts +0 -11
  587. package/dist/side-panel/layer-panel/color-palette.js +0 -71
  588. package/dist/side-panel/layer-panel/color-range-selector.d.ts +0 -47
  589. package/dist/side-panel/layer-panel/color-range-selector.js +0 -270
  590. package/dist/side-panel/layer-panel/color-selector.d.ts +0 -33
  591. package/dist/side-panel/layer-panel/color-selector.js +0 -253
  592. package/dist/side-panel/layer-panel/column-selector.d.ts +0 -22
  593. package/dist/side-panel/layer-panel/column-selector.js +0 -65
  594. package/dist/side-panel/layer-panel/custom-palette.d.ts +0 -43
  595. package/dist/side-panel/layer-panel/custom-palette.js +0 -293
  596. package/dist/side-panel/layer-panel/custom-picker.d.ts +0 -24
  597. package/dist/side-panel/layer-panel/custom-picker.js +0 -116
  598. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +0 -22
  599. package/dist/side-panel/layer-panel/dataset-layer-group.js +0 -71
  600. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +0 -24
  601. package/dist/side-panel/layer-panel/dataset-layer-section.js +0 -70
  602. package/dist/side-panel/layer-panel/dataset-section.d.ts +0 -23
  603. package/dist/side-panel/layer-panel/dataset-section.js +0 -91
  604. package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +0 -10
  605. package/dist/side-panel/layer-panel/dimension-scale-selector.js +0 -44
  606. package/dist/side-panel/layer-panel/how-to-button.d.ts +0 -6
  607. package/dist/side-panel/layer-panel/how-to-button.js +0 -38
  608. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +0 -42
  609. package/dist/side-panel/layer-panel/layer-color-selector.js +0 -118
  610. package/dist/side-panel/layer-panel/layer-column-config.d.ts +0 -25
  611. package/dist/side-panel/layer-panel/layer-column-config.js +0 -109
  612. package/dist/side-panel/layer-panel/layer-config-group.d.ts +0 -44
  613. package/dist/side-panel/layer-panel/layer-config-group.js +0 -176
  614. package/dist/side-panel/layer-panel/layer-configurator.d.ts +0 -75
  615. package/dist/side-panel/layer-panel/layer-configurator.js +0 -735
  616. package/dist/side-panel/layer-panel/layer-error-message.d.ts +0 -6
  617. package/dist/side-panel/layer-panel/layer-error-message.js +0 -38
  618. package/dist/side-panel/layer-panel/layer-list.d.ts +0 -20
  619. package/dist/side-panel/layer-panel/layer-list.js +0 -191
  620. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +0 -75
  621. package/dist/side-panel/layer-panel/layer-panel-header.js +0 -310
  622. package/dist/side-panel/layer-panel/layer-panel.d.ts +0 -38
  623. package/dist/side-panel/layer-panel/layer-panel.js +0 -194
  624. package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +0 -22
  625. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +0 -89
  626. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +0 -22
  627. package/dist/side-panel/layer-panel/layer-type-list-item.js +0 -77
  628. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +0 -22
  629. package/dist/side-panel/layer-panel/layer-type-selector.js +0 -73
  630. package/dist/side-panel/layer-panel/single-color-palette.d.ts +0 -9
  631. package/dist/side-panel/layer-panel/single-color-palette.js +0 -61
  632. package/dist/side-panel/layer-panel/text-label-panel.d.ts +0 -17
  633. package/dist/side-panel/layer-panel/text-label-panel.js +0 -198
  634. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +0 -27
  635. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +0 -117
  636. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +0 -20
  637. package/dist/side-panel/layer-panel/vis-config-slider.js +0 -190
  638. package/dist/side-panel/layer-panel/vis-config-switch.d.ts +0 -16
  639. package/dist/side-panel/layer-panel/vis-config-switch.js +0 -71
  640. package/dist/side-panel/map-manager.d.ts +0 -27
  641. package/dist/side-panel/map-manager.js +0 -159
  642. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +0 -14
  643. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +0 -96
  644. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +0 -29
  645. package/dist/side-panel/map-style-panel/map-layer-group-item.js +0 -111
  646. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +0 -23
  647. package/dist/side-panel/map-style-panel/map-layer-selector.js +0 -91
  648. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +0 -23
  649. package/dist/side-panel/map-style-panel/map-style-selector.js +0 -112
  650. package/dist/side-panel/panel-dropdown.d.ts +0 -18
  651. package/dist/side-panel/panel-dropdown.js +0 -79
  652. package/dist/side-panel/panel-header-action.d.ts +0 -22
  653. package/dist/side-panel/panel-header-action.js +0 -87
  654. package/dist/side-panel/panel-header.d.ts +0 -84
  655. package/dist/side-panel/panel-header.js +0 -341
  656. package/dist/side-panel/panel-tab.d.ts +0 -20
  657. package/dist/side-panel/panel-tab.js +0 -68
  658. package/dist/side-panel/panel-title.d.ts +0 -7
  659. package/dist/side-panel/panel-title.js +0 -51
  660. package/dist/side-panel/panel-toggle.d.ts +0 -13
  661. package/dist/side-panel/panel-toggle.js +0 -60
  662. package/dist/side-panel/panel-view-list-toggle.d.ts +0 -47
  663. package/dist/side-panel/panel-view-list-toggle.js +0 -123
  664. package/dist/side-panel/side-bar.d.ts +0 -78
  665. package/dist/side-panel/side-bar.js +0 -159
  666. package/dist/side-panel.d.ts +0 -19
  667. package/dist/side-panel.js +0 -239
  668. package/dist/types.d.ts +0 -47
  669. package/dist/types.js +0 -6
@@ -1,735 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports["default"] = LayerConfiguratorFactory;
11
- exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
12
- exports.AggregationTypeSelector = exports.AggregationScaleSelector = exports.getLayerChannelConfigProps = exports.getVisConfiguratorProps = exports.getLayerConfiguratorProps = exports.getLayerDataset = exports.getLayerFields = void 0;
13
-
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
-
18
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
19
-
20
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
28
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
29
-
30
- var _react = _interopRequireWildcard(require("react"));
31
-
32
- var _styledComponents = _interopRequireDefault(require("styled-components"));
33
-
34
- var _localization = require("@kepler.gl/localization");
35
-
36
- var _styledComponents2 = require("../../common/styled-components");
37
-
38
- var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
39
-
40
- var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
41
-
42
- var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
43
-
44
- var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
45
-
46
- var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
47
-
48
- var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
49
-
50
- var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
51
-
52
- var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
53
-
54
- var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
55
-
56
- var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
57
-
58
- var _layerColorSelector = require("./layer-color-selector");
59
-
60
- var _howToButton = _interopRequireDefault(require("./how-to-button"));
61
-
62
- var _layerErrorMessage = _interopRequireDefault(require("./layer-error-message"));
63
-
64
- var _utils = require("@kepler.gl/utils");
65
-
66
- var _constants = require("@kepler.gl/constants");
67
-
68
- var _templateObject, _templateObject2;
69
-
70
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
71
-
72
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
73
-
74
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
75
-
76
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
77
-
78
- var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
79
- className: 'layer-panel__config'
80
- })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
81
- return props.theme.layerConfiguratorMargin;
82
- }, function (props) {
83
- return props.theme.layerConfiguratorPadding;
84
- }, function (props) {
85
- return props.theme.layerConfiguratorBorder;
86
- }, function (props) {
87
- return props.theme.layerConfiguratorBorderColor;
88
- });
89
-
90
- var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
91
- className: 'layer-panel__config__visualC-config'
92
- })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
93
-
94
- var getLayerFields = function getLayerFields(datasets, layer) {
95
- var _layer$config;
96
-
97
- return (_layer$config = layer.config) !== null && _layer$config !== void 0 && _layer$config.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
98
- };
99
- /** Return any to be able to customize the Dataset entity */
100
-
101
-
102
- exports.getLayerFields = getLayerFields;
103
-
104
- var getLayerDataset = function getLayerDataset(datasets, layer) {
105
- var _layer$config2;
106
-
107
- return (_layer$config2 = layer.config) !== null && _layer$config2 !== void 0 && _layer$config2.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
108
- };
109
-
110
- exports.getLayerDataset = getLayerDataset;
111
-
112
- var getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
113
- return {
114
- layer: props.layer,
115
- fields: getLayerFields(props.datasets, props.layer),
116
- onChange: props.updateLayerConfig,
117
- setColorUI: props.updateLayerColorUI
118
- };
119
- };
120
-
121
- exports.getLayerConfiguratorProps = getLayerConfiguratorProps;
122
-
123
- var getVisConfiguratorProps = function getVisConfiguratorProps(props) {
124
- return {
125
- layer: props.layer,
126
- fields: getLayerFields(props.datasets, props.layer),
127
- onChange: props.updateLayerVisConfig,
128
- setColorUI: props.updateLayerColorUI
129
- };
130
- };
131
-
132
- exports.getVisConfiguratorProps = getVisConfiguratorProps;
133
-
134
- var getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
135
- return {
136
- layer: props.layer,
137
- fields: getLayerFields(props.datasets, props.layer),
138
- onChange: props.updateLayerVisualChannelConfig
139
- };
140
- };
141
-
142
- exports.getLayerChannelConfigProps = getLayerChannelConfigProps;
143
- LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], _layerColorSelector.LayerColorSelectorFactory, _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.ArcLayerColorSelectorFactory];
144
-
145
- function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector) {
146
- var LayerConfigurator = /*#__PURE__*/function (_Component) {
147
- (0, _inherits2["default"])(LayerConfigurator, _Component);
148
-
149
- var _super = _createSuper(LayerConfigurator);
150
-
151
- function LayerConfigurator() {
152
- (0, _classCallCheck2["default"])(this, LayerConfigurator);
153
- return _super.apply(this, arguments);
154
- }
155
-
156
- (0, _createClass2["default"])(LayerConfigurator, [{
157
- key: "_renderPointLayerConfig",
158
- value: function _renderPointLayerConfig(props) {
159
- return this._renderScatterplotLayerConfig(props);
160
- }
161
- }, {
162
- key: "_renderIconLayerConfig",
163
- value: function _renderIconLayerConfig(props) {
164
- return this._renderScatterplotLayerConfig(props);
165
- }
166
- }, {
167
- key: "_renderScatterplotLayerConfig",
168
- value: function _renderScatterplotLayerConfig(_ref) {
169
- var layer = _ref.layer,
170
- visConfiguratorProps = _ref.visConfiguratorProps,
171
- layerChannelConfigProps = _ref.layerChannelConfigProps,
172
- layerConfiguratorProps = _ref.layerConfiguratorProps;
173
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
174
- label: 'layer.color'
175
- }, visConfiguratorProps, {
176
- collapsible: true
177
- }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
178
- channel: layer.visualChannels.color
179
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _constants.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
180
- collapsible: true
181
- }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
182
- property: "strokeColorRange"
183
- })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
184
- selectedColor: layer.config.visConfig.strokeColor,
185
- property: "strokeColor"
186
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
187
- channel: layer.visualChannels.strokeColor
188
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
189
- disabled: !layer.config.visConfig.outline
190
- })))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
191
- label: 'layer.radius',
192
- collapsible: true
193
- }, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
194
- label: false,
195
- disabled: Boolean(layer.config.sizeField)
196
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
197
- label: false,
198
- disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
199
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
200
- channel: layer.visualChannels.size
201
- }, layerChannelConfigProps)), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedRadius, visConfiguratorProps)) : null)), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
202
- id: layer.id,
203
- fields: visConfiguratorProps.fields,
204
- updateLayerTextLabel: this.props.updateLayerTextLabel,
205
- textLabel: layer.config.textLabel
206
- }));
207
- }
208
- }, {
209
- key: "_renderClusterLayerConfig",
210
- value: function _renderClusterLayerConfig(_ref2) {
211
- var layer = _ref2.layer,
212
- visConfiguratorProps = _ref2.visConfiguratorProps,
213
- layerConfiguratorProps = _ref2.layerConfiguratorProps,
214
- layerChannelConfigProps = _ref2.layerChannelConfigProps;
215
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
216
- label: 'layer.color',
217
- collapsible: true
218
- }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
219
- channel: layer.visualChannels.color
220
- })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
221
- channel: layer.visualChannels.color
222
- }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
223
- channel: layer.visualChannels.color
224
- })) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
225
- label: 'layer.radius',
226
- collapsible: true
227
- }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)))));
228
- }
229
- }, {
230
- key: "_renderHeatmapLayerConfig",
231
- value: function _renderHeatmapLayerConfig(_ref3) {
232
- var layer = _ref3.layer,
233
- visConfiguratorProps = _ref3.visConfiguratorProps,
234
- layerConfiguratorProps = _ref3.layerConfiguratorProps,
235
- layerChannelConfigProps = _ref3.layerChannelConfigProps;
236
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
237
- label: 'layer.color',
238
- collapsible: true
239
- }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
240
- label: 'layer.radius'
241
- }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
242
- label: false
243
- }))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
244
- label: 'layer.weight'
245
- }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
246
- channel: layer.visualChannels.weight
247
- }, layerChannelConfigProps))));
248
- }
249
- }, {
250
- key: "_renderGridLayerConfig",
251
- value: function _renderGridLayerConfig(props) {
252
- return this._renderAggregationLayerConfig(props);
253
- }
254
- }, {
255
- key: "_renderHexagonLayerConfig",
256
- value: function _renderHexagonLayerConfig(props) {
257
- return this._renderAggregationLayerConfig(props);
258
- }
259
- }, {
260
- key: "_renderAggregationLayerConfig",
261
- value: function _renderAggregationLayerConfig(_ref4) {
262
- var layer = _ref4.layer,
263
- visConfiguratorProps = _ref4.visConfiguratorProps,
264
- layerConfiguratorProps = _ref4.layerConfiguratorProps,
265
- layerChannelConfigProps = _ref4.layerChannelConfigProps;
266
- var config = layer.config;
267
- var enable3d = config.visConfig.enable3d;
268
- var elevationByDescription = 'layer.elevationByDescription';
269
- var colorByDescription = 'layer.colorByDescription';
270
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
271
- label: 'layer.color',
272
- collapsible: true
273
- }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
274
- channel: layer.visualChannels.color
275
- })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
276
- channel: layer.visualChannels.color
277
- }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
278
- description: colorByDescription,
279
- channel: layer.visualChannels.color
280
- })) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
281
- label: 'layer.radius',
282
- collapsible: true
283
- }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
284
- collapsible: true
285
- }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
286
- label: "layerVisConfigs.heightMultiplier"
287
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
288
- channel: layer.visualChannels.size,
289
- description: elevationByDescription,
290
- disabled: !enable3d
291
- })), /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
292
- channel: layer.visualChannels.size
293
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
294
- label: "layerVisConfigs.heightRange"
295
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps, {
296
- label: "layerVisConfigs.enableHeightZoomFactor"
297
- })), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
298
- channel: layer.visualChannels.size
299
- })) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
300
- } // TODO: Shan move these into layer class
301
-
302
- }, {
303
- key: "_renderHexagonIdLayerConfig",
304
- value: function _renderHexagonIdLayerConfig(_ref5) {
305
- var layer = _ref5.layer,
306
- visConfiguratorProps = _ref5.visConfiguratorProps,
307
- layerConfiguratorProps = _ref5.layerConfiguratorProps,
308
- layerChannelConfigProps = _ref5.layerChannelConfigProps;
309
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
310
- label: 'layer.fillColor',
311
- collapsible: true
312
- }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
313
- channel: layer.visualChannels.color
314
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps, {
315
- disabled: !layer.config.visConfig.filled
316
- })))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
317
- collapsible: true
318
- }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
319
- channel: layer.visualChannels.strokeColor
320
- }, layerChannelConfigProps)), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
321
- property: "strokeColorRange"
322
- })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
323
- selectedColor: layer.config.visConfig.strokeColor,
324
- property: "strokeColor"
325
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps, {
326
- disabled: !layer.config.visConfig.outline
327
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
328
- disabled: !layer.config.visConfig.outline
329
- })))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
330
- label: 'layer.coverage',
331
- collapsible: true
332
- }, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
333
- label: false
334
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
335
- label: false
336
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
337
- channel: layer.visualChannels.coverage
338
- }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
339
- collapsible: true
340
- }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
341
- channel: layer.visualChannels.size
342
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
343
- label: "layerVisConfigs.heightRange"
344
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
345
- id: layer.id,
346
- fields: visConfiguratorProps.fields,
347
- updateLayerTextLabel: this.props.updateLayerTextLabel,
348
- textLabel: layer.config.textLabel
349
- }));
350
- }
351
- }, {
352
- key: "_renderArcLayerConfig",
353
- value: function _renderArcLayerConfig(args) {
354
- return this._renderLineLayerConfig(args);
355
- }
356
- }, {
357
- key: "_renderLineLayerConfig",
358
- value: function _renderLineLayerConfig(_ref6) {
359
- var layer = _ref6.layer,
360
- visConfiguratorProps = _ref6.visConfiguratorProps,
361
- layerConfiguratorProps = _ref6.layerConfiguratorProps,
362
- layerChannelConfigProps = _ref6.layerChannelConfigProps;
363
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
364
- label: 'layer.color',
365
- collapsible: true
366
- }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
367
- layer: layer,
368
- setColorUI: layerConfiguratorProps.setColorUI,
369
- onChangeConfig: layerConfiguratorProps.onChange,
370
- onChangeVisConfig: visConfiguratorProps.onChange
371
- }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
372
- channel: layer.visualChannels.sourceColor
373
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
374
- label: 'layer.stroke',
375
- collapsible: true
376
- }, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
377
- disabled: !layer.config.sizeField,
378
- label: false
379
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
380
- label: false
381
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
382
- channel: layer.visualChannels.size
383
- }, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
384
- label: "layerVisConfigs.elevationScale",
385
- collapsible: true
386
- }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
387
- }
388
- }, {
389
- key: "_renderTripLayerConfig",
390
- value: function _renderTripLayerConfig(_ref7) {
391
- var layer = _ref7.layer,
392
- visConfiguratorProps = _ref7.visConfiguratorProps,
393
- layerConfiguratorProps = _ref7.layerConfiguratorProps,
394
- layerChannelConfigProps = _ref7.layerChannelConfigProps;
395
- var _layer$meta$featureTy = layer.meta.featureTypes,
396
- featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
397
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
398
- label: 'layer.color',
399
- collapsible: true
400
- }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
401
- channel: layer.visualChannels.color
402
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
403
- label: "layer.strokeWidth",
404
- collapsible: true
405
- }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
406
- label: false
407
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
408
- label: false
409
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
410
- channel: layer.visualChannels.size
411
- }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
412
- label: "layer.trailLength",
413
- description: "layer.trailLengthDescription"
414
- }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
415
- label: false
416
- }))));
417
- }
418
- }, {
419
- key: "_renderGeojsonLayerConfig",
420
- value: function _renderGeojsonLayerConfig(_ref8) {
421
- var layer = _ref8.layer,
422
- visConfiguratorProps = _ref8.visConfiguratorProps,
423
- layerConfiguratorProps = _ref8.layerConfiguratorProps,
424
- layerChannelConfigProps = _ref8.layerChannelConfigProps;
425
- var _layer$meta$featureTy2 = layer.meta.featureTypes,
426
- featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
427
- visConfig = layer.config.visConfig;
428
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
429
- label: "layer.fillColor",
430
- collapsible: true
431
- }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
432
- channel: layer.visualChannels.color
433
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
434
- label: "layer.strokeColor",
435
- collapsible: true
436
- }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
437
- property: "strokeColorRange"
438
- })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
439
- selectedColor: layer.config.visConfig.strokeColor,
440
- property: "strokeColor"
441
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
442
- channel: layer.visualChannels.strokeColor
443
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
444
- label: "layer.strokeWidth",
445
- collapsible: true
446
- }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
447
- label: false
448
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
449
- label: false
450
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
451
- channel: layer.visualChannels.size
452
- }, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
453
- disabled: !visConfig.filled,
454
- collapsible: true
455
- }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
456
- label: false
457
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
458
- channel: layer.visualChannels.height
459
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
460
- label: 'layer.radius',
461
- collapsible: true
462
- }, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
463
- label: false,
464
- disabled: Boolean(layer.config.radiusField)
465
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
466
- label: false,
467
- disabled: !layer.config.radiusField
468
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
469
- channel: layer.visualChannels.radius
470
- }, layerChannelConfigProps)))) : null);
471
- }
472
- }, {
473
- key: "_render3DLayerConfig",
474
- value: function _render3DLayerConfig(_ref9) {
475
- var layer = _ref9.layer,
476
- visConfiguratorProps = _ref9.visConfiguratorProps;
477
- return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
478
- label: 'layer.3DModel',
479
- collapsible: true
480
- }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
481
- type: "file",
482
- accept: ".glb,.gltf",
483
- onChange: function onChange(e) {
484
- if (e.target.files && e.target.files[0]) {
485
- var url = URL.createObjectURL(e.target.files[0]);
486
- visConfiguratorProps.onChange({
487
- scenegraph: url
488
- });
489
- }
490
- }
491
- })), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
492
- label: 'layer.3DModelOptions',
493
- collapsible: true
494
- }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
495
- disabled: false
496
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
497
- disabled: false
498
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
499
- disabled: false
500
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
501
- disabled: false
502
- }))));
503
- }
504
- }, {
505
- key: "_renderS2LayerConfig",
506
- value: function _renderS2LayerConfig(_ref10) {
507
- var layer = _ref10.layer,
508
- visConfiguratorProps = _ref10.visConfiguratorProps,
509
- layerConfiguratorProps = _ref10.layerConfiguratorProps,
510
- layerChannelConfigProps = _ref10.layerChannelConfigProps;
511
- var visConfig = layer.config.visConfig;
512
- return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
513
- label: "layer.fillColor",
514
- collapsible: true
515
- }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
516
- channel: layer.visualChannels.color
517
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
518
- label: "layer.strokeColor",
519
- collapsible: true
520
- }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
521
- property: "strokeColorRange"
522
- })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
523
- selectedColor: layer.config.visConfig.strokeColor,
524
- property: "strokeColor"
525
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
526
- channel: layer.visualChannels.strokeColor
527
- }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
528
- label: "layer.strokeWidth",
529
- collapsible: true
530
- }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
531
- label: false
532
- })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
533
- label: false
534
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
535
- channel: layer.visualChannels.size
536
- }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
537
- disabled: !visConfig.filled,
538
- collapsible: true
539
- }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
540
- channel: layer.visualChannels.height
541
- }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
542
- label: "layerVisConfigs.elevationScale"
543
- })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
544
- label: "layerVisConfigs.heightRange"
545
- })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
546
- }
547
- }, {
548
- key: "render",
549
- value: function render() {
550
- var _this = this;
551
-
552
- var _this$props = this.props,
553
- layer = _this$props.layer,
554
- datasets = _this$props.datasets,
555
- updateLayerConfig = _this$props.updateLayerConfig,
556
- layerTypeOptions = _this$props.layerTypeOptions,
557
- updateLayerType = _this$props.updateLayerType,
558
- _this$props$disableTy = _this$props.disableTypeSelect,
559
- disableTypeSelect = _this$props$disableTy === void 0 ? false : _this$props$disableTy;
560
-
561
- var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
562
- _ref11$fields = _ref11.fields,
563
- fields = _ref11$fields === void 0 ? [] : _ref11$fields,
564
- _ref11$fieldPairs = _ref11.fieldPairs,
565
- fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
566
-
567
- var config = layer.config;
568
- var visConfiguratorProps = getVisConfiguratorProps(this.props);
569
- var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
570
- var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
571
- var dataset = getLayerDataset(datasets, layer);
572
- var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
573
- return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ? /*#__PURE__*/_react["default"].createElement(_howToButton["default"], {
574
- onClick: function onClick() {
575
- return _this.props.openModal(layer.layerInfoModal);
576
- }
577
- }) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
578
- label: 'layer.basic',
579
- collapsible: true,
580
- expanded: !layer.hasAllColumns()
581
- }, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
582
- selected: layer.type,
583
- disabled: disableTypeSelect,
584
- options: layerTypeOptions // @ts-ignore
585
- ,
586
- onSelect: updateLayerType
587
- }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
588
- datasets: datasets,
589
- id: layer.id,
590
- dataId: config.dataId // @ts-ignore
591
- ,
592
- onSelect: function onSelect(value) {
593
- return updateLayerConfig({
594
- dataId: value
595
- });
596
- }
597
- }), /*#__PURE__*/_react["default"].createElement(LayerColumnConfig, {
598
- columnPairs: layer.columnPairs,
599
- columns: layer.config.columns,
600
- assignColumnPairs: layer.assignColumnPairs.bind(layer),
601
- assignColumn: layer.assignColumn.bind(layer) // @ts-ignore
602
- ,
603
- columnLabels: layer.columnLabels,
604
- fields: fields,
605
- fieldPairs: fieldPairs,
606
- updateLayerConfig: updateLayerConfig
607
- })), layer.errorMessage ? /*#__PURE__*/_react["default"].createElement(_layerErrorMessage["default"], {
608
- errorMessage: layer.errorMessage
609
- }) : null), renderTemplate && this[renderTemplate] && this[renderTemplate]({
610
- layer: layer,
611
- dataset: dataset,
612
- visConfiguratorProps: visConfiguratorProps,
613
- layerChannelConfigProps: layerChannelConfigProps,
614
- layerConfiguratorProps: layerConfiguratorProps
615
- }));
616
- }
617
- }]);
618
- return LayerConfigurator;
619
- }(_react.Component);
620
-
621
- return LayerConfigurator;
622
- }
623
-
624
- ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
625
-
626
- function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
627
- var ChannelByValueSelector = function ChannelByValueSelector(_ref12) {
628
- var layer = _ref12.layer,
629
- channel = _ref12.channel,
630
- onChange = _ref12.onChange,
631
- fields = _ref12.fields,
632
- description = _ref12.description;
633
- var channelScaleType = channel.channelScaleType,
634
- field = channel.field,
635
- key = channel.key,
636
- property = channel.property,
637
- scale = channel.scale,
638
- defaultMeasure = channel.defaultMeasure,
639
- supportedFieldTypes = channel.supportedFieldTypes;
640
- var channelSupportedFieldTypes = supportedFieldTypes || _constants.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
641
- var supportedFields = fields.filter(function (_ref13) {
642
- var type = _ref13.type;
643
- return channelSupportedFieldTypes.includes(type);
644
- });
645
- var scaleOptions = layer.getScaleOptions(channel.key);
646
- var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1;
647
- var defaultDescription = 'layerConfiguration.defaultDescription';
648
- return /*#__PURE__*/_react["default"].createElement(VisConfigByFieldSelector, {
649
- channel: channel.key,
650
- description: description || defaultDescription,
651
- fields: supportedFields,
652
- id: layer.id,
653
- key: "".concat(key, "-channel-selector"),
654
- property: property,
655
- placeholder: defaultMeasure || 'placeholder.selectField',
656
- scaleOptions: scaleOptions,
657
- scaleType: scale ? layer.config[scale] : null,
658
- selectedField: layer.config[field],
659
- showScale: showScale,
660
- updateField: function updateField(val) {
661
- return onChange((0, _defineProperty2["default"])({}, field, val), key);
662
- },
663
- updateScale: function updateScale(val) {
664
- return onChange((0, _defineProperty2["default"])({}, scale, val), key);
665
- }
666
- });
667
- };
668
-
669
- return ChannelByValueSelector;
670
- }
671
-
672
- var AggregationScaleSelector = function AggregationScaleSelector(_ref14) {
673
- var channel = _ref14.channel,
674
- layer = _ref14.layer,
675
- onChange = _ref14.onChange;
676
- var scale = channel.scale,
677
- key = channel.key;
678
- var scaleOptions = layer.getScaleOptions(key);
679
- return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
680
- label: "".concat(key, " Scale"),
681
- options: scaleOptions,
682
- scaleType: layer.config[scale],
683
- onSelect: function onSelect(val) {
684
- return onChange((0, _defineProperty2["default"])({}, scale, val), key);
685
- }
686
- }) : null;
687
- };
688
-
689
- exports.AggregationScaleSelector = AggregationScaleSelector;
690
-
691
- var AggregationTypeSelector = function AggregationTypeSelector(_ref15) {
692
- var channel = _ref15.channel,
693
- layer = _ref15.layer,
694
- _onChange4 = _ref15.onChange;
695
- var field = channel.field,
696
- aggregation = channel.aggregation,
697
- key = channel.key;
698
- var selectedField = layer.config[field];
699
- var visConfig = layer.config.visConfig; // aggregation should only be selectable when field is selected
700
-
701
- var layerAggregationTypes = layer.getAggregationOptions(key);
702
-
703
- var aggregationOptions = _constants.AGGREGATION_TYPE_OPTIONS.filter(function (_ref16) {
704
- var id = _ref16.id;
705
- return layerAggregationTypes.includes(id);
706
- });
707
-
708
- var selectedAggregation = aggregation ? aggregationOptions.find(function (_ref17) {
709
- var id = _ref17.id;
710
- return id === visConfig[aggregation];
711
- }) : [];
712
- return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
713
- id: 'layer.aggregateBy',
714
- values: {
715
- field: selectedField.displayName
716
- }
717
- })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
718
- selectedItems: selectedAggregation,
719
- options: aggregationOptions,
720
- displayOption: "label",
721
- getOptionValue: "id",
722
- multiSelect: false,
723
- searchable: false,
724
- onChange: function onChange(value) {
725
- return _onChange4({
726
- visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
727
- }, channel.key);
728
- }
729
- }));
730
- };
731
- /* eslint-enable max-params */
732
-
733
-
734
- exports.AggregationTypeSelector = AggregationTypeSelector;
735
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwibmFtZXMiOlsiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsInByb3BzIiwidGhlbWUiLCJsYXllckNvbmZpZ3VyYXRvck1hcmdpbiIsImxheWVyQ29uZmlndXJhdG9yUGFkZGluZyIsImxheWVyQ29uZmlndXJhdG9yQm9yZGVyIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvciIsIlN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yIiwiZ2V0TGF5ZXJGaWVsZHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsIm9uQ2hhbmdlIiwidXBkYXRlTGF5ZXJDb25maWciLCJzZXRDb2xvclVJIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwiZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImdldExheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnIiwiTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiVGV4dExhYmVsUGFuZWxGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSIsIkxheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5IiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvciIsIlZpc0NvbmZpZ1NsaWRlciIsIlRleHRMYWJlbFBhbmVsIiwiTGF5ZXJDb25maWdHcm91cCIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbHVtbkNvbmZpZyIsIkxheWVyVHlwZVNlbGVjdG9yIiwiVmlzQ29uZmlnU3dpdGNoIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IiLCJBcmNMYXllckNvbG9yU2VsZWN0b3IiLCJMYXllckNvbmZpZ3VyYXRvciIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sb3JGaWVsZCIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJvcGFjaXR5IiwidHlwZSIsIkxBWUVSX1RZUEVTIiwicG9pbnQiLCJvdXRsaW5lIiwic3Ryb2tlQ29sb3JGaWVsZCIsInZpc0NvbmZpZyIsInN0cm9rZUNvbG9yIiwidGhpY2tuZXNzIiwic2l6ZUZpZWxkIiwicmFkaXVzIiwiQm9vbGVhbiIsInJhZGl1c1JhbmdlIiwiZml4ZWRSYWRpdXMiLCJzaXplIiwiaWQiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInRleHRMYWJlbCIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJjbHVzdGVyUmFkaXVzIiwid2VpZ2h0IiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJwZXJjZW50aWxlIiwid29ybGRVbml0U2l6ZSIsImNvdmVyYWdlIiwiZWxldmF0aW9uU2NhbGUiLCJzaXplUmFuZ2UiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsInN0cm9rZU9wYWNpdHkiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsImFyZ3MiLCJfcmVuZGVyTGluZUxheWVyQ29uZmlnIiwic291cmNlQ29sb3IiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsInN0cm9rZWQiLCJ0cmFpbExlbmd0aCIsImhlaWdodCIsIndpcmVmcmFtZSIsInJhZGl1c0ZpZWxkIiwiZSIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsImhlaWdodFJhbmdlIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImRpc2FibGVUeXBlU2VsZWN0IiwiZmllbGRQYWlycyIsInVuZGVmaW5lZCIsImRhdGFzZXQiLCJyZW5kZXJUZW1wbGF0ZSIsImxheWVySW5mb01vZGFsIiwib3Blbk1vZGFsIiwiaGFzQWxsQ29sdW1ucyIsInZhbHVlIiwiY29sdW1uUGFpcnMiLCJjb2x1bW5zIiwiYXNzaWduQ29sdW1uUGFpcnMiLCJiaW5kIiwiYXNzaWduQ29sdW1uIiwiY29sdW1uTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwiQ29tcG9uZW50IiwiVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvciIsImNoYW5uZWwiLCJkZXNjcmlwdGlvbiIsImNoYW5uZWxTY2FsZVR5cGUiLCJmaWVsZCIsImtleSIsInByb3BlcnR5Iiwic2NhbGUiLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwibGVuZ3RoIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmFsIiwiQWdncmVnYXRpb25TY2FsZVNlbGVjdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiQWdncmVnYXRpb25UeXBlU2VsZWN0b3IiLCJhZ2dyZWdhdGlvbiIsInNlbGVjdGVkRmllbGQiLCJsYXllckFnZ3JlZ2F0aW9uVHlwZXMiLCJnZXRBZ2dyZWdhdGlvbk9wdGlvbnMiLCJhZ2dyZWdhdGlvbk9wdGlvbnMiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJzZWxlY3RlZEFnZ3JlZ2F0aW9uIiwiZmluZCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBOztBQUNBOztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7QUE0REEsSUFBTUEsdUJBQXVCLEdBQUdDLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDL0NDLEVBQUFBLFNBQVMsRUFBRTtBQURvQyxDQUFqQixDQUFILDhMQUliLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsdUJBQWhCO0FBQUEsQ0FKUSxFQUtoQixVQUFBRixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlFLHdCQUFoQjtBQUFBLENBTFcsRUFNWixVQUFBSCxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlHLHVCQUFoQjtBQUFBLENBTk8sRUFPdkIsVUFBQUosS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZSSw0QkFBaEI7QUFBQSxDQVBrQixDQUE3Qjs7QUFVQSxJQUFNQyw2QkFBNkIs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bkNJLGtCQUFrQixDQUFDRyxJQUFuQixDQUF3QjtBQUFBLFFBQUVsRyxFQUFGLFVBQUVBLEVBQUY7QUFBQSxXQUFVQSxFQUFFLEtBQUtULFNBQVMsQ0FBQ29HLFdBQUQsQ0FBMUI7QUFBQSxHQUF4QixDQURtQyxHQUVuQyxFQUZKO0FBSUEsc0JBQ0UsZ0NBQUMsbUNBQUQscUJBQ0UsZ0NBQUMsNkJBQUQscUJBQ0UsZ0NBQUMsOEJBQUQ7QUFDRSxJQUFBLEVBQUUsRUFBRSxtQkFETjtBQUVFLElBQUEsTUFBTSxFQUFFO0FBQ050QixNQUFBQSxLQUFLLEVBQUV1QixhQUFhLENBQUNPO0FBRGY7QUFGVixJQURGLENBREYsZUFTRSxnQ0FBQyx3QkFBRDtBQUNFLElBQUEsYUFBYSxFQUFFRixtQkFEakI7QUFFRSxJQUFBLE9BQU8sRUFBRUYsa0JBRlg7QUFHRSxJQUFBLGFBQWEsRUFBQyxPQUhoQjtBQUlFLElBQUEsY0FBYyxFQUFDLElBSmpCO0FBS0UsSUFBQSxXQUFXLEVBQUUsS0FMZjtBQU1FLElBQUEsVUFBVSxFQUFFLEtBTmQ7QUFPRSxJQUFBLFFBQVEsRUFBRSxrQkFBQXhDLEtBQUs7QUFBQSxhQUNiakgsVUFBUSxDQUNOO0FBQ0VpRCxRQUFBQSxTQUFTLGtDQUNKdkQsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQURULDRDQUVOb0csV0FGTSxFQUVrQnBDLEtBRmxCO0FBRFgsT0FETSxFQU9OVyxPQUFPLENBQUNJLEdBUEYsQ0FESztBQUFBO0FBUGpCLElBVEYsQ0FERjtBQStCRCxDQS9DTTtBQWdEUCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmltcG9ydCB7SW5wdXQsIFBhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4uLy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuXG5pbXBvcnQgVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctYnktZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSBmcm9tICcuL2xheWVyLWNvbHVtbi1jb25maWcnO1xuaW1wb3J0IExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2xheWVyLXR5cGUtc2VsZWN0b3InO1xuaW1wb3J0IERpbWVuc2lvblNjYWxlU2VsZWN0b3IgZnJvbSAnLi9kaW1lbnNpb24tc2NhbGUtc2VsZWN0b3InO1xuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuaW1wb3J0IHtcbiAgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5XG59IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IEhvd1RvQnV0dG9uIGZyb20gJy4vaG93LXRvLWJ1dHRvbic7XG5pbXBvcnQgTGF5ZXJFcnJvck1lc3NhZ2UgZnJvbSAnLi9sYXllci1lcnJvci1tZXNzYWdlJztcblxuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIExBWUVSX1RZUEVTLFxuICBBR0dSRUdBVElPTl9UWVBFX09QVElPTlNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnLCBWaXN1YWxDaGFubmVsLCBBZ2dyZWdhdGlvbkxheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCB7TmVzdGVkUGFydGlhbCwgTGF5ZXJWaXNDb25maWcsIENvbG9yVUksIEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7dG9nZ2xlTW9kYWwsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxudHlwZSBMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJUeXBlT3B0aW9uczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBSZWFjdC5FbGVtZW50VHlwZTtcbiAgICByZXF1aXJlRGF0YTogYm9vbGVhbjtcbiAgfVtdO1xuICBvcGVuTW9kYWw6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZU1vZGFsPjtcbiAgdXBkYXRlTGF5ZXJDb25maWc6IChuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPikgPT4gdm9pZDtcbiAgdXBkYXRlTGF5ZXJUeXBlOiAobmV3VHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclZpc0NvbmZpZzogKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogKFxuICAgIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICAgIGNoYW5uZWw6IHN0cmluZyxcbiAgICBuZXdWaXNDb25maWc/OiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuICApID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyQ29sb3JVSTogKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclRleHRMYWJlbDogKGlkeDogbnVtYmVyIHwgJ2FsbCcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZGlzYWJsZVR5cGVTZWxlY3Q/OiBib29sZWFuO1xufTtcblxudHlwZSBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgY2hhbm5lbDogVmlzdWFsQ2hhbm5lbDtcbiAgb25DaGFuZ2U6IChcbiAgICB2YWw6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSB8IG51bGxcbiAgICA+LFxuICAgIGtleTogc3RyaW5nXG4gICkgPT4gdm9pZDtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxudHlwZSBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMgPSB7XG4gIGNoYW5uZWw6IFZpc3VhbENoYW5uZWw7XG4gIGxheWVyOiBBZ2dyZWdhdGlvbkxheWVyO1xuICBvbkNoYW5nZTogKFxuICAgIHZhbDogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdIHwgbnVsbFxuICAgID4sXG4gICAga2V5OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnPy5kYXRhSWQgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXS5maWVsZHMgOiBbXTtcblxuLyoqIFJldHVybiBhbnkgdG8gYmUgYWJsZSB0byBjdXN0b21pemUgdGhlIERhdGFzZXQgZW50aXR5ICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJEYXRhc2V0ID0gKGRhdGFzZXRzOiBEYXRhc2V0cywgbGF5ZXI6IExheWVyKTogYW55ID0+XG4gIGxheWVyLmNvbmZpZz8uZGF0YUlkICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyA9IChwcm9wczogTGF5ZXJDb25maWd1cmF0b3JQcm9wcykgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllckNvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc0NvbmZpZ3VyYXRvclByb3BzID0gKHByb3BzOiBMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSAocHJvcHM6IExheWVyQ29uZmlndXJhdG9yUHJvcHMpID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZmllbGRzOiBnZXRMYXllckZpZWxkcyhwcm9wcy5kYXRhc2V0cywgcHJvcHMubGF5ZXIpLFxuICBvbkNoYW5nZTogcHJvcHMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnXG59KTtcblxuTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnksXG4gIFRleHRMYWJlbFBhbmVsRmFjdG9yeSxcbiAgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnksXG4gIExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFNvdXJjZURhdGFTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeT4sXG4gIFZpc0NvbmZpZ1NsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeT4sXG4gIFRleHRMYWJlbFBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBUZXh0TGFiZWxQYW5lbEZhY3Rvcnk+LFxuICBMYXllckNvbmZpZ0dyb3VwOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeT4sXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2x1bW5Db25maWc6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeT4sXG4gIExheWVyVHlwZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclR5cGVTZWxlY3RvckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+LFxuICBMYXllckNvbG9yU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5PixcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxMYXllckNvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNsYXNzIExheWVyQ29uZmlndXJhdG9yIGV4dGVuZHMgQ29tcG9uZW50PExheWVyQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgICBfcmVuZGVyUG9pbnRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJJY29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4uKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZCB8fCB7bGFiZWw6ICdsYXllci5jb2xvcid9KX1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBvdXRsaW5lIGNvbG9yICovfVxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vdXRsaW5lfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e2xheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnNpemVGaWVsZCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcuc2l6ZUZpZWxkIHx8IGxheWVyLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZml4ZWRSYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiB0ZXh0IGxhYmVsICovfVxuICAgICAgICAgIDxUZXh0TGFiZWxQYW5lbFxuICAgICAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICAgICAgZmllbGRzPXt2aXNDb25maWd1cmF0b3JQcm9wcy5maWVsZHN9XG4gICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbD17dGhpcy5wcm9wcy51cGRhdGVMYXllclRleHRMYWJlbH1cbiAgICAgICAgICAgIHRleHRMYWJlbD17bGF5ZXIuY29uZmlnLnRleHRMYWJlbH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQ2x1c3RlckxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2x1c3RlciBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNsdXN0ZXJSYWRpdXN9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogV2VpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIud2VpZ2h0J30+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy53ZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR3JpZExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhleGFnb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7Y29uZmlnfSA9IGxheWVyO1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNDb25maWc6IHtlbmFibGUzZH1cbiAgICAgIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBlbGV2YXRpb25CeURlc2NyaXB0aW9uID0gJ2xheWVyLmVsZXZhdGlvbkJ5RGVzY3JpcHRpb24nO1xuICAgICAgY29uc3QgY29sb3JCeURlc2NyaXB0aW9uID0gJ2xheWVyLmNvbG9yQnlEZXNjcmlwdGlvbic7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjb2xvckJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUgJiZcbiAgICAgICAgICAgICAgbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2VsbCBzaXplICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodE11bHRpcGxpZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZWxldmF0aW9uQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshZW5hYmxlM2R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3J9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbmFibGVIZWlnaHRab29tRmFjdG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblBlcmNlbnRpbGV9XG4gICAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFNoYW4gbW92ZSB0aGVzZSBpbnRvIGxheWVyIGNsYXNzXG4gICAgX3JlbmRlckhleGFnb25JZExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD17J2xheWVyLmZpbGxDb2xvcid9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy52aXNDb25maWcuZmlsbGVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogT3V0bGluZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm91dGxpbmV9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VPcGFjaXR5fVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy52aXNDb25maWcub3V0bGluZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ292ZXJhZ2UgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb3ZlcmFnZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgeyFsYXllci5jb25maWcuY292ZXJhZ2VGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvdmVyYWdlfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIGhlaWdodCAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEFyY0xheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclVJPXtsYXllckNvbmZpZ3VyYXRvclByb3BzLnNldENvbG9yVUl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWc9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zb3VyY2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRoaWNrbmVzcyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnN0cm9rZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBlbGV2YXRpb24gc2NhbGUgKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGVcIiBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJUcmlwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRyYWlsTGVuZ3RofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBzdHJva2UgY29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZCA6IHt9KX1cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIFN0cm9rZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXllcixcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIHVwZGF0ZUxheWVyQ29uZmlnLFxuICAgICAgICBsYXllclR5cGVPcHRpb25zLFxuICAgICAgICB1cGRhdGVMYXllclR5cGUsXG4gICAgICAgIGRpc2FibGVUeXBlU2VsZWN0ID0gZmFsc2VcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHtsYXllci5sYXllckluZm9Nb2RhbCA/IChcbiAgICAgICAgICAgIDxIb3dUb0J1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9wZW5Nb2RhbChsYXllci5sYXllckluZm9Nb2RhbCl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5iYXNpYyd9IGNvbGxhcHNpYmxlIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfT5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBzZWxlY3RlZD17bGF5ZXIudHlwZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVUeXBlU2VsZWN0fVxuICAgICAgICAgICAgICBvcHRpb25zPXtsYXllclR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt1cGRhdGVMYXllclR5cGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsodmFsdWU6IHN0cmluZykgPT4gdXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogdmFsdWV9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPExheWVyQ29sdW1uQ29uZmlnXG4gICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgIGNvbHVtbnM9e2xheWVyLmNvbmZpZy5jb2x1bW5zfVxuICAgICAgICAgICAgICAgIGFzc2lnbkNvbHVtblBhaXJzPXtsYXllci5hc3NpZ25Db2x1bW5QYWlycy5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29sdW1uTGFiZWxzPXtsYXllci5jb2x1bW5MYWJlbHN9XG4gICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgZmllbGRQYWlycz17ZmllbGRQYWlyc31cbiAgICAgICAgICAgICAgICB1cGRhdGVMYXllckNvbmZpZz17dXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAge2xheWVyLmVycm9yTWVzc2FnZSA/IDxMYXllckVycm9yTWVzc2FnZSBlcnJvck1lc3NhZ2U9e2xheWVyLmVycm9yTWVzc2FnZX0gLz4gOiBudWxsfVxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7cmVuZGVyVGVtcGxhdGUgJiZcbiAgICAgICAgICAgIHRoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG5cbkNoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LmRlcHMgPSBbVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeV07XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeShcbiAgVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3IgPSAoe1xuICAgIGxheWVyLFxuICAgIGNoYW5uZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgZmllbGRzLFxuICAgIGRlc2NyaXB0aW9uXG4gIH06IENoYW5uZWxCeVZhbHVlU2VsZWN0b3JQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICBmaWVsZCxcbiAgICAgIGtleSxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NhbGUsXG4gICAgICBkZWZhdWx0TWVhc3VyZSxcbiAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXNcbiAgICB9ID0gY2hhbm5lbDtcbiAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcbiAgICBjb25zdCBzdXBwb3J0ZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBsYXllci5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbC5rZXkpO1xuICAgIGNvbnN0IHNob3dTY2FsZSA9ICFsYXllci5pc0FnZ3JlZ2F0ZWQgJiYgbGF5ZXIuY29uZmlnW3NjYWxlXSAmJiBzY2FsZU9wdGlvbnMubGVuZ3RoID4gMTtcbiAgICBjb25zdCBkZWZhdWx0RGVzY3JpcHRpb24gPSAnbGF5ZXJDb25maWd1cmF0aW9uLmRlZmF1bHREZXNjcmlwdGlvbic7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvclxuICAgICAgICBjaGFubmVsPXtjaGFubmVsLmtleX1cbiAgICAgICAgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9uIHx8IGRlZmF1bHREZXNjcmlwdGlvbn1cbiAgICAgICAgZmllbGRzPXtzdXBwb3J0ZWRGaWVsZHN9XG4gICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAga2V5PXtgJHtrZXl9LWNoYW5uZWwtc2VsZWN0b3JgfVxuICAgICAgICBwcm9wZXJ0eT17cHJvcGVydHl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtkZWZhdWx0TWVhc3VyZSB8fCAncGxhY2Vob2xkZXIuc2VsZWN0RmllbGQnfVxuICAgICAgICBzY2FsZU9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgc2NhbGVUeXBlPXtzY2FsZSA/IGxheWVyLmNvbmZpZ1tzY2FsZV0gOiBudWxsfVxuICAgICAgICBzZWxlY3RlZEZpZWxkPXtsYXllci5jb25maWdbZmllbGRdfVxuICAgICAgICBzaG93U2NhbGU9e3Nob3dTY2FsZX1cbiAgICAgICAgdXBkYXRlRmllbGQ9e3ZhbCA9PiBvbkNoYW5nZSh7W2ZpZWxkXTogdmFsfSwga2V5KX1cbiAgICAgICAgdXBkYXRlU2NhbGU9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ2hhbm5lbEJ5VmFsdWVTZWxlY3Rvcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvciA9ICh7Y2hhbm5lbCwgbGF5ZXIsIG9uQ2hhbmdlfTogQWdncmVnYXRpb25TZWxlY3RvclByb3BzKSA9PiB7XG4gIGNvbnN0IHtzY2FsZSwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhrZXkpO1xuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiYgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDEgPyAoXG4gICAgPERpbWVuc2lvblNjYWxlU2VsZWN0b3JcbiAgICAgIGxhYmVsPXtgJHtrZXl9IFNjYWxlYH1cbiAgICAgIG9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgIHNjYWxlVHlwZT17bGF5ZXIuY29uZmlnW3NjYWxlXX1cbiAgICAgIG9uU2VsZWN0PXt2YWwgPT4gb25DaGFuZ2Uoe1tzY2FsZV06IHZhbH0sIGtleSl9XG4gICAgLz5cbiAgKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25UeXBlU2VsZWN0b3IgPSAoe2NoYW5uZWwsIGxheWVyLCBvbkNoYW5nZX06IEFnZ3JlZ2F0aW9uU2VsZWN0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7ZmllbGQsIGFnZ3JlZ2F0aW9uLCBrZXl9ID0gY2hhbm5lbDtcbiAgY29uc3Qgc2VsZWN0ZWRGaWVsZCA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gIGNvbnN0IHt2aXNDb25maWd9ID0gbGF5ZXIuY29uZmlnO1xuXG4gIC8vIGFnZ3JlZ2F0aW9uIHNob3VsZCBvbmx5IGJlIHNlbGVjdGFibGUgd2hlbiBmaWVsZCBpcyBzZWxlY3RlZFxuICBjb25zdCBsYXllckFnZ3JlZ2F0aW9uVHlwZXMgPSBsYXllci5nZXRBZ2dyZWdhdGlvbk9wdGlvbnMoa2V5KTtcblxuICBjb25zdCBhZ2dyZWdhdGlvbk9wdGlvbnMgPSBBR0dSRUdBVElPTl9UWVBFX09QVElPTlMuZmlsdGVyKCh7aWR9KSA9PlxuICAgIGxheWVyQWdncmVnYXRpb25UeXBlcy5pbmNsdWRlcyhpZClcbiAgKTtcblxuICBjb25zdCBzZWxlY3RlZEFnZ3JlZ2F0aW9uID0gYWdncmVnYXRpb25cbiAgICA/IGFnZ3JlZ2F0aW9uT3B0aW9ucy5maW5kKCh7aWR9KSA9PiBpZCA9PT0gdmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXSlcbiAgICA6IFtdO1xuXG4gIHJldHVybiAoXG4gICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICBpZD17J2xheWVyLmFnZ3JlZ2F0ZUJ5J31cbiAgICAgICAgICB2YWx1ZXM9e3tcbiAgICAgICAgICAgIGZpZWxkOiBzZWxlY3RlZEZpZWxkLmRpc3BsYXlOYW1lXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRBZ2dyZWdhdGlvbn1cbiAgICAgICAgb3B0aW9ucz17YWdncmVnYXRpb25PcHRpb25zfVxuICAgICAgICBkaXNwbGF5T3B0aW9uPVwibGFiZWxcIlxuICAgICAgICBnZXRPcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uIGFzIHN0cmluZ106IHZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGFubmVsLmtleVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBtYXgtcGFyYW1zICovXG4iXX0=