@gravitee/ui-components 3.25.3 → 3.25.4-yarn-d0ed047

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 (547) hide show
  1. package/package.json +21 -18
  2. package/src/atoms/gv-autocomplete.d.ts +104 -0
  3. package/src/atoms/gv-autocomplete.js +339 -353
  4. package/src/atoms/gv-autocomplete.js.map +1 -0
  5. package/src/atoms/gv-button.d.ts +109 -0
  6. package/src/atoms/gv-button.js +315 -152
  7. package/src/atoms/gv-button.js.map +1 -0
  8. package/src/atoms/gv-checkbox.d.ts +114 -0
  9. package/src/atoms/gv-checkbox.js +128 -78
  10. package/src/atoms/gv-checkbox.js.map +1 -0
  11. package/src/atoms/gv-date-picker-calendar.d.ts +190 -0
  12. package/src/atoms/gv-date-picker-calendar.js +699 -699
  13. package/src/atoms/gv-date-picker-calendar.js.map +1 -0
  14. package/src/atoms/gv-date-picker-cell.d.ts +80 -0
  15. package/src/atoms/gv-date-picker-cell.js +117 -108
  16. package/src/atoms/gv-date-picker-cell.js.map +1 -0
  17. package/src/atoms/gv-date-picker.d.ts +194 -0
  18. package/src/atoms/gv-date-picker.js +549 -442
  19. package/src/atoms/gv-date-picker.js.map +1 -0
  20. package/src/atoms/gv-file-upload.d.ts +64 -0
  21. package/src/atoms/gv-file-upload.js +288 -196
  22. package/src/atoms/gv-file-upload.js.map +1 -0
  23. package/src/atoms/gv-icon.d.ts +26 -0
  24. package/src/atoms/gv-icon.js +59 -47
  25. package/src/atoms/gv-icon.js.map +1 -0
  26. package/src/atoms/gv-image.d.ts +45 -0
  27. package/src/atoms/gv-image.js +93 -66
  28. package/src/atoms/gv-image.js.map +1 -0
  29. package/src/atoms/gv-input-message.d.ts +20 -0
  30. package/src/atoms/gv-input-message.js +49 -29
  31. package/src/atoms/gv-input-message.js.map +1 -0
  32. package/src/atoms/gv-input.d.ts +246 -0
  33. package/src/atoms/gv-input.js +400 -421
  34. package/src/atoms/gv-input.js.map +1 -0
  35. package/src/atoms/gv-link.d.ts +67 -0
  36. package/src/atoms/gv-link.js +143 -70
  37. package/src/atoms/gv-link.js.map +1 -0
  38. package/src/atoms/gv-message.d.ts +23 -0
  39. package/src/atoms/gv-message.js +98 -41
  40. package/src/atoms/gv-message.js.map +1 -0
  41. package/src/atoms/gv-metric.d.ts +32 -0
  42. package/src/atoms/gv-metric.js +74 -29
  43. package/src/atoms/gv-metric.js.map +1 -0
  44. package/src/atoms/gv-relative-time.d.ts +45 -0
  45. package/src/atoms/gv-relative-time.js +107 -148
  46. package/src/atoms/gv-relative-time.js.map +1 -0
  47. package/src/atoms/gv-select-native.d.ts +174 -0
  48. package/src/atoms/gv-select-native.js +289 -194
  49. package/src/atoms/gv-select-native.js.map +1 -0
  50. package/src/atoms/gv-select.d.ts +71 -0
  51. package/src/atoms/gv-select.js +323 -226
  52. package/src/atoms/gv-select.js.map +1 -0
  53. package/src/atoms/gv-spinner.d.ts +10 -0
  54. package/src/atoms/gv-spinner.js +29 -10
  55. package/src/atoms/gv-spinner.js.map +1 -0
  56. package/src/atoms/gv-state.d.ts +50 -0
  57. package/src/atoms/gv-state.js +76 -39
  58. package/src/atoms/gv-state.js.map +1 -0
  59. package/src/atoms/gv-switch.d.ts +60 -0
  60. package/src/atoms/gv-switch.js +187 -74
  61. package/src/atoms/gv-switch.js.map +1 -0
  62. package/src/atoms/gv-tag.d.ts +69 -0
  63. package/src/atoms/gv-tag.js +92 -45
  64. package/src/atoms/gv-tag.js.map +1 -0
  65. package/src/atoms/gv-text.d.ts +110 -0
  66. package/src/atoms/gv-text.js +105 -51
  67. package/src/atoms/gv-text.js.map +1 -0
  68. package/src/charts/gv-chart-bar.d.ts +50 -0
  69. package/src/charts/gv-chart-bar.js +64 -69
  70. package/src/charts/gv-chart-bar.js.map +1 -0
  71. package/src/charts/gv-chart-gauge.d.ts +58 -0
  72. package/src/charts/gv-chart-gauge.js +58 -62
  73. package/src/charts/gv-chart-gauge.js.map +1 -0
  74. package/src/charts/gv-chart-histogram.d.ts +48 -0
  75. package/src/charts/gv-chart-histogram.js +46 -58
  76. package/src/charts/gv-chart-histogram.js.map +1 -0
  77. package/src/charts/gv-chart-line.d.ts +52 -0
  78. package/src/charts/gv-chart-line.js +173 -189
  79. package/src/charts/gv-chart-line.js.map +1 -0
  80. package/src/charts/gv-chart-map.d.ts +50 -0
  81. package/src/charts/gv-chart-map.js +73 -75
  82. package/src/charts/gv-chart-map.js.map +1 -0
  83. package/src/charts/gv-chart-pie.d.ts +50 -0
  84. package/src/charts/gv-chart-pie.js +52 -57
  85. package/src/charts/gv-chart-pie.js.map +1 -0
  86. package/src/index.d.ts +77 -0
  87. package/src/index.js +1 -1
  88. package/src/index.js.map +1 -0
  89. package/src/lib/cron-expression.d.ts +1 -0
  90. package/src/lib/cron-expression.js +143 -176
  91. package/src/lib/cron-expression.js.map +1 -0
  92. package/src/lib/date.d.ts +1 -0
  93. package/src/lib/date.js +26 -35
  94. package/src/lib/date.js.map +1 -0
  95. package/src/lib/events.d.ts +1 -0
  96. package/src/lib/events.js +10 -11
  97. package/src/lib/events.js.map +1 -0
  98. package/src/lib/http-client-schema-form.d.ts +68 -0
  99. package/src/lib/http-client-schema-form.js +50 -50
  100. package/src/lib/http-client-schema-form.js.map +1 -0
  101. package/src/lib/http.d.ts +222 -0
  102. package/src/lib/http.js +221 -221
  103. package/src/lib/http.js.map +1 -0
  104. package/src/lib/i18n.d.ts +30 -0
  105. package/src/lib/i18n.js +40 -57
  106. package/src/lib/i18n.js.map +1 -0
  107. package/src/lib/item.d.ts +12 -0
  108. package/src/lib/item.js +66 -74
  109. package/src/lib/item.js.map +1 -0
  110. package/src/lib/properties.d.ts +42 -0
  111. package/src/lib/properties.js +110 -162
  112. package/src/lib/properties.js.map +1 -0
  113. package/src/lib/schema-form.d.ts +5 -0
  114. package/src/lib/schema-form.js +13 -16
  115. package/src/lib/schema-form.js.map +1 -0
  116. package/src/lib/studio.d.ts +2 -0
  117. package/src/lib/studio.js +116 -65
  118. package/src/lib/studio.js.map +1 -0
  119. package/src/lib/style.d.ts +6 -0
  120. package/src/lib/style.js +18 -19
  121. package/src/lib/style.js.map +1 -0
  122. package/src/lib/text-format.d.ts +6 -0
  123. package/src/lib/text-format.js +45 -55
  124. package/src/lib/text-format.js.map +1 -0
  125. package/src/lib/theme.d.ts +4 -0
  126. package/src/lib/theme.js +38 -43
  127. package/src/lib/theme.js.map +1 -0
  128. package/src/lib/utils.d.ts +9 -0
  129. package/src/lib/utils.js +72 -75
  130. package/src/lib/utils.js.map +1 -0
  131. package/src/mixins/chart-element.d.ts +39 -0
  132. package/src/mixins/chart-element.js +118 -106
  133. package/src/mixins/chart-element.js.map +1 -0
  134. package/src/mixins/input-element.d.ts +64 -0
  135. package/src/mixins/input-element.js +111 -131
  136. package/src/mixins/input-element.js.map +1 -0
  137. package/src/mixins/item-resource.d.ts +56 -0
  138. package/src/mixins/item-resource.js +76 -95
  139. package/src/mixins/item-resource.js.map +1 -0
  140. package/src/mixins/keyboard-element.d.ts +25 -0
  141. package/src/mixins/keyboard-element.js +44 -51
  142. package/src/mixins/keyboard-element.js.map +1 -0
  143. package/src/mixins/update-after-browser.d.ts +11 -0
  144. package/src/mixins/update-after-browser.js +10 -12
  145. package/src/mixins/update-after-browser.js.map +1 -0
  146. package/src/mixins/with-resize-observer.d.ts +12 -0
  147. package/src/mixins/with-resize-observer.js +46 -61
  148. package/src/mixins/with-resize-observer.js.map +1 -0
  149. package/src/mixins/with-skeleton-attribute.d.ts +35 -0
  150. package/src/mixins/with-skeleton-attribute.js +80 -88
  151. package/src/mixins/with-skeleton-attribute.js.map +1 -0
  152. package/src/molecules/gv-card-full.d.ts +78 -0
  153. package/src/molecules/gv-card-full.js +160 -47
  154. package/src/molecules/gv-card-full.js.map +1 -0
  155. package/src/molecules/gv-card-list.d.ts +33 -0
  156. package/src/molecules/gv-card-list.js +65 -47
  157. package/src/molecules/gv-card-list.js.map +1 -0
  158. package/src/molecules/gv-card.d.ts +65 -0
  159. package/src/molecules/gv-card.js +94 -22
  160. package/src/molecules/gv-card.js.map +1 -0
  161. package/src/molecules/gv-category-list.d.ts +17 -0
  162. package/src/molecules/gv-category-list.js +23 -15
  163. package/src/molecules/gv-category-list.js.map +1 -0
  164. package/src/molecules/gv-category.d.ts +64 -0
  165. package/src/molecules/gv-category.js +117 -43
  166. package/src/molecules/gv-category.js.map +1 -0
  167. package/src/molecules/gv-code.d.ts +192 -0
  168. package/src/molecules/gv-code.js +258 -220
  169. package/src/molecules/gv-code.js.map +1 -0
  170. package/src/molecules/gv-confirm.d.ts +60 -0
  171. package/src/molecules/gv-confirm.js +131 -113
  172. package/src/molecules/gv-confirm.js.map +1 -0
  173. package/src/molecules/gv-cron-editor.d.ts +115 -0
  174. package/src/molecules/gv-cron-editor.js +597 -375
  175. package/src/molecules/gv-cron-editor.js.map +1 -0
  176. package/src/molecules/gv-dropdown-menu.d.ts +28 -0
  177. package/src/molecules/gv-dropdown-menu.js +77 -52
  178. package/src/molecules/gv-dropdown-menu.js.map +1 -0
  179. package/src/molecules/gv-expandable.d.ts +37 -0
  180. package/src/molecules/gv-expandable.js +77 -54
  181. package/src/molecules/gv-expandable.js.map +1 -0
  182. package/src/molecules/gv-expression-language.d.ts +150 -0
  183. package/src/molecules/gv-expression-language.js +212 -256
  184. package/src/molecules/gv-expression-language.js.map +1 -0
  185. package/src/molecules/gv-identity-picture.d.ts +44 -0
  186. package/src/molecules/gv-identity-picture.js +102 -87
  187. package/src/molecules/gv-identity-picture.js.map +1 -0
  188. package/src/molecules/gv-list.d.ts +124 -0
  189. package/src/molecules/gv-list.js +167 -87
  190. package/src/molecules/gv-list.js.map +1 -0
  191. package/src/molecules/gv-metrics.d.ts +65 -0
  192. package/src/molecules/gv-metrics.js +103 -105
  193. package/src/molecules/gv-metrics.js.map +1 -0
  194. package/src/molecules/gv-modal.d.ts +64 -0
  195. package/src/molecules/gv-modal.js +157 -99
  196. package/src/molecules/gv-modal.js.map +1 -0
  197. package/src/molecules/gv-nav.d.ts +41 -0
  198. package/src/molecules/gv-nav.js +134 -123
  199. package/src/molecules/gv-nav.js.map +1 -0
  200. package/src/molecules/gv-option.d.ts +65 -0
  201. package/src/molecules/gv-option.js +177 -115
  202. package/src/molecules/gv-option.js.map +1 -0
  203. package/src/molecules/gv-plans.d.ts +73 -0
  204. package/src/molecules/gv-plans.js +327 -232
  205. package/src/molecules/gv-plans.js.map +1 -0
  206. package/src/molecules/gv-popover.d.ts +91 -0
  207. package/src/molecules/gv-popover.js +265 -172
  208. package/src/molecules/gv-popover.js.map +1 -0
  209. package/src/molecules/gv-promote.d.ts +108 -0
  210. package/src/molecules/gv-promote.js +152 -39
  211. package/src/molecules/gv-promote.js.map +1 -0
  212. package/src/molecules/gv-rating-list.d.ts +77 -0
  213. package/src/molecules/gv-rating-list.js +287 -184
  214. package/src/molecules/gv-rating-list.js.map +1 -0
  215. package/src/molecules/gv-rating.d.ts +55 -0
  216. package/src/molecules/gv-rating.js +187 -152
  217. package/src/molecules/gv-rating.js.map +1 -0
  218. package/src/molecules/gv-row-expandable.d.ts +8 -0
  219. package/src/molecules/gv-row-expandable.js +18 -14
  220. package/src/molecules/gv-row-expandable.js.map +1 -0
  221. package/src/molecules/gv-row.d.ts +37 -0
  222. package/src/molecules/gv-row.js +164 -42
  223. package/src/molecules/gv-row.js.map +1 -0
  224. package/src/molecules/gv-stats.d.ts +53 -0
  225. package/src/molecules/gv-stats.js +70 -55
  226. package/src/molecules/gv-stats.js.map +1 -0
  227. package/src/molecules/gv-stepper.d.ts +46 -0
  228. package/src/molecules/gv-stepper.js +225 -94
  229. package/src/molecules/gv-stepper.js.map +1 -0
  230. package/src/molecules/gv-table.d.ts +159 -0
  231. package/src/molecules/gv-table.js +530 -460
  232. package/src/molecules/gv-table.js.map +1 -0
  233. package/src/molecules/gv-tree.d.ts +44 -0
  234. package/src/molecules/gv-tree.js +189 -77
  235. package/src/molecules/gv-tree.js.map +1 -0
  236. package/src/organisms/gv-documentation.d.ts +52 -0
  237. package/src/organisms/gv-documentation.js +155 -81
  238. package/src/organisms/gv-documentation.js.map +1 -0
  239. package/src/organisms/gv-header.d.ts +60 -0
  240. package/src/organisms/gv-header.js +227 -80
  241. package/src/organisms/gv-header.js.map +1 -0
  242. package/src/organisms/gv-http-client.d.ts +57 -0
  243. package/src/organisms/gv-http-client.js +203 -83
  244. package/src/organisms/gv-http-client.js.map +1 -0
  245. package/src/organisms/gv-menu.d.ts +74 -0
  246. package/src/organisms/gv-menu.js +206 -89
  247. package/src/organisms/gv-menu.js.map +1 -0
  248. package/src/organisms/gv-newsletter-subscription.d.ts +82 -0
  249. package/src/organisms/gv-newsletter-subscription.js +212 -83
  250. package/src/organisms/gv-newsletter-subscription.js.map +1 -0
  251. package/src/organisms/gv-pagination.d.ts +63 -0
  252. package/src/organisms/gv-pagination.js +134 -124
  253. package/src/organisms/gv-pagination.js.map +1 -0
  254. package/src/organisms/gv-properties.d.ts +229 -0
  255. package/src/organisms/gv-properties.js +778 -616
  256. package/src/organisms/gv-properties.js.map +1 -0
  257. package/src/organisms/gv-resizable-views.d.ts +33 -0
  258. package/src/organisms/gv-resizable-views.js +334 -140
  259. package/src/organisms/gv-resizable-views.js.map +1 -0
  260. package/src/organisms/gv-resources.d.ts +125 -0
  261. package/src/organisms/gv-resources.js +434 -365
  262. package/src/organisms/gv-resources.js.map +1 -0
  263. package/src/organisms/gv-schema-form-array.d.ts +55 -0
  264. package/src/organisms/gv-schema-form-array.js +196 -98
  265. package/src/organisms/gv-schema-form-array.js.map +1 -0
  266. package/src/organisms/gv-schema-form-control-object.d.ts +64 -0
  267. package/src/organisms/gv-schema-form-control-object.js +110 -108
  268. package/src/organisms/gv-schema-form-control-object.js.map +1 -0
  269. package/src/organisms/gv-schema-form-control.d.ts +90 -0
  270. package/src/organisms/gv-schema-form-control.js +353 -349
  271. package/src/organisms/gv-schema-form-control.js.map +1 -0
  272. package/src/organisms/gv-schema-form.d.ts +156 -0
  273. package/src/organisms/gv-schema-form.js +611 -556
  274. package/src/organisms/gv-schema-form.js.map +1 -0
  275. package/src/organisms/gv-tabs.d.ts +56 -0
  276. package/src/organisms/gv-tabs.js +149 -125
  277. package/src/organisms/gv-tabs.js.map +1 -0
  278. package/src/organisms/gv-user-menu.d.ts +56 -0
  279. package/src/organisms/gv-user-menu.js +244 -94
  280. package/src/organisms/gv-user-menu.js.map +1 -0
  281. package/src/organisms/gv-vertical-menu.d.ts +28 -0
  282. package/src/organisms/gv-vertical-menu.js +84 -46
  283. package/src/organisms/gv-vertical-menu.js.map +1 -0
  284. package/src/policy-studio/gv-flow-step.d.ts +142 -0
  285. package/src/policy-studio/gv-flow-step.js +390 -250
  286. package/src/policy-studio/gv-flow-step.js.map +1 -0
  287. package/src/policy-studio/gv-flow.d.ts +89 -0
  288. package/src/policy-studio/gv-flow.js +512 -358
  289. package/src/policy-studio/gv-flow.js.map +1 -0
  290. package/src/policy-studio/gv-policy-studio-menu.d.ts +94 -0
  291. package/src/policy-studio/gv-policy-studio-menu.js +657 -403
  292. package/src/policy-studio/gv-policy-studio-menu.js.map +1 -0
  293. package/src/policy-studio/gv-policy-studio.d.ts +464 -0
  294. package/src/policy-studio/gv-policy-studio.js +1531 -1599
  295. package/src/policy-studio/gv-policy-studio.js.map +1 -0
  296. package/src/styles/empty.d.ts +1 -0
  297. package/src/styles/empty.js +21 -4
  298. package/src/styles/empty.js.map +1 -0
  299. package/src/styles/input.d.ts +1 -0
  300. package/src/styles/input.js +247 -3
  301. package/src/styles/input.js.map +1 -0
  302. package/src/styles/link.d.ts +1 -0
  303. package/src/styles/link.js +16 -3
  304. package/src/styles/link.js.map +1 -0
  305. package/src/styles/shapes.d.ts +2 -0
  306. package/src/styles/shapes.js +1 -1
  307. package/src/styles/shapes.js.map +1 -0
  308. package/src/styles/skeleton.d.ts +1 -0
  309. package/src/styles/skeleton.js +37 -3
  310. package/src/styles/skeleton.js.map +1 -0
  311. package/src/styles/zoom.d.ts +1 -0
  312. package/src/styles/zoom.js +24 -3
  313. package/src/styles/zoom.js.map +1 -0
  314. package/src/theme/gv-theme.d.ts +81 -0
  315. package/src/theme/gv-theme.js +115 -81
  316. package/src/theme/gv-theme.js.map +1 -0
  317. package/wc/gv-autocomplete.d.ts +1 -0
  318. package/wc/gv-autocomplete.js +2 -1
  319. package/wc/gv-autocomplete.js.map +1 -0
  320. package/wc/gv-button.d.ts +1 -0
  321. package/wc/gv-button.js +2 -1
  322. package/wc/gv-button.js.map +1 -0
  323. package/wc/gv-card-full.d.ts +1 -0
  324. package/wc/gv-card-full.js +2 -1
  325. package/wc/gv-card-full.js.map +1 -0
  326. package/wc/gv-card-list.d.ts +1 -0
  327. package/wc/gv-card-list.js +2 -1
  328. package/wc/gv-card-list.js.map +1 -0
  329. package/wc/gv-card.d.ts +1 -0
  330. package/wc/gv-card.js +2 -1
  331. package/wc/gv-card.js.map +1 -0
  332. package/wc/gv-category-list.d.ts +1 -0
  333. package/wc/gv-category-list.js +2 -1
  334. package/wc/gv-category-list.js.map +1 -0
  335. package/wc/gv-category.d.ts +1 -0
  336. package/wc/gv-category.js +2 -1
  337. package/wc/gv-category.js.map +1 -0
  338. package/wc/gv-chart-bar.d.ts +1 -0
  339. package/wc/gv-chart-bar.js +2 -1
  340. package/wc/gv-chart-bar.js.map +1 -0
  341. package/wc/gv-chart-gauge.d.ts +1 -0
  342. package/wc/gv-chart-gauge.js +2 -1
  343. package/wc/gv-chart-gauge.js.map +1 -0
  344. package/wc/gv-chart-histogram.d.ts +1 -0
  345. package/wc/gv-chart-histogram.js +2 -1
  346. package/wc/gv-chart-histogram.js.map +1 -0
  347. package/wc/gv-chart-line.d.ts +1 -0
  348. package/wc/gv-chart-line.js +2 -1
  349. package/wc/gv-chart-line.js.map +1 -0
  350. package/wc/gv-chart-map.d.ts +1 -0
  351. package/wc/gv-chart-map.js +2 -1
  352. package/wc/gv-chart-map.js.map +1 -0
  353. package/wc/gv-chart-pie.d.ts +1 -0
  354. package/wc/gv-chart-pie.js +2 -1
  355. package/wc/gv-chart-pie.js.map +1 -0
  356. package/wc/gv-checkbox.d.ts +1 -0
  357. package/wc/gv-checkbox.js +2 -1
  358. package/wc/gv-checkbox.js.map +1 -0
  359. package/wc/gv-code.d.ts +1 -0
  360. package/wc/gv-code.js +2 -1
  361. package/wc/gv-code.js.map +1 -0
  362. package/wc/gv-confirm.d.ts +1 -0
  363. package/wc/gv-confirm.js +2 -1
  364. package/wc/gv-confirm.js.map +1 -0
  365. package/wc/gv-cron-editor.d.ts +1 -0
  366. package/wc/gv-cron-editor.js +2 -1
  367. package/wc/gv-cron-editor.js.map +1 -0
  368. package/wc/gv-date-picker-calendar.d.ts +1 -0
  369. package/wc/gv-date-picker-calendar.js +2 -1
  370. package/wc/gv-date-picker-calendar.js.map +1 -0
  371. package/wc/gv-date-picker-cell.d.ts +1 -0
  372. package/wc/gv-date-picker-cell.js +2 -1
  373. package/wc/gv-date-picker-cell.js.map +1 -0
  374. package/wc/gv-date-picker.d.ts +1 -0
  375. package/wc/gv-date-picker.js +2 -1
  376. package/wc/gv-date-picker.js.map +1 -0
  377. package/wc/gv-documentation.d.ts +1 -0
  378. package/wc/gv-documentation.js +2 -1
  379. package/wc/gv-documentation.js.map +1 -0
  380. package/wc/gv-dropdown-menu.d.ts +1 -0
  381. package/wc/gv-dropdown-menu.js +2 -1
  382. package/wc/gv-dropdown-menu.js.map +1 -0
  383. package/wc/gv-expandable.d.ts +1 -0
  384. package/wc/gv-expandable.js +2 -1
  385. package/wc/gv-expandable.js.map +1 -0
  386. package/wc/gv-expression-language.d.ts +1 -0
  387. package/wc/gv-expression-language.js +2 -1
  388. package/wc/gv-expression-language.js.map +1 -0
  389. package/wc/gv-file-upload.d.ts +1 -0
  390. package/wc/gv-file-upload.js +2 -1
  391. package/wc/gv-file-upload.js.map +1 -0
  392. package/wc/gv-flow-step.d.ts +1 -0
  393. package/wc/gv-flow-step.js +2 -1
  394. package/wc/gv-flow-step.js.map +1 -0
  395. package/wc/gv-flow.d.ts +1 -0
  396. package/wc/gv-flow.js +2 -1
  397. package/wc/gv-flow.js.map +1 -0
  398. package/wc/gv-header.d.ts +1 -0
  399. package/wc/gv-header.js +2 -1
  400. package/wc/gv-header.js.map +1 -0
  401. package/wc/gv-http-client.d.ts +1 -0
  402. package/wc/gv-http-client.js +2 -1
  403. package/wc/gv-http-client.js.map +1 -0
  404. package/wc/gv-icon.d.ts +1 -0
  405. package/wc/gv-icon.js +2 -1
  406. package/wc/gv-icon.js.map +1 -0
  407. package/wc/gv-identity-picture.d.ts +1 -0
  408. package/wc/gv-identity-picture.js +2 -1
  409. package/wc/gv-identity-picture.js.map +1 -0
  410. package/wc/gv-image.d.ts +1 -0
  411. package/wc/gv-image.js +2 -1
  412. package/wc/gv-image.js.map +1 -0
  413. package/wc/gv-input-message.d.ts +1 -0
  414. package/wc/gv-input-message.js +2 -1
  415. package/wc/gv-input-message.js.map +1 -0
  416. package/wc/gv-input.d.ts +1 -0
  417. package/wc/gv-input.js +2 -1
  418. package/wc/gv-input.js.map +1 -0
  419. package/wc/gv-link.d.ts +1 -0
  420. package/wc/gv-link.js +2 -1
  421. package/wc/gv-link.js.map +1 -0
  422. package/wc/gv-list.d.ts +1 -0
  423. package/wc/gv-list.js +2 -1
  424. package/wc/gv-list.js.map +1 -0
  425. package/wc/gv-menu.d.ts +1 -0
  426. package/wc/gv-menu.js +2 -1
  427. package/wc/gv-menu.js.map +1 -0
  428. package/wc/gv-message.d.ts +1 -0
  429. package/wc/gv-message.js +2 -1
  430. package/wc/gv-message.js.map +1 -0
  431. package/wc/gv-metric.d.ts +1 -0
  432. package/wc/gv-metric.js +2 -1
  433. package/wc/gv-metric.js.map +1 -0
  434. package/wc/gv-metrics.d.ts +1 -0
  435. package/wc/gv-metrics.js +2 -1
  436. package/wc/gv-metrics.js.map +1 -0
  437. package/wc/gv-modal.d.ts +1 -0
  438. package/wc/gv-modal.js +2 -1
  439. package/wc/gv-modal.js.map +1 -0
  440. package/wc/gv-nav.d.ts +1 -0
  441. package/wc/gv-nav.js +2 -1
  442. package/wc/gv-nav.js.map +1 -0
  443. package/wc/gv-newsletter-subscription.d.ts +1 -0
  444. package/wc/gv-newsletter-subscription.js +2 -1
  445. package/wc/gv-newsletter-subscription.js.map +1 -0
  446. package/wc/gv-option.d.ts +1 -0
  447. package/wc/gv-option.js +2 -1
  448. package/wc/gv-option.js.map +1 -0
  449. package/wc/gv-pagination.d.ts +1 -0
  450. package/wc/gv-pagination.js +2 -1
  451. package/wc/gv-pagination.js.map +1 -0
  452. package/wc/gv-plans.d.ts +1 -0
  453. package/wc/gv-plans.js +2 -1
  454. package/wc/gv-plans.js.map +1 -0
  455. package/wc/gv-policy-studio-menu.d.ts +1 -0
  456. package/wc/gv-policy-studio-menu.js +2 -1
  457. package/wc/gv-policy-studio-menu.js.map +1 -0
  458. package/wc/gv-policy-studio.d.ts +1 -0
  459. package/wc/gv-policy-studio.js +2 -1
  460. package/wc/gv-policy-studio.js.map +1 -0
  461. package/wc/gv-popover.d.ts +1 -0
  462. package/wc/gv-popover.js +2 -1
  463. package/wc/gv-popover.js.map +1 -0
  464. package/wc/gv-promote.d.ts +1 -0
  465. package/wc/gv-promote.js +2 -1
  466. package/wc/gv-promote.js.map +1 -0
  467. package/wc/gv-properties.d.ts +1 -0
  468. package/wc/gv-properties.js +2 -1
  469. package/wc/gv-properties.js.map +1 -0
  470. package/wc/gv-rating-list.d.ts +1 -0
  471. package/wc/gv-rating-list.js +2 -1
  472. package/wc/gv-rating-list.js.map +1 -0
  473. package/wc/gv-rating.d.ts +1 -0
  474. package/wc/gv-rating.js +2 -1
  475. package/wc/gv-rating.js.map +1 -0
  476. package/wc/gv-relative-time.d.ts +1 -0
  477. package/wc/gv-relative-time.js +2 -1
  478. package/wc/gv-relative-time.js.map +1 -0
  479. package/wc/gv-resizable-views.d.ts +1 -0
  480. package/wc/gv-resizable-views.js +2 -1
  481. package/wc/gv-resizable-views.js.map +1 -0
  482. package/wc/gv-resources.d.ts +1 -0
  483. package/wc/gv-resources.js +2 -1
  484. package/wc/gv-resources.js.map +1 -0
  485. package/wc/gv-row-expandable.d.ts +1 -0
  486. package/wc/gv-row-expandable.js +2 -1
  487. package/wc/gv-row-expandable.js.map +1 -0
  488. package/wc/gv-row.d.ts +1 -0
  489. package/wc/gv-row.js +2 -1
  490. package/wc/gv-row.js.map +1 -0
  491. package/wc/gv-schema-form-array.d.ts +1 -0
  492. package/wc/gv-schema-form-array.js +2 -1
  493. package/wc/gv-schema-form-array.js.map +1 -0
  494. package/wc/gv-schema-form-control-object.d.ts +1 -0
  495. package/wc/gv-schema-form-control-object.js +2 -1
  496. package/wc/gv-schema-form-control-object.js.map +1 -0
  497. package/wc/gv-schema-form-control.d.ts +1 -0
  498. package/wc/gv-schema-form-control.js +2 -1
  499. package/wc/gv-schema-form-control.js.map +1 -0
  500. package/wc/gv-schema-form.d.ts +1 -0
  501. package/wc/gv-schema-form.js +2 -1
  502. package/wc/gv-schema-form.js.map +1 -0
  503. package/wc/gv-select-native.d.ts +1 -0
  504. package/wc/gv-select-native.js +2 -1
  505. package/wc/gv-select-native.js.map +1 -0
  506. package/wc/gv-select.d.ts +1 -0
  507. package/wc/gv-select.js +2 -1
  508. package/wc/gv-select.js.map +1 -0
  509. package/wc/gv-spinner.d.ts +1 -0
  510. package/wc/gv-spinner.js +2 -1
  511. package/wc/gv-spinner.js.map +1 -0
  512. package/wc/gv-state.d.ts +1 -0
  513. package/wc/gv-state.js +2 -1
  514. package/wc/gv-state.js.map +1 -0
  515. package/wc/gv-stats.d.ts +1 -0
  516. package/wc/gv-stats.js +2 -1
  517. package/wc/gv-stats.js.map +1 -0
  518. package/wc/gv-stepper.d.ts +1 -0
  519. package/wc/gv-stepper.js +2 -1
  520. package/wc/gv-stepper.js.map +1 -0
  521. package/wc/gv-switch.d.ts +1 -0
  522. package/wc/gv-switch.js +2 -1
  523. package/wc/gv-switch.js.map +1 -0
  524. package/wc/gv-table.d.ts +1 -0
  525. package/wc/gv-table.js +2 -1
  526. package/wc/gv-table.js.map +1 -0
  527. package/wc/gv-tabs.d.ts +1 -0
  528. package/wc/gv-tabs.js +2 -1
  529. package/wc/gv-tabs.js.map +1 -0
  530. package/wc/gv-tag.d.ts +1 -0
  531. package/wc/gv-tag.js +2 -1
  532. package/wc/gv-tag.js.map +1 -0
  533. package/wc/gv-text.d.ts +1 -0
  534. package/wc/gv-text.js +2 -1
  535. package/wc/gv-text.js.map +1 -0
  536. package/wc/gv-theme.d.ts +1 -0
  537. package/wc/gv-theme.js +2 -1
  538. package/wc/gv-theme.js.map +1 -0
  539. package/wc/gv-tree.d.ts +1 -0
  540. package/wc/gv-tree.js +2 -1
  541. package/wc/gv-tree.js.map +1 -0
  542. package/wc/gv-user-menu.d.ts +1 -0
  543. package/wc/gv-user-menu.js +2 -1
  544. package/wc/gv-user-menu.js.map +1 -0
  545. package/wc/gv-vertical-menu.d.ts +1 -0
  546. package/wc/gv-vertical-menu.js +2 -1
  547. package/wc/gv-vertical-menu.js.map +1 -0
@@ -66,510 +66,580 @@ import { getCssVar } from '../lib/style';
66
66
  * @cssprop {String} [--gv-table-row--ac=center] - Row align-content
67
67
  * @cssprop {String} [--gv-table-cell--d=flex] - Cell display
68
68
  */
69
-
70
69
  export class GvTable extends withResizeObserver(LitElement) {
71
- static get properties() {
72
- return {
73
- items: {
74
- type: Array
75
- },
76
- title: {
77
- type: String
78
- },
79
- order: {
80
- type: String
81
- },
82
- options: {
83
- type: Array
84
- },
85
- noheader: {
86
- type: Boolean
87
- },
88
- nosort: {
89
- type: Boolean
90
- },
91
- rowsheight: {
92
- type: String
93
- },
94
- rowheight: {
95
- type: String
96
- },
97
- emptymessage: {
98
- type: String
99
- },
100
- format: {
101
- type: Function
102
- },
103
- compareFn: {
104
- type: Function
105
- },
106
- selected: {
107
- type: Array,
108
- reflect: true
109
- },
110
- total: {
111
- type: String
112
- },
113
- skeleton: {
114
- type: Boolean
115
- },
116
- _items: {
117
- type: Array,
118
- attribute: false
119
- },
120
- _skeleton: {
121
- type: Boolean,
122
- attribute: false
123
- },
124
- _error: {
125
- type: Boolean,
126
- attribute: false
127
- },
128
- _empty: {
129
- type: Boolean,
130
- attribute: false
131
- },
132
- _itemsProvider: {
133
- type: Array,
134
- attribute: false
135
- },
136
- _page: {
137
- type: Number,
138
- attribute: false
139
- }
140
- };
141
- }
70
+ static get properties() {
71
+ return {
72
+ items: { type: Array },
73
+ title: { type: String },
74
+ order: { type: String },
75
+ options: { type: Array },
76
+ noheader: { type: Boolean },
77
+ nosort: { type: Boolean },
78
+ rowsheight: { type: String },
79
+ rowheight: { type: String },
80
+ emptymessage: { type: String },
81
+ format: { type: Function },
82
+ compareFn: { type: Function },
83
+ selected: { type: Array, reflect: true },
84
+ total: { type: String },
85
+ skeleton: { type: Boolean },
86
+ _items: { type: Array, attribute: false },
87
+ _skeleton: { type: Boolean, attribute: false },
88
+ _error: { type: Boolean, attribute: false },
89
+ _empty: { type: Boolean, attribute: false },
90
+ _itemsProvider: { type: Array, attribute: false },
91
+ _page: { type: Number, attribute: false },
92
+ };
93
+ }
94
+ static get styles() {
95
+ return [
96
+ link,
97
+ skeleton,
98
+ empty,
99
+ // language=CSS
100
+ css `
101
+ :host {
102
+ --selected--bgc: var(--gv-table-selected--bgc, var(--gv-theme-color, #5a7684));
103
+ --hover-bgc: var(--gv-table-hover--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
104
+ --bgc: var(--gv-table--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
105
+ --bdc: var(--gv-table--bdc, var(--gv-theme-neutral-color-dark, #d9d9d9));
106
+ display: block;
107
+ height: 100%;
108
+ margin: 0.2rem;
109
+ box-sizing: border-box;
110
+ }
142
111
 
143
- static get styles() {
144
- return [link, skeleton, empty, // language=CSS
145
- css`:host{--selected--bgc:var(--gv-table-selected--bgc, var(--gv-theme-color, #5a7684));--hover-bgc:var(--gv-table-hover--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));--bgc:var(--gv-table--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));--bdc:var(--gv-table--bdc, var(--gv-theme-neutral-color-dark, #d9d9d9));display:block;height:100%;margin:.2rem;box-sizing:border-box}.table{background-color:var(--bgc);flex-direction:column;height:100%;display:flex;width:100%}.rows{-ms-overflow-style:none;scrollbar-width:none;overflow:var(--gv-table-rows--ov,auto);flex:1;height:100%;transition:height 250ms ease-in-out}.rows::-webkit-scrollbar{display:none}:host([w-lt-768]) .row{height:70px}:host([w-lt-580]) .row{height:60px}:host([w-lt-400]) .row{height:50px}.theader{background-color:var(--gv-theme-neutral-color-lighter);font-weight:700;padding:0 .2rem}.row,.theader{align-items:var(--gv-table-row--ai,center);align-content:var(--gv-table-row--ac,center);border-right:solid thick transparent;display:grid}div{box-sizing:border-box}.cell{height:100%;display:var(--gv-table-cell--d,flex);align-items:center}.row:not(:last-child){box-shadow:0 5px 3px -6px var(--bdc)}.row.selected,.row:hover{background-color:var(--hover-bgc)}.row.selected{border-color:var(--selected--bgc);box-sizing:border-box}.header{border-bottom:1px solid var(--bdc);padding:var(--gv-table-header--p,2rem 4rem)}.title{margin:0;text-transform:uppercase;font-size:var(--gv-table-header--fz,var(--gv-theme-font-size-l,20px));line-height:var(--gv-table-header--fz,var(--gv-theme-font-size-l,20px));opacity:.6}.title span{font-weight:600;font-size:var(--gv-theme-font-size-s);line-height:var(--gv-theme-font-size-s);margin-left:8px;opacity:.7}gv-identity-picture{height:35px;width:35px;--gv-image--of:contain;margin-left:20px}gv-icon{transform:rotate(0);--gv-icon--s:18px}gv-icon.desc{transform:rotate(180deg)}gv-pagination{align-self:flex-end}.cell>:not(gv-tag){margin:auto;width:100%}`];
146
- }
112
+ .table {
113
+ background-color: var(--bgc);
114
+ flex-direction: column;
115
+ height: 100%;
116
+ display: flex;
117
+ width: 100%;
118
+ }
147
119
 
148
- constructor() {
149
- super();
150
- this._id = new Date().getTime();
151
- this.breakpoints = {
152
- width: [400, 580, 768]
153
- };
154
- this._empty = false;
155
- this.order = '';
156
- this._page = 1;
157
- this._itemsProvider = [];
158
- this.selected = [];
120
+ .rows {
121
+ -ms-overflow-style: none;
122
+ scrollbar-width: none;
123
+ overflow: var(--gv-table-rows--ov, auto);
124
+ flex: 1;
125
+ height: 100%;
126
+ transition: height 250ms ease-in-out;
127
+ }
159
128
 
160
- this.compareFn = (item, item2, value) => {
161
- const itemData = this._getDataFromField(item, value) && this._getDataFromField(item, value).toLowerCase ? this._getDataFromField(item, value).toLowerCase() : '';
162
- const itemData2 = this._getDataFromField(item2, value) && this._getDataFromField(item2, value).toLowerCase ? this._getDataFromField(item2, value).toLowerCase() : '';
129
+ .rows::-webkit-scrollbar {
130
+ display: none;
131
+ }
163
132
 
164
- if (this.order.startsWith('-')) {
165
- return itemData2.localeCompare(itemData);
166
- } else {
167
- return itemData.localeCompare(itemData2);
168
- }
169
- };
133
+ :host([w-lt-768]) .row {
134
+ height: 70px;
135
+ }
170
136
 
171
- this.addEventListener('gv-pagination:paginate', e => {
172
- this._page = e.detail.page;
173
- });
174
- }
137
+ :host([w-lt-580]) .row {
138
+ height: 60px;
139
+ }
175
140
 
176
- set items(items) {
177
- this._skeleton = true;
178
- Promise.resolve(items).then(items => {
179
- if (items) {
180
- this._itemsProvider = items.map((item, index) => {
181
- item._id = item.id == null ? index : item.id;
182
- return item;
183
- });
141
+ :host([w-lt-400]) .row {
142
+ height: 50px;
143
+ }
184
144
 
185
- this._onSortChanged();
145
+ .theader {
146
+ background-color: var(--gv-theme-neutral-color-lighter);
147
+ font-weight: bold;
148
+ padding: 0 0.2rem;
149
+ }
186
150
 
187
- this._empty = this._itemsProvider.length === 0;
188
- this._skeleton = false;
189
- }
190
- }).catch(e => {
191
- console.error(e);
192
- this._error = true;
193
- this._skeleton = false;
194
- this._itemsProvider = [];
195
- });
196
- }
151
+ .row,
152
+ .theader {
153
+ align-items: var(--gv-table-row--ai, center);
154
+ align-content: var(--gv-table-row--ac, center);
155
+ border-right: solid thick transparent;
156
+ display: grid;
157
+ }
197
158
 
198
- get items() {
199
- return this._itemsProvider;
200
- }
159
+ div {
160
+ box-sizing: border-box;
161
+ }
201
162
 
202
- _onSortChanged(field, e) {
203
- if (e) {
204
- e.preventDefault();
205
- }
163
+ .cell {
164
+ height: 100%;
165
+ display: var(--gv-table-cell--d, flex);
166
+ align-items: center;
167
+ }
206
168
 
207
- if (this._itemsProvider && this.order) {
208
- const desc = this.order.startsWith('-');
209
- const previousOrder = desc ? this.order.substring(1) : this.order;
210
- const value = field || previousOrder;
169
+ .row:not(:last-child) {
170
+ box-shadow: 0 5px 3px -6px var(--bdc);
171
+ }
211
172
 
212
- if (field) {
213
- this.order = previousOrder === value ? desc ? value : '-' + value : value;
214
- }
173
+ .row:hover,
174
+ .row.selected {
175
+ background-color: var(--hover-bgc);
176
+ }
215
177
 
216
- this._itemsProvider = this._itemsProvider.sort((item, item2) => this.compareFn(item, item2, value));
178
+ .row.selected {
179
+ border-color: var(--selected--bgc);
180
+ box-sizing: border-box;
181
+ }
217
182
 
218
- if (field) {
219
- dispatchCustomEvent(this, 'sort', {
220
- order: this.order
221
- });
222
- }
223
- }
224
- }
183
+ .header {
184
+ border-bottom: 1px solid var(--bdc);
185
+ padding: var(--gv-table-header--p, 2rem 4rem);
186
+ }
225
187
 
226
- get _items() {
227
- if (this._itemsProvider) {
228
- if (this.options && this.options.paging && this.options.paging < this._itemsProvider.length) {
229
- const index = (this._page - 1) * this.options.paging;
230
- return [...this._itemsProvider].splice(index, this.options.paging);
231
- }
188
+ .title {
189
+ margin: 0;
190
+ text-transform: uppercase;
191
+ font-size: var(--gv-table-header--fz, var(--gv-theme-font-size-l, 20px));
192
+ line-height: var(--gv-table-header--fz, var(--gv-theme-font-size-l, 20px));
193
+ opacity: 0.6;
194
+ }
232
195
 
233
- return this._itemsProvider;
234
- }
196
+ .title span {
197
+ font-weight: 600;
198
+ font-size: var(--gv-theme-font-size-s);
199
+ line-height: var(--gv-theme-font-size-s);
200
+ margin-left: 8px;
201
+ opacity: 0.7;
202
+ }
235
203
 
236
- return [];
237
- }
204
+ gv-identity-picture {
205
+ height: 35px;
206
+ width: 35px;
207
+ --gv-image--of: contain;
208
+ margin-left: 20px;
209
+ }
238
210
 
239
- _getItemId(item) {
240
- return item.id == null ? item._id : item.id;
241
- }
211
+ gv-icon {
212
+ transform: rotate(0deg);
213
+ --gv-icon--s: 18px;
214
+ }
242
215
 
243
- _onSelect(item, event) {
244
- if (!this._skeleton && !event.target.dataset.preventSelect) {
245
- if (this.options.selectable) {
246
- const itemId = this._getItemId(item);
216
+ gv-icon.desc {
217
+ transform: rotate(180deg);
218
+ }
247
219
 
248
- if (this._isSelected(item)) {
249
- this.selected = this.selected.filter(id => itemId !== id);
250
- } else if (this.options.selectable === 'multi') {
251
- this.selected = [...this.selected, itemId];
252
- } else {
253
- this.selected = [itemId];
220
+ gv-pagination {
221
+ align-self: flex-end;
254
222
  }
255
223
 
256
- dispatchCustomEvent(this, 'select', {
257
- items: this.selectedItems,
258
- options: this.options
224
+ .cell > *:not(gv-tag) {
225
+ margin: auto;
226
+ width: 100%;
227
+ }
228
+ `,
229
+ ];
230
+ }
231
+ constructor() {
232
+ super();
233
+ this._id = new Date().getTime();
234
+ this.breakpoints = {
235
+ width: [400, 580, 768],
236
+ };
237
+ this._empty = false;
238
+ this.order = '';
239
+ this._page = 1;
240
+ this._itemsProvider = [];
241
+ this.selected = [];
242
+ this.compareFn = (item, item2, value) => {
243
+ const itemData = this._getDataFromField(item, value) && this._getDataFromField(item, value).toLowerCase
244
+ ? this._getDataFromField(item, value).toLowerCase()
245
+ : '';
246
+ const itemData2 = this._getDataFromField(item2, value) && this._getDataFromField(item2, value).toLowerCase
247
+ ? this._getDataFromField(item2, value).toLowerCase()
248
+ : '';
249
+ if (this.order.startsWith('-')) {
250
+ return itemData2.localeCompare(itemData);
251
+ }
252
+ else {
253
+ return itemData.localeCompare(itemData2);
254
+ }
255
+ };
256
+ this.addEventListener('gv-pagination:paginate', (e) => {
257
+ this._page = e.detail.page;
259
258
  });
260
- } else {
261
- dispatchCustomEvent(this, 'select', {
262
- items: [item]
259
+ }
260
+ set items(items) {
261
+ this._skeleton = true;
262
+ Promise.resolve(items)
263
+ .then((items) => {
264
+ if (items) {
265
+ this._itemsProvider = items.map((item, index) => {
266
+ item._id = item.id == null ? index : item.id;
267
+ return item;
268
+ });
269
+ this._onSortChanged();
270
+ this._empty = this._itemsProvider.length === 0;
271
+ this._skeleton = false;
272
+ }
273
+ })
274
+ .catch((e) => {
275
+ console.error(e);
276
+ this._error = true;
277
+ this._skeleton = false;
278
+ this._itemsProvider = [];
263
279
  });
264
- }
265
280
  }
266
- }
267
-
268
- get selectedItems() {
269
- if (this.selected && this._itemsProvider) {
270
- return this._itemsProvider.filter(item => this.selected && this.selected.includes(this._getItemId(item)));
281
+ get items() {
282
+ return this._itemsProvider;
271
283
  }
272
-
273
- return [];
274
- }
275
-
276
- _onMouseEnter(item) {
277
- if (!(this.selected && this.selected.length > 0) && !this._skeleton) {
278
- dispatchCustomEvent(this, 'mouseenter', {
279
- item
280
- });
284
+ _onSortChanged(field, e) {
285
+ if (e) {
286
+ e.preventDefault();
287
+ }
288
+ if (this._itemsProvider && this.order) {
289
+ const desc = this.order.startsWith('-');
290
+ const previousOrder = desc ? this.order.substring(1) : this.order;
291
+ const value = field || previousOrder;
292
+ if (field) {
293
+ this.order = previousOrder === value ? (desc ? value : '-' + value) : value;
294
+ }
295
+ this._itemsProvider = this._itemsProvider.sort((item, item2) => this.compareFn(item, item2, value));
296
+ if (field) {
297
+ dispatchCustomEvent(this, 'sort', { order: this.order });
298
+ }
299
+ }
281
300
  }
282
- }
283
-
284
- _onMouseLeave() {
285
- if (!(this.selected && this.selected.length > 0) && !this._skeleton) {
286
- dispatchCustomEvent(this, 'mouseleave');
301
+ get _items() {
302
+ if (this._itemsProvider) {
303
+ if (this.options && this.options.paging && this.options.paging < this._itemsProvider.length) {
304
+ const index = (this._page - 1) * this.options.paging;
305
+ return [...this._itemsProvider].splice(index, this.options.paging);
306
+ }
307
+ return this._itemsProvider;
308
+ }
309
+ return [];
287
310
  }
288
- }
289
-
290
- _renderHeader(styleGridColumns) {
291
- if (this.noheader) {
292
- return '';
293
- } else {
294
- const style = { ...styleGridColumns,
295
- ...{
296
- height: this.rowheight,
297
- 'grid-auto-rows': this.rowheight ? null : 'minmax(80px, auto)'
298
- }
299
- };
300
- return html` <div class="${classMap({
301
- theader: true
302
- })}" style="${styleMap(style)}"> ${this.options && this.options.data && this._items && this._items.length ? repeat(this.options.data, option => option, option => {
303
- const orderValue = this.order && this.order.startsWith('-') ? this.order.substring(1) : this.order;
304
- const label = this.format && option.label ? this.format(option.label) : option.label;
305
- const style = typeof option.headerStyle === 'function' ? option.headerStyle(label) : option.headerStyle;
306
- return html` <div style="${style || ''}"> ${this.order && !this.nosort ? html` <gv-button link @click="${this._onSortChanged.bind(this, option.field || option.tag)}">${until(label)}</gv-button> ${orderValue === option.tag || orderValue === option.field && option.type !== 'image' ? html` <gv-icon class="${classMap({
307
- desc: this.order.startsWith('-')
308
- })}" shape="design:triangle"></gv-icon>` : ''} ` : until(label)} </div>`;
309
- }) : ''} </div>`;
311
+ _getItemId(item) {
312
+ return item.id == null ? item._id : item.id;
310
313
  }
311
- }
312
-
313
- _renderIcon(item, itemIndex, option) {
314
- const icon = typeof option.icon === 'function' ? option.icon(item) : option.icon;
315
- const iconTitle = typeof option.iconTitle === 'function' ? option.iconTitle(item) : option.iconTitle;
316
-
317
- if (icon) {
318
- return html` <gv-icon shape="${icon}" title="${iconTitle}"></gv-icon>`;
314
+ _onSelect(item, event) {
315
+ if (!this._skeleton && !event.target.dataset.preventSelect) {
316
+ if (this.options.selectable) {
317
+ const itemId = this._getItemId(item);
318
+ if (this._isSelected(item)) {
319
+ this.selected = this.selected.filter((id) => itemId !== id);
320
+ }
321
+ else if (this.options.selectable === 'multi') {
322
+ this.selected = [...this.selected, itemId];
323
+ }
324
+ else {
325
+ this.selected = [itemId];
326
+ }
327
+ dispatchCustomEvent(this, 'select', { items: this.selectedItems, options: this.options });
328
+ }
329
+ else {
330
+ dispatchCustomEvent(this, 'select', { items: [item] });
331
+ }
332
+ }
319
333
  }
320
-
321
- return '';
322
- }
323
-
324
- _renderComponent(item, itemIndex, option, value, type) {
325
- if (option.condition && !option.condition(item)) {
326
- return '';
334
+ get selectedItems() {
335
+ if (this.selected && this._itemsProvider) {
336
+ return this._itemsProvider.filter((item) => this.selected && this.selected.includes(this._getItemId(item)));
337
+ }
338
+ return [];
327
339
  }
328
-
329
- const element = document.createElement(type);
330
- element.value = value;
331
-
332
- if (option.attributes) {
333
- Object.keys(option.attributes).forEach(attribute => {
334
- if (attribute.startsWith('on')) {
335
- const event = attribute.replace('on', '').toLowerCase();
336
-
337
- if (event === 'click') {
338
- element.classList.add('link');
339
- }
340
-
341
- element.dataset.preventSelect = true;
342
- element.addEventListener(event, e => {
343
- e.stopPropagation();
344
- const optionConfirm = typeof option.confirm === 'function' ? option.confirm(item) : option.confirm;
345
-
346
- if (optionConfirm == null) {
347
- setTimeout(() => {
348
- option.attributes[attribute](item, e, element, this);
349
- }, 0);
340
+ _onMouseEnter(item) {
341
+ if (!(this.selected && this.selected.length > 0) && !this._skeleton) {
342
+ dispatchCustomEvent(this, 'mouseenter', { item });
343
+ }
344
+ }
345
+ _onMouseLeave() {
346
+ if (!(this.selected && this.selected.length > 0) && !this._skeleton) {
347
+ dispatchCustomEvent(this, 'mouseleave');
348
+ }
349
+ }
350
+ _renderHeader(styleGridColumns) {
351
+ if (this.noheader) {
352
+ return '';
353
+ }
354
+ else {
355
+ const style = {
356
+ ...styleGridColumns,
357
+ ...{
358
+ height: this.rowheight,
359
+ 'grid-auto-rows': this.rowheight ? null : 'minmax(80px, auto)',
360
+ },
361
+ };
362
+ return html ` <div class=${classMap({ theader: true })} style=${styleMap(style)}>
363
+ ${this.options && this.options.data && this._items && this._items.length
364
+ ? repeat(this.options.data, (option) => option, (option) => {
365
+ const orderValue = this.order && this.order.startsWith('-') ? this.order.substring(1) : this.order;
366
+ const label = this.format && option.label ? this.format(option.label) : option.label;
367
+ const style = typeof option.headerStyle === 'function' ? option.headerStyle(label) : option.headerStyle;
368
+ return html ` <div style="${style || ''}">
369
+ ${this.order && !this.nosort
370
+ ? html `
371
+ <gv-button link @click="${this._onSortChanged.bind(this, option.field || option.tag)}">${until(label)}</gv-button>
372
+ ${orderValue === option.tag || (orderValue === option.field && option.type !== 'image')
373
+ ? html ` <gv-icon class=${classMap({ desc: this.order.startsWith('-') })} shape="design:triangle"></gv-icon>`
374
+ : ''}
375
+ </a>`
376
+ : until(label)}
377
+ </div>`;
378
+ })
379
+ : ''}
380
+ </div>`;
381
+ }
382
+ }
383
+ _renderIcon(item, itemIndex, option) {
384
+ const icon = typeof option.icon === 'function' ? option.icon(item) : option.icon;
385
+ const iconTitle = typeof option.iconTitle === 'function' ? option.iconTitle(item) : option.iconTitle;
386
+ if (icon) {
387
+ return html ` <gv-icon shape="${icon}" title="${iconTitle}"></gv-icon>`;
388
+ }
389
+ return '';
390
+ }
391
+ _renderComponent(item, itemIndex, option, value, type) {
392
+ if (option.condition && !option.condition(item)) {
393
+ return '';
394
+ }
395
+ const element = document.createElement(type);
396
+ element.value = value;
397
+ if (option.attributes) {
398
+ Object.keys(option.attributes).forEach((attribute) => {
399
+ if (attribute.startsWith('on')) {
400
+ const event = attribute.replace('on', '').toLowerCase();
401
+ if (event === 'click') {
402
+ element.classList.add('link');
403
+ }
404
+ element.dataset.preventSelect = true;
405
+ element.addEventListener(event, (e) => {
406
+ e.stopPropagation();
407
+ const optionConfirm = typeof option.confirm === 'function' ? option.confirm(item) : option.confirm;
408
+ if (optionConfirm == null) {
409
+ setTimeout(() => {
410
+ option.attributes[attribute](item, e, element, this);
411
+ }, 0);
412
+ }
413
+ });
414
+ }
415
+ else if (typeof option.attributes[attribute] === 'function') {
416
+ const value = option.attributes[attribute](item);
417
+ if (value != null) {
418
+ element[attribute] = value;
419
+ }
420
+ }
421
+ else {
422
+ if (this.format && typeof option.attributes[attribute] === 'string') {
423
+ this.format(option.attributes[attribute]).then((t) => {
424
+ element[attribute] = t;
425
+ });
426
+ }
427
+ else {
428
+ element[attribute] = option.attributes[attribute];
429
+ }
430
+ }
431
+ });
432
+ }
433
+ element.addEventListener('input', (event) => {
434
+ this._items[itemIndex][option.field] = event.target.value;
435
+ });
436
+ const optionConfirm = typeof option.confirm === 'function' ? option.confirm(item) : option.confirm;
437
+ if (optionConfirm) {
438
+ const confirm = document.createElement('gv-confirm');
439
+ if (this.format) {
440
+ this.format(optionConfirm.msg).then((t) => (confirm.message = t));
350
441
  }
351
- });
352
- } else if (typeof option.attributes[attribute] === 'function') {
353
- const value = option.attributes[attribute](item);
354
-
355
- if (value != null) {
356
- element[attribute] = value;
357
- }
358
- } else {
359
- if (this.format && typeof option.attributes[attribute] === 'string') {
360
- this.format(option.attributes[attribute]).then(t => {
361
- element[attribute] = t;
442
+ else {
443
+ confirm.message = optionConfirm.msg;
444
+ }
445
+ if (optionConfirm.danger) {
446
+ confirm.danger = true;
447
+ }
448
+ confirm.addEventListener('click', (e) => e.stopPropagation());
449
+ confirm.addEventListener('gv-confirm:ok', (e) => {
450
+ e.stopPropagation();
451
+ option.attributes.onClick(item, e, element);
362
452
  });
363
- } else {
364
- element[attribute] = option.attributes[attribute];
365
- }
453
+ confirm.appendChild(element);
454
+ return confirm;
366
455
  }
367
- });
456
+ return element;
368
457
  }
369
-
370
- element.addEventListener('input', event => {
371
- this._items[itemIndex][option.field] = event.target.value;
372
- });
373
- const optionConfirm = typeof option.confirm === 'function' ? option.confirm(item) : option.confirm;
374
-
375
- if (optionConfirm) {
376
- const confirm = document.createElement('gv-confirm');
377
-
378
- if (this.format) {
379
- this.format(optionConfirm.msg).then(t => confirm.message = t);
380
- } else {
381
- confirm.message = optionConfirm.msg;
382
- }
383
-
384
- if (optionConfirm.danger) {
385
- confirm.danger = true;
386
- }
387
-
388
- confirm.addEventListener('click', e => e.stopPropagation());
389
- confirm.addEventListener('gv-confirm:ok', e => {
390
- e.stopPropagation();
391
- option.attributes.onClick(item, e, element);
392
- });
393
- confirm.appendChild(element);
394
- return confirm;
458
+ _renderCell(formattedValue, option, item, itemIndex) {
459
+ if (option.type) {
460
+ if (option.type === 'image') {
461
+ let alt = '';
462
+ if (option.alt) {
463
+ if (typeof option.alt === 'function') {
464
+ alt = option.alt(item);
465
+ }
466
+ else {
467
+ alt = this._getDataFromField(item, option.alt);
468
+ }
469
+ }
470
+ return this._renderImage(formattedValue, alt);
471
+ }
472
+ else if (typeof option.type === 'function') {
473
+ return this._renderComponent(item, itemIndex, option, formattedValue, option.type(item));
474
+ }
475
+ else if (option.type.startsWith('gv-')) {
476
+ return this._renderComponent(item, itemIndex, option, formattedValue, option.type);
477
+ }
478
+ }
479
+ return until(formattedValue);
395
480
  }
396
-
397
- return element;
398
- }
399
-
400
- _renderCell(formattedValue, option, item, itemIndex) {
401
- if (option.type) {
402
- if (option.type === 'image') {
403
- let alt = '';
404
-
405
- if (option.alt) {
406
- if (typeof option.alt === 'function') {
407
- alt = option.alt(item);
408
- } else {
409
- alt = this._getDataFromField(item, option.alt);
410
- }
481
+ _getFormattedCellValue(option, item) {
482
+ let value = option.field ? this._getDataFromField(item, option.field) : '';
483
+ if (value) {
484
+ if (option.type === 'date') {
485
+ value = new Date(value).toLocaleDateString(getLanguage());
486
+ }
487
+ else if (option.type === 'datetime') {
488
+ value = new Date(value).toLocaleString(getLanguage());
489
+ }
490
+ else if (option.type === 'time') {
491
+ value = new Date(value).toLocaleTimeString(getLanguage());
492
+ }
411
493
  }
412
-
413
- return this._renderImage(formattedValue, alt);
414
- } else if (typeof option.type === 'function') {
415
- return this._renderComponent(item, itemIndex, option, formattedValue, option.type(item));
416
- } else if (option.type.startsWith('gv-')) {
417
- return this._renderComponent(item, itemIndex, option, formattedValue, option.type);
418
- }
494
+ if (option.format) {
495
+ value = option.format(value);
496
+ }
497
+ return value;
419
498
  }
420
-
421
- return until(formattedValue);
422
- }
423
-
424
- _getFormattedCellValue(option, item) {
425
- let value = option.field ? this._getDataFromField(item, option.field) : '';
426
-
427
- if (value) {
428
- if (option.type === 'date') {
429
- value = new Date(value).toLocaleDateString(getLanguage());
430
- } else if (option.type === 'datetime') {
431
- value = new Date(value).toLocaleString(getLanguage());
432
- } else if (option.type === 'time') {
433
- value = new Date(value).toLocaleTimeString(getLanguage());
434
- }
499
+ _isSelected(item) {
500
+ return this.selected && this.selected.includes(this._getItemId(item));
435
501
  }
436
-
437
- if (option.format) {
438
- value = option.format(value);
502
+ _renderRows(styleGridColumns) {
503
+ return html ` <div
504
+ class="rows"
505
+ style=${styleMap({ height: this.rowsheight, 'user-select': this.options.selectable ? 'none' : '' })}
506
+ @mouseleave="${this._onMouseLeave.bind(this)}"
507
+ >
508
+ ${this._items && this._items.length
509
+ ? repeat(this._items, (item) => item, (item, itemIndex) => {
510
+ return html `
511
+ <div class=${classMap({
512
+ row: true,
513
+ skeleton: this._skeleton,
514
+ selected: this._isSelected(item),
515
+ })} style=${styleMap({
516
+ ...styleGridColumns,
517
+ ...{
518
+ height: this.rowheight,
519
+ 'grid-auto-rows': this.rowheight ? null : 'minmax(80px, auto)',
520
+ cursor: this.options.selectable ? 'pointer' : '',
521
+ 'border-color': this.options.selectable && this._isSelected(item) ? 'var(--selected--bgc)' : '',
522
+ 'column-gap': 'var(--gv-table--colmg, 0.2rem)',
523
+ },
524
+ })}
525
+ @click="${this._onSelect.bind(this, item)}"
526
+ @mouseenter="${this._onMouseEnter.bind(this, item)}">
527
+ ${this.options && this.options.data
528
+ ? repeat(this.options.data, (option) => option, (option) => {
529
+ const style = typeof option.style === 'function' ? option.style(item) : option.style;
530
+ const formattedValue = this._getFormattedCellValue(option, item);
531
+ return html `<div class="cell" style="${ifDefined(style)}" title="${formattedValue}">
532
+ ${this._renderCell(formattedValue, option, item, itemIndex)}${this._renderTag(option, item)}${option.icon
533
+ ? this._renderIcon(item, itemIndex, option)
534
+ : ''}
535
+ </div> `;
536
+ })
537
+ : ''}
538
+ </div>
539
+ </div>`;
540
+ })
541
+ : ''}
542
+ </div>`;
439
543
  }
440
-
441
- return value;
442
- }
443
-
444
- _isSelected(item) {
445
- return this.selected && this.selected.includes(this._getItemId(item));
446
- }
447
-
448
- _renderRows(styleGridColumns) {
449
- return html` <div class="rows" style="${styleMap({
450
- height: this.rowsheight,
451
- 'user-select': this.options.selectable ? 'none' : ''
452
- })}" @mouseleave="${this._onMouseLeave.bind(this)}"> ${this._items && this._items.length ? repeat(this._items, item => item, (item, itemIndex) => {
453
- return html` <div class="${classMap({
454
- row: true,
455
- skeleton: this._skeleton,
456
- selected: this._isSelected(item)
457
- })}" style="${styleMap({ ...styleGridColumns,
458
- ...{
459
- height: this.rowheight,
460
- 'grid-auto-rows': this.rowheight ? null : 'minmax(80px, auto)',
461
- cursor: this.options.selectable ? 'pointer' : '',
462
- 'border-color': this.options.selectable && this._isSelected(item) ? 'var(--selected--bgc)' : '',
463
- 'column-gap': 'var(--gv-table--colmg, 0.2rem)'
464
- }
465
- })}" @click="${this._onSelect.bind(this, item)}" @mouseenter="${this._onMouseEnter.bind(this, item)}"> ${this.options && this.options.data ? repeat(this.options.data, option => option, option => {
466
- const style = typeof option.style === 'function' ? option.style(item) : option.style;
467
-
468
- const formattedValue = this._getFormattedCellValue(option, item);
469
-
470
- return html`<div class="cell" style="${ifDefined(style)}" title="${formattedValue}"> ${this._renderCell(formattedValue, option, item, itemIndex)}${this._renderTag(option, item)}${option.icon ? this._renderIcon(item, itemIndex, option) : ''} </div> `;
471
- }) : ''} </div> `;
472
- }) : ''} </div>`;
473
- }
474
-
475
- _renderItems() {
476
- let widthTemplate = this.options.data.map(o => {
477
- if (o.width) {
478
- return o.width;
479
- } else if (o.type === 'image') {
480
- return '80px';
481
- } else if (o.type === 'icon') {
482
- return '40px';
483
- }
484
-
485
- return null;
486
- });
487
- const fixedData = widthTemplate.filter(width => width !== null);
488
- const fixedWidth = fixedData.reduce((acc, width) => {
489
- return acc + parseInt(width.replace('px', ''), 10);
490
- }, 0);
491
- widthTemplate = widthTemplate.map(width => {
492
- if (width == null) {
493
- const columnGap = getCssVar(this, '--gv-table--colmg', '0.2rem');
494
- return `calc((100% - ( ${fixedWidth}px + ${this.options.data.length - 1} * ${columnGap} ) ) / ${this.options.data.length - fixedData.length})`;
495
- }
496
-
497
- return width;
498
- });
499
- const styleGridColumns = {
500
- 'grid-template-columns': widthTemplate.join(' ')
501
- };
502
- return html` ${this._renderHeader(styleGridColumns)} ${this._renderRows(styleGridColumns)} ${this._renderPagination()} `;
503
- }
504
-
505
- _renderPagination() {
506
- if (this.options && this.options.paging && this._itemsProvider) {
507
- const paginationData = {
508
- first: 1,
509
- last: this._itemsProvider.length / this.options.paging,
510
- total: this._itemsProvider.length,
511
- current_page: this._page,
512
- total_pages: this._itemsProvider.length / this.options.paging
513
- };
514
- return html`<gv-pagination .data="${paginationData}" widget="true"></gv-pagination>`;
544
+ _renderItems() {
545
+ let widthTemplate = this.options.data.map((o) => {
546
+ if (o.width) {
547
+ return o.width;
548
+ }
549
+ else if (o.type === 'image') {
550
+ return '80px';
551
+ }
552
+ else if (o.type === 'icon') {
553
+ return '40px';
554
+ }
555
+ return null;
556
+ });
557
+ const fixedData = widthTemplate.filter((width) => width !== null);
558
+ const fixedWidth = fixedData.reduce((acc, width) => {
559
+ return acc + parseInt(width.replace('px', ''), 10);
560
+ }, 0);
561
+ widthTemplate = widthTemplate.map((width) => {
562
+ if (width == null) {
563
+ const columnGap = getCssVar(this, '--gv-table--colmg', '0.2rem');
564
+ return `calc((100% - ( ${fixedWidth}px + ${this.options.data.length - 1} * ${columnGap} ) ) / ${this.options.data.length - fixedData.length})`;
565
+ }
566
+ return width;
567
+ });
568
+ const styleGridColumns = { 'grid-template-columns': widthTemplate.join(' ') };
569
+ return html ` ${this._renderHeader(styleGridColumns)} ${this._renderRows(styleGridColumns)} ${this._renderPagination()} `;
515
570
  }
516
- }
517
-
518
- _getDataFromField(item, field) {
519
- if (typeof field === 'function') {
520
- return field(item);
521
- } else {
522
- return field.split('.').reduce((p, c) => p && p[c], item);
571
+ _renderPagination() {
572
+ if (this.options && this.options.paging && this._itemsProvider) {
573
+ const paginationData = {
574
+ first: 1,
575
+ last: this._itemsProvider.length / this.options.paging,
576
+ total: this._itemsProvider.length,
577
+ current_page: this._page,
578
+ total_pages: this._itemsProvider.length / this.options.paging,
579
+ };
580
+ return html `<gv-pagination .data="${paginationData}" widget="true"></gv-pagination>`;
581
+ }
523
582
  }
524
- }
525
-
526
- _renderTag(option, item) {
527
- if (option.tag) {
528
- let tag;
529
-
530
- if (typeof option.tag === 'function') {
531
- tag = option.tag(item);
532
- } else {
533
- tag = option.format ? option.format(this._getDataFromField(item, option.tag)) : this._getDataFromField(item, option.tag);
534
- }
535
-
536
- if (tag) {
537
- return html` <gv-tag ?skeleton="${this._skeleton}">${tag}</gv-tag>`;
538
- }
583
+ _getDataFromField(item, field) {
584
+ if (typeof field === 'function') {
585
+ return field(item);
586
+ }
587
+ else {
588
+ return field.split('.').reduce((p, c) => p && p[c], item);
589
+ }
539
590
  }
540
-
541
- return '';
542
- }
543
-
544
- _onImageLoaded() {
545
- this._skeleton = false;
546
- }
547
-
548
- _renderImage(picture, alt) {
549
- return html`<gv-identity-picture .picture="${picture}" .display_name="${alt}"></gv-identity-picture>`;
550
- }
551
-
552
- updated(props) {
553
- this._onSortChanged();
554
- }
555
-
556
- render() {
557
- if (this._error) {
558
- return html`<div class="error">${i18n('gv-table.error')}</div>`;
591
+ _renderTag(option, item) {
592
+ if (option.tag) {
593
+ let tag;
594
+ if (typeof option.tag === 'function') {
595
+ tag = option.tag(item);
596
+ }
597
+ else {
598
+ tag = option.format ? option.format(this._getDataFromField(item, option.tag)) : this._getDataFromField(item, option.tag);
599
+ }
600
+ if (tag) {
601
+ return html ` <gv-tag ?skeleton="${this._skeleton}">${tag}</gv-tag>`;
602
+ }
603
+ }
604
+ return '';
605
+ }
606
+ _onImageLoaded() {
607
+ this._skeleton = false;
608
+ }
609
+ _renderImage(picture, alt) {
610
+ return html `<gv-identity-picture .picture="${picture}" .display_name="${alt}"></gv-identity-picture>`;
611
+ }
612
+ updated(props) {
613
+ this._onSortChanged();
614
+ }
615
+ render() {
616
+ if (this._error) {
617
+ return html `<div class="error">${i18n('gv-table.error')}</div>`;
618
+ }
619
+ const classes = {
620
+ table: true,
621
+ skeleton: this._skeleton || this.skeleton,
622
+ };
623
+ const emptyStyle = {
624
+ height: this.rowsheight ? this.rowsheight : '',
625
+ };
626
+ return html `
627
+ <div class=${classMap(classes)} style="${styleMap({ display: this.rowsheight ? 'block' : 'flex' })}">
628
+ ${this.title
629
+ ? html ` <div class="header">
630
+ <h3 class="title">
631
+ ${this.title} ${!this._empty ? html `<span>(${this.total || (this._items && this._items.length)})</span>` : ''}
632
+ </h3>
633
+ </div>`
634
+ : ''}
635
+ ${!this._empty && this.options && this.options.data
636
+ ? this._renderItems()
637
+ : html ` <div class="empty" style="${styleMap(emptyStyle)}">
638
+ ${this.emptymessage ? this.emptymessage : i18n('gv-table.empty')}
639
+ </div>`}
640
+ </div>
641
+ `;
559
642
  }
560
-
561
- const classes = {
562
- table: true,
563
- skeleton: this._skeleton || this.skeleton
564
- };
565
- const emptyStyle = {
566
- height: this.rowsheight ? this.rowsheight : ''
567
- };
568
- return html` <div class="${classMap(classes)}" style="${styleMap({
569
- display: this.rowsheight ? 'block' : 'flex'
570
- })}"> ${this.title ? html` <div class="header"> <h3 class="title"> ${this.title} ${!this._empty ? html`<span>(${this.total || this._items && this._items.length})</span>` : ''} </h3> </div>` : ''} ${!this._empty && this.options && this.options.data ? this._renderItems() : html` <div class="empty" style="${styleMap(emptyStyle)}"> ${this.emptymessage ? this.emptymessage : i18n('gv-table.empty')} </div>`} </div> `;
571
- }
572
-
573
643
  }
574
644
  window.customElements.define('gv-table', GvTable);
575
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi10YWJsZS5qcyJdLCJuYW1lcyI6WyJjc3MiLCJMaXRFbGVtZW50IiwiaHRtbCIsInNrZWxldG9uIiwiZW1wdHkiLCJsaW5rIiwiY2xhc3NNYXAiLCJyZXBlYXQiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZ2V0TGFuZ3VhZ2UiLCJpMThuIiwidW50aWwiLCJzdHlsZU1hcCIsIndpdGhSZXNpemVPYnNlcnZlciIsImlmRGVmaW5lZCIsImdldENzc1ZhciIsIkd2VGFibGUiLCJwcm9wZXJ0aWVzIiwiaXRlbXMiLCJ0eXBlIiwiQXJyYXkiLCJ0aXRsZSIsIlN0cmluZyIsIm9yZGVyIiwib3B0aW9ucyIsIm5vaGVhZGVyIiwiQm9vbGVhbiIsIm5vc29ydCIsInJvd3NoZWlnaHQiLCJyb3doZWlnaHQiLCJlbXB0eW1lc3NhZ2UiLCJmb3JtYXQiLCJGdW5jdGlvbiIsImNvbXBhcmVGbiIsInNlbGVjdGVkIiwicmVmbGVjdCIsInRvdGFsIiwiX2l0ZW1zIiwiYXR0cmlidXRlIiwiX3NrZWxldG9uIiwiX2Vycm9yIiwiX2VtcHR5IiwiX2l0ZW1zUHJvdmlkZXIiLCJfcGFnZSIsIk51bWJlciIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX2lkIiwiRGF0ZSIsImdldFRpbWUiLCJicmVha3BvaW50cyIsIndpZHRoIiwiaXRlbSIsIml0ZW0yIiwidmFsdWUiLCJpdGVtRGF0YSIsIl9nZXREYXRhRnJvbUZpZWxkIiwidG9Mb3dlckNhc2UiLCJpdGVtRGF0YTIiLCJzdGFydHNXaXRoIiwibG9jYWxlQ29tcGFyZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiZGV0YWlsIiwicGFnZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIm1hcCIsImluZGV4IiwiaWQiLCJfb25Tb3J0Q2hhbmdlZCIsImxlbmd0aCIsImNhdGNoIiwiY29uc29sZSIsImVycm9yIiwiZmllbGQiLCJwcmV2ZW50RGVmYXVsdCIsImRlc2MiLCJwcmV2aW91c09yZGVyIiwic3Vic3RyaW5nIiwic29ydCIsInBhZ2luZyIsInNwbGljZSIsIl9nZXRJdGVtSWQiLCJfb25TZWxlY3QiLCJldmVudCIsInRhcmdldCIsImRhdGFzZXQiLCJwcmV2ZW50U2VsZWN0Iiwic2VsZWN0YWJsZSIsIml0ZW1JZCIsIl9pc1NlbGVjdGVkIiwiZmlsdGVyIiwic2VsZWN0ZWRJdGVtcyIsImluY2x1ZGVzIiwiX29uTW91c2VFbnRlciIsIl9vbk1vdXNlTGVhdmUiLCJfcmVuZGVySGVhZGVyIiwic3R5bGVHcmlkQ29sdW1ucyIsInN0eWxlIiwiaGVpZ2h0IiwidGhlYWRlciIsImRhdGEiLCJvcHRpb24iLCJvcmRlclZhbHVlIiwibGFiZWwiLCJoZWFkZXJTdHlsZSIsImJpbmQiLCJ0YWciLCJfcmVuZGVySWNvbiIsIml0ZW1JbmRleCIsImljb24iLCJpY29uVGl0bGUiLCJfcmVuZGVyQ29tcG9uZW50IiwiY29uZGl0aW9uIiwiZWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dHJpYnV0ZXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInJlcGxhY2UiLCJjbGFzc0xpc3QiLCJhZGQiLCJzdG9wUHJvcGFnYXRpb24iLCJvcHRpb25Db25maXJtIiwiY29uZmlybSIsInNldFRpbWVvdXQiLCJ0IiwibXNnIiwibWVzc2FnZSIsImRhbmdlciIsIm9uQ2xpY2siLCJhcHBlbmRDaGlsZCIsIl9yZW5kZXJDZWxsIiwiZm9ybWF0dGVkVmFsdWUiLCJhbHQiLCJfcmVuZGVySW1hZ2UiLCJfZ2V0Rm9ybWF0dGVkQ2VsbFZhbHVlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJfcmVuZGVyUm93cyIsInJvdyIsImN1cnNvciIsIl9yZW5kZXJUYWciLCJfcmVuZGVySXRlbXMiLCJ3aWR0aFRlbXBsYXRlIiwibyIsImZpeGVkRGF0YSIsImZpeGVkV2lkdGgiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbHVtbkdhcCIsImpvaW4iLCJfcmVuZGVyUGFnaW5hdGlvbiIsInBhZ2luYXRpb25EYXRhIiwiZmlyc3QiLCJsYXN0IiwiY3VycmVudF9wYWdlIiwidG90YWxfcGFnZXMiLCJzcGxpdCIsInAiLCJjIiwiX29uSW1hZ2VMb2FkZWQiLCJwaWN0dXJlIiwidXBkYXRlZCIsInByb3BzIiwicmVuZGVyIiwiY2xhc3NlcyIsInRhYmxlIiwiZW1wdHlTdHlsZSIsImRpc3BsYXkiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLFFBQVQsUUFBeUIsb0JBQXpCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixpQkFBdEI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsTUFBVCxRQUF1Qix1QkFBdkI7QUFDQSxTQUFTQyxtQkFBVCxRQUFvQyxlQUFwQztBQUNBLFNBQVNDLFdBQVQsRUFBc0JDLElBQXRCLFFBQWtDLGFBQWxDO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixzQkFBdEI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLDBCQUF6QjtBQUNBLFNBQVNDLGtCQUFULFFBQW1DLGdDQUFuQztBQUNBLFNBQVNDLFNBQVQsUUFBMEIsMkJBQTFCO0FBQ0EsT0FBTyxtQkFBUDtBQUNBLE9BQU8sNEJBQVA7QUFDQSxTQUFTQyxTQUFULFFBQTBCLGNBQTFCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLE9BQU4sU0FBc0JILGtCQUFrQixDQUFDWixVQUFELENBQXhDLENBQXFEO0FBQ3JDLGFBQVZnQixVQUFVLEdBQUc7QUFDdEIsV0FBTztBQUNMQyxNQUFBQSxLQUFLLEVBQUU7QUFBRUMsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BREY7QUFFTEMsTUFBQUEsS0FBSyxFQUFFO0FBQUVGLFFBQUFBLElBQUksRUFBRUc7QUFBUixPQUZGO0FBR0xDLE1BQUFBLEtBQUssRUFBRTtBQUFFSixRQUFBQSxJQUFJLEVBQUVHO0FBQVIsT0FIRjtBQUlMRSxNQUFBQSxPQUFPLEVBQUU7QUFBRUwsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BSko7QUFLTEssTUFBQUEsUUFBUSxFQUFFO0FBQUVOLFFBQUFBLElBQUksRUFBRU87QUFBUixPQUxMO0FBTUxDLE1BQUFBLE1BQU0sRUFBRTtBQUFFUixRQUFBQSxJQUFJLEVBQUVPO0FBQVIsT0FOSDtBQU9MRSxNQUFBQSxVQUFVLEVBQUU7QUFBRVQsUUFBQUEsSUFBSSxFQUFFRztBQUFSLE9BUFA7QUFRTE8sTUFBQUEsU0FBUyxFQUFFO0FBQUVWLFFBQUFBLElBQUksRUFBRUc7QUFBUixPQVJOO0FBU0xRLE1BQUFBLFlBQVksRUFBRTtBQUFFWCxRQUFBQSxJQUFJLEVBQUVHO0FBQVIsT0FUVDtBQVVMUyxNQUFBQSxNQUFNLEVBQUU7QUFBRVosUUFBQUEsSUFBSSxFQUFFYTtBQUFSLE9BVkg7QUFXTEMsTUFBQUEsU0FBUyxFQUFFO0FBQUVkLFFBQUFBLElBQUksRUFBRWE7QUFBUixPQVhOO0FBWUxFLE1BQUFBLFFBQVEsRUFBRTtBQUFFZixRQUFBQSxJQUFJLEVBQUVDLEtBQVI7QUFBZWUsUUFBQUEsT0FBTyxFQUFFO0FBQXhCLE9BWkw7QUFhTEMsTUFBQUEsS0FBSyxFQUFFO0FBQUVqQixRQUFBQSxJQUFJLEVBQUVHO0FBQVIsT0FiRjtBQWNMbkIsTUFBQUEsUUFBUSxFQUFFO0FBQUVnQixRQUFBQSxJQUFJLEVBQUVPO0FBQVIsT0FkTDtBQWVMVyxNQUFBQSxNQUFNLEVBQUU7QUFBRWxCLFFBQUFBLElBQUksRUFBRUMsS0FBUjtBQUFla0IsUUFBQUEsU0FBUyxFQUFFO0FBQTFCLE9BZkg7QUFnQkxDLE1BQUFBLFNBQVMsRUFBRTtBQUFFcEIsUUFBQUEsSUFBSSxFQUFFTyxPQUFSO0FBQWlCWSxRQUFBQSxTQUFTLEVBQUU7QUFBNUIsT0FoQk47QUFpQkxFLE1BQUFBLE1BQU0sRUFBRTtBQUFFckIsUUFBQUEsSUFBSSxFQUFFTyxPQUFSO0FBQWlCWSxRQUFBQSxTQUFTLEVBQUU7QUFBNUIsT0FqQkg7QUFrQkxHLE1BQUFBLE1BQU0sRUFBRTtBQUFFdEIsUUFBQUEsSUFBSSxFQUFFTyxPQUFSO0FBQWlCWSxRQUFBQSxTQUFTLEVBQUU7QUFBNUIsT0FsQkg7QUFtQkxJLE1BQUFBLGNBQWMsRUFBRTtBQUFFdkIsUUFBQUEsSUFBSSxFQUFFQyxLQUFSO0FBQWVrQixRQUFBQSxTQUFTLEVBQUU7QUFBMUIsT0FuQlg7QUFvQkxLLE1BQUFBLEtBQUssRUFBRTtBQUFFeEIsUUFBQUEsSUFBSSxFQUFFeUIsTUFBUjtBQUFnQk4sUUFBQUEsU0FBUyxFQUFFO0FBQTNCO0FBcEJGLEtBQVA7QUFzQkQ7O0FBRWdCLGFBQU5PLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0x4QyxJQURLLEVBRUxGLFFBRkssRUFHTEMsS0FISyxFQUlMO0FBQ0FKLElBQUFBLEdBQUcsbzZEQUxFLENBQVA7QUF1SUQ7O0FBRUQ4QyxFQUFBQSxXQUFXLEdBQUc7QUFDWjtBQUNBLFNBQUtDLEdBQUwsR0FBVyxJQUFJQyxJQUFKLEdBQVdDLE9BQVgsRUFBWDtBQUNBLFNBQUtDLFdBQUwsR0FBbUI7QUFDakJDLE1BQUFBLEtBQUssRUFBRSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWDtBQURVLEtBQW5CO0FBR0EsU0FBS1YsTUFBTCxHQUFjLEtBQWQ7QUFDQSxTQUFLbEIsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLb0IsS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLRCxjQUFMLEdBQXNCLEVBQXRCO0FBQ0EsU0FBS1IsUUFBTCxHQUFnQixFQUFoQjs7QUFDQSxTQUFLRCxTQUFMLEdBQWlCLENBQUNtQixJQUFELEVBQU9DLEtBQVAsRUFBY0MsS0FBZCxLQUF3QjtBQUN2QyxZQUFNQyxRQUFRLEdBQ1osS0FBS0MsaUJBQUwsQ0FBdUJKLElBQXZCLEVBQTZCRSxLQUE3QixLQUF1QyxLQUFLRSxpQkFBTCxDQUF1QkosSUFBdkIsRUFBNkJFLEtBQTdCLEVBQW9DRyxXQUEzRSxHQUNJLEtBQUtELGlCQUFMLENBQXVCSixJQUF2QixFQUE2QkUsS0FBN0IsRUFBb0NHLFdBQXBDLEVBREosR0FFSSxFQUhOO0FBSUEsWUFBTUMsU0FBUyxHQUNiLEtBQUtGLGlCQUFMLENBQXVCSCxLQUF2QixFQUE4QkMsS0FBOUIsS0FBd0MsS0FBS0UsaUJBQUwsQ0FBdUJILEtBQXZCLEVBQThCQyxLQUE5QixFQUFxQ0csV0FBN0UsR0FDSSxLQUFLRCxpQkFBTCxDQUF1QkgsS0FBdkIsRUFBOEJDLEtBQTlCLEVBQXFDRyxXQUFyQyxFQURKLEdBRUksRUFITjs7QUFJQSxVQUFJLEtBQUtsQyxLQUFMLENBQVdvQyxVQUFYLENBQXNCLEdBQXRCLENBQUosRUFBZ0M7QUFDOUIsZUFBT0QsU0FBUyxDQUFDRSxhQUFWLENBQXdCTCxRQUF4QixDQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsZUFBT0EsUUFBUSxDQUFDSyxhQUFULENBQXVCRixTQUF2QixDQUFQO0FBQ0Q7QUFDRixLQWREOztBQWVBLFNBQUtHLGdCQUFMLENBQXNCLHdCQUF0QixFQUFpREMsQ0FBRCxJQUFPO0FBQ3JELFdBQUtuQixLQUFMLEdBQWFtQixDQUFDLENBQUNDLE1BQUYsQ0FBU0MsSUFBdEI7QUFDRCxLQUZEO0FBR0Q7O0FBRVEsTUFBTDlDLEtBQUssQ0FBQ0EsS0FBRCxFQUFRO0FBQ2YsU0FBS3FCLFNBQUwsR0FBaUIsSUFBakI7QUFDQTBCLElBQUFBLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQmhELEtBQWhCLEVBQ0dpRCxJQURILENBQ1NqRCxLQUFELElBQVc7QUFDZixVQUFJQSxLQUFKLEVBQVc7QUFDVCxhQUFLd0IsY0FBTCxHQUFzQnhCLEtBQUssQ0FBQ2tELEdBQU4sQ0FBVSxDQUFDaEIsSUFBRCxFQUFPaUIsS0FBUCxLQUFpQjtBQUMvQ2pCLFVBQUFBLElBQUksQ0FBQ0wsR0FBTCxHQUFXSyxJQUFJLENBQUNrQixFQUFMLElBQVcsSUFBWCxHQUFrQkQsS0FBbEIsR0FBMEJqQixJQUFJLENBQUNrQixFQUExQztBQUNBLGlCQUFPbEIsSUFBUDtBQUNELFNBSHFCLENBQXRCOztBQUlBLGFBQUttQixjQUFMOztBQUNBLGFBQUs5QixNQUFMLEdBQWMsS0FBS0MsY0FBTCxDQUFvQjhCLE1BQXBCLEtBQStCLENBQTdDO0FBQ0EsYUFBS2pDLFNBQUwsR0FBaUIsS0FBakI7QUFDRDtBQUNGLEtBWEgsRUFZR2tDLEtBWkgsQ0FZVVgsQ0FBRCxJQUFPO0FBQ1pZLE1BQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFjYixDQUFkO0FBQ0EsV0FBS3RCLE1BQUwsR0FBYyxJQUFkO0FBQ0EsV0FBS0QsU0FBTCxHQUFpQixLQUFqQjtBQUNBLFdBQUtHLGNBQUwsR0FBc0IsRUFBdEI7QUFDRCxLQWpCSDtBQWtCRDs7QUFFUSxNQUFMeEIsS0FBSyxHQUFHO0FBQ1YsV0FBTyxLQUFLd0IsY0FBWjtBQUNEOztBQUVENkIsRUFBQUEsY0FBYyxDQUFDSyxLQUFELEVBQVFkLENBQVIsRUFBVztBQUN2QixRQUFJQSxDQUFKLEVBQU87QUFDTEEsTUFBQUEsQ0FBQyxDQUFDZSxjQUFGO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLbkMsY0FBTCxJQUF1QixLQUFLbkIsS0FBaEMsRUFBdUM7QUFDckMsWUFBTXVELElBQUksR0FBRyxLQUFLdkQsS0FBTCxDQUFXb0MsVUFBWCxDQUFzQixHQUF0QixDQUFiO0FBQ0EsWUFBTW9CLGFBQWEsR0FBR0QsSUFBSSxHQUFHLEtBQUt2RCxLQUFMLENBQVd5RCxTQUFYLENBQXFCLENBQXJCLENBQUgsR0FBNkIsS0FBS3pELEtBQTVEO0FBQ0EsWUFBTStCLEtBQUssR0FBR3NCLEtBQUssSUFBSUcsYUFBdkI7O0FBQ0EsVUFBSUgsS0FBSixFQUFXO0FBQ1QsYUFBS3JELEtBQUwsR0FBYXdELGFBQWEsS0FBS3pCLEtBQWxCLEdBQTJCd0IsSUFBSSxHQUFHeEIsS0FBSCxHQUFXLE1BQU1BLEtBQWhELEdBQXlEQSxLQUF0RTtBQUNEOztBQUNELFdBQUtaLGNBQUwsR0FBc0IsS0FBS0EsY0FBTCxDQUFvQnVDLElBQXBCLENBQXlCLENBQUM3QixJQUFELEVBQU9DLEtBQVAsS0FBaUIsS0FBS3BCLFNBQUwsQ0FBZW1CLElBQWYsRUFBcUJDLEtBQXJCLEVBQTRCQyxLQUE1QixDQUExQyxDQUF0Qjs7QUFDQSxVQUFJc0IsS0FBSixFQUFXO0FBQ1RwRSxRQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlO0FBQUVlLFVBQUFBLEtBQUssRUFBRSxLQUFLQTtBQUFkLFNBQWYsQ0FBbkI7QUFDRDtBQUNGO0FBQ0Y7O0FBRVMsTUFBTmMsTUFBTSxHQUFHO0FBQ1gsUUFBSSxLQUFLSyxjQUFULEVBQXlCO0FBQ3ZCLFVBQUksS0FBS2xCLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhMEQsTUFBN0IsSUFBdUMsS0FBSzFELE9BQUwsQ0FBYTBELE1BQWIsR0FBc0IsS0FBS3hDLGNBQUwsQ0FBb0I4QixNQUFyRixFQUE2RjtBQUMzRixjQUFNSCxLQUFLLEdBQUcsQ0FBQyxLQUFLMUIsS0FBTCxHQUFhLENBQWQsSUFBbUIsS0FBS25CLE9BQUwsQ0FBYTBELE1BQTlDO0FBQ0EsZUFBTyxDQUFDLEdBQUcsS0FBS3hDLGNBQVQsRUFBeUJ5QyxNQUF6QixDQUFnQ2QsS0FBaEMsRUFBdUMsS0FBSzdDLE9BQUwsQ0FBYTBELE1BQXBELENBQVA7QUFDRDs7QUFDRCxhQUFPLEtBQUt4QyxjQUFaO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQwQyxFQUFBQSxVQUFVLENBQUNoQyxJQUFELEVBQU87QUFDZixXQUFPQSxJQUFJLENBQUNrQixFQUFMLElBQVcsSUFBWCxHQUFrQmxCLElBQUksQ0FBQ0wsR0FBdkIsR0FBNkJLLElBQUksQ0FBQ2tCLEVBQXpDO0FBQ0Q7O0FBRURlLEVBQUFBLFNBQVMsQ0FBQ2pDLElBQUQsRUFBT2tDLEtBQVAsRUFBYztBQUNyQixRQUFJLENBQUMsS0FBSy9DLFNBQU4sSUFBbUIsQ0FBQytDLEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxPQUFiLENBQXFCQyxhQUE3QyxFQUE0RDtBQUMxRCxVQUFJLEtBQUtqRSxPQUFMLENBQWFrRSxVQUFqQixFQUE2QjtBQUMzQixjQUFNQyxNQUFNLEdBQUcsS0FBS1AsVUFBTCxDQUFnQmhDLElBQWhCLENBQWY7O0FBQ0EsWUFBSSxLQUFLd0MsV0FBTCxDQUFpQnhDLElBQWpCLENBQUosRUFBNEI7QUFDMUIsZUFBS2xCLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjMkQsTUFBZCxDQUFzQnZCLEVBQUQsSUFBUXFCLE1BQU0sS0FBS3JCLEVBQXhDLENBQWhCO0FBQ0QsU0FGRCxNQUVPLElBQUksS0FBSzlDLE9BQUwsQ0FBYWtFLFVBQWIsS0FBNEIsT0FBaEMsRUFBeUM7QUFDOUMsZUFBS3hELFFBQUwsR0FBZ0IsQ0FBQyxHQUFHLEtBQUtBLFFBQVQsRUFBbUJ5RCxNQUFuQixDQUFoQjtBQUNELFNBRk0sTUFFQTtBQUNMLGVBQUt6RCxRQUFMLEdBQWdCLENBQUN5RCxNQUFELENBQWhCO0FBQ0Q7O0FBQ0RuRixRQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sUUFBUCxFQUFpQjtBQUFFVSxVQUFBQSxLQUFLLEVBQUUsS0FBSzRFLGFBQWQ7QUFBNkJ0RSxVQUFBQSxPQUFPLEVBQUUsS0FBS0E7QUFBM0MsU0FBakIsQ0FBbkI7QUFDRCxPQVZELE1BVU87QUFDTGhCLFFBQUFBLG1CQUFtQixDQUFDLElBQUQsRUFBTyxRQUFQLEVBQWlCO0FBQUVVLFVBQUFBLEtBQUssRUFBRSxDQUFDa0MsSUFBRDtBQUFULFNBQWpCLENBQW5CO0FBQ0Q7QUFDRjtBQUNGOztBQUVnQixNQUFiMEMsYUFBYSxHQUFHO0FBQ2xCLFFBQUksS0FBSzVELFFBQUwsSUFBaUIsS0FBS1EsY0FBMUIsRUFBMEM7QUFDeEMsYUFBTyxLQUFLQSxjQUFMLENBQW9CbUQsTUFBcEIsQ0FBNEJ6QyxJQUFELElBQVUsS0FBS2xCLFFBQUwsSUFBaUIsS0FBS0EsUUFBTCxDQUFjNkQsUUFBZCxDQUF1QixLQUFLWCxVQUFMLENBQWdCaEMsSUFBaEIsQ0FBdkIsQ0FBdEQsQ0FBUDtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNEOztBQUVENEMsRUFBQUEsYUFBYSxDQUFDNUMsSUFBRCxFQUFPO0FBQ2xCLFFBQUksRUFBRSxLQUFLbEIsUUFBTCxJQUFpQixLQUFLQSxRQUFMLENBQWNzQyxNQUFkLEdBQXVCLENBQTFDLEtBQWdELENBQUMsS0FBS2pDLFNBQTFELEVBQXFFO0FBQ25FL0IsTUFBQUEsbUJBQW1CLENBQUMsSUFBRCxFQUFPLFlBQVAsRUFBcUI7QUFBRTRDLFFBQUFBO0FBQUYsT0FBckIsQ0FBbkI7QUFDRDtBQUNGOztBQUVENkMsRUFBQUEsYUFBYSxHQUFHO0FBQ2QsUUFBSSxFQUFFLEtBQUsvRCxRQUFMLElBQWlCLEtBQUtBLFFBQUwsQ0FBY3NDLE1BQWQsR0FBdUIsQ0FBMUMsS0FBZ0QsQ0FBQyxLQUFLakMsU0FBMUQsRUFBcUU7QUFDbkUvQixNQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sWUFBUCxDQUFuQjtBQUNEO0FBQ0Y7O0FBRUQwRixFQUFBQSxhQUFhLENBQUNDLGdCQUFELEVBQW1CO0FBQzlCLFFBQUksS0FBSzFFLFFBQVQsRUFBbUI7QUFDakIsYUFBTyxFQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTTJFLEtBQUssR0FBRyxFQUNaLEdBQUdELGdCQURTO0FBRVosV0FBRztBQUNERSxVQUFBQSxNQUFNLEVBQUUsS0FBS3hFLFNBRFo7QUFFRCw0QkFBa0IsS0FBS0EsU0FBTCxHQUFpQixJQUFqQixHQUF3QjtBQUZ6QztBQUZTLE9BQWQ7QUFRQSxhQUFPM0IsSUFBSSxnQkFBZUksUUFBUSxDQUFDO0FBQUVnRyxRQUFBQSxPQUFPLEVBQUU7QUFBWCxPQUFELENBQXZCLFlBQW9EMUYsUUFBUSxDQUFDd0YsS0FBRCxDQUE1RCxNQUNQLEtBQUs1RSxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYStFLElBQTdCLElBQXFDLEtBQUtsRSxNQUExQyxJQUFvRCxLQUFLQSxNQUFMLENBQVltQyxNQUFoRSxHQUNFakUsTUFBTSxDQUNKLEtBQUtpQixPQUFMLENBQWErRSxJQURULEVBRUhDLE1BQUQsSUFBWUEsTUFGUixFQUdIQSxNQUFELElBQVk7QUFDVixjQUFNQyxVQUFVLEdBQUcsS0FBS2xGLEtBQUwsSUFBYyxLQUFLQSxLQUFMLENBQVdvQyxVQUFYLENBQXNCLEdBQXRCLENBQWQsR0FBMkMsS0FBS3BDLEtBQUwsQ0FBV3lELFNBQVgsQ0FBcUIsQ0FBckIsQ0FBM0MsR0FBcUUsS0FBS3pELEtBQTdGO0FBQ0EsY0FBTW1GLEtBQUssR0FBRyxLQUFLM0UsTUFBTCxJQUFleUUsTUFBTSxDQUFDRSxLQUF0QixHQUE4QixLQUFLM0UsTUFBTCxDQUFZeUUsTUFBTSxDQUFDRSxLQUFuQixDQUE5QixHQUEwREYsTUFBTSxDQUFDRSxLQUEvRTtBQUNBLGNBQU1OLEtBQUssR0FBRyxPQUFPSSxNQUFNLENBQUNHLFdBQWQsS0FBOEIsVUFBOUIsR0FBMkNILE1BQU0sQ0FBQ0csV0FBUCxDQUFtQkQsS0FBbkIsQ0FBM0MsR0FBdUVGLE1BQU0sQ0FBQ0csV0FBNUY7QUFDQSxlQUFPekcsSUFBSSxnQkFBZ0JrRyxLQUFLLElBQUksRUFBekIsTUFDUCxLQUFLN0UsS0FBTCxJQUFjLENBQUMsS0FBS0ksTUFBcEIsR0FDRXpCLElBQUksNEJBQ21CLEtBQUtxRSxjQUFMLENBQW9CcUMsSUFBcEIsQ0FBeUIsSUFBekIsRUFBK0JKLE1BQU0sQ0FBQzVCLEtBQVAsSUFBZ0I0QixNQUFNLENBQUNLLEdBQXRELENBRG5CLEtBQ2tGbEcsS0FBSyxDQUFDK0YsS0FBRCxDQUR2RixnQkFHRkQsVUFBVSxLQUFLRCxNQUFNLENBQUNLLEdBQXRCLElBQThCSixVQUFVLEtBQUtELE1BQU0sQ0FBQzVCLEtBQXRCLElBQStCNEIsTUFBTSxDQUFDckYsSUFBUCxLQUFnQixPQUE3RSxHQUNJakIsSUFBSSxvQkFBbUJJLFFBQVEsQ0FBQztBQUFFd0UsVUFBQUEsSUFBSSxFQUFFLEtBQUt2RCxLQUFMLENBQVdvQyxVQUFYLENBQXNCLEdBQXRCO0FBQVIsU0FBRCxDQUEzQixzQ0FEUixHQUVJLEVBTEYsR0FETixHQVNFaEQsS0FBSyxDQUFDK0YsS0FBRCxDQVZBLFNBQVg7QUFZRCxPQW5CRyxDQURSLEdBc0JFLEVBdkJLLFNBQVg7QUF5QkQ7QUFDRjs7QUFFREksRUFBQUEsV0FBVyxDQUFDMUQsSUFBRCxFQUFPMkQsU0FBUCxFQUFrQlAsTUFBbEIsRUFBMEI7QUFDbkMsVUFBTVEsSUFBSSxHQUFHLE9BQU9SLE1BQU0sQ0FBQ1EsSUFBZCxLQUF1QixVQUF2QixHQUFvQ1IsTUFBTSxDQUFDUSxJQUFQLENBQVk1RCxJQUFaLENBQXBDLEdBQXdEb0QsTUFBTSxDQUFDUSxJQUE1RTtBQUNBLFVBQU1DLFNBQVMsR0FBRyxPQUFPVCxNQUFNLENBQUNTLFNBQWQsS0FBNEIsVUFBNUIsR0FBeUNULE1BQU0sQ0FBQ1MsU0FBUCxDQUFpQjdELElBQWpCLENBQXpDLEdBQWtFb0QsTUFBTSxDQUFDUyxTQUEzRjs7QUFDQSxRQUFJRCxJQUFKLEVBQVU7QUFDUixhQUFPOUcsSUFBSSxvQkFBb0I4RyxJQUFwQixZQUFvQ0MsU0FBcEMsY0FBWDtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNEOztBQUVEQyxFQUFBQSxnQkFBZ0IsQ0FBQzlELElBQUQsRUFBTzJELFNBQVAsRUFBa0JQLE1BQWxCLEVBQTBCbEQsS0FBMUIsRUFBaUNuQyxJQUFqQyxFQUF1QztBQUNyRCxRQUFJcUYsTUFBTSxDQUFDVyxTQUFQLElBQW9CLENBQUNYLE1BQU0sQ0FBQ1csU0FBUCxDQUFpQi9ELElBQWpCLENBQXpCLEVBQWlEO0FBQy9DLGFBQU8sRUFBUDtBQUNEOztBQUNELFVBQU1nRSxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1Qm5HLElBQXZCLENBQWhCO0FBQ0FpRyxJQUFBQSxPQUFPLENBQUM5RCxLQUFSLEdBQWdCQSxLQUFoQjs7QUFDQSxRQUFJa0QsTUFBTSxDQUFDZSxVQUFYLEVBQXVCO0FBQ3JCQyxNQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWWpCLE1BQU0sQ0FBQ2UsVUFBbkIsRUFBK0JHLE9BQS9CLENBQXdDcEYsU0FBRCxJQUFlO0FBQ3BELFlBQUlBLFNBQVMsQ0FBQ3FCLFVBQVYsQ0FBcUIsSUFBckIsQ0FBSixFQUFnQztBQUM5QixnQkFBTTJCLEtBQUssR0FBR2hELFNBQVMsQ0FBQ3FGLE9BQVYsQ0FBa0IsSUFBbEIsRUFBd0IsRUFBeEIsRUFBNEJsRSxXQUE1QixFQUFkOztBQUNBLGNBQUk2QixLQUFLLEtBQUssT0FBZCxFQUF1QjtBQUNyQjhCLFlBQUFBLE9BQU8sQ0FBQ1EsU0FBUixDQUFrQkMsR0FBbEIsQ0FBc0IsTUFBdEI7QUFDRDs7QUFDRFQsVUFBQUEsT0FBTyxDQUFDNUIsT0FBUixDQUFnQkMsYUFBaEIsR0FBZ0MsSUFBaEM7QUFDQTJCLFVBQUFBLE9BQU8sQ0FBQ3ZELGdCQUFSLENBQXlCeUIsS0FBekIsRUFBaUN4QixDQUFELElBQU87QUFDckNBLFlBQUFBLENBQUMsQ0FBQ2dFLGVBQUY7QUFDQSxrQkFBTUMsYUFBYSxHQUFHLE9BQU92QixNQUFNLENBQUN3QixPQUFkLEtBQTBCLFVBQTFCLEdBQXVDeEIsTUFBTSxDQUFDd0IsT0FBUCxDQUFlNUUsSUFBZixDQUF2QyxHQUE4RG9ELE1BQU0sQ0FBQ3dCLE9BQTNGOztBQUNBLGdCQUFJRCxhQUFhLElBQUksSUFBckIsRUFBMkI7QUFDekJFLGNBQUFBLFVBQVUsQ0FBQyxNQUFNO0FBQ2Z6QixnQkFBQUEsTUFBTSxDQUFDZSxVQUFQLENBQWtCakYsU0FBbEIsRUFBNkJjLElBQTdCLEVBQW1DVSxDQUFuQyxFQUFzQ3NELE9BQXRDLEVBQStDLElBQS9DO0FBQ0QsZUFGUyxFQUVQLENBRk8sQ0FBVjtBQUdEO0FBQ0YsV0FSRDtBQVNELFNBZkQsTUFlTyxJQUFJLE9BQU9aLE1BQU0sQ0FBQ2UsVUFBUCxDQUFrQmpGLFNBQWxCLENBQVAsS0FBd0MsVUFBNUMsRUFBd0Q7QUFDN0QsZ0JBQU1nQixLQUFLLEdBQUdrRCxNQUFNLENBQUNlLFVBQVAsQ0FBa0JqRixTQUFsQixFQUE2QmMsSUFBN0IsQ0FBZDs7QUFDQSxjQUFJRSxLQUFLLElBQUksSUFBYixFQUFtQjtBQUNqQjhELFlBQUFBLE9BQU8sQ0FBQzlFLFNBQUQsQ0FBUCxHQUFxQmdCLEtBQXJCO0FBQ0Q7QUFDRixTQUxNLE1BS0E7QUFDTCxjQUFJLEtBQUt2QixNQUFMLElBQWUsT0FBT3lFLE1BQU0sQ0FBQ2UsVUFBUCxDQUFrQmpGLFNBQWxCLENBQVAsS0FBd0MsUUFBM0QsRUFBcUU7QUFDbkUsaUJBQUtQLE1BQUwsQ0FBWXlFLE1BQU0sQ0FBQ2UsVUFBUCxDQUFrQmpGLFNBQWxCLENBQVosRUFBMEM2QixJQUExQyxDQUFnRCtELENBQUQsSUFBTztBQUNwRGQsY0FBQUEsT0FBTyxDQUFDOUUsU0FBRCxDQUFQLEdBQXFCNEYsQ0FBckI7QUFDRCxhQUZEO0FBR0QsV0FKRCxNQUlPO0FBQ0xkLFlBQUFBLE9BQU8sQ0FBQzlFLFNBQUQsQ0FBUCxHQUFxQmtFLE1BQU0sQ0FBQ2UsVUFBUCxDQUFrQmpGLFNBQWxCLENBQXJCO0FBQ0Q7QUFDRjtBQUNGLE9BOUJEO0FBK0JEOztBQUNEOEUsSUFBQUEsT0FBTyxDQUFDdkQsZ0JBQVIsQ0FBeUIsT0FBekIsRUFBbUN5QixLQUFELElBQVc7QUFDM0MsV0FBS2pELE1BQUwsQ0FBWTBFLFNBQVosRUFBdUJQLE1BQU0sQ0FBQzVCLEtBQTlCLElBQXVDVSxLQUFLLENBQUNDLE1BQU4sQ0FBYWpDLEtBQXBEO0FBQ0QsS0FGRDtBQUlBLFVBQU15RSxhQUFhLEdBQUcsT0FBT3ZCLE1BQU0sQ0FBQ3dCLE9BQWQsS0FBMEIsVUFBMUIsR0FBdUN4QixNQUFNLENBQUN3QixPQUFQLENBQWU1RSxJQUFmLENBQXZDLEdBQThEb0QsTUFBTSxDQUFDd0IsT0FBM0Y7O0FBRUEsUUFBSUQsYUFBSixFQUFtQjtBQUNqQixZQUFNQyxPQUFPLEdBQUdYLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixZQUF2QixDQUFoQjs7QUFDQSxVQUFJLEtBQUt2RixNQUFULEVBQWlCO0FBQ2YsYUFBS0EsTUFBTCxDQUFZZ0csYUFBYSxDQUFDSSxHQUExQixFQUErQmhFLElBQS9CLENBQXFDK0QsQ0FBRCxJQUFRRixPQUFPLENBQUNJLE9BQVIsR0FBa0JGLENBQTlEO0FBQ0QsT0FGRCxNQUVPO0FBQ0xGLFFBQUFBLE9BQU8sQ0FBQ0ksT0FBUixHQUFrQkwsYUFBYSxDQUFDSSxHQUFoQztBQUNEOztBQUNELFVBQUlKLGFBQWEsQ0FBQ00sTUFBbEIsRUFBMEI7QUFDeEJMLFFBQUFBLE9BQU8sQ0FBQ0ssTUFBUixHQUFpQixJQUFqQjtBQUNEOztBQUNETCxNQUFBQSxPQUFPLENBQUNuRSxnQkFBUixDQUF5QixPQUF6QixFQUFtQ0MsQ0FBRCxJQUFPQSxDQUFDLENBQUNnRSxlQUFGLEVBQXpDO0FBQ0FFLE1BQUFBLE9BQU8sQ0FBQ25FLGdCQUFSLENBQXlCLGVBQXpCLEVBQTJDQyxDQUFELElBQU87QUFDL0NBLFFBQUFBLENBQUMsQ0FBQ2dFLGVBQUY7QUFDQXRCLFFBQUFBLE1BQU0sQ0FBQ2UsVUFBUCxDQUFrQmUsT0FBbEIsQ0FBMEJsRixJQUExQixFQUFnQ1UsQ0FBaEMsRUFBbUNzRCxPQUFuQztBQUNELE9BSEQ7QUFJQVksTUFBQUEsT0FBTyxDQUFDTyxXQUFSLENBQW9CbkIsT0FBcEI7QUFDQSxhQUFPWSxPQUFQO0FBQ0Q7O0FBQ0QsV0FBT1osT0FBUDtBQUNEOztBQUVEb0IsRUFBQUEsV0FBVyxDQUFDQyxjQUFELEVBQWlCakMsTUFBakIsRUFBeUJwRCxJQUF6QixFQUErQjJELFNBQS9CLEVBQTBDO0FBQ25ELFFBQUlQLE1BQU0sQ0FBQ3JGLElBQVgsRUFBaUI7QUFDZixVQUFJcUYsTUFBTSxDQUFDckYsSUFBUCxLQUFnQixPQUFwQixFQUE2QjtBQUMzQixZQUFJdUgsR0FBRyxHQUFHLEVBQVY7O0FBQ0EsWUFBSWxDLE1BQU0sQ0FBQ2tDLEdBQVgsRUFBZ0I7QUFDZCxjQUFJLE9BQU9sQyxNQUFNLENBQUNrQyxHQUFkLEtBQXNCLFVBQTFCLEVBQXNDO0FBQ3BDQSxZQUFBQSxHQUFHLEdBQUdsQyxNQUFNLENBQUNrQyxHQUFQLENBQVd0RixJQUFYLENBQU47QUFDRCxXQUZELE1BRU87QUFDTHNGLFlBQUFBLEdBQUcsR0FBRyxLQUFLbEYsaUJBQUwsQ0FBdUJKLElBQXZCLEVBQTZCb0QsTUFBTSxDQUFDa0MsR0FBcEMsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsZUFBTyxLQUFLQyxZQUFMLENBQWtCRixjQUFsQixFQUFrQ0MsR0FBbEMsQ0FBUDtBQUNELE9BVkQsTUFVTyxJQUFJLE9BQU9sQyxNQUFNLENBQUNyRixJQUFkLEtBQXVCLFVBQTNCLEVBQXVDO0FBQzVDLGVBQU8sS0FBSytGLGdCQUFMLENBQXNCOUQsSUFBdEIsRUFBNEIyRCxTQUE1QixFQUF1Q1AsTUFBdkMsRUFBK0NpQyxjQUEvQyxFQUErRGpDLE1BQU0sQ0FBQ3JGLElBQVAsQ0FBWWlDLElBQVosQ0FBL0QsQ0FBUDtBQUNELE9BRk0sTUFFQSxJQUFJb0QsTUFBTSxDQUFDckYsSUFBUCxDQUFZd0MsVUFBWixDQUF1QixLQUF2QixDQUFKLEVBQW1DO0FBQ3hDLGVBQU8sS0FBS3VELGdCQUFMLENBQXNCOUQsSUFBdEIsRUFBNEIyRCxTQUE1QixFQUF1Q1AsTUFBdkMsRUFBK0NpQyxjQUEvQyxFQUErRGpDLE1BQU0sQ0FBQ3JGLElBQXRFLENBQVA7QUFDRDtBQUNGOztBQUNELFdBQU9SLEtBQUssQ0FBQzhILGNBQUQsQ0FBWjtBQUNEOztBQUVERyxFQUFBQSxzQkFBc0IsQ0FBQ3BDLE1BQUQsRUFBU3BELElBQVQsRUFBZTtBQUNuQyxRQUFJRSxLQUFLLEdBQUdrRCxNQUFNLENBQUM1QixLQUFQLEdBQWUsS0FBS3BCLGlCQUFMLENBQXVCSixJQUF2QixFQUE2Qm9ELE1BQU0sQ0FBQzVCLEtBQXBDLENBQWYsR0FBNEQsRUFBeEU7O0FBRUEsUUFBSXRCLEtBQUosRUFBVztBQUNULFVBQUlrRCxNQUFNLENBQUNyRixJQUFQLEtBQWdCLE1BQXBCLEVBQTRCO0FBQzFCbUMsUUFBQUEsS0FBSyxHQUFHLElBQUlOLElBQUosQ0FBU00sS0FBVCxFQUFnQnVGLGtCQUFoQixDQUFtQ3BJLFdBQVcsRUFBOUMsQ0FBUjtBQUNELE9BRkQsTUFFTyxJQUFJK0YsTUFBTSxDQUFDckYsSUFBUCxLQUFnQixVQUFwQixFQUFnQztBQUNyQ21DLFFBQUFBLEtBQUssR0FBRyxJQUFJTixJQUFKLENBQVNNLEtBQVQsRUFBZ0J3RixjQUFoQixDQUErQnJJLFdBQVcsRUFBMUMsQ0FBUjtBQUNELE9BRk0sTUFFQSxJQUFJK0YsTUFBTSxDQUFDckYsSUFBUCxLQUFnQixNQUFwQixFQUE0QjtBQUNqQ21DLFFBQUFBLEtBQUssR0FBRyxJQUFJTixJQUFKLENBQVNNLEtBQVQsRUFBZ0J5RixrQkFBaEIsQ0FBbUN0SSxXQUFXLEVBQTlDLENBQVI7QUFDRDtBQUNGOztBQUVELFFBQUkrRixNQUFNLENBQUN6RSxNQUFYLEVBQW1CO0FBQ2pCdUIsTUFBQUEsS0FBSyxHQUFHa0QsTUFBTSxDQUFDekUsTUFBUCxDQUFjdUIsS0FBZCxDQUFSO0FBQ0Q7O0FBRUQsV0FBT0EsS0FBUDtBQUNEOztBQUVEc0MsRUFBQUEsV0FBVyxDQUFDeEMsSUFBRCxFQUFPO0FBQ2hCLFdBQU8sS0FBS2xCLFFBQUwsSUFBaUIsS0FBS0EsUUFBTCxDQUFjNkQsUUFBZCxDQUF1QixLQUFLWCxVQUFMLENBQWdCaEMsSUFBaEIsQ0FBdkIsQ0FBeEI7QUFDRDs7QUFFRDRGLEVBQUFBLFdBQVcsQ0FBQzdDLGdCQUFELEVBQW1CO0FBQzVCLFdBQU9qRyxJQUFJLDZCQUVEVSxRQUFRLENBQUM7QUFBRXlGLE1BQUFBLE1BQU0sRUFBRSxLQUFLekUsVUFBZjtBQUEyQixxQkFBZSxLQUFLSixPQUFMLENBQWFrRSxVQUFiLEdBQTBCLE1BQTFCLEdBQW1DO0FBQTdFLEtBQUQsQ0FGUCxrQkFHTSxLQUFLTyxhQUFMLENBQW1CVyxJQUFuQixDQUF3QixJQUF4QixDQUhOLE1BS1AsS0FBS3ZFLE1BQUwsSUFBZSxLQUFLQSxNQUFMLENBQVltQyxNQUEzQixHQUNFakUsTUFBTSxDQUNKLEtBQUs4QixNQURELEVBRUhlLElBQUQsSUFBVUEsSUFGTixFQUdKLENBQUNBLElBQUQsRUFBTzJELFNBQVAsS0FBcUI7QUFDbkIsYUFBTzdHLElBQUksZ0JBQ0ZJLFFBQVEsQ0FBQztBQUNwQjJJLFFBQUFBLEdBQUcsRUFBRSxJQURlO0FBRXBCOUksUUFBQUEsUUFBUSxFQUFFLEtBQUtvQyxTQUZLO0FBR3BCTCxRQUFBQSxRQUFRLEVBQUUsS0FBSzBELFdBQUwsQ0FBaUJ4QyxJQUFqQjtBQUhVLE9BQUQsQ0FETixZQUtIeEMsUUFBUSxDQUFDLEVBQ2YsR0FBR3VGLGdCQURZO0FBRWYsV0FBRztBQUNERSxVQUFBQSxNQUFNLEVBQUUsS0FBS3hFLFNBRFo7QUFFRCw0QkFBa0IsS0FBS0EsU0FBTCxHQUFpQixJQUFqQixHQUF3QixvQkFGekM7QUFHRHFILFVBQUFBLE1BQU0sRUFBRSxLQUFLMUgsT0FBTCxDQUFha0UsVUFBYixHQUEwQixTQUExQixHQUFzQyxFQUg3QztBQUlELDBCQUFnQixLQUFLbEUsT0FBTCxDQUFha0UsVUFBYixJQUEyQixLQUFLRSxXQUFMLENBQWlCeEMsSUFBakIsQ0FBM0IsR0FBb0Qsc0JBQXBELEdBQTZFLEVBSjVGO0FBS0Qsd0JBQWM7QUFMYjtBQUZZLE9BQUQsQ0FMTCxhQWVILEtBQUtpQyxTQUFMLENBQWV1QixJQUFmLENBQW9CLElBQXBCLEVBQTBCeEQsSUFBMUIsQ0FmRyxrQkFnQkUsS0FBSzRDLGFBQUwsQ0FBbUJZLElBQW5CLENBQXdCLElBQXhCLEVBQThCeEQsSUFBOUIsQ0FoQkYsTUFrQlgsS0FBSzVCLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhK0UsSUFBN0IsR0FDSWhHLE1BQU0sQ0FDSixLQUFLaUIsT0FBTCxDQUFhK0UsSUFEVCxFQUVIQyxNQUFELElBQVlBLE1BRlIsRUFHSEEsTUFBRCxJQUFZO0FBQ1YsY0FBTUosS0FBSyxHQUFHLE9BQU9JLE1BQU0sQ0FBQ0osS0FBZCxLQUF3QixVQUF4QixHQUFxQ0ksTUFBTSxDQUFDSixLQUFQLENBQWFoRCxJQUFiLENBQXJDLEdBQTBEb0QsTUFBTSxDQUFDSixLQUEvRTs7QUFDQSxjQUFNcUMsY0FBYyxHQUFHLEtBQUtHLHNCQUFMLENBQTRCcEMsTUFBNUIsRUFBb0NwRCxJQUFwQyxDQUF2Qjs7QUFDQSxlQUFPbEQsSUFBSSw0QkFBNEJZLFNBQVMsQ0FBQ3NGLEtBQUQsQ0FBckMsWUFBd0RxQyxjQUF4RCxNQUNQLEtBQUtELFdBQUwsQ0FBaUJDLGNBQWpCLEVBQWlDakMsTUFBakMsRUFBeUNwRCxJQUF6QyxFQUErQzJELFNBQS9DLENBRE8sR0FDcUQsS0FBS29DLFVBQUwsQ0FBZ0IzQyxNQUFoQixFQUF3QnBELElBQXhCLENBRHJELEdBQ3FGb0QsTUFBTSxDQUFDUSxJQUFQLEdBQzFGLEtBQUtGLFdBQUwsQ0FBaUIxRCxJQUFqQixFQUF1QjJELFNBQXZCLEVBQWtDUCxNQUFsQyxDQUQwRixHQUUxRixFQUhLLFVBQVg7QUFLRCxPQVhHLENBRFYsR0FjSSxFQWhDTyxVQUFYO0FBb0NELEtBeENHLENBRFIsR0EyQ0UsRUFoREssU0FBWDtBQWtERDs7QUFFRDRDLEVBQUFBLFlBQVksR0FBRztBQUNiLFFBQUlDLGFBQWEsR0FBRyxLQUFLN0gsT0FBTCxDQUFhK0UsSUFBYixDQUFrQm5DLEdBQWxCLENBQXVCa0YsQ0FBRCxJQUFPO0FBQy9DLFVBQUlBLENBQUMsQ0FBQ25HLEtBQU4sRUFBYTtBQUNYLGVBQU9tRyxDQUFDLENBQUNuRyxLQUFUO0FBQ0QsT0FGRCxNQUVPLElBQUltRyxDQUFDLENBQUNuSSxJQUFGLEtBQVcsT0FBZixFQUF3QjtBQUM3QixlQUFPLE1BQVA7QUFDRCxPQUZNLE1BRUEsSUFBSW1JLENBQUMsQ0FBQ25JLElBQUYsS0FBVyxNQUFmLEVBQXVCO0FBQzVCLGVBQU8sTUFBUDtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNELEtBVG1CLENBQXBCO0FBVUEsVUFBTW9JLFNBQVMsR0FBR0YsYUFBYSxDQUFDeEQsTUFBZCxDQUFzQjFDLEtBQUQsSUFBV0EsS0FBSyxLQUFLLElBQTFDLENBQWxCO0FBQ0EsVUFBTXFHLFVBQVUsR0FBR0QsU0FBUyxDQUFDRSxNQUFWLENBQWlCLENBQUNDLEdBQUQsRUFBTXZHLEtBQU4sS0FBZ0I7QUFDbEQsYUFBT3VHLEdBQUcsR0FBR0MsUUFBUSxDQUFDeEcsS0FBSyxDQUFDd0UsT0FBTixDQUFjLElBQWQsRUFBb0IsRUFBcEIsQ0FBRCxFQUEwQixFQUExQixDQUFyQjtBQUNELEtBRmtCLEVBRWhCLENBRmdCLENBQW5CO0FBSUEwQixJQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ2pGLEdBQWQsQ0FBbUJqQixLQUFELElBQVc7QUFDM0MsVUFBSUEsS0FBSyxJQUFJLElBQWIsRUFBbUI7QUFDakIsY0FBTXlHLFNBQVMsR0FBRzdJLFNBQVMsQ0FBQyxJQUFELEVBQU8sbUJBQVAsRUFBNEIsUUFBNUIsQ0FBM0I7QUFDQSxlQUFRLGtCQUFpQnlJLFVBQVcsUUFBTyxLQUFLaEksT0FBTCxDQUFhK0UsSUFBYixDQUFrQi9CLE1BQWxCLEdBQTJCLENBQUUsTUFBS29GLFNBQVUsVUFDckYsS0FBS3BJLE9BQUwsQ0FBYStFLElBQWIsQ0FBa0IvQixNQUFsQixHQUEyQitFLFNBQVMsQ0FBQy9FLE1BQ3RDLEdBRkQ7QUFHRDs7QUFDRCxhQUFPckIsS0FBUDtBQUNELEtBUmUsQ0FBaEI7QUFVQSxVQUFNZ0QsZ0JBQWdCLEdBQUc7QUFBRSwrQkFBeUJrRCxhQUFhLENBQUNRLElBQWQsQ0FBbUIsR0FBbkI7QUFBM0IsS0FBekI7QUFDQSxXQUFPM0osSUFBSSxJQUFJLEtBQUtnRyxhQUFMLENBQW1CQyxnQkFBbkIsQ0FBSixJQUE0QyxLQUFLNkMsV0FBTCxDQUFpQjdDLGdCQUFqQixDQUE1QyxJQUFrRixLQUFLMkQsaUJBQUwsRUFBbEYsR0FBWDtBQUNEOztBQUVEQSxFQUFBQSxpQkFBaUIsR0FBRztBQUNsQixRQUFJLEtBQUt0SSxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYTBELE1BQTdCLElBQXVDLEtBQUt4QyxjQUFoRCxFQUFnRTtBQUM5RCxZQUFNcUgsY0FBYyxHQUFHO0FBQ3JCQyxRQUFBQSxLQUFLLEVBQUUsQ0FEYztBQUVyQkMsUUFBQUEsSUFBSSxFQUFFLEtBQUt2SCxjQUFMLENBQW9COEIsTUFBcEIsR0FBNkIsS0FBS2hELE9BQUwsQ0FBYTBELE1BRjNCO0FBR3JCOUMsUUFBQUEsS0FBSyxFQUFFLEtBQUtNLGNBQUwsQ0FBb0I4QixNQUhOO0FBSXJCMEYsUUFBQUEsWUFBWSxFQUFFLEtBQUt2SCxLQUpFO0FBS3JCd0gsUUFBQUEsV0FBVyxFQUFFLEtBQUt6SCxjQUFMLENBQW9COEIsTUFBcEIsR0FBNkIsS0FBS2hELE9BQUwsQ0FBYTBEO0FBTGxDLE9BQXZCO0FBT0EsYUFBT2hGLElBQUkseUJBQXlCNkosY0FBekIsa0NBQVg7QUFDRDtBQUNGOztBQUVEdkcsRUFBQUEsaUJBQWlCLENBQUNKLElBQUQsRUFBT3dCLEtBQVAsRUFBYztBQUM3QixRQUFJLE9BQU9BLEtBQVAsS0FBaUIsVUFBckIsRUFBaUM7QUFDL0IsYUFBT0EsS0FBSyxDQUFDeEIsSUFBRCxDQUFaO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsYUFBT3dCLEtBQUssQ0FBQ3dGLEtBQU4sQ0FBWSxHQUFaLEVBQWlCWCxNQUFqQixDQUF3QixDQUFDWSxDQUFELEVBQUlDLENBQUosS0FBVUQsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLENBQUQsQ0FBeEMsRUFBNkNsSCxJQUE3QyxDQUFQO0FBQ0Q7QUFDRjs7QUFFRCtGLEVBQUFBLFVBQVUsQ0FBQzNDLE1BQUQsRUFBU3BELElBQVQsRUFBZTtBQUN2QixRQUFJb0QsTUFBTSxDQUFDSyxHQUFYLEVBQWdCO0FBQ2QsVUFBSUEsR0FBSjs7QUFDQSxVQUFJLE9BQU9MLE1BQU0sQ0FBQ0ssR0FBZCxLQUFzQixVQUExQixFQUFzQztBQUNwQ0EsUUFBQUEsR0FBRyxHQUFHTCxNQUFNLENBQUNLLEdBQVAsQ0FBV3pELElBQVgsQ0FBTjtBQUNELE9BRkQsTUFFTztBQUNMeUQsUUFBQUEsR0FBRyxHQUFHTCxNQUFNLENBQUN6RSxNQUFQLEdBQWdCeUUsTUFBTSxDQUFDekUsTUFBUCxDQUFjLEtBQUt5QixpQkFBTCxDQUF1QkosSUFBdkIsRUFBNkJvRCxNQUFNLENBQUNLLEdBQXBDLENBQWQsQ0FBaEIsR0FBMEUsS0FBS3JELGlCQUFMLENBQXVCSixJQUF2QixFQUE2Qm9ELE1BQU0sQ0FBQ0ssR0FBcEMsQ0FBaEY7QUFDRDs7QUFDRCxVQUFJQSxHQUFKLEVBQVM7QUFDUCxlQUFPM0csSUFBSSx1QkFBdUIsS0FBS3FDLFNBQTVCLEtBQTBDc0UsR0FBMUMsV0FBWDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQwRCxFQUFBQSxjQUFjLEdBQUc7QUFDZixTQUFLaEksU0FBTCxHQUFpQixLQUFqQjtBQUNEOztBQUVEb0csRUFBQUEsWUFBWSxDQUFDNkIsT0FBRCxFQUFVOUIsR0FBVixFQUFlO0FBQ3pCLFdBQU94SSxJQUFJLGtDQUFrQ3NLLE9BQWxDLG9CQUE2RDlCLEdBQTdELDBCQUFYO0FBQ0Q7O0FBRUQrQixFQUFBQSxPQUFPLENBQUNDLEtBQUQsRUFBUTtBQUNiLFNBQUtuRyxjQUFMO0FBQ0Q7O0FBRURvRyxFQUFBQSxNQUFNLEdBQUc7QUFDUCxRQUFJLEtBQUtuSSxNQUFULEVBQWlCO0FBQ2YsYUFBT3RDLElBQUksc0JBQXNCUSxJQUFJLENBQUMsZ0JBQUQsQ0FBMUIsUUFBWDtBQUNEOztBQUVELFVBQU1rSyxPQUFPLEdBQUc7QUFDZEMsTUFBQUEsS0FBSyxFQUFFLElBRE87QUFFZDFLLE1BQUFBLFFBQVEsRUFBRSxLQUFLb0MsU0FBTCxJQUFrQixLQUFLcEM7QUFGbkIsS0FBaEI7QUFLQSxVQUFNMkssVUFBVSxHQUFHO0FBQ2pCekUsTUFBQUEsTUFBTSxFQUFFLEtBQUt6RSxVQUFMLEdBQWtCLEtBQUtBLFVBQXZCLEdBQW9DO0FBRDNCLEtBQW5CO0FBSUEsV0FBTzFCLElBQUksZ0JBQ0lJLFFBQVEsQ0FBQ3NLLE9BQUQsQ0FEWixZQUNnQ2hLLFFBQVEsQ0FBQztBQUFFbUssTUFBQUEsT0FBTyxFQUFFLEtBQUtuSixVQUFMLEdBQWtCLE9BQWxCLEdBQTRCO0FBQXZDLEtBQUQsQ0FEeEMsTUFFTCxLQUFLUCxLQUFMLEdBQ0VuQixJQUFJLDRDQUVFLEtBQUttQixLQUZQLElBRWdCLENBQUMsS0FBS29CLE1BQU4sR0FBZXZDLElBQUksVUFBVSxLQUFLa0MsS0FBTCxJQUFlLEtBQUtDLE1BQUwsSUFBZSxLQUFLQSxNQUFMLENBQVltQyxNQUFwRCxVQUFuQixHQUEyRixFQUYzRyxlQUROLEdBTUUsRUFSRyxJQVNMLENBQUMsS0FBSy9CLE1BQU4sSUFBZ0IsS0FBS2pCLE9BQXJCLElBQWdDLEtBQUtBLE9BQUwsQ0FBYStFLElBQTdDLEdBQ0UsS0FBSzZDLFlBQUwsRUFERixHQUVFbEosSUFBSSw4QkFBOEJVLFFBQVEsQ0FBQ2tLLFVBQUQsQ0FBdEMsTUFDQSxLQUFLaEosWUFBTCxHQUFvQixLQUFLQSxZQUF6QixHQUF3Q3BCLElBQUksQ0FBQyxnQkFBRCxDQUQ1QyxTQVhELFVBQVg7QUFnQkQ7O0FBcG1CeUQ7QUF1bUI1RHNLLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsVUFBN0IsRUFBeUNsSyxPQUF6QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgc2tlbGV0b24gfSBmcm9tICcuLi9zdHlsZXMvc2tlbGV0b24nO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9zdHlsZXMvZW1wdHknO1xuaW1wb3J0IHsgbGluayB9IGZyb20gJy4uL3N0eWxlcy9saW5rJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRMYW5ndWFnZSwgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAnO1xuaW1wb3J0IHsgd2l0aFJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vbWl4aW5zL3dpdGgtcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pbWFnZSc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1wYWdpbmF0aW9uJztcbmltcG9ydCB7IGdldENzc1ZhciB9IGZyb20gJy4uL2xpYi9zdHlsZSc7XG5cbi8qKlxuICogVGFibGUgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGZpcmVzIGd2LXRhYmxlOnNlbGVjdCAtIHdoZW4gdGFibGUgcm93IGlzIHNlbGVjdGVkXG4gKiBAZmlyZXMgZ3YtdGFibGU6bW91c2VlbnRlciAtIHdoZW4gdGhlIHBvaW50ZXIgaXMgZW50ZXJpbmcgb24gYSB0YWJsZSByb3dcbiAqIEBmaXJlcyBndi10YWJsZTptb3VzZWxlYXZlIC0gd2hlbiB0aGUgcG9pbnRlciBpcyBsZWF2aW5nIGEgdGFibGUgcm93XG4gKiBAZmlyZXMgZ3YtdGFibGU6c29ydCAtIHdoZW4gdGhlIG9yZGVyIGlzIGNoYW5nZWRcbiAqXG4gKiBAYXR0ciB7QXJyYXk8YW55Pn0gaXRlbXMgLSBBIGxpc3Qgb2YgaXRlbXMgdG8gZGlzcGxheVxuICogQGF0dHIge1N0cmluZ30gdGl0bGUgLSBBIHRpdGxlIHRvIGRpc3BsYXlcbiAqIEBhdHRyIHtTdHJpbmd9IG9yZGVyIC0gSWYgZGVmaW5lZCwgdGhlIHRhYmxlIHdpbGwgYmUgb3JkZXJlZCBieSB0aGUgZmllbGQuIFN0YXJ0IHdpdGggJy0nIHRvIHNvcnQgaW4gZGVzY1xuICogQGF0dHIge0FycmF5PGFueT59IG9wdGlvbnMgLSBUaGUgbGlzdCBvZiBvcHRpb25zIHRvIGRpc3BsYXlcbiAqIEBhdHRyIHtCb29sZWFufSBub2hlYWRlciAtIFVzZWQgdG8gaGlkZSB0aGUgdGFibGUgaGVhZGVyXG4gKiBAYXR0ciB7Qm9vbGVhbn0gbm9zb3J0IC0gVXNlZCB0byBkaXNhYmxlIHRoZSBjbGljayBvbiBoZWFkZXIgdG8gc29ydFxuICogQGF0dHIge1N0cmluZ30gcm93c2hlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRhYmxlIHJvd3NcbiAqIEBhdHRyIHtTdHJpbmd9IHJvd2hlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRhYmxlIHNpbmdsZSByb3dcbiAqIEBhdHRyIHtTdHJpbmd9IGVtcHR5bWVzc2FnZSAtIFRoZSBlbXB0eSBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBhdHRyIHtGdW5jdGlvbn0gZm9ybWF0IC0gQSBmdW5jdGlvbiB0byBmb3JtYXQgdGFibGUgaGVhZGVycyBhbmQgc3RyaW5nIGNlbGxzXG4gKiBAYXR0ciB7RnVuY3Rpb259IGNvbXBhcmVGbiAtIEEgZnVuY3Rpb24gdG8gZGVmaW5lIGhvdyB0byBzb3J0LiBEZWZhdWx0IGZ1bmN0aW9uIHdpbGwgc29ydCBzZWxlY3RlZCBmaWVsZCBpZ25vcmluZyBjYXNlXG4gKiBAYXR0ciB7QXJyYXk8YW55Pn0gc2VsZWN0ZWQgLSBBIGxpc3Qgb2Ygc2VsZWN0ZWQgaWRzIG9mIHRoZSBpdGVtcyBkaXNwbGF5ZWRcbiAqIEBhdHRyIHtTdHJpbmd9IHRvdGFsIC0gVG90YWwgb2YgZGF0YSBkaXNwbGF5ZWQgb24gdGhlIHRhYmxlICh1c2VmdWwgd2l0aCBpbiBjYXNlIG9mIHBhZ2luYXRpb24pXG4gKiBAYXR0ciB7Qm9vbGVhbn0gc2tlbGV0b24gLSBGb3JjZSBndi10YWJsZSB0byBiZSBpbiBza2VsZXRvbiBtb2RlXG4gKlxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi10YWJsZS1zZWxlY3RlZC0tYmdjPXZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KV0gLSBTZWxlY3RlZCBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXRhYmxlLWhvdmVyLS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVyLCAjZmFmYWZhKV0gLSBSb3cgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi10YWJsZS0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtdGFibGUtLWJkYz12YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpXSAtIEJvcmRlciBjb2xvclxuICogQGNzc3Byb3Age1N0cmluZ30gWy0tZ3YtdGFibGUtaGVhZGVyLS1mej12YXIoLS1ndi10aGVtZS1mb250LXNpemUtbCwgMjBweCldIC0gVGl0bGUgZm9udCBzaXplXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi10YWJsZS1oZWFkZXItLXA9MnJlbSA0cmVtXSAtIFRpdGxlIHBhZGRpbmdcbiAqIEBjc3Nwcm9wIHtTdHJpbmd9IFstLWd2LXRhYmxlLXJvd3MtLW92PWF1dG9dIC0gT3ZlcmZsb3cgb24gdGFibGVcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXRhYmxlLS1jb2xtZz0wLjJyZW1dIC0gQ29sdW1uIGdhcFxuICogQGNzc3Byb3Age1N0cmluZ30gWy0tZ3YtdGFibGUtcm93LS1haT1jZW50ZXJdIC0gUm93IGFsaWduLWl0ZW1zXG4gKiBAY3NzcHJvcCB7U3RyaW5nfSBbLS1ndi10YWJsZS1yb3ctLWFjPWNlbnRlcl0gLSBSb3cgYWxpZ24tY29udGVudFxuICogQGNzc3Byb3Age1N0cmluZ30gWy0tZ3YtdGFibGUtY2VsbC0tZD1mbGV4XSAtIENlbGwgZGlzcGxheVxuICovXG5leHBvcnQgY2xhc3MgR3ZUYWJsZSBleHRlbmRzIHdpdGhSZXNpemVPYnNlcnZlcihMaXRFbGVtZW50KSB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgb3JkZXI6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBvcHRpb25zOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBub2hlYWRlcjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBub3NvcnQ6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcm93c2hlaWdodDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHJvd2hlaWdodDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGVtcHR5bWVzc2FnZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGZvcm1hdDogeyB0eXBlOiBGdW5jdGlvbiB9LFxuICAgICAgY29tcGFyZUZuOiB7IHR5cGU6IEZ1bmN0aW9uIH0sXG4gICAgICBzZWxlY3RlZDogeyB0eXBlOiBBcnJheSwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgdG90YWw6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBza2VsZXRvbjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBfaXRlbXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9za2VsZXRvbjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZXJyb3I6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2VtcHR5OiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9pdGVtc1Byb3ZpZGVyOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcGFnZTogeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGxpbmssXG4gICAgICBza2VsZXRvbixcbiAgICAgIGVtcHR5LFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLXNlbGVjdGVkLS1iZ2M6IHZhcigtLWd2LXRhYmxlLXNlbGVjdGVkLS1iZ2MsIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KSk7XG4gICAgICAgICAgLS1ob3Zlci1iZ2M6IHZhcigtLWd2LXRhYmxlLWhvdmVyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSkpO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi10YWJsZS0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXN0LCAjZmZmZmZmKSk7XG4gICAgICAgICAgLS1iZGM6IHZhcigtLWd2LXRhYmxlLS1iZGMsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2Q5ZDlkOSkpO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhYmxlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAucm93cyB7XG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAgICAgICBvdmVyZmxvdzogdmFyKC0tZ3YtdGFibGUtcm93cy0tb3YsIGF1dG8pO1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAyNTBtcyBlYXNlLWluLW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3dzOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFt3LWx0LTc2OF0pIC5yb3cge1xuICAgICAgICAgIGhlaWdodDogNzBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFt3LWx0LTU4MF0pIC5yb3cge1xuICAgICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFt3LWx0LTQwMF0pIC5yb3cge1xuICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aGVhZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXIpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyxcbiAgICAgICAgLnRoZWFkZXIge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiB2YXIoLS1ndi10YWJsZS1yb3ctLWFpLCBjZW50ZXIpO1xuICAgICAgICAgIGFsaWduLWNvbnRlbnQ6IHZhcigtLWd2LXRhYmxlLXJvdy0tYWMsIGNlbnRlcik7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCB0aGljayB0cmFuc3BhcmVudDtcbiAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGl2IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG5cbiAgICAgICAgLmNlbGwge1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiB2YXIoLS1ndi10YWJsZS1jZWxsLS1kLCBmbGV4KTtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdzpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAzcHggLTZweCB2YXIoLS1iZGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdzpob3ZlcixcbiAgICAgICAgLnJvdy5zZWxlY3RlZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taG92ZXItYmdjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3cuc2VsZWN0ZWQge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2VsZWN0ZWQtLWJnYyk7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iZGMpO1xuICAgICAgICAgIHBhZGRpbmc6IHZhcigtLWd2LXRhYmxlLWhlYWRlci0tcCwgMnJlbSA0cmVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10YWJsZS1oZWFkZXItLWZ6LCB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbCwgMjBweCkpO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1ndi10YWJsZS1oZWFkZXItLWZ6LCB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbCwgMjBweCkpO1xuICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSBzcGFuIHtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLXMpO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtcyk7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cblxuICAgICAgICBndi1pZGVudGl0eS1waWN0dXJlIHtcbiAgICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgICAgd2lkdGg6IDM1cHg7XG4gICAgICAgICAgLS1ndi1pbWFnZS0tb2Y6IGNvbnRhaW47XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICBndi1pY29uIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDE4cHg7XG4gICAgICAgIH1cblxuICAgICAgICBndi1pY29uLmRlc2Mge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wYWdpbmF0aW9uIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jZWxsID4gKjpub3QoZ3YtdGFnKSB7XG4gICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2lkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5icmVha3BvaW50cyA9IHtcbiAgICAgIHdpZHRoOiBbNDAwLCA1ODAsIDc2OF0sXG4gICAgfTtcbiAgICB0aGlzLl9lbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMub3JkZXIgPSAnJztcbiAgICB0aGlzLl9wYWdlID0gMTtcbiAgICB0aGlzLl9pdGVtc1Byb3ZpZGVyID0gW107XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZUZuID0gKGl0ZW0sIGl0ZW0yLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbURhdGEgPVxuICAgICAgICB0aGlzLl9nZXREYXRhRnJvbUZpZWxkKGl0ZW0sIHZhbHVlKSAmJiB0aGlzLl9nZXREYXRhRnJvbUZpZWxkKGl0ZW0sIHZhbHVlKS50b0xvd2VyQ2FzZVxuICAgICAgICAgID8gdGhpcy5fZ2V0RGF0YUZyb21GaWVsZChpdGVtLCB2YWx1ZSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogJyc7XG4gICAgICBjb25zdCBpdGVtRGF0YTIgPVxuICAgICAgICB0aGlzLl9nZXREYXRhRnJvbUZpZWxkKGl0ZW0yLCB2YWx1ZSkgJiYgdGhpcy5fZ2V0RGF0YUZyb21GaWVsZChpdGVtMiwgdmFsdWUpLnRvTG93ZXJDYXNlXG4gICAgICAgICAgPyB0aGlzLl9nZXREYXRhRnJvbUZpZWxkKGl0ZW0yLCB2YWx1ZSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogJyc7XG4gICAgICBpZiAodGhpcy5vcmRlci5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1EYXRhMi5sb2NhbGVDb21wYXJlKGl0ZW1EYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtRGF0YS5sb2NhbGVDb21wYXJlKGl0ZW1EYXRhMik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LXBhZ2luYXRpb246cGFnaW5hdGUnLCAoZSkgPT4ge1xuICAgICAgdGhpcy5fcGFnZSA9IGUuZGV0YWlsLnBhZ2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXQgaXRlbXMoaXRlbXMpIHtcbiAgICB0aGlzLl9za2VsZXRvbiA9IHRydWU7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW1zKVxuICAgICAgLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgIHRoaXMuX2l0ZW1zUHJvdmlkZXIgPSBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLl9pZCA9IGl0ZW0uaWQgPT0gbnVsbCA/IGluZGV4IDogaXRlbS5pZDtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX29uU29ydENoYW5nZWQoKTtcbiAgICAgICAgICB0aGlzLl9lbXB0eSA9IHRoaXMuX2l0ZW1zUHJvdmlkZXIubGVuZ3RoID09PSAwO1xuICAgICAgICAgIHRoaXMuX3NrZWxldG9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLl9za2VsZXRvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pdGVtc1Byb3ZpZGVyID0gW107XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQcm92aWRlcjtcbiAgfVxuXG4gIF9vblNvcnRDaGFuZ2VkKGZpZWxkLCBlKSB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2l0ZW1zUHJvdmlkZXIgJiYgdGhpcy5vcmRlcikge1xuICAgICAgY29uc3QgZGVzYyA9IHRoaXMub3JkZXIuc3RhcnRzV2l0aCgnLScpO1xuICAgICAgY29uc3QgcHJldmlvdXNPcmRlciA9IGRlc2MgPyB0aGlzLm9yZGVyLnN1YnN0cmluZygxKSA6IHRoaXMub3JkZXI7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkIHx8IHByZXZpb3VzT3JkZXI7XG4gICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgdGhpcy5vcmRlciA9IHByZXZpb3VzT3JkZXIgPT09IHZhbHVlID8gKGRlc2MgPyB2YWx1ZSA6ICctJyArIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5faXRlbXNQcm92aWRlciA9IHRoaXMuX2l0ZW1zUHJvdmlkZXIuc29ydCgoaXRlbSwgaXRlbTIpID0+IHRoaXMuY29tcGFyZUZuKGl0ZW0sIGl0ZW0yLCB2YWx1ZSkpO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NvcnQnLCB7IG9yZGVyOiB0aGlzLm9yZGVyIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBfaXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuX2l0ZW1zUHJvdmlkZXIpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhZ2luZyAmJiB0aGlzLm9wdGlvbnMucGFnaW5nIDwgdGhpcy5faXRlbXNQcm92aWRlci5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSAodGhpcy5fcGFnZSAtIDEpICogdGhpcy5vcHRpb25zLnBhZ2luZztcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9pdGVtc1Byb3ZpZGVyXS5zcGxpY2UoaW5kZXgsIHRoaXMub3B0aW9ucy5wYWdpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUHJvdmlkZXI7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIF9nZXRJdGVtSWQoaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkID09IG51bGwgPyBpdGVtLl9pZCA6IGl0ZW0uaWQ7XG4gIH1cblxuICBfb25TZWxlY3QoaXRlbSwgZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3NrZWxldG9uICYmICFldmVudC50YXJnZXQuZGF0YXNldC5wcmV2ZW50U2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUpIHtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5fZ2V0SXRlbUlkKGl0ZW0pO1xuICAgICAgICBpZiAodGhpcy5faXNTZWxlY3RlZChpdGVtKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLmZpbHRlcigoaWQpID0+IGl0ZW1JZCAhPT0gaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGVkLCBpdGVtSWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbaXRlbUlkXTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QnLCB7IGl0ZW1zOiB0aGlzLnNlbGVjdGVkSXRlbXMsIG9wdGlvbnM6IHRoaXMub3B0aW9ucyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NlbGVjdCcsIHsgaXRlbXM6IFtpdGVtXSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiB0aGlzLl9pdGVtc1Byb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXNQcm92aWRlci5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5pbmNsdWRlcyh0aGlzLl9nZXRJdGVtSWQoaXRlbSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgX29uTW91c2VFbnRlcihpdGVtKSB7XG4gICAgaWYgKCEodGhpcy5zZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApICYmICF0aGlzLl9za2VsZXRvbikge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnbW91c2VlbnRlcicsIHsgaXRlbSB9KTtcbiAgICB9XG4gIH1cblxuICBfb25Nb3VzZUxlYXZlKCkge1xuICAgIGlmICghKHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKSAmJiAhdGhpcy5fc2tlbGV0b24pIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ21vdXNlbGVhdmUnKTtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVySGVhZGVyKHN0eWxlR3JpZENvbHVtbnMpIHtcbiAgICBpZiAodGhpcy5ub2hlYWRlcikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGVHcmlkQ29sdW1ucyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGhlaWdodDogdGhpcy5yb3doZWlnaHQsXG4gICAgICAgICAgJ2dyaWQtYXV0by1yb3dzJzogdGhpcy5yb3doZWlnaHQgPyBudWxsIDogJ21pbm1heCg4MHB4LCBhdXRvKScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gaHRtbGAgPGRpdiBjbGFzcz0ke2NsYXNzTWFwKHsgdGhlYWRlcjogdHJ1ZSB9KX0gc3R5bGU9JHtzdHlsZU1hcChzdHlsZSl9PlxuICAgICAgICAke3RoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZGF0YSAmJiB0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtcy5sZW5ndGhcbiAgICAgICAgICA/IHJlcGVhdChcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRhdGEsXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbixcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyVmFsdWUgPSB0aGlzLm9yZGVyICYmIHRoaXMub3JkZXIuc3RhcnRzV2l0aCgnLScpID8gdGhpcy5vcmRlci5zdWJzdHJpbmcoMSkgOiB0aGlzLm9yZGVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5mb3JtYXQgJiYgb3B0aW9uLmxhYmVsID8gdGhpcy5mb3JtYXQob3B0aW9uLmxhYmVsKSA6IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHR5cGVvZiBvcHRpb24uaGVhZGVyU3R5bGUgPT09ICdmdW5jdGlvbicgPyBvcHRpb24uaGVhZGVyU3R5bGUobGFiZWwpIDogb3B0aW9uLmhlYWRlclN0eWxlO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8ZGl2IHN0eWxlPVwiJHtzdHlsZSB8fCAnJ31cIj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5vcmRlciAmJiAhdGhpcy5ub3NvcnRcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgIDxndi1idXR0b24gbGluayBAY2xpY2s9XCIke3RoaXMuX29uU29ydENoYW5nZWQuYmluZCh0aGlzLCBvcHRpb24uZmllbGQgfHwgb3B0aW9uLnRhZyl9XCI+JHt1bnRpbChsYWJlbCl9PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyVmFsdWUgPT09IG9wdGlvbi50YWcgfHwgKG9yZGVyVmFsdWUgPT09IG9wdGlvbi5maWVsZCAmJiBvcHRpb24udHlwZSAhPT0gJ2ltYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBodG1sYCA8Z3YtaWNvbiBjbGFzcz0ke2NsYXNzTWFwKHsgZGVzYzogdGhpcy5vcmRlci5zdGFydHNXaXRoKCctJykgfSl9IHNoYXBlPVwiZGVzaWduOnRyaWFuZ2xlXCI+PC9ndi1pY29uPmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9hPmBcbiAgICAgICAgICAgICAgICAgICAgOiB1bnRpbChsYWJlbCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6ICcnfVxuICAgICAgPC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVySWNvbihpdGVtLCBpdGVtSW5kZXgsIG9wdGlvbikge1xuICAgIGNvbnN0IGljb24gPSB0eXBlb2Ygb3B0aW9uLmljb24gPT09ICdmdW5jdGlvbicgPyBvcHRpb24uaWNvbihpdGVtKSA6IG9wdGlvbi5pY29uO1xuICAgIGNvbnN0IGljb25UaXRsZSA9IHR5cGVvZiBvcHRpb24uaWNvblRpdGxlID09PSAnZnVuY3Rpb24nID8gb3B0aW9uLmljb25UaXRsZShpdGVtKSA6IG9wdGlvbi5pY29uVGl0bGU7XG4gICAgaWYgKGljb24pIHtcbiAgICAgIHJldHVybiBodG1sYCA8Z3YtaWNvbiBzaGFwZT1cIiR7aWNvbn1cIiB0aXRsZT1cIiR7aWNvblRpdGxlfVwiPjwvZ3YtaWNvbj5gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfcmVuZGVyQ29tcG9uZW50KGl0ZW0sIGl0ZW1JbmRleCwgb3B0aW9uLCB2YWx1ZSwgdHlwZSkge1xuICAgIGlmIChvcHRpb24uY29uZGl0aW9uICYmICFvcHRpb24uY29uZGl0aW9uKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAob3B0aW9uLmF0dHJpYnV0ZXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbi5hdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBhdHRyaWJ1dGUucmVwbGFjZSgnb24nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoZXZlbnQgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGluaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50LmRhdGFzZXQucHJldmVudFNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkNvbmZpcm0gPSB0eXBlb2Ygb3B0aW9uLmNvbmZpcm0gPT09ICdmdW5jdGlvbicgPyBvcHRpb24uY29uZmlybShpdGVtKSA6IG9wdGlvbi5jb25maXJtO1xuICAgICAgICAgICAgaWYgKG9wdGlvbkNvbmZpcm0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uYXR0cmlidXRlc1thdHRyaWJ1dGVdKGl0ZW0sIGUsIGVsZW1lbnQsIHRoaXMpO1xuICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uLmF0dHJpYnV0ZXNbYXR0cmlidXRlXShpdGVtKTtcbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZWxlbWVudFthdHRyaWJ1dGVdID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmZvcm1hdCAmJiB0eXBlb2Ygb3B0aW9uLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0KG9wdGlvbi5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pLnRoZW4oKHQpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudFthdHRyaWJ1dGVdID0gdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50W2F0dHJpYnV0ZV0gPSBvcHRpb24uYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX2l0ZW1zW2l0ZW1JbmRleF1bb3B0aW9uLmZpZWxkXSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbkNvbmZpcm0gPSB0eXBlb2Ygb3B0aW9uLmNvbmZpcm0gPT09ICdmdW5jdGlvbicgPyBvcHRpb24uY29uZmlybShpdGVtKSA6IG9wdGlvbi5jb25maXJtO1xuXG4gICAgaWYgKG9wdGlvbkNvbmZpcm0pIHtcbiAgICAgIGNvbnN0IGNvbmZpcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdndi1jb25maXJtJyk7XG4gICAgICBpZiAodGhpcy5mb3JtYXQpIHtcbiAgICAgICAgdGhpcy5mb3JtYXQob3B0aW9uQ29uZmlybS5tc2cpLnRoZW4oKHQpID0+IChjb25maXJtLm1lc3NhZ2UgPSB0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25maXJtLm1lc3NhZ2UgPSBvcHRpb25Db25maXJtLm1zZztcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25Db25maXJtLmRhbmdlcikge1xuICAgICAgICBjb25maXJtLmRhbmdlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25maXJtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkpO1xuICAgICAgY29uZmlybS5hZGRFdmVudExpc3RlbmVyKCdndi1jb25maXJtOm9rJywgKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb3B0aW9uLmF0dHJpYnV0ZXMub25DbGljayhpdGVtLCBlLCBlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgICAgY29uZmlybS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjb25maXJtO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIF9yZW5kZXJDZWxsKGZvcm1hdHRlZFZhbHVlLCBvcHRpb24sIGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgIGlmIChvcHRpb24udHlwZSkge1xuICAgICAgaWYgKG9wdGlvbi50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIGxldCBhbHQgPSAnJztcbiAgICAgICAgaWYgKG9wdGlvbi5hbHQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbi5hbHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFsdCA9IG9wdGlvbi5hbHQoaXRlbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsdCA9IHRoaXMuX2dldERhdGFGcm9tRmllbGQoaXRlbSwgb3B0aW9uLmFsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJJbWFnZShmb3JtYXR0ZWRWYWx1ZSwgYWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbi50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJDb21wb25lbnQoaXRlbSwgaXRlbUluZGV4LCBvcHRpb24sIGZvcm1hdHRlZFZhbHVlLCBvcHRpb24udHlwZShpdGVtKSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbi50eXBlLnN0YXJ0c1dpdGgoJ2d2LScpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJDb21wb25lbnQoaXRlbSwgaXRlbUluZGV4LCBvcHRpb24sIGZvcm1hdHRlZFZhbHVlLCBvcHRpb24udHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bnRpbChmb3JtYXR0ZWRWYWx1ZSk7XG4gIH1cblxuICBfZ2V0Rm9ybWF0dGVkQ2VsbFZhbHVlKG9wdGlvbiwgaXRlbSkge1xuICAgIGxldCB2YWx1ZSA9IG9wdGlvbi5maWVsZCA/IHRoaXMuX2dldERhdGFGcm9tRmllbGQoaXRlbSwgb3B0aW9uLmZpZWxkKSA6ICcnO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAob3B0aW9uLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoZ2V0TGFuZ3VhZ2UoKSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpLnRvTG9jYWxlU3RyaW5nKGdldExhbmd1YWdlKCkpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb24udHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpLnRvTG9jYWxlVGltZVN0cmluZyhnZXRMYW5ndWFnZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9uLmZvcm1hdCkge1xuICAgICAgdmFsdWUgPSBvcHRpb24uZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBfaXNTZWxlY3RlZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5pbmNsdWRlcyh0aGlzLl9nZXRJdGVtSWQoaXRlbSkpO1xuICB9XG5cbiAgX3JlbmRlclJvd3Moc3R5bGVHcmlkQ29sdW1ucykge1xuICAgIHJldHVybiBodG1sYCA8ZGl2XG4gICAgICBjbGFzcz1cInJvd3NcIlxuICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7IGhlaWdodDogdGhpcy5yb3dzaGVpZ2h0LCAndXNlci1zZWxlY3QnOiB0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSA/ICdub25lJyA6ICcnIH0pfVxuICAgICAgQG1vdXNlbGVhdmU9XCIke3RoaXMuX29uTW91c2VMZWF2ZS5iaW5kKHRoaXMpfVwiXG4gICAgPlxuICAgICAgJHt0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtcy5sZW5ndGhcbiAgICAgICAgPyByZXBlYXQoXG4gICAgICAgICAgICB0aGlzLl9pdGVtcyxcbiAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLFxuICAgICAgICAgICAgKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgcm93OiB0cnVlLFxuICAgICAgICAgICAgc2tlbGV0b246IHRoaXMuX3NrZWxldG9uLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuX2lzU2VsZWN0ZWQoaXRlbSksXG4gICAgICAgICAgfSl9IHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgICAgIC4uLnN0eWxlR3JpZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnJvd2hlaWdodCxcbiAgICAgICAgICAgICAgICAgICdncmlkLWF1dG8tcm93cyc6IHRoaXMucm93aGVpZ2h0ID8gbnVsbCA6ICdtaW5tYXgoODBweCwgYXV0byknLFxuICAgICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSA/ICdwb2ludGVyJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgJ2JvcmRlci1jb2xvcic6IHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlICYmIHRoaXMuX2lzU2VsZWN0ZWQoaXRlbSkgPyAndmFyKC0tc2VsZWN0ZWQtLWJnYyknIDogJycsXG4gICAgICAgICAgICAgICAgICAnY29sdW1uLWdhcCc6ICd2YXIoLS1ndi10YWJsZS0tY29sbWcsIDAuMnJlbSknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgQGNsaWNrPVwiJHt0aGlzLl9vblNlbGVjdC5iaW5kKHRoaXMsIGl0ZW0pfVwiXG4gICAgICAgICAgICBAbW91c2VlbnRlcj1cIiR7dGhpcy5fb25Nb3VzZUVudGVyLmJpbmQodGhpcywgaXRlbSl9XCI+XG4gICAgICAgICAgICAke1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmRhdGFcbiAgICAgICAgICAgICAgICA/IHJlcGVhdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gdHlwZW9mIG9wdGlvbi5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbi5zdHlsZShpdGVtKSA6IG9wdGlvbi5zdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuX2dldEZvcm1hdHRlZENlbGxWYWx1ZShvcHRpb24sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJjZWxsXCIgc3R5bGU9XCIke2lmRGVmaW5lZChzdHlsZSl9XCIgdGl0bGU9XCIke2Zvcm1hdHRlZFZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJDZWxsKGZvcm1hdHRlZFZhbHVlLCBvcHRpb24sIGl0ZW0sIGl0ZW1JbmRleCl9JHt0aGlzLl9yZW5kZXJUYWcob3B0aW9uLCBpdGVtKX0ke29wdGlvbi5pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5fcmVuZGVySWNvbihpdGVtLCBpdGVtSW5kZXgsIG9wdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gYDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIClcbiAgICAgICAgOiAnJ31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckl0ZW1zKCkge1xuICAgIGxldCB3aWR0aFRlbXBsYXRlID0gdGhpcy5vcHRpb25zLmRhdGEubWFwKChvKSA9PiB7XG4gICAgICBpZiAoby53aWR0aCkge1xuICAgICAgICByZXR1cm4gby53aWR0aDtcbiAgICAgIH0gZWxzZSBpZiAoby50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIHJldHVybiAnODBweCc7XG4gICAgICB9IGVsc2UgaWYgKG8udHlwZSA9PT0gJ2ljb24nKSB7XG4gICAgICAgIHJldHVybiAnNDBweCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICBjb25zdCBmaXhlZERhdGEgPSB3aWR0aFRlbXBsYXRlLmZpbHRlcigod2lkdGgpID0+IHdpZHRoICE9PSBudWxsKTtcbiAgICBjb25zdCBmaXhlZFdpZHRoID0gZml4ZWREYXRhLnJlZHVjZSgoYWNjLCB3aWR0aCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYyArIHBhcnNlSW50KHdpZHRoLnJlcGxhY2UoJ3B4JywgJycpLCAxMCk7XG4gICAgfSwgMCk7XG5cbiAgICB3aWR0aFRlbXBsYXRlID0gd2lkdGhUZW1wbGF0ZS5tYXAoKHdpZHRoKSA9PiB7XG4gICAgICBpZiAod2lkdGggPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5HYXAgPSBnZXRDc3NWYXIodGhpcywgJy0tZ3YtdGFibGUtLWNvbG1nJywgJzAuMnJlbScpO1xuICAgICAgICByZXR1cm4gYGNhbGMoKDEwMCUgLSAoICR7Zml4ZWRXaWR0aH1weCArICR7dGhpcy5vcHRpb25zLmRhdGEubGVuZ3RoIC0gMX0gKiAke2NvbHVtbkdhcH0gKSApIC8gJHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0YS5sZW5ndGggLSBmaXhlZERhdGEubGVuZ3RoXG4gICAgICAgIH0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0eWxlR3JpZENvbHVtbnMgPSB7ICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiB3aWR0aFRlbXBsYXRlLmpvaW4oJyAnKSB9O1xuICAgIHJldHVybiBodG1sYCAke3RoaXMuX3JlbmRlckhlYWRlcihzdHlsZUdyaWRDb2x1bW5zKX0gJHt0aGlzLl9yZW5kZXJSb3dzKHN0eWxlR3JpZENvbHVtbnMpfSAke3RoaXMuX3JlbmRlclBhZ2luYXRpb24oKX0gYDtcbiAgfVxuXG4gIF9yZW5kZXJQYWdpbmF0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhZ2luZyAmJiB0aGlzLl9pdGVtc1Byb3ZpZGVyKSB7XG4gICAgICBjb25zdCBwYWdpbmF0aW9uRGF0YSA9IHtcbiAgICAgICAgZmlyc3Q6IDEsXG4gICAgICAgIGxhc3Q6IHRoaXMuX2l0ZW1zUHJvdmlkZXIubGVuZ3RoIC8gdGhpcy5vcHRpb25zLnBhZ2luZyxcbiAgICAgICAgdG90YWw6IHRoaXMuX2l0ZW1zUHJvdmlkZXIubGVuZ3RoLFxuICAgICAgICBjdXJyZW50X3BhZ2U6IHRoaXMuX3BhZ2UsXG4gICAgICAgIHRvdGFsX3BhZ2VzOiB0aGlzLl9pdGVtc1Byb3ZpZGVyLmxlbmd0aCAvIHRoaXMub3B0aW9ucy5wYWdpbmcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LXBhZ2luYXRpb24gLmRhdGE9XCIke3BhZ2luYXRpb25EYXRhfVwiIHdpZGdldD1cInRydWVcIj48L2d2LXBhZ2luYXRpb24+YDtcbiAgICB9XG4gIH1cblxuICBfZ2V0RGF0YUZyb21GaWVsZChpdGVtLCBmaWVsZCkge1xuICAgIGlmICh0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmaWVsZChpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChwLCBjKSA9PiBwICYmIHBbY10sIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJUYWcob3B0aW9uLCBpdGVtKSB7XG4gICAgaWYgKG9wdGlvbi50YWcpIHtcbiAgICAgIGxldCB0YWc7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi50YWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGFnID0gb3B0aW9uLnRhZyhpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZyA9IG9wdGlvbi5mb3JtYXQgPyBvcHRpb24uZm9ybWF0KHRoaXMuX2dldERhdGFGcm9tRmllbGQoaXRlbSwgb3B0aW9uLnRhZykpIDogdGhpcy5fZ2V0RGF0YUZyb21GaWVsZChpdGVtLCBvcHRpb24udGFnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgIDxndi10YWcgP3NrZWxldG9uPVwiJHt0aGlzLl9za2VsZXRvbn1cIj4ke3RhZ308L2d2LXRhZz5gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfb25JbWFnZUxvYWRlZCgpIHtcbiAgICB0aGlzLl9za2VsZXRvbiA9IGZhbHNlO1xuICB9XG5cbiAgX3JlbmRlckltYWdlKHBpY3R1cmUsIGFsdCkge1xuICAgIHJldHVybiBodG1sYDxndi1pZGVudGl0eS1waWN0dXJlIC5waWN0dXJlPVwiJHtwaWN0dXJlfVwiIC5kaXNwbGF5X25hbWU9XCIke2FsdH1cIj48L2d2LWlkZW50aXR5LXBpY3R1cmU+YDtcbiAgfVxuXG4gIHVwZGF0ZWQocHJvcHMpIHtcbiAgICB0aGlzLl9vblNvcnRDaGFuZ2VkKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj4ke2kxOG4oJ2d2LXRhYmxlLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgdGFibGU6IHRydWUsXG4gICAgICBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24gfHwgdGhpcy5za2VsZXRvbixcbiAgICB9O1xuXG4gICAgY29uc3QgZW1wdHlTdHlsZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5yb3dzaGVpZ2h0ID8gdGhpcy5yb3dzaGVpZ2h0IDogJycsXG4gICAgfTtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz0ke2NsYXNzTWFwKGNsYXNzZXMpfSBzdHlsZT1cIiR7c3R5bGVNYXAoeyBkaXNwbGF5OiB0aGlzLnJvd3NoZWlnaHQgPyAnYmxvY2snIDogJ2ZsZXgnIH0pfVwiPlxuICAgICAgICAke3RoaXMudGl0bGVcbiAgICAgICAgICA/IGh0bWxgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3RoaXMudGl0bGV9ICR7IXRoaXMuX2VtcHR5ID8gaHRtbGA8c3Bhbj4oJHt0aGlzLnRvdGFsIHx8ICh0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtcy5sZW5ndGgpfSk8L3NwYW4+YCA6ICcnfVxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogJyd9XG4gICAgICAgICR7IXRoaXMuX2VtcHR5ICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZGF0YVxuICAgICAgICAgID8gdGhpcy5fcmVuZGVySXRlbXMoKVxuICAgICAgICAgIDogaHRtbGAgPGRpdiBjbGFzcz1cImVtcHR5XCIgc3R5bGU9XCIke3N0eWxlTWFwKGVtcHR5U3R5bGUpfVwiPlxuICAgICAgICAgICAgICAke3RoaXMuZW1wdHltZXNzYWdlID8gdGhpcy5lbXB0eW1lc3NhZ2UgOiBpMThuKCdndi10YWJsZS5lbXB0eScpfVxuICAgICAgICAgICAgPC9kaXY+YH1cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtdGFibGUnLCBHdlRhYmxlKTtcbiJdfQ==
645
+ //# sourceMappingURL=gv-table.js.map