@sbb-esta/lyne-elements 0.0.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1748) hide show
  1. package/README.md +55 -0
  2. package/_index.scss +2 -0
  3. package/a11y.css +22 -0
  4. package/accordion/accordion.d.ts +41 -0
  5. package/accordion/accordion.d.ts.map +1 -0
  6. package/accordion.d.ts +2 -0
  7. package/accordion.d.ts.map +1 -0
  8. package/accordion.js +88 -0
  9. package/action-group/action-group.d.ts +45 -0
  10. package/action-group/action-group.d.ts.map +1 -0
  11. package/action-group.d.ts +2 -0
  12. package/action-group.d.ts.map +1 -0
  13. package/action-group.js +57 -0
  14. package/alert/alert/alert.d.ts +76 -0
  15. package/alert/alert/alert.d.ts.map +1 -0
  16. package/alert/alert-group/alert-group.d.ts +48 -0
  17. package/alert/alert-group/alert-group.d.ts.map +1 -0
  18. package/alert/alert-group.d.ts +2 -0
  19. package/alert/alert-group.d.ts.map +1 -0
  20. package/alert/alert-group.js +73 -0
  21. package/alert/alert.d.ts +2 -0
  22. package/alert/alert.d.ts.map +1 -0
  23. package/alert/alert.js +139 -0
  24. package/alert.d.ts +3 -0
  25. package/alert.d.ts.map +1 -0
  26. package/alert.js +2 -0
  27. package/animation.css +18 -0
  28. package/autocomplete/autocomplete.d.ts +108 -0
  29. package/autocomplete/autocomplete.d.ts.map +1 -0
  30. package/autocomplete.d.ts +2 -0
  31. package/autocomplete.d.ts.map +1 -0
  32. package/autocomplete.js +300 -0
  33. package/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
  34. package/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
  35. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
  36. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
  37. package/breadcrumb/breadcrumb-group.d.ts +2 -0
  38. package/breadcrumb/breadcrumb-group.d.ts.map +1 -0
  39. package/breadcrumb/breadcrumb-group.js +150 -0
  40. package/breadcrumb/breadcrumb.d.ts +2 -0
  41. package/breadcrumb/breadcrumb.d.ts.map +1 -0
  42. package/breadcrumb/breadcrumb.js +43 -0
  43. package/breadcrumb.d.ts +3 -0
  44. package/breadcrumb.d.ts.map +1 -0
  45. package/breadcrumb.js +2 -0
  46. package/button/button/button.d.ts +20 -0
  47. package/button/button/button.d.ts.map +1 -0
  48. package/button/button-link/button-link.d.ts +20 -0
  49. package/button/button-link/button-link.d.ts.map +1 -0
  50. package/button/button-link.d.ts +2 -0
  51. package/button/button-link.d.ts.map +1 -0
  52. package/button/button-link.js +20 -0
  53. package/button/button-static/button-static.d.ts +20 -0
  54. package/button/button-static/button-static.d.ts.map +1 -0
  55. package/button/button-static.d.ts +2 -0
  56. package/button/button-static.d.ts.map +1 -0
  57. package/button/button-static.js +20 -0
  58. package/button/button.d.ts +2 -0
  59. package/button/button.d.ts.map +1 -0
  60. package/button/button.js +20 -0
  61. package/button/common/button-common.d.ts +14 -0
  62. package/button/common/button-common.d.ts.map +1 -0
  63. package/button/common.d.ts +2 -0
  64. package/button/common.d.ts.map +1 -0
  65. package/button/common.js +42 -0
  66. package/button/mini-button/mini-button.d.ts +22 -0
  67. package/button/mini-button/mini-button.d.ts.map +1 -0
  68. package/button/mini-button.d.ts +2 -0
  69. package/button/mini-button.d.ts.map +1 -0
  70. package/button/mini-button.js +29 -0
  71. package/button/secondary-button/secondary-button.d.ts +20 -0
  72. package/button/secondary-button/secondary-button.d.ts.map +1 -0
  73. package/button/secondary-button-link/secondary-button-link.d.ts +20 -0
  74. package/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
  75. package/button/secondary-button-link.d.ts +2 -0
  76. package/button/secondary-button-link.d.ts.map +1 -0
  77. package/button/secondary-button-link.js +20 -0
  78. package/button/secondary-button-static/secondary-button-static.d.ts +20 -0
  79. package/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
  80. package/button/secondary-button-static.d.ts +2 -0
  81. package/button/secondary-button-static.d.ts.map +1 -0
  82. package/button/secondary-button-static.js +20 -0
  83. package/button/secondary-button.d.ts +2 -0
  84. package/button/secondary-button.d.ts.map +1 -0
  85. package/button/secondary-button.js +20 -0
  86. package/button/tertiary-button/tertiary-button.d.ts +20 -0
  87. package/button/tertiary-button/tertiary-button.d.ts.map +1 -0
  88. package/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
  89. package/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
  90. package/button/tertiary-button-link.d.ts +2 -0
  91. package/button/tertiary-button-link.d.ts.map +1 -0
  92. package/button/tertiary-button-link.js +20 -0
  93. package/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
  94. package/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
  95. package/button/tertiary-button-static.d.ts +2 -0
  96. package/button/tertiary-button-static.d.ts.map +1 -0
  97. package/button/tertiary-button-static.js +20 -0
  98. package/button/tertiary-button.d.ts +2 -0
  99. package/button/tertiary-button.d.ts.map +1 -0
  100. package/button/tertiary-button.js +20 -0
  101. package/button/transparent-button/transparent-button.d.ts +20 -0
  102. package/button/transparent-button/transparent-button.d.ts.map +1 -0
  103. package/button/transparent-button-link/transparent-button-link.d.ts +20 -0
  104. package/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
  105. package/button/transparent-button-link.d.ts +2 -0
  106. package/button/transparent-button-link.d.ts.map +1 -0
  107. package/button/transparent-button-link.js +20 -0
  108. package/button/transparent-button-static/transparent-button-static.d.ts +20 -0
  109. package/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
  110. package/button/transparent-button-static.d.ts +2 -0
  111. package/button/transparent-button-static.d.ts.map +1 -0
  112. package/button/transparent-button-static.js +20 -0
  113. package/button/transparent-button.d.ts +2 -0
  114. package/button/transparent-button.d.ts.map +1 -0
  115. package/button/transparent-button.js +20 -0
  116. package/button.d.ts +15 -0
  117. package/button.d.ts.map +1 -0
  118. package/button.js +14 -0
  119. package/calendar/calendar.d.ts +216 -0
  120. package/calendar/calendar.d.ts.map +1 -0
  121. package/calendar.d.ts +2 -0
  122. package/calendar.d.ts.map +1 -0
  123. package/calendar.js +826 -0
  124. package/card/card/card.d.ts +29 -0
  125. package/card/card/card.d.ts.map +1 -0
  126. package/card/card-badge/card-badge.d.ts +23 -0
  127. package/card/card-badge/card-badge.d.ts.map +1 -0
  128. package/card/card-badge.d.ts +2 -0
  129. package/card/card-badge.d.ts.map +1 -0
  130. package/card/card-badge.js +48 -0
  131. package/card/card-button/card-button.d.ts +19 -0
  132. package/card/card-button/card-button.d.ts.map +1 -0
  133. package/card/card-button.d.ts +2 -0
  134. package/card/card-button.d.ts.map +1 -0
  135. package/card/card-button.js +19 -0
  136. package/card/card-link/card-link.d.ts +19 -0
  137. package/card/card-link/card-link.d.ts.map +1 -0
  138. package/card/card-link.d.ts +2 -0
  139. package/card/card-link.d.ts.map +1 -0
  140. package/card/card-link.js +19 -0
  141. package/card/card.d.ts +2 -0
  142. package/card/card.d.ts.map +1 -0
  143. package/card/card.js +47 -0
  144. package/card/common/card-action-common.d.ts +9 -0
  145. package/card/common/card-action-common.d.ts.map +1 -0
  146. package/card/common.d.ts +2 -0
  147. package/card/common.d.ts.map +1 -0
  148. package/card/common.js +67 -0
  149. package/card.d.ts +6 -0
  150. package/card.d.ts.map +1 -0
  151. package/card.js +5 -0
  152. package/checkbox/checkbox/checkbox.d.ts +73 -0
  153. package/checkbox/checkbox/checkbox.d.ts.map +1 -0
  154. package/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
  155. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
  156. package/checkbox/checkbox-group.d.ts +2 -0
  157. package/checkbox/checkbox-group.d.ts.map +1 -0
  158. package/checkbox/checkbox-group.js +83 -0
  159. package/checkbox/checkbox.d.ts +2 -0
  160. package/checkbox/checkbox.d.ts.map +1 -0
  161. package/checkbox/checkbox.js +132 -0
  162. package/checkbox.d.ts +3 -0
  163. package/checkbox.d.ts.map +1 -0
  164. package/checkbox.js +2 -0
  165. package/chip/chip.d.ts +21 -0
  166. package/chip/chip.d.ts.map +1 -0
  167. package/chip.d.ts +2 -0
  168. package/chip.d.ts.map +1 -0
  169. package/chip.js +35 -0
  170. package/clock/clock.d.ts +62 -0
  171. package/clock/clock.d.ts.map +1 -0
  172. package/clock.d.ts +2 -0
  173. package/clock.d.ts.map +1 -0
  174. package/clock.js +156 -0
  175. package/container/container/container.d.ts +25 -0
  176. package/container/container/container.d.ts.map +1 -0
  177. package/container/container.d.ts +2 -0
  178. package/container/container.d.ts.map +1 -0
  179. package/container/container.js +41 -0
  180. package/container/sticky-bar/sticky-bar.d.ts +31 -0
  181. package/container/sticky-bar/sticky-bar.d.ts.map +1 -0
  182. package/container/sticky-bar.d.ts +2 -0
  183. package/container/sticky-bar.d.ts.map +1 -0
  184. package/container/sticky-bar.js +57 -0
  185. package/container.d.ts +3 -0
  186. package/container.d.ts.map +1 -0
  187. package/container.js +2 -0
  188. package/core/a11y/arrow-navigation.d.ts +32 -0
  189. package/core/a11y/arrow-navigation.d.ts.map +1 -0
  190. package/core/a11y/fake-event-detection.d.ts +5 -0
  191. package/core/a11y/fake-event-detection.d.ts.map +1 -0
  192. package/core/a11y/focus-visible-within-controller.d.ts +11 -0
  193. package/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
  194. package/core/a11y/focus.d.ts +22 -0
  195. package/core/a11y/focus.d.ts.map +1 -0
  196. package/core/a11y/input-modality-detector.d.ts +58 -0
  197. package/core/a11y/input-modality-detector.d.ts.map +1 -0
  198. package/core/a11y/interactivity-checker.d.ts +17 -0
  199. package/core/a11y/interactivity-checker.d.ts.map +1 -0
  200. package/core/a11y.d.ts +7 -0
  201. package/core/a11y.d.ts.map +1 -0
  202. package/core/a11y.js +226 -0
  203. package/core/base-elements/action-base-element.d.ts +11 -0
  204. package/core/base-elements/action-base-element.d.ts.map +1 -0
  205. package/core/base-elements/button-base-element.d.ts +46 -0
  206. package/core/base-elements/button-base-element.d.ts.map +1 -0
  207. package/core/base-elements/link-base-element.d.ts +31 -0
  208. package/core/base-elements/link-base-element.d.ts.map +1 -0
  209. package/core/base-elements/open-close-base-element.d.ts +37 -0
  210. package/core/base-elements/open-close-base-element.d.ts.map +1 -0
  211. package/core/base-elements.d.ts +5 -0
  212. package/core/base-elements.d.ts.map +1 -0
  213. package/core/base-elements.js +234 -0
  214. package/core/config/config.d.ts +22 -0
  215. package/core/config/config.d.ts.map +1 -0
  216. package/core/config.d.ts +2 -0
  217. package/core/config.d.ts.map +1 -0
  218. package/core/config.js +11 -0
  219. package/core/controllers/connected-abort-controller.d.ts +11 -0
  220. package/core/controllers/connected-abort-controller.d.ts.map +1 -0
  221. package/core/controllers/language-controller.d.ts +33 -0
  222. package/core/controllers/language-controller.d.ts.map +1 -0
  223. package/core/controllers/slot-state-controller.d.ts +32 -0
  224. package/core/controllers/slot-state-controller.d.ts.map +1 -0
  225. package/core/controllers.d.ts +4 -0
  226. package/core/controllers.d.ts.map +1 -0
  227. package/core/controllers.js +88 -0
  228. package/core/datetime/date-adapter.d.ts +162 -0
  229. package/core/datetime/date-adapter.d.ts.map +1 -0
  230. package/core/datetime/native-date-adapter.d.ts +74 -0
  231. package/core/datetime/native-date-adapter.d.ts.map +1 -0
  232. package/core/datetime.d.ts +3 -0
  233. package/core/datetime.d.ts.map +1 -0
  234. package/core/datetime.js +256 -0
  235. package/core/decorators/host-attributes.d.ts +22 -0
  236. package/core/decorators/host-attributes.d.ts.map +1 -0
  237. package/core/decorators.d.ts +2 -0
  238. package/core/decorators.d.ts.map +1 -0
  239. package/core/decorators.js +18 -0
  240. package/core/dom/breakpoint.d.ts +14 -0
  241. package/core/dom/breakpoint.d.ts.map +1 -0
  242. package/core/dom/find-referenced-element.d.ts +7 -0
  243. package/core/dom/find-referenced-element.d.ts.map +1 -0
  244. package/core/dom/get-document-writing-mode.d.ts +2 -0
  245. package/core/dom/get-document-writing-mode.d.ts.map +1 -0
  246. package/core/dom/host-context.d.ts +11 -0
  247. package/core/dom/host-context.d.ts.map +1 -0
  248. package/core/dom/input-element.d.ts +10 -0
  249. package/core/dom/input-element.d.ts.map +1 -0
  250. package/core/dom/platform.d.ts +24 -0
  251. package/core/dom/platform.d.ts.map +1 -0
  252. package/core/dom/scroll.d.ts +13 -0
  253. package/core/dom/scroll.d.ts.map +1 -0
  254. package/core/dom/set-or-remove-attribute.d.ts +8 -0
  255. package/core/dom/set-or-remove-attribute.d.ts.map +1 -0
  256. package/core/dom/ssr.d.ts +12 -0
  257. package/core/dom/ssr.d.ts.map +1 -0
  258. package/core/dom.d.ts +10 -0
  259. package/core/dom.d.ts.map +1 -0
  260. package/core/dom.js +99 -0
  261. package/core/eventing/composed-path-has-attribute.d.ts +10 -0
  262. package/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
  263. package/core/eventing/event-emitter.d.ts +23 -0
  264. package/core/eventing/event-emitter.d.ts.map +1 -0
  265. package/core/eventing/event-target.d.ts +3 -0
  266. package/core/eventing/event-target.d.ts.map +1 -0
  267. package/core/eventing/form-element-handlers.d.ts +14 -0
  268. package/core/eventing/form-element-handlers.d.ts.map +1 -0
  269. package/core/eventing/forward-event.d.ts +6 -0
  270. package/core/eventing/forward-event.d.ts.map +1 -0
  271. package/core/eventing/handler-repository.d.ts +28 -0
  272. package/core/eventing/handler-repository.d.ts.map +1 -0
  273. package/core/eventing/is-event-prevented.d.ts +3 -0
  274. package/core/eventing/is-event-prevented.d.ts.map +1 -0
  275. package/core/eventing/throttle.d.ts +2 -0
  276. package/core/eventing/throttle.d.ts.map +1 -0
  277. package/core/eventing.d.ts +9 -0
  278. package/core/eventing.d.ts.map +1 -0
  279. package/core/eventing.js +79 -0
  280. package/core/i18n/i18n.d.ts +74 -0
  281. package/core/i18n/i18n.d.ts.map +1 -0
  282. package/core/i18n.d.ts +2 -0
  283. package/core/i18n.d.ts.map +1 -0
  284. package/core/i18n.js +627 -0
  285. package/core/images.d.ts +3 -0
  286. package/core/images.d.ts.map +1 -0
  287. package/core/interfaces/overlay-close-details.d.ts +5 -0
  288. package/core/interfaces/overlay-close-details.d.ts.map +1 -0
  289. package/core/interfaces/types.d.ts +29 -0
  290. package/core/interfaces/types.d.ts.map +1 -0
  291. package/core/interfaces/validation-change.d.ts +4 -0
  292. package/core/interfaces/validation-change.d.ts.map +1 -0
  293. package/core/interfaces.d.ts +4 -0
  294. package/core/interfaces.d.ts.map +1 -0
  295. package/core/interfaces.js +1 -0
  296. package/core/mixins/constructor.d.ts +8 -0
  297. package/core/mixins/constructor.d.ts.map +1 -0
  298. package/core/mixins/disabled-mixin.d.ts +14 -0
  299. package/core/mixins/disabled-mixin.d.ts.map +1 -0
  300. package/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
  301. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
  302. package/core/mixins/form-associated-mixin.d.ts +39 -0
  303. package/core/mixins/form-associated-mixin.d.ts.map +1 -0
  304. package/core/mixins/hydration-mixin.d.ts +30 -0
  305. package/core/mixins/hydration-mixin.d.ts.map +1 -0
  306. package/core/mixins/named-slot-list-mixin.d.ts +31 -0
  307. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
  308. package/core/mixins/negative-mixin.d.ts +11 -0
  309. package/core/mixins/negative-mixin.d.ts.map +1 -0
  310. package/core/mixins/required-mixin.d.ts +14 -0
  311. package/core/mixins/required-mixin.d.ts.map +1 -0
  312. package/core/mixins/update-scheduler-mixin.d.ts +14 -0
  313. package/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
  314. package/core/mixins.d.ts +10 -0
  315. package/core/mixins.d.ts.map +1 -0
  316. package/core/mixins.js +425 -0
  317. package/core/observers/intersection-observer.d.ts +14 -0
  318. package/core/observers/intersection-observer.d.ts.map +1 -0
  319. package/core/observers/mutation-observer.d.ts +7 -0
  320. package/core/observers/mutation-observer.d.ts.map +1 -0
  321. package/core/observers/resize-observer.d.ts +10 -0
  322. package/core/observers/resize-observer.d.ts.map +1 -0
  323. package/core/observers.d.ts +4 -0
  324. package/core/observers.d.ts.map +1 -0
  325. package/core/observers.js +38 -0
  326. package/core/overlay/overlay-option-panel.d.ts +10 -0
  327. package/core/overlay/overlay-option-panel.d.ts.map +1 -0
  328. package/core/overlay/overlay-trigger-attributes.d.ts +18 -0
  329. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
  330. package/core/overlay/overlay.d.ts +21 -0
  331. package/core/overlay/overlay.d.ts.map +1 -0
  332. package/core/overlay/position.d.ts +41 -0
  333. package/core/overlay/position.d.ts.map +1 -0
  334. package/core/overlay.d.ts +5 -0
  335. package/core/overlay.d.ts.map +1 -0
  336. package/core/overlay.js +121 -0
  337. package/core/styles/_index.scss +24 -0
  338. package/core/styles/a11y.scss +15 -0
  339. package/core/styles/animation.scss +17 -0
  340. package/core/styles/core/functions.scss +6 -0
  341. package/core/styles/core/mediaqueries.scss +105 -0
  342. package/core/styles/core.scss +123 -0
  343. package/core/styles/font-characters-extension.scss +3 -0
  344. package/core/styles/layout.scss +16 -0
  345. package/core/styles/lists.scss +10 -0
  346. package/core/styles/mixins/a11y.scss +41 -0
  347. package/core/styles/mixins/animation.scss +13 -0
  348. package/core/styles/mixins/badge.scss +14 -0
  349. package/core/styles/mixins/buttons.scss +208 -0
  350. package/core/styles/mixins/card.scss +174 -0
  351. package/core/styles/mixins/chip.scss +95 -0
  352. package/core/styles/mixins/dev_and_debug.scss +8 -0
  353. package/core/styles/mixins/font-face.scss +57 -0
  354. package/core/styles/mixins/helpers.scss +67 -0
  355. package/core/styles/mixins/inputs.scss +11 -0
  356. package/core/styles/mixins/layout.scss +37 -0
  357. package/core/styles/mixins/link.scss +99 -0
  358. package/core/styles/mixins/lists.scss +186 -0
  359. package/core/styles/mixins/overlay.scss +154 -0
  360. package/core/styles/mixins/panel.scss +78 -0
  361. package/core/styles/mixins/pearl-chain-bullet.scss +129 -0
  362. package/core/styles/mixins/scrollbar.scss +108 -0
  363. package/core/styles/mixins/shadows.scss +223 -0
  364. package/core/styles/mixins/typo.scss +237 -0
  365. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +517 -0
  366. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +1104 -0
  367. package/core/styles/normalize.scss +216 -0
  368. package/core/styles/standard-theme.scss +9 -0
  369. package/core/styles/typography.scss +50 -0
  370. package/core/testing/event-spy.d.ts +19 -0
  371. package/core/testing/event-spy.d.ts.map +1 -0
  372. package/core/testing/mocha-extensions.d.ts +11 -0
  373. package/core/testing/mocha-extensions.d.ts.map +1 -0
  374. package/core/testing/private.d.ts +11 -0
  375. package/core/testing/private.d.ts.map +1 -0
  376. package/core/testing/scroll.d.ts +6 -0
  377. package/core/testing/scroll.d.ts.map +1 -0
  378. package/core/testing/test-setup-ssr.d.ts +2 -0
  379. package/core/testing/test-setup-ssr.d.ts.map +1 -0
  380. package/core/testing/test-setup.d.ts +2 -0
  381. package/core/testing/test-setup.d.ts.map +1 -0
  382. package/core/testing/wait-for-condition.d.ts +2 -0
  383. package/core/testing/wait-for-condition.d.ts.map +1 -0
  384. package/core/testing/wait-for-render.d.ts +18 -0
  385. package/core/testing/wait-for-render.d.ts.map +1 -0
  386. package/core/testing.d.ts +6 -0
  387. package/core/testing.d.ts.map +1 -0
  388. package/core/testing.js +62 -0
  389. package/core.css +1280 -0
  390. package/custom-elements.json +51423 -0
  391. package/datepicker/common/datepicker-button.d.ts +38 -0
  392. package/datepicker/common/datepicker-button.d.ts.map +1 -0
  393. package/datepicker/common.d.ts +2 -0
  394. package/datepicker/common.d.ts.map +1 -0
  395. package/datepicker/common.js +122 -0
  396. package/datepicker/datepicker/datepicker.d.ts +145 -0
  397. package/datepicker/datepicker/datepicker.d.ts.map +1 -0
  398. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
  399. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
  400. package/datepicker/datepicker-next-day.d.ts +2 -0
  401. package/datepicker/datepicker-next-day.d.ts.map +1 -0
  402. package/datepicker/datepicker-next-day.js +31 -0
  403. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
  404. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
  405. package/datepicker/datepicker-previous-day.d.ts +2 -0
  406. package/datepicker/datepicker-previous-day.d.ts.map +1 -0
  407. package/datepicker/datepicker-previous-day.js +31 -0
  408. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
  409. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
  410. package/datepicker/datepicker-toggle.d.ts +2 -0
  411. package/datepicker/datepicker-toggle.d.ts.map +1 -0
  412. package/datepicker/datepicker-toggle.js +147 -0
  413. package/datepicker/datepicker.d.ts +2 -0
  414. package/datepicker/datepicker.d.ts.map +1 -0
  415. package/datepicker/datepicker.js +261 -0
  416. package/datepicker.d.ts +6 -0
  417. package/datepicker.d.ts.map +1 -0
  418. package/datepicker.js +5 -0
  419. package/development/accordion/accordion.d.ts +41 -0
  420. package/development/accordion/accordion.d.ts.map +1 -0
  421. package/development/accordion.d.ts +2 -0
  422. package/development/accordion.d.ts.map +1 -0
  423. package/development/accordion.js +135 -0
  424. package/development/action-group/action-group.d.ts +45 -0
  425. package/development/action-group/action-group.d.ts.map +1 -0
  426. package/development/action-group.d.ts +2 -0
  427. package/development/action-group.d.ts.map +1 -0
  428. package/development/action-group.js +343 -0
  429. package/development/alert/alert/alert.d.ts +76 -0
  430. package/development/alert/alert/alert.d.ts.map +1 -0
  431. package/development/alert/alert-group/alert-group.d.ts +48 -0
  432. package/development/alert/alert-group/alert-group.d.ts.map +1 -0
  433. package/development/alert/alert-group.d.ts +2 -0
  434. package/development/alert/alert-group.d.ts.map +1 -0
  435. package/development/alert/alert-group.js +144 -0
  436. package/development/alert/alert.d.ts +2 -0
  437. package/development/alert/alert.d.ts.map +1 -0
  438. package/development/alert/alert.js +342 -0
  439. package/development/alert.d.ts +3 -0
  440. package/development/alert.d.ts.map +1 -0
  441. package/development/alert.js +3 -0
  442. package/development/autocomplete/autocomplete.d.ts +108 -0
  443. package/development/autocomplete/autocomplete.d.ts.map +1 -0
  444. package/development/autocomplete.d.ts +2 -0
  445. package/development/autocomplete.d.ts.map +1 -0
  446. package/development/autocomplete.js +720 -0
  447. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
  448. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
  449. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
  450. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
  451. package/development/breadcrumb/breadcrumb-group.d.ts +2 -0
  452. package/development/breadcrumb/breadcrumb-group.d.ts.map +1 -0
  453. package/development/breadcrumb/breadcrumb-group.js +298 -0
  454. package/development/breadcrumb/breadcrumb.d.ts +2 -0
  455. package/development/breadcrumb/breadcrumb.d.ts.map +1 -0
  456. package/development/breadcrumb/breadcrumb.js +129 -0
  457. package/development/breadcrumb.d.ts +3 -0
  458. package/development/breadcrumb.d.ts.map +1 -0
  459. package/development/breadcrumb.js +3 -0
  460. package/development/button/button/button.d.ts +20 -0
  461. package/development/button/button/button.d.ts.map +1 -0
  462. package/development/button/button-link/button-link.d.ts +20 -0
  463. package/development/button/button-link/button-link.d.ts.map +1 -0
  464. package/development/button/button-link.d.ts +2 -0
  465. package/development/button/button-link.d.ts.map +1 -0
  466. package/development/button/button-link.js +27 -0
  467. package/development/button/button-static/button-static.d.ts +20 -0
  468. package/development/button/button-static/button-static.d.ts.map +1 -0
  469. package/development/button/button-static.d.ts +2 -0
  470. package/development/button/button-static.d.ts.map +1 -0
  471. package/development/button/button-static.js +27 -0
  472. package/development/button/button.d.ts +2 -0
  473. package/development/button/button.d.ts.map +1 -0
  474. package/development/button/button.js +27 -0
  475. package/development/button/common/button-common.d.ts +14 -0
  476. package/development/button/common/button-common.d.ts.map +1 -0
  477. package/development/button/common.d.ts +2 -0
  478. package/development/button/common.d.ts.map +1 -0
  479. package/development/button/common.js +380 -0
  480. package/development/button/mini-button/mini-button.d.ts +22 -0
  481. package/development/button/mini-button/mini-button.d.ts.map +1 -0
  482. package/development/button/mini-button.d.ts +2 -0
  483. package/development/button/mini-button.d.ts.map +1 -0
  484. package/development/button/mini-button.js +194 -0
  485. package/development/button/secondary-button/secondary-button.d.ts +20 -0
  486. package/development/button/secondary-button/secondary-button.d.ts.map +1 -0
  487. package/development/button/secondary-button-link/secondary-button-link.d.ts +20 -0
  488. package/development/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
  489. package/development/button/secondary-button-link.d.ts +2 -0
  490. package/development/button/secondary-button-link.d.ts.map +1 -0
  491. package/development/button/secondary-button-link.js +27 -0
  492. package/development/button/secondary-button-static/secondary-button-static.d.ts +20 -0
  493. package/development/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
  494. package/development/button/secondary-button-static.d.ts +2 -0
  495. package/development/button/secondary-button-static.d.ts.map +1 -0
  496. package/development/button/secondary-button-static.js +27 -0
  497. package/development/button/secondary-button.d.ts +2 -0
  498. package/development/button/secondary-button.d.ts.map +1 -0
  499. package/development/button/secondary-button.js +27 -0
  500. package/development/button/tertiary-button/tertiary-button.d.ts +20 -0
  501. package/development/button/tertiary-button/tertiary-button.d.ts.map +1 -0
  502. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
  503. package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
  504. package/development/button/tertiary-button-link.d.ts +2 -0
  505. package/development/button/tertiary-button-link.d.ts.map +1 -0
  506. package/development/button/tertiary-button-link.js +27 -0
  507. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
  508. package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
  509. package/development/button/tertiary-button-static.d.ts +2 -0
  510. package/development/button/tertiary-button-static.d.ts.map +1 -0
  511. package/development/button/tertiary-button-static.js +27 -0
  512. package/development/button/tertiary-button.d.ts +2 -0
  513. package/development/button/tertiary-button.d.ts.map +1 -0
  514. package/development/button/tertiary-button.js +27 -0
  515. package/development/button/transparent-button/transparent-button.d.ts +20 -0
  516. package/development/button/transparent-button/transparent-button.d.ts.map +1 -0
  517. package/development/button/transparent-button-link/transparent-button-link.d.ts +20 -0
  518. package/development/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
  519. package/development/button/transparent-button-link.d.ts +2 -0
  520. package/development/button/transparent-button-link.d.ts.map +1 -0
  521. package/development/button/transparent-button-link.js +27 -0
  522. package/development/button/transparent-button-static/transparent-button-static.d.ts +20 -0
  523. package/development/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
  524. package/development/button/transparent-button-static.d.ts +2 -0
  525. package/development/button/transparent-button-static.d.ts.map +1 -0
  526. package/development/button/transparent-button-static.js +27 -0
  527. package/development/button/transparent-button.d.ts +2 -0
  528. package/development/button/transparent-button.d.ts.map +1 -0
  529. package/development/button/transparent-button.js +27 -0
  530. package/development/button.d.ts +15 -0
  531. package/development/button.d.ts.map +1 -0
  532. package/development/button.js +15 -0
  533. package/development/calendar/calendar.d.ts +216 -0
  534. package/development/calendar/calendar.d.ts.map +1 -0
  535. package/development/calendar.d.ts +2 -0
  536. package/development/calendar.d.ts.map +1 -0
  537. package/development/calendar.js +1319 -0
  538. package/development/card/card/card.d.ts +29 -0
  539. package/development/card/card/card.d.ts.map +1 -0
  540. package/development/card/card-badge/card-badge.d.ts +23 -0
  541. package/development/card/card-badge/card-badge.d.ts.map +1 -0
  542. package/development/card/card-badge.d.ts +2 -0
  543. package/development/card/card-badge.d.ts.map +1 -0
  544. package/development/card/card-badge.js +166 -0
  545. package/development/card/card-button/card-button.d.ts +19 -0
  546. package/development/card/card-button/card-button.d.ts.map +1 -0
  547. package/development/card/card-button.d.ts +2 -0
  548. package/development/card/card-button.d.ts.map +1 -0
  549. package/development/card/card-button.js +27 -0
  550. package/development/card/card-link/card-link.d.ts +19 -0
  551. package/development/card/card-link/card-link.d.ts.map +1 -0
  552. package/development/card/card-link.d.ts +2 -0
  553. package/development/card/card-link.d.ts.map +1 -0
  554. package/development/card/card-link.js +27 -0
  555. package/development/card/card.d.ts +2 -0
  556. package/development/card/card.d.ts.map +1 -0
  557. package/development/card/card.js +267 -0
  558. package/development/card/common/card-action-common.d.ts +9 -0
  559. package/development/card/common/card-action-common.d.ts.map +1 -0
  560. package/development/card/common.d.ts +2 -0
  561. package/development/card/common.d.ts.map +1 -0
  562. package/development/card/common.js +135 -0
  563. package/development/card.d.ts +6 -0
  564. package/development/card.d.ts.map +1 -0
  565. package/development/card.js +6 -0
  566. package/development/checkbox/checkbox/checkbox.d.ts +73 -0
  567. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -0
  568. package/development/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
  569. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
  570. package/development/checkbox/checkbox-group.d.ts +2 -0
  571. package/development/checkbox/checkbox-group.d.ts.map +1 -0
  572. package/development/checkbox/checkbox-group.js +232 -0
  573. package/development/checkbox/checkbox.d.ts +2 -0
  574. package/development/checkbox/checkbox.d.ts.map +1 -0
  575. package/development/checkbox/checkbox.js +326 -0
  576. package/development/checkbox.d.ts +3 -0
  577. package/development/checkbox.d.ts.map +1 -0
  578. package/development/checkbox.js +3 -0
  579. package/development/chip/chip.d.ts +21 -0
  580. package/development/chip/chip.d.ts.map +1 -0
  581. package/development/chip.d.ts +2 -0
  582. package/development/chip.d.ts.map +1 -0
  583. package/development/chip.js +136 -0
  584. package/development/clock/clock.d.ts +62 -0
  585. package/development/clock/clock.d.ts.map +1 -0
  586. package/development/clock.d.ts +2 -0
  587. package/development/clock.d.ts.map +1 -0
  588. package/development/clock.js +378 -0
  589. package/development/container/container/container.d.ts +25 -0
  590. package/development/container/container/container.d.ts.map +1 -0
  591. package/development/container/container.d.ts +2 -0
  592. package/development/container/container.d.ts.map +1 -0
  593. package/development/container/container.js +115 -0
  594. package/development/container/sticky-bar/sticky-bar.d.ts +31 -0
  595. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -0
  596. package/development/container/sticky-bar.d.ts +2 -0
  597. package/development/container/sticky-bar.d.ts.map +1 -0
  598. package/development/container/sticky-bar.js +221 -0
  599. package/development/container.d.ts +3 -0
  600. package/development/container.d.ts.map +1 -0
  601. package/development/container.js +3 -0
  602. package/development/core/a11y/arrow-navigation.d.ts +32 -0
  603. package/development/core/a11y/arrow-navigation.d.ts.map +1 -0
  604. package/development/core/a11y/fake-event-detection.d.ts +5 -0
  605. package/development/core/a11y/fake-event-detection.d.ts.map +1 -0
  606. package/development/core/a11y/focus-visible-within-controller.d.ts +11 -0
  607. package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
  608. package/development/core/a11y/focus.d.ts +22 -0
  609. package/development/core/a11y/focus.d.ts.map +1 -0
  610. package/development/core/a11y/input-modality-detector.d.ts +58 -0
  611. package/development/core/a11y/input-modality-detector.d.ts.map +1 -0
  612. package/development/core/a11y/interactivity-checker.d.ts +17 -0
  613. package/development/core/a11y/interactivity-checker.d.ts.map +1 -0
  614. package/development/core/a11y.d.ts +7 -0
  615. package/development/core/a11y.d.ts.map +1 -0
  616. package/development/core/a11y.js +295 -0
  617. package/development/core/base-elements/action-base-element.d.ts +11 -0
  618. package/development/core/base-elements/action-base-element.d.ts.map +1 -0
  619. package/development/core/base-elements/button-base-element.d.ts +46 -0
  620. package/development/core/base-elements/button-base-element.d.ts.map +1 -0
  621. package/development/core/base-elements/link-base-element.d.ts +31 -0
  622. package/development/core/base-elements/link-base-element.d.ts.map +1 -0
  623. package/development/core/base-elements/open-close-base-element.d.ts +37 -0
  624. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -0
  625. package/development/core/base-elements.d.ts +5 -0
  626. package/development/core/base-elements.d.ts.map +1 -0
  627. package/development/core/base-elements.js +292 -0
  628. package/development/core/config/config.d.ts +22 -0
  629. package/development/core/config/config.d.ts.map +1 -0
  630. package/development/core/config.d.ts +2 -0
  631. package/development/core/config.d.ts.map +1 -0
  632. package/development/core/config.js +15 -0
  633. package/development/core/controllers/connected-abort-controller.d.ts +11 -0
  634. package/development/core/controllers/connected-abort-controller.d.ts.map +1 -0
  635. package/development/core/controllers/language-controller.d.ts +33 -0
  636. package/development/core/controllers/language-controller.d.ts.map +1 -0
  637. package/development/core/controllers/slot-state-controller.d.ts +32 -0
  638. package/development/core/controllers/slot-state-controller.d.ts.map +1 -0
  639. package/development/core/controllers.d.ts +4 -0
  640. package/development/core/controllers.d.ts.map +1 -0
  641. package/development/core/controllers.js +134 -0
  642. package/development/core/datetime/date-adapter.d.ts +162 -0
  643. package/development/core/datetime/date-adapter.d.ts.map +1 -0
  644. package/development/core/datetime/native-date-adapter.d.ts +74 -0
  645. package/development/core/datetime/native-date-adapter.d.ts.map +1 -0
  646. package/development/core/datetime.d.ts +3 -0
  647. package/development/core/datetime.d.ts.map +1 -0
  648. package/development/core/datetime.js +291 -0
  649. package/development/core/decorators/host-attributes.d.ts +22 -0
  650. package/development/core/decorators/host-attributes.d.ts.map +1 -0
  651. package/development/core/decorators.d.ts +2 -0
  652. package/development/core/decorators.d.ts.map +1 -0
  653. package/development/core/decorators.js +30 -0
  654. package/development/core/dom/breakpoint.d.ts +14 -0
  655. package/development/core/dom/breakpoint.d.ts.map +1 -0
  656. package/development/core/dom/find-referenced-element.d.ts +7 -0
  657. package/development/core/dom/find-referenced-element.d.ts.map +1 -0
  658. package/development/core/dom/get-document-writing-mode.d.ts +2 -0
  659. package/development/core/dom/get-document-writing-mode.d.ts.map +1 -0
  660. package/development/core/dom/host-context.d.ts +11 -0
  661. package/development/core/dom/host-context.d.ts.map +1 -0
  662. package/development/core/dom/input-element.d.ts +10 -0
  663. package/development/core/dom/input-element.d.ts.map +1 -0
  664. package/development/core/dom/platform.d.ts +24 -0
  665. package/development/core/dom/platform.d.ts.map +1 -0
  666. package/development/core/dom/scroll.d.ts +13 -0
  667. package/development/core/dom/scroll.d.ts.map +1 -0
  668. package/development/core/dom/set-or-remove-attribute.d.ts +8 -0
  669. package/development/core/dom/set-or-remove-attribute.d.ts.map +1 -0
  670. package/development/core/dom/ssr.d.ts +12 -0
  671. package/development/core/dom/ssr.d.ts.map +1 -0
  672. package/development/core/dom.d.ts +10 -0
  673. package/development/core/dom.d.ts.map +1 -0
  674. package/development/core/dom.js +146 -0
  675. package/development/core/eventing/composed-path-has-attribute.d.ts +10 -0
  676. package/development/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
  677. package/development/core/eventing/event-emitter.d.ts +23 -0
  678. package/development/core/eventing/event-emitter.d.ts.map +1 -0
  679. package/development/core/eventing/event-target.d.ts +3 -0
  680. package/development/core/eventing/event-target.d.ts.map +1 -0
  681. package/development/core/eventing/form-element-handlers.d.ts +14 -0
  682. package/development/core/eventing/form-element-handlers.d.ts.map +1 -0
  683. package/development/core/eventing/forward-event.d.ts +6 -0
  684. package/development/core/eventing/forward-event.d.ts.map +1 -0
  685. package/development/core/eventing/handler-repository.d.ts +28 -0
  686. package/development/core/eventing/handler-repository.d.ts.map +1 -0
  687. package/development/core/eventing/is-event-prevented.d.ts +3 -0
  688. package/development/core/eventing/is-event-prevented.d.ts.map +1 -0
  689. package/development/core/eventing/throttle.d.ts +2 -0
  690. package/development/core/eventing/throttle.d.ts.map +1 -0
  691. package/development/core/eventing.d.ts +9 -0
  692. package/development/core/eventing.d.ts.map +1 -0
  693. package/development/core/eventing.js +98 -0
  694. package/development/core/i18n/i18n.d.ts +74 -0
  695. package/development/core/i18n/i18n.d.ts.map +1 -0
  696. package/development/core/i18n.d.ts +2 -0
  697. package/development/core/i18n.d.ts.map +1 -0
  698. package/development/core/i18n.js +708 -0
  699. package/development/core/images.d.ts +3 -0
  700. package/development/core/images.d.ts.map +1 -0
  701. package/development/core/interfaces/overlay-close-details.d.ts +5 -0
  702. package/development/core/interfaces/overlay-close-details.d.ts.map +1 -0
  703. package/development/core/interfaces/types.d.ts +29 -0
  704. package/development/core/interfaces/types.d.ts.map +1 -0
  705. package/development/core/interfaces/validation-change.d.ts +4 -0
  706. package/development/core/interfaces/validation-change.d.ts.map +1 -0
  707. package/development/core/interfaces.d.ts +4 -0
  708. package/development/core/interfaces.d.ts.map +1 -0
  709. package/development/core/interfaces.js +2 -0
  710. package/development/core/mixins/constructor.d.ts +8 -0
  711. package/development/core/mixins/constructor.d.ts.map +1 -0
  712. package/development/core/mixins/disabled-mixin.d.ts +14 -0
  713. package/development/core/mixins/disabled-mixin.d.ts.map +1 -0
  714. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
  715. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
  716. package/development/core/mixins/form-associated-mixin.d.ts +39 -0
  717. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -0
  718. package/development/core/mixins/hydration-mixin.d.ts +30 -0
  719. package/development/core/mixins/hydration-mixin.d.ts.map +1 -0
  720. package/development/core/mixins/named-slot-list-mixin.d.ts +31 -0
  721. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
  722. package/development/core/mixins/negative-mixin.d.ts +11 -0
  723. package/development/core/mixins/negative-mixin.d.ts.map +1 -0
  724. package/development/core/mixins/required-mixin.d.ts +14 -0
  725. package/development/core/mixins/required-mixin.d.ts.map +1 -0
  726. package/development/core/mixins/update-scheduler-mixin.d.ts +14 -0
  727. package/development/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
  728. package/development/core/mixins.d.ts +10 -0
  729. package/development/core/mixins.d.ts.map +1 -0
  730. package/development/core/mixins.js +573 -0
  731. package/development/core/observers/intersection-observer.d.ts +14 -0
  732. package/development/core/observers/intersection-observer.d.ts.map +1 -0
  733. package/development/core/observers/mutation-observer.d.ts +7 -0
  734. package/development/core/observers/mutation-observer.d.ts.map +1 -0
  735. package/development/core/observers/resize-observer.d.ts +10 -0
  736. package/development/core/observers/resize-observer.d.ts.map +1 -0
  737. package/development/core/observers.d.ts +4 -0
  738. package/development/core/observers.d.ts.map +1 -0
  739. package/development/core/observers.js +39 -0
  740. package/development/core/overlay/overlay-option-panel.d.ts +10 -0
  741. package/development/core/overlay/overlay-option-panel.d.ts.map +1 -0
  742. package/development/core/overlay/overlay-trigger-attributes.d.ts +18 -0
  743. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
  744. package/development/core/overlay/overlay.d.ts +21 -0
  745. package/development/core/overlay/overlay.d.ts.map +1 -0
  746. package/development/core/overlay/position.d.ts +41 -0
  747. package/development/core/overlay/position.d.ts.map +1 -0
  748. package/development/core/overlay.d.ts +5 -0
  749. package/development/core/overlay.d.ts.map +1 -0
  750. package/development/core/overlay.js +234 -0
  751. package/development/core/testing/event-spy.d.ts +19 -0
  752. package/development/core/testing/event-spy.d.ts.map +1 -0
  753. package/development/core/testing/mocha-extensions.d.ts +11 -0
  754. package/development/core/testing/mocha-extensions.d.ts.map +1 -0
  755. package/development/core/testing/private.d.ts +11 -0
  756. package/development/core/testing/private.d.ts.map +1 -0
  757. package/development/core/testing/scroll.d.ts +6 -0
  758. package/development/core/testing/scroll.d.ts.map +1 -0
  759. package/development/core/testing/test-setup-ssr.d.ts +2 -0
  760. package/development/core/testing/test-setup-ssr.d.ts.map +1 -0
  761. package/development/core/testing/test-setup.d.ts +2 -0
  762. package/development/core/testing/test-setup.d.ts.map +1 -0
  763. package/development/core/testing/wait-for-condition.d.ts +2 -0
  764. package/development/core/testing/wait-for-condition.d.ts.map +1 -0
  765. package/development/core/testing/wait-for-render.d.ts +18 -0
  766. package/development/core/testing/wait-for-render.d.ts.map +1 -0
  767. package/development/core/testing.d.ts +6 -0
  768. package/development/core/testing.d.ts.map +1 -0
  769. package/development/core/testing.js +84 -0
  770. package/development/datepicker/common/datepicker-button.d.ts +38 -0
  771. package/development/datepicker/common/datepicker-button.d.ts.map +1 -0
  772. package/development/datepicker/common.d.ts +2 -0
  773. package/development/datepicker/common.d.ts.map +1 -0
  774. package/development/datepicker/common.js +173 -0
  775. package/development/datepicker/datepicker/datepicker.d.ts +145 -0
  776. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -0
  777. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
  778. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
  779. package/development/datepicker/datepicker-next-day.d.ts +2 -0
  780. package/development/datepicker/datepicker-next-day.d.ts.map +1 -0
  781. package/development/datepicker/datepicker-next-day.js +207 -0
  782. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
  783. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
  784. package/development/datepicker/datepicker-previous-day.d.ts +2 -0
  785. package/development/datepicker/datepicker-previous-day.d.ts.map +1 -0
  786. package/development/datepicker/datepicker-previous-day.js +207 -0
  787. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
  788. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
  789. package/development/datepicker/datepicker-toggle.d.ts +2 -0
  790. package/development/datepicker/datepicker-toggle.d.ts.map +1 -0
  791. package/development/datepicker/datepicker-toggle.js +234 -0
  792. package/development/datepicker/datepicker.d.ts +2 -0
  793. package/development/datepicker/datepicker.d.ts.map +1 -0
  794. package/development/datepicker/datepicker.js +381 -0
  795. package/development/datepicker.d.ts +6 -0
  796. package/development/datepicker.d.ts.map +1 -0
  797. package/development/datepicker.js +6 -0
  798. package/development/dialog/dialog/dialog.d.ts +54 -0
  799. package/development/dialog/dialog/dialog.d.ts.map +1 -0
  800. package/development/dialog/dialog-actions/dialog-actions.d.ts +18 -0
  801. package/development/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
  802. package/development/dialog/dialog-actions.d.ts +2 -0
  803. package/development/dialog/dialog-actions.d.ts.map +1 -0
  804. package/development/dialog/dialog-actions.js +66 -0
  805. package/development/dialog/dialog-content/dialog-content.d.ts +17 -0
  806. package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -0
  807. package/development/dialog/dialog-content.d.ts +2 -0
  808. package/development/dialog/dialog-content.d.ts.map +1 -0
  809. package/development/dialog/dialog-content.js +91 -0
  810. package/development/dialog/dialog-title/dialog-title.d.ts +43 -0
  811. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -0
  812. package/development/dialog/dialog-title.d.ts +2 -0
  813. package/development/dialog/dialog-title.d.ts.map +1 -0
  814. package/development/dialog/dialog-title.js +168 -0
  815. package/development/dialog/dialog.d.ts +2 -0
  816. package/development/dialog/dialog.d.ts.map +1 -0
  817. package/development/dialog/dialog.js +437 -0
  818. package/development/dialog.d.ts +5 -0
  819. package/development/dialog.d.ts.map +1 -0
  820. package/development/dialog.js +5 -0
  821. package/development/divider/divider.d.ts +21 -0
  822. package/development/divider/divider.d.ts.map +1 -0
  823. package/development/divider.d.ts +2 -0
  824. package/development/divider.d.ts.map +1 -0
  825. package/development/divider.js +85 -0
  826. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
  827. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
  828. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
  829. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
  830. package/development/expansion-panel/expansion-panel-content.d.ts +2 -0
  831. package/development/expansion-panel/expansion-panel-content.d.ts.map +1 -0
  832. package/development/expansion-panel/expansion-panel-content.js +84 -0
  833. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
  834. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
  835. package/development/expansion-panel/expansion-panel-header.d.ts +2 -0
  836. package/development/expansion-panel/expansion-panel-header.d.ts.map +1 -0
  837. package/development/expansion-panel/expansion-panel-header.js +194 -0
  838. package/development/expansion-panel/expansion-panel.d.ts +2 -0
  839. package/development/expansion-panel/expansion-panel.d.ts.map +1 -0
  840. package/development/expansion-panel/expansion-panel.js +396 -0
  841. package/development/expansion-panel.d.ts +4 -0
  842. package/development/expansion-panel.d.ts.map +1 -0
  843. package/development/expansion-panel.js +4 -0
  844. package/development/file-selector/file-selector.d.ts +74 -0
  845. package/development/file-selector/file-selector.d.ts.map +1 -0
  846. package/development/file-selector.d.ts +2 -0
  847. package/development/file-selector.d.ts.map +1 -0
  848. package/development/file-selector.js +428 -0
  849. package/development/footer/footer.d.ts +35 -0
  850. package/development/footer/footer.d.ts.map +1 -0
  851. package/development/footer.d.ts +2 -0
  852. package/development/footer.d.ts.map +1 -0
  853. package/development/footer.js +229 -0
  854. package/development/form-error/form-error.d.ts +21 -0
  855. package/development/form-error/form-error.d.ts.map +1 -0
  856. package/development/form-error.d.ts +2 -0
  857. package/development/form-error.d.ts.map +1 -0
  858. package/development/form-error.js +121 -0
  859. package/development/form-field/form-field/form-field.d.ts +101 -0
  860. package/development/form-field/form-field/form-field.d.ts.map +1 -0
  861. package/development/form-field/form-field-clear/form-field-clear.d.ts +24 -0
  862. package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
  863. package/development/form-field/form-field-clear.d.ts +2 -0
  864. package/development/form-field/form-field-clear.d.ts.map +1 -0
  865. package/development/form-field/form-field-clear.js +223 -0
  866. package/development/form-field/form-field.d.ts +2 -0
  867. package/development/form-field/form-field.d.ts.map +1 -0
  868. package/development/form-field/form-field.js +885 -0
  869. package/development/form-field.d.ts +3 -0
  870. package/development/form-field.d.ts.map +1 -0
  871. package/development/form-field.js +3 -0
  872. package/development/header/common/header-action-common.d.ts +11 -0
  873. package/development/header/common/header-action-common.d.ts.map +1 -0
  874. package/development/header/common.d.ts +2 -0
  875. package/development/header/common.d.ts.map +1 -0
  876. package/development/header/common.js +340 -0
  877. package/development/header/header/header.d.ts +59 -0
  878. package/development/header/header/header.d.ts.map +1 -0
  879. package/development/header/header-button/header-button.d.ts +18 -0
  880. package/development/header/header-button/header-button.d.ts.map +1 -0
  881. package/development/header/header-button.d.ts +2 -0
  882. package/development/header/header-button.d.ts.map +1 -0
  883. package/development/header/header-button.js +25 -0
  884. package/development/header/header-link/header-link.d.ts +18 -0
  885. package/development/header/header-link/header-link.d.ts.map +1 -0
  886. package/development/header/header-link.d.ts +2 -0
  887. package/development/header/header-link.d.ts.map +1 -0
  888. package/development/header/header-link.js +23 -0
  889. package/development/header/header.d.ts +2 -0
  890. package/development/header/header.d.ts.map +1 -0
  891. package/development/header/header.js +333 -0
  892. package/development/header.d.ts +5 -0
  893. package/development/header.d.ts.map +1 -0
  894. package/development/header.js +5 -0
  895. package/development/icon/icon-base.d.ts +28 -0
  896. package/development/icon/icon-base.d.ts.map +1 -0
  897. package/development/icon/icon-name-mixin.d.ts +12 -0
  898. package/development/icon/icon-name-mixin.d.ts.map +1 -0
  899. package/development/icon/icon-request.d.ts +3 -0
  900. package/development/icon/icon-request.d.ts.map +1 -0
  901. package/development/icon/icon-validate.d.ts +12 -0
  902. package/development/icon/icon-validate.d.ts.map +1 -0
  903. package/development/icon/icon.d.ts +24 -0
  904. package/development/icon/icon.d.ts.map +1 -0
  905. package/development/icon.d.ts +6 -0
  906. package/development/icon.d.ts.map +1 -0
  907. package/development/icon.js +307 -0
  908. package/development/image/image.d.ts +236 -0
  909. package/development/image/image.d.ts.map +1 -0
  910. package/development/image.d.ts +2 -0
  911. package/development/image.d.ts.map +1 -0
  912. package/development/image.js +525 -0
  913. package/development/journey-header/journey-header.d.ts +30 -0
  914. package/development/journey-header/journey-header.d.ts.map +1 -0
  915. package/development/journey-header.d.ts +2 -0
  916. package/development/journey-header.d.ts.map +1 -0
  917. package/development/journey-header.js +132 -0
  918. package/development/lead-container/lead-container.d.ts +20 -0
  919. package/development/lead-container/lead-container.d.ts.map +1 -0
  920. package/development/lead-container.d.ts +2 -0
  921. package/development/lead-container.d.ts.map +1 -0
  922. package/development/lead-container.js +168 -0
  923. package/development/link/block-link/block-link.d.ts +18 -0
  924. package/development/link/block-link/block-link.d.ts.map +1 -0
  925. package/development/link/block-link-button/block-link-button.d.ts +18 -0
  926. package/development/link/block-link-button/block-link-button.d.ts.map +1 -0
  927. package/development/link/block-link-button.d.ts +2 -0
  928. package/development/link/block-link-button.d.ts.map +1 -0
  929. package/development/link/block-link-button.js +26 -0
  930. package/development/link/block-link-static/block-link-static.d.ts +18 -0
  931. package/development/link/block-link-static/block-link-static.d.ts.map +1 -0
  932. package/development/link/block-link-static.d.ts +2 -0
  933. package/development/link/block-link-static.d.ts.map +1 -0
  934. package/development/link/block-link-static.js +26 -0
  935. package/development/link/block-link.d.ts +2 -0
  936. package/development/link/block-link.d.ts.map +1 -0
  937. package/development/link/block-link.js +26 -0
  938. package/development/link/common/block-link-common.d.ts +11 -0
  939. package/development/link/common/block-link-common.d.ts.map +1 -0
  940. package/development/link/common/inline-link-common.d.ts +8 -0
  941. package/development/link/common/inline-link-common.d.ts.map +1 -0
  942. package/development/link/common/link-common.d.ts +9 -0
  943. package/development/link/common/link-common.d.ts.map +1 -0
  944. package/development/link/common.d.ts +4 -0
  945. package/development/link/common.d.ts.map +1 -0
  946. package/development/link/common.js +271 -0
  947. package/development/link/link/link.d.ts +17 -0
  948. package/development/link/link/link.d.ts.map +1 -0
  949. package/development/link/link-button/link-button.d.ts +17 -0
  950. package/development/link/link-button/link-button.d.ts.map +1 -0
  951. package/development/link/link-button.d.ts +2 -0
  952. package/development/link/link-button.d.ts.map +1 -0
  953. package/development/link/link-button.js +26 -0
  954. package/development/link/link-static/link-static.d.ts +17 -0
  955. package/development/link/link-static/link-static.d.ts.map +1 -0
  956. package/development/link/link-static.d.ts +2 -0
  957. package/development/link/link-static.d.ts.map +1 -0
  958. package/development/link/link-static.js +26 -0
  959. package/development/link/link.d.ts +2 -0
  960. package/development/link/link.d.ts.map +1 -0
  961. package/development/link/link.js +26 -0
  962. package/development/link-list/link-list.d.ts +40 -0
  963. package/development/link-list/link-list.d.ts.map +1 -0
  964. package/development/link-list.d.ts +2 -0
  965. package/development/link-list.d.ts.map +1 -0
  966. package/development/link-list.js +255 -0
  967. package/development/link.d.ts +8 -0
  968. package/development/link.d.ts.map +1 -0
  969. package/development/link.js +8 -0
  970. package/development/loading-indicator/loading-indicator.d.ts +21 -0
  971. package/development/loading-indicator/loading-indicator.d.ts.map +1 -0
  972. package/development/loading-indicator.d.ts +2 -0
  973. package/development/loading-indicator.d.ts.map +1 -0
  974. package/development/loading-indicator.js +339 -0
  975. package/development/logo/logo.d.ts +24 -0
  976. package/development/logo/logo.d.ts.map +1 -0
  977. package/development/logo.d.ts +2 -0
  978. package/development/logo.d.ts.map +1 -0
  979. package/development/logo.js +142 -0
  980. package/development/map-container/map-container.d.ts +43 -0
  981. package/development/map-container/map-container.d.ts.map +1 -0
  982. package/development/map-container.d.ts +2 -0
  983. package/development/map-container.d.ts.map +1 -0
  984. package/development/map-container.js +268 -0
  985. package/development/menu/common/menu-action-common.d.ts +11 -0
  986. package/development/menu/common/menu-action-common.d.ts.map +1 -0
  987. package/development/menu/common.d.ts +2 -0
  988. package/development/menu/common.d.ts.map +1 -0
  989. package/development/menu/common.js +174 -0
  990. package/development/menu/menu/menu.d.ts +76 -0
  991. package/development/menu/menu/menu.d.ts.map +1 -0
  992. package/development/menu/menu-button/menu-button.d.ts +20 -0
  993. package/development/menu/menu-button/menu-button.d.ts.map +1 -0
  994. package/development/menu/menu-button.d.ts +2 -0
  995. package/development/menu/menu-button.d.ts.map +1 -0
  996. package/development/menu/menu-button.js +26 -0
  997. package/development/menu/menu-link/menu-link.d.ts +20 -0
  998. package/development/menu/menu-link/menu-link.d.ts.map +1 -0
  999. package/development/menu/menu-link.d.ts +2 -0
  1000. package/development/menu/menu-link.d.ts.map +1 -0
  1001. package/development/menu/menu-link.js +23 -0
  1002. package/development/menu/menu.d.ts +2 -0
  1003. package/development/menu/menu.d.ts.map +1 -0
  1004. package/development/menu/menu.js +538 -0
  1005. package/development/menu.d.ts +5 -0
  1006. package/development/menu.d.ts.map +1 -0
  1007. package/development/menu.js +5 -0
  1008. package/development/message/message.d.ts +26 -0
  1009. package/development/message/message.d.ts.map +1 -0
  1010. package/development/message.d.ts +2 -0
  1011. package/development/message.d.ts.map +1 -0
  1012. package/development/message.js +118 -0
  1013. package/development/navigation/common/navigation-action-common.d.ts +14 -0
  1014. package/development/navigation/common/navigation-action-common.d.ts.map +1 -0
  1015. package/development/navigation/common.d.ts +2 -0
  1016. package/development/navigation/common.d.ts.map +1 -0
  1017. package/development/navigation/common.js +179 -0
  1018. package/development/navigation/navigation/navigation.d.ts +82 -0
  1019. package/development/navigation/navigation/navigation.d.ts.map +1 -0
  1020. package/development/navigation/navigation-button/navigation-button.d.ts +17 -0
  1021. package/development/navigation/navigation-button/navigation-button.d.ts.map +1 -0
  1022. package/development/navigation/navigation-button.d.ts +2 -0
  1023. package/development/navigation/navigation-button.d.ts.map +1 -0
  1024. package/development/navigation/navigation-button.js +25 -0
  1025. package/development/navigation/navigation-link/navigation-link.d.ts +17 -0
  1026. package/development/navigation/navigation-link/navigation-link.d.ts.map +1 -0
  1027. package/development/navigation/navigation-link.d.ts +2 -0
  1028. package/development/navigation/navigation-link.d.ts.map +1 -0
  1029. package/development/navigation/navigation-link.js +25 -0
  1030. package/development/navigation/navigation-list/navigation-list.d.ts +30 -0
  1031. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -0
  1032. package/development/navigation/navigation-list.d.ts +2 -0
  1033. package/development/navigation/navigation-list.d.ts.map +1 -0
  1034. package/development/navigation/navigation-list.js +104 -0
  1035. package/development/navigation/navigation-marker/navigation-marker.d.ts +38 -0
  1036. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
  1037. package/development/navigation/navigation-marker.d.ts +2 -0
  1038. package/development/navigation/navigation-marker.d.ts.map +1 -0
  1039. package/development/navigation/navigation-marker.js +220 -0
  1040. package/development/navigation/navigation-section/navigation-section.d.ts +76 -0
  1041. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -0
  1042. package/development/navigation/navigation-section.d.ts +2 -0
  1043. package/development/navigation/navigation-section.d.ts.map +1 -0
  1044. package/development/navigation/navigation-section.js +600 -0
  1045. package/development/navigation/navigation.d.ts +2 -0
  1046. package/development/navigation/navigation.d.ts.map +1 -0
  1047. package/development/navigation/navigation.js +598 -0
  1048. package/development/navigation.d.ts +8 -0
  1049. package/development/navigation.d.ts.map +1 -0
  1050. package/development/navigation.js +8 -0
  1051. package/development/notification/notification.d.ts +82 -0
  1052. package/development/notification/notification.d.ts.map +1 -0
  1053. package/development/notification.d.ts +2 -0
  1054. package/development/notification.d.ts.map +1 -0
  1055. package/development/notification.js +472 -0
  1056. package/development/option/optgroup/optgroup.d.ts +33 -0
  1057. package/development/option/optgroup/optgroup.d.ts.map +1 -0
  1058. package/development/option/optgroup.d.ts +2 -0
  1059. package/development/option/optgroup.d.ts.map +1 -0
  1060. package/development/option/optgroup.js +230 -0
  1061. package/development/option/option/option.d.ts +91 -0
  1062. package/development/option/option/option.d.ts.map +1 -0
  1063. package/development/option/option.d.ts +2 -0
  1064. package/development/option/option.d.ts.map +1 -0
  1065. package/development/option/option.js +444 -0
  1066. package/development/option.d.ts +3 -0
  1067. package/development/option.d.ts.map +1 -0
  1068. package/development/option.js +3 -0
  1069. package/development/overlay/overlay-base-element.d.ts +43 -0
  1070. package/development/overlay/overlay-base-element.d.ts.map +1 -0
  1071. package/development/overlay/overlay.d.ts +52 -0
  1072. package/development/overlay/overlay.d.ts.map +1 -0
  1073. package/development/overlay.d.ts +3 -0
  1074. package/development/overlay.d.ts.map +1 -0
  1075. package/development/overlay.js +484 -0
  1076. package/development/popover/popover/popover.d.ts +85 -0
  1077. package/development/popover/popover/popover.d.ts.map +1 -0
  1078. package/development/popover/popover-trigger/popover-trigger.d.ts +21 -0
  1079. package/development/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
  1080. package/development/popover/popover-trigger.d.ts +2 -0
  1081. package/development/popover/popover-trigger.d.ts.map +1 -0
  1082. package/development/popover/popover-trigger.js +266 -0
  1083. package/development/popover/popover.d.ts +2 -0
  1084. package/development/popover/popover.d.ts.map +1 -0
  1085. package/development/popover/popover.js +554 -0
  1086. package/development/popover.d.ts +3 -0
  1087. package/development/popover.d.ts.map +1 -0
  1088. package/development/popover.js +3 -0
  1089. package/development/radio-button/radio-button/radio-button.d.ts +102 -0
  1090. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -0
  1091. package/development/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
  1092. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
  1093. package/development/radio-button/radio-button-group.d.ts +2 -0
  1094. package/development/radio-button/radio-button-group.d.ts.map +1 -0
  1095. package/development/radio-button/radio-button-group.js +338 -0
  1096. package/development/radio-button/radio-button.d.ts +2 -0
  1097. package/development/radio-button/radio-button.d.ts.map +1 -0
  1098. package/development/radio-button/radio-button.js +398 -0
  1099. package/development/radio-button.d.ts +3 -0
  1100. package/development/radio-button.d.ts.map +1 -0
  1101. package/development/radio-button.js +3 -0
  1102. package/development/screen-reader-only/screen-reader-only.d.ts +17 -0
  1103. package/development/screen-reader-only/screen-reader-only.d.ts.map +1 -0
  1104. package/development/screen-reader-only.d.ts +2 -0
  1105. package/development/screen-reader-only.d.ts.map +1 -0
  1106. package/development/screen-reader-only.js +51 -0
  1107. package/development/select/select.d.ts +140 -0
  1108. package/development/select/select.d.ts.map +1 -0
  1109. package/development/select.d.ts +2 -0
  1110. package/development/select.d.ts.map +1 -0
  1111. package/development/select.js +892 -0
  1112. package/development/selection-panel/selection-panel.d.ts +63 -0
  1113. package/development/selection-panel/selection-panel.d.ts.map +1 -0
  1114. package/development/selection-panel.d.ts +2 -0
  1115. package/development/selection-panel.d.ts.map +1 -0
  1116. package/development/selection-panel.js +377 -0
  1117. package/development/signet/signet.d.ts +20 -0
  1118. package/development/signet/signet.d.ts.map +1 -0
  1119. package/development/signet.d.ts +2 -0
  1120. package/development/signet.d.ts.map +1 -0
  1121. package/development/signet.js +116 -0
  1122. package/development/skiplink-list/skiplink-list.d.ts +32 -0
  1123. package/development/skiplink-list/skiplink-list.d.ts.map +1 -0
  1124. package/development/skiplink-list.d.ts +2 -0
  1125. package/development/skiplink-list.d.ts.map +1 -0
  1126. package/development/skiplink-list.js +125 -0
  1127. package/development/slider/slider.d.ts +70 -0
  1128. package/development/slider/slider.d.ts.map +1 -0
  1129. package/development/slider.d.ts +2 -0
  1130. package/development/slider.d.ts.map +1 -0
  1131. package/development/slider.js +352 -0
  1132. package/development/status/status.d.ts +32 -0
  1133. package/development/status/status.d.ts.map +1 -0
  1134. package/development/status.d.ts +2 -0
  1135. package/development/status.d.ts.map +1 -0
  1136. package/development/status.js +156 -0
  1137. package/development/stepper/step/step.d.ts +66 -0
  1138. package/development/stepper/step/step.d.ts.map +1 -0
  1139. package/development/stepper/step-label/step-label.d.ts +47 -0
  1140. package/development/stepper/step-label/step-label.d.ts.map +1 -0
  1141. package/development/stepper/step-label.d.ts +2 -0
  1142. package/development/stepper/step-label.d.ts.map +1 -0
  1143. package/development/stepper/step-label.js +280 -0
  1144. package/development/stepper/step.d.ts +2 -0
  1145. package/development/stepper/step.d.ts.map +1 -0
  1146. package/development/stepper/step.js +233 -0
  1147. package/development/stepper/stepper/stepper.d.ts +59 -0
  1148. package/development/stepper/stepper/stepper.d.ts.map +1 -0
  1149. package/development/stepper/stepper.d.ts +2 -0
  1150. package/development/stepper/stepper.d.ts.map +1 -0
  1151. package/development/stepper/stepper.js +364 -0
  1152. package/development/stepper.d.ts +4 -0
  1153. package/development/stepper.d.ts.map +1 -0
  1154. package/development/stepper.js +4 -0
  1155. package/development/tabs/tab-group/tab-group.d.ts +94 -0
  1156. package/development/tabs/tab-group/tab-group.d.ts.map +1 -0
  1157. package/development/tabs/tab-group.d.ts +2 -0
  1158. package/development/tabs/tab-group.d.ts.map +1 -0
  1159. package/development/tabs/tab-group.js +390 -0
  1160. package/development/tabs/tab-title/tab-title.d.ts +32 -0
  1161. package/development/tabs/tab-title/tab-title.d.ts.map +1 -0
  1162. package/development/tabs/tab-title.d.ts +2 -0
  1163. package/development/tabs/tab-title.d.ts.map +1 -0
  1164. package/development/tabs/tab-title.js +288 -0
  1165. package/development/tabs.d.ts +3 -0
  1166. package/development/tabs.d.ts.map +1 -0
  1167. package/development/tabs.js +3 -0
  1168. package/development/tag/tag/tag.d.ts +53 -0
  1169. package/development/tag/tag/tag.d.ts.map +1 -0
  1170. package/development/tag/tag-group/tag-group.d.ts +46 -0
  1171. package/development/tag/tag-group/tag-group.d.ts.map +1 -0
  1172. package/development/tag/tag-group.d.ts +2 -0
  1173. package/development/tag/tag-group.d.ts.map +1 -0
  1174. package/development/tag/tag-group.js +143 -0
  1175. package/development/tag/tag.d.ts +2 -0
  1176. package/development/tag/tag.d.ts.map +1 -0
  1177. package/development/tag/tag.js +298 -0
  1178. package/development/tag.d.ts +3 -0
  1179. package/development/tag.d.ts.map +1 -0
  1180. package/development/tag.js +3 -0
  1181. package/development/teaser/teaser.d.ts +31 -0
  1182. package/development/teaser/teaser.d.ts.map +1 -0
  1183. package/development/teaser-hero/teaser-hero.d.ts +26 -0
  1184. package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
  1185. package/development/teaser-hero.d.ts +2 -0
  1186. package/development/teaser-hero.d.ts.map +1 -0
  1187. package/development/teaser-hero.js +182 -0
  1188. package/development/teaser-paid/teaser-paid.d.ts +20 -0
  1189. package/development/teaser-paid/teaser-paid.d.ts.map +1 -0
  1190. package/development/teaser-paid.d.ts +2 -0
  1191. package/development/teaser-paid.d.ts.map +1 -0
  1192. package/development/teaser-paid.js +92 -0
  1193. package/development/teaser.d.ts +2 -0
  1194. package/development/teaser.d.ts.map +1 -0
  1195. package/development/teaser.js +205 -0
  1196. package/development/time-input/time-input.d.ts +68 -0
  1197. package/development/time-input/time-input.d.ts.map +1 -0
  1198. package/development/time-input.d.ts +2 -0
  1199. package/development/time-input.d.ts.map +1 -0
  1200. package/development/time-input.js +270 -0
  1201. package/development/timetable-occupancy/timetable-occupancy.d.ts +23 -0
  1202. package/development/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
  1203. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
  1204. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
  1205. package/development/timetable-occupancy-icon.d.ts +2 -0
  1206. package/development/timetable-occupancy-icon.d.ts.map +1 -0
  1207. package/development/timetable-occupancy-icon.js +93 -0
  1208. package/development/timetable-occupancy.d.ts +2 -0
  1209. package/development/timetable-occupancy.d.ts.map +1 -0
  1210. package/development/timetable-occupancy.js +134 -0
  1211. package/development/title/title-base.d.ts +26 -0
  1212. package/development/title/title-base.d.ts.map +1 -0
  1213. package/development/title/title.d.ts +16 -0
  1214. package/development/title/title.d.ts.map +1 -0
  1215. package/development/title.d.ts +3 -0
  1216. package/development/title.d.ts.map +1 -0
  1217. package/development/title.js +260 -0
  1218. package/development/toast/toast.d.ts +79 -0
  1219. package/development/toast/toast.d.ts.map +1 -0
  1220. package/development/toast.d.ts +2 -0
  1221. package/development/toast.d.ts.map +1 -0
  1222. package/development/toast.js +381 -0
  1223. package/development/toggle/toggle/toggle.d.ts +63 -0
  1224. package/development/toggle/toggle/toggle.d.ts.map +1 -0
  1225. package/development/toggle/toggle-option/toggle-option.d.ts +37 -0
  1226. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -0
  1227. package/development/toggle/toggle-option.d.ts +2 -0
  1228. package/development/toggle/toggle-option.d.ts.map +1 -0
  1229. package/development/toggle/toggle-option.js +222 -0
  1230. package/development/toggle/toggle.d.ts +2 -0
  1231. package/development/toggle/toggle.d.ts.map +1 -0
  1232. package/development/toggle/toggle.js +308 -0
  1233. package/development/toggle-check/toggle-check.d.ts +34 -0
  1234. package/development/toggle-check/toggle-check.d.ts.map +1 -0
  1235. package/development/toggle-check.d.ts +2 -0
  1236. package/development/toggle-check.d.ts.map +1 -0
  1237. package/development/toggle-check.js +251 -0
  1238. package/development/toggle.d.ts +3 -0
  1239. package/development/toggle.d.ts.map +1 -0
  1240. package/development/toggle.js +3 -0
  1241. package/development/train/train/train.d.ts +48 -0
  1242. package/development/train/train/train.d.ts.map +1 -0
  1243. package/development/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
  1244. package/development/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
  1245. package/development/train/train-blocked-passage.d.ts +2 -0
  1246. package/development/train/train-blocked-passage.d.ts.map +1 -0
  1247. package/development/train/train-blocked-passage.js +101 -0
  1248. package/development/train/train-formation/train-formation.d.ts +40 -0
  1249. package/development/train/train-formation/train-formation.d.ts.map +1 -0
  1250. package/development/train/train-formation.d.ts +2 -0
  1251. package/development/train/train-formation.d.ts.map +1 -0
  1252. package/development/train/train-formation.js +294 -0
  1253. package/development/train/train-wagon/train-wagon.d.ts +49 -0
  1254. package/development/train/train-wagon/train-wagon.d.ts.map +1 -0
  1255. package/development/train/train-wagon.d.ts +2 -0
  1256. package/development/train/train-wagon.d.ts.map +1 -0
  1257. package/development/train/train-wagon.js +328 -0
  1258. package/development/train/train.d.ts +2 -0
  1259. package/development/train/train.d.ts.map +1 -0
  1260. package/development/train/train.js +270 -0
  1261. package/development/train.d.ts +5 -0
  1262. package/development/train.d.ts.map +1 -0
  1263. package/development/train.js +5 -0
  1264. package/development/visual-checkbox/visual-checkbox.d.ts +21 -0
  1265. package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -0
  1266. package/development/visual-checkbox.d.ts +2 -0
  1267. package/development/visual-checkbox.d.ts.map +1 -0
  1268. package/development/visual-checkbox.js +181 -0
  1269. package/dialog/dialog/dialog.d.ts +54 -0
  1270. package/dialog/dialog/dialog.d.ts.map +1 -0
  1271. package/dialog/dialog-actions/dialog-actions.d.ts +18 -0
  1272. package/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
  1273. package/dialog/dialog-actions.d.ts +2 -0
  1274. package/dialog/dialog-actions.d.ts.map +1 -0
  1275. package/dialog/dialog-actions.js +21 -0
  1276. package/dialog/dialog-content/dialog-content.d.ts +17 -0
  1277. package/dialog/dialog-content/dialog-content.d.ts.map +1 -0
  1278. package/dialog/dialog-content.d.ts +2 -0
  1279. package/dialog/dialog-content.d.ts.map +1 -0
  1280. package/dialog/dialog-content.js +24 -0
  1281. package/dialog/dialog-title/dialog-title.d.ts +43 -0
  1282. package/dialog/dialog-title/dialog-title.d.ts.map +1 -0
  1283. package/dialog/dialog-title.d.ts +2 -0
  1284. package/dialog/dialog-title.d.ts.map +1 -0
  1285. package/dialog/dialog-title.js +86 -0
  1286. package/dialog/dialog.d.ts +2 -0
  1287. package/dialog/dialog.d.ts.map +1 -0
  1288. package/dialog/dialog.js +135 -0
  1289. package/dialog.d.ts +5 -0
  1290. package/dialog.d.ts.map +1 -0
  1291. package/dialog.js +4 -0
  1292. package/divider/divider.d.ts +21 -0
  1293. package/divider/divider.d.ts.map +1 -0
  1294. package/divider.d.ts +2 -0
  1295. package/divider.d.ts.map +1 -0
  1296. package/divider.js +34 -0
  1297. package/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
  1298. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
  1299. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
  1300. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
  1301. package/expansion-panel/expansion-panel-content.d.ts +2 -0
  1302. package/expansion-panel/expansion-panel-content.d.ts.map +1 -0
  1303. package/expansion-panel/expansion-panel-content.js +29 -0
  1304. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
  1305. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
  1306. package/expansion-panel/expansion-panel-header.d.ts +2 -0
  1307. package/expansion-panel/expansion-panel-header.d.ts.map +1 -0
  1308. package/expansion-panel/expansion-panel-header.js +75 -0
  1309. package/expansion-panel/expansion-panel.d.ts +2 -0
  1310. package/expansion-panel/expansion-panel.d.ts.map +1 -0
  1311. package/expansion-panel/expansion-panel.js +142 -0
  1312. package/expansion-panel.d.ts +4 -0
  1313. package/expansion-panel.d.ts.map +1 -0
  1314. package/expansion-panel.js +3 -0
  1315. package/file-selector/file-selector.d.ts +74 -0
  1316. package/file-selector/file-selector.d.ts.map +1 -0
  1317. package/file-selector.d.ts +2 -0
  1318. package/file-selector.d.ts.map +1 -0
  1319. package/file-selector.js +218 -0
  1320. package/font-characters-extension.css +18 -0
  1321. package/footer/footer.d.ts +35 -0
  1322. package/footer/footer.d.ts.map +1 -0
  1323. package/footer.d.ts +2 -0
  1324. package/footer.d.ts.map +1 -0
  1325. package/footer.js +46 -0
  1326. package/form-error/form-error.d.ts +21 -0
  1327. package/form-error/form-error.d.ts.map +1 -0
  1328. package/form-error.d.ts +2 -0
  1329. package/form-error.d.ts.map +1 -0
  1330. package/form-error.js +48 -0
  1331. package/form-field/form-field/form-field.d.ts +101 -0
  1332. package/form-field/form-field/form-field.d.ts.map +1 -0
  1333. package/form-field/form-field-clear/form-field-clear.d.ts +24 -0
  1334. package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
  1335. package/form-field/form-field-clear.d.ts +2 -0
  1336. package/form-field/form-field-clear.d.ts.map +1 -0
  1337. package/form-field/form-field-clear.js +46 -0
  1338. package/form-field/form-field.d.ts +2 -0
  1339. package/form-field/form-field.d.ts.map +1 -0
  1340. package/form-field/form-field.js +268 -0
  1341. package/form-field.d.ts +3 -0
  1342. package/form-field.d.ts.map +1 -0
  1343. package/form-field.js +2 -0
  1344. package/header/common/header-action-common.d.ts +11 -0
  1345. package/header/common/header-action-common.d.ts.map +1 -0
  1346. package/header/common.d.ts +2 -0
  1347. package/header/common.d.ts.map +1 -0
  1348. package/header/common.js +35 -0
  1349. package/header/header/header.d.ts +59 -0
  1350. package/header/header/header.d.ts.map +1 -0
  1351. package/header/header-button/header-button.d.ts +18 -0
  1352. package/header/header-button/header-button.d.ts.map +1 -0
  1353. package/header/header-button.d.ts +2 -0
  1354. package/header/header-button.d.ts.map +1 -0
  1355. package/header/header-button.js +18 -0
  1356. package/header/header-link/header-link.d.ts +18 -0
  1357. package/header/header-link/header-link.d.ts.map +1 -0
  1358. package/header/header-link.d.ts +2 -0
  1359. package/header/header-link.d.ts.map +1 -0
  1360. package/header/header-link.js +16 -0
  1361. package/header/header.d.ts +2 -0
  1362. package/header/header.d.ts.map +1 -0
  1363. package/header/header.js +120 -0
  1364. package/header.d.ts +5 -0
  1365. package/header.d.ts.map +1 -0
  1366. package/header.js +4 -0
  1367. package/icon/icon-base.d.ts +28 -0
  1368. package/icon/icon-base.d.ts.map +1 -0
  1369. package/icon/icon-name-mixin.d.ts +12 -0
  1370. package/icon/icon-name-mixin.d.ts.map +1 -0
  1371. package/icon/icon-request.d.ts +3 -0
  1372. package/icon/icon-request.d.ts.map +1 -0
  1373. package/icon/icon-validate.d.ts +12 -0
  1374. package/icon/icon-validate.d.ts.map +1 -0
  1375. package/icon/icon.d.ts +24 -0
  1376. package/icon/icon.d.ts.map +1 -0
  1377. package/icon.d.ts +6 -0
  1378. package/icon.d.ts.map +1 -0
  1379. package/icon.js +174 -0
  1380. package/image/image.d.ts +236 -0
  1381. package/image/image.d.ts.map +1 -0
  1382. package/image.d.ts +2 -0
  1383. package/image.d.ts.map +1 -0
  1384. package/image.js +279 -0
  1385. package/index.d.ts +231 -0
  1386. package/index.js +229 -0
  1387. package/journey-header/journey-header.d.ts +30 -0
  1388. package/journey-header/journey-header.d.ts.map +1 -0
  1389. package/journey-header.d.ts +2 -0
  1390. package/journey-header.d.ts.map +1 -0
  1391. package/journey-header.js +76 -0
  1392. package/layout.css +24 -0
  1393. package/lead-container/lead-container.d.ts +20 -0
  1394. package/lead-container/lead-container.d.ts.map +1 -0
  1395. package/lead-container.d.ts +2 -0
  1396. package/lead-container.d.ts.map +1 -0
  1397. package/lead-container.js +32 -0
  1398. package/link/block-link/block-link.d.ts +18 -0
  1399. package/link/block-link/block-link.d.ts.map +1 -0
  1400. package/link/block-link-button/block-link-button.d.ts +18 -0
  1401. package/link/block-link-button/block-link-button.d.ts.map +1 -0
  1402. package/link/block-link-button.d.ts +2 -0
  1403. package/link/block-link-button.d.ts.map +1 -0
  1404. package/link/block-link-button.js +19 -0
  1405. package/link/block-link-static/block-link-static.d.ts +18 -0
  1406. package/link/block-link-static/block-link-static.d.ts.map +1 -0
  1407. package/link/block-link-static.d.ts +2 -0
  1408. package/link/block-link-static.d.ts.map +1 -0
  1409. package/link/block-link-static.js +19 -0
  1410. package/link/block-link.d.ts +2 -0
  1411. package/link/block-link.d.ts.map +1 -0
  1412. package/link/block-link.js +19 -0
  1413. package/link/common/block-link-common.d.ts +11 -0
  1414. package/link/common/block-link-common.d.ts.map +1 -0
  1415. package/link/common/inline-link-common.d.ts +8 -0
  1416. package/link/common/inline-link-common.d.ts.map +1 -0
  1417. package/link/common/link-common.d.ts +9 -0
  1418. package/link/common/link-common.d.ts.map +1 -0
  1419. package/link/common.d.ts +4 -0
  1420. package/link/common.d.ts.map +1 -0
  1421. package/link/common.js +62 -0
  1422. package/link/link/link.d.ts +17 -0
  1423. package/link/link/link.d.ts.map +1 -0
  1424. package/link/link-button/link-button.d.ts +17 -0
  1425. package/link/link-button/link-button.d.ts.map +1 -0
  1426. package/link/link-button.d.ts +2 -0
  1427. package/link/link-button.d.ts.map +1 -0
  1428. package/link/link-button.js +19 -0
  1429. package/link/link-static/link-static.d.ts +17 -0
  1430. package/link/link-static/link-static.d.ts.map +1 -0
  1431. package/link/link-static.d.ts +2 -0
  1432. package/link/link-static.d.ts.map +1 -0
  1433. package/link/link-static.js +19 -0
  1434. package/link/link.d.ts +2 -0
  1435. package/link/link.d.ts.map +1 -0
  1436. package/link/link.js +19 -0
  1437. package/link-list/link-list.d.ts +40 -0
  1438. package/link-list/link-list.d.ts.map +1 -0
  1439. package/link-list.d.ts +2 -0
  1440. package/link-list.d.ts.map +1 -0
  1441. package/link-list.js +65 -0
  1442. package/link.d.ts +8 -0
  1443. package/link.d.ts.map +1 -0
  1444. package/link.js +7 -0
  1445. package/lists.css +149 -0
  1446. package/loading-indicator/loading-indicator.d.ts +21 -0
  1447. package/loading-indicator/loading-indicator.d.ts.map +1 -0
  1448. package/loading-indicator.d.ts +2 -0
  1449. package/loading-indicator.d.ts.map +1 -0
  1450. package/loading-indicator.js +51 -0
  1451. package/logo/logo.d.ts +24 -0
  1452. package/logo/logo.d.ts.map +1 -0
  1453. package/logo.d.ts +2 -0
  1454. package/logo.d.ts.map +1 -0
  1455. package/logo.js +47 -0
  1456. package/map-container/map-container.d.ts +43 -0
  1457. package/map-container/map-container.d.ts.map +1 -0
  1458. package/map-container.d.ts +2 -0
  1459. package/map-container.d.ts.map +1 -0
  1460. package/map-container.js +91 -0
  1461. package/menu/common/menu-action-common.d.ts +11 -0
  1462. package/menu/common/menu-action-common.d.ts.map +1 -0
  1463. package/menu/common.d.ts +2 -0
  1464. package/menu/common.d.ts.map +1 -0
  1465. package/menu/common.js +34 -0
  1466. package/menu/menu/menu.d.ts +76 -0
  1467. package/menu/menu/menu.d.ts.map +1 -0
  1468. package/menu/menu-button/menu-button.d.ts +20 -0
  1469. package/menu/menu-button/menu-button.d.ts.map +1 -0
  1470. package/menu/menu-button.d.ts +2 -0
  1471. package/menu/menu-button.d.ts.map +1 -0
  1472. package/menu/menu-button.js +19 -0
  1473. package/menu/menu-link/menu-link.d.ts +20 -0
  1474. package/menu/menu-link/menu-link.d.ts.map +1 -0
  1475. package/menu/menu-link.d.ts +2 -0
  1476. package/menu/menu-link.d.ts.map +1 -0
  1477. package/menu/menu-link.js +16 -0
  1478. package/menu/menu.d.ts +2 -0
  1479. package/menu/menu.d.ts.map +1 -0
  1480. package/menu/menu.js +194 -0
  1481. package/menu.d.ts +5 -0
  1482. package/menu.d.ts.map +1 -0
  1483. package/menu.js +4 -0
  1484. package/message/message.d.ts +26 -0
  1485. package/message/message.d.ts.map +1 -0
  1486. package/message.d.ts +2 -0
  1487. package/message.d.ts.map +1 -0
  1488. package/message.js +40 -0
  1489. package/navigation/common/navigation-action-common.d.ts +14 -0
  1490. package/navigation/common/navigation-action-common.d.ts.map +1 -0
  1491. package/navigation/common.d.ts +2 -0
  1492. package/navigation/common.d.ts.map +1 -0
  1493. package/navigation/common.js +51 -0
  1494. package/navigation/navigation/navigation.d.ts +82 -0
  1495. package/navigation/navigation/navigation.d.ts.map +1 -0
  1496. package/navigation/navigation-button/navigation-button.d.ts +17 -0
  1497. package/navigation/navigation-button/navigation-button.d.ts.map +1 -0
  1498. package/navigation/navigation-button.d.ts +2 -0
  1499. package/navigation/navigation-button.d.ts.map +1 -0
  1500. package/navigation/navigation-button.js +18 -0
  1501. package/navigation/navigation-link/navigation-link.d.ts +17 -0
  1502. package/navigation/navigation-link/navigation-link.d.ts.map +1 -0
  1503. package/navigation/navigation-link.d.ts +2 -0
  1504. package/navigation/navigation-link.d.ts.map +1 -0
  1505. package/navigation/navigation-link.js +18 -0
  1506. package/navigation/navigation-list/navigation-list.d.ts +30 -0
  1507. package/navigation/navigation-list/navigation-list.d.ts.map +1 -0
  1508. package/navigation/navigation-list.d.ts +2 -0
  1509. package/navigation/navigation-list.d.ts.map +1 -0
  1510. package/navigation/navigation-list.js +42 -0
  1511. package/navigation/navigation-marker/navigation-marker.d.ts +38 -0
  1512. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
  1513. package/navigation/navigation-marker.d.ts +2 -0
  1514. package/navigation/navigation-marker.d.ts.map +1 -0
  1515. package/navigation/navigation-marker.js +77 -0
  1516. package/navigation/navigation-section/navigation-section.d.ts +76 -0
  1517. package/navigation/navigation-section/navigation-section.d.ts.map +1 -0
  1518. package/navigation/navigation-section.d.ts +2 -0
  1519. package/navigation/navigation-section.d.ts.map +1 -0
  1520. package/navigation/navigation-section.js +205 -0
  1521. package/navigation/navigation.d.ts +2 -0
  1522. package/navigation/navigation.d.ts.map +1 -0
  1523. package/navigation/navigation.js +210 -0
  1524. package/navigation.d.ts +8 -0
  1525. package/navigation.d.ts.map +1 -0
  1526. package/navigation.js +7 -0
  1527. package/normalize.css +189 -0
  1528. package/notification/notification.d.ts +82 -0
  1529. package/notification/notification.d.ts.map +1 -0
  1530. package/notification.d.ts +2 -0
  1531. package/notification.d.ts.map +1 -0
  1532. package/notification.js +158 -0
  1533. package/option/optgroup/optgroup.d.ts +33 -0
  1534. package/option/optgroup/optgroup.d.ts.map +1 -0
  1535. package/option/optgroup.d.ts +2 -0
  1536. package/option/optgroup.d.ts.map +1 -0
  1537. package/option/optgroup.js +103 -0
  1538. package/option/option/option.d.ts +91 -0
  1539. package/option/option/option.d.ts.map +1 -0
  1540. package/option/option.d.ts +2 -0
  1541. package/option/option.d.ts.map +1 -0
  1542. package/option/option.js +230 -0
  1543. package/option.d.ts +3 -0
  1544. package/option.d.ts.map +1 -0
  1545. package/option.js +2 -0
  1546. package/overlay/overlay-base-element.d.ts +43 -0
  1547. package/overlay/overlay-base-element.d.ts.map +1 -0
  1548. package/overlay/overlay.d.ts +52 -0
  1549. package/overlay/overlay.d.ts.map +1 -0
  1550. package/overlay.d.ts +3 -0
  1551. package/overlay.d.ts.map +1 -0
  1552. package/overlay.js +210 -0
  1553. package/package.json +852 -2
  1554. package/popover/popover/popover.d.ts +85 -0
  1555. package/popover/popover/popover.d.ts.map +1 -0
  1556. package/popover/popover-trigger/popover-trigger.d.ts +21 -0
  1557. package/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
  1558. package/popover/popover-trigger.d.ts +2 -0
  1559. package/popover/popover-trigger.d.ts.map +1 -0
  1560. package/popover/popover-trigger.js +35 -0
  1561. package/popover/popover.d.ts +2 -0
  1562. package/popover/popover.d.ts.map +1 -0
  1563. package/popover/popover.js +241 -0
  1564. package/popover.d.ts +3 -0
  1565. package/popover.d.ts.map +1 -0
  1566. package/popover.js +2 -0
  1567. package/radio-button/radio-button/radio-button.d.ts +102 -0
  1568. package/radio-button/radio-button/radio-button.d.ts.map +1 -0
  1569. package/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
  1570. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
  1571. package/radio-button/radio-button-group.d.ts +2 -0
  1572. package/radio-button/radio-button-group.d.ts.map +1 -0
  1573. package/radio-button/radio-button-group.js +161 -0
  1574. package/radio-button/radio-button.d.ts +2 -0
  1575. package/radio-button/radio-button.d.ts.map +1 -0
  1576. package/radio-button/radio-button.js +167 -0
  1577. package/radio-button.d.ts +3 -0
  1578. package/radio-button.d.ts.map +1 -0
  1579. package/radio-button.js +2 -0
  1580. package/screen-reader-only/screen-reader-only.d.ts +17 -0
  1581. package/screen-reader-only/screen-reader-only.d.ts.map +1 -0
  1582. package/screen-reader-only.d.ts +2 -0
  1583. package/screen-reader-only.d.ts.map +1 -0
  1584. package/screen-reader-only.js +20 -0
  1585. package/select/select.d.ts +140 -0
  1586. package/select/select.d.ts.map +1 -0
  1587. package/select.d.ts +2 -0
  1588. package/select.d.ts.map +1 -0
  1589. package/select.js +402 -0
  1590. package/selection-panel/selection-panel.d.ts +63 -0
  1591. package/selection-panel/selection-panel.d.ts.map +1 -0
  1592. package/selection-panel.d.ts +2 -0
  1593. package/selection-panel.d.ts.map +1 -0
  1594. package/selection-panel.js +138 -0
  1595. package/signet/signet.d.ts +20 -0
  1596. package/signet/signet.d.ts.map +1 -0
  1597. package/signet.d.ts +2 -0
  1598. package/signet.d.ts.map +1 -0
  1599. package/signet.js +41 -0
  1600. package/skiplink-list/skiplink-list.d.ts +32 -0
  1601. package/skiplink-list/skiplink-list.d.ts.map +1 -0
  1602. package/skiplink-list.d.ts +2 -0
  1603. package/skiplink-list.d.ts.map +1 -0
  1604. package/skiplink-list.js +51 -0
  1605. package/slider/slider.d.ts +70 -0
  1606. package/slider/slider.d.ts.map +1 -0
  1607. package/slider.d.ts +2 -0
  1608. package/slider.d.ts.map +1 -0
  1609. package/slider.js +152 -0
  1610. package/standard-theme.css +1741 -0
  1611. package/status/status.d.ts +32 -0
  1612. package/status/status.d.ts.map +1 -0
  1613. package/status.d.ts +2 -0
  1614. package/status.d.ts.map +1 -0
  1615. package/status.js +59 -0
  1616. package/stepper/step/step.d.ts +66 -0
  1617. package/stepper/step/step.d.ts.map +1 -0
  1618. package/stepper/step-label/step-label.d.ts +47 -0
  1619. package/stepper/step-label/step-label.d.ts.map +1 -0
  1620. package/stepper/step-label.d.ts +2 -0
  1621. package/stepper/step-label.d.ts.map +1 -0
  1622. package/stepper/step-label.js +83 -0
  1623. package/stepper/step.d.ts +2 -0
  1624. package/stepper/step.d.ts.map +1 -0
  1625. package/stepper/step.js +117 -0
  1626. package/stepper/stepper/stepper.d.ts +59 -0
  1627. package/stepper/stepper/stepper.d.ts.map +1 -0
  1628. package/stepper/stepper.d.ts +2 -0
  1629. package/stepper/stepper.d.ts.map +1 -0
  1630. package/stepper/stepper.js +191 -0
  1631. package/stepper.d.ts +4 -0
  1632. package/stepper.d.ts.map +1 -0
  1633. package/stepper.js +3 -0
  1634. package/tabs/tab-group/tab-group.d.ts +94 -0
  1635. package/tabs/tab-group/tab-group.d.ts.map +1 -0
  1636. package/tabs/tab-group.d.ts +2 -0
  1637. package/tabs/tab-group.d.ts.map +1 -0
  1638. package/tabs/tab-group.js +196 -0
  1639. package/tabs/tab-title/tab-title.d.ts +32 -0
  1640. package/tabs/tab-title/tab-title.d.ts.map +1 -0
  1641. package/tabs/tab-title.d.ts +2 -0
  1642. package/tabs/tab-title.d.ts.map +1 -0
  1643. package/tabs/tab-title.js +51 -0
  1644. package/tabs.d.ts +3 -0
  1645. package/tabs.d.ts.map +1 -0
  1646. package/tabs.js +2 -0
  1647. package/tag/tag/tag.d.ts +53 -0
  1648. package/tag/tag/tag.d.ts.map +1 -0
  1649. package/tag/tag-group/tag-group.d.ts +46 -0
  1650. package/tag/tag-group/tag-group.d.ts.map +1 -0
  1651. package/tag/tag-group.d.ts +2 -0
  1652. package/tag/tag-group.d.ts.map +1 -0
  1653. package/tag/tag-group.js +82 -0
  1654. package/tag/tag.d.ts +2 -0
  1655. package/tag/tag.d.ts.map +1 -0
  1656. package/tag/tag.js +82 -0
  1657. package/tag.d.ts +3 -0
  1658. package/tag.d.ts.map +1 -0
  1659. package/tag.js +2 -0
  1660. package/teaser/teaser.d.ts +31 -0
  1661. package/teaser/teaser.d.ts.map +1 -0
  1662. package/teaser-hero/teaser-hero.d.ts +26 -0
  1663. package/teaser-hero/teaser-hero.d.ts.map +1 -0
  1664. package/teaser-hero.d.ts +2 -0
  1665. package/teaser-hero.d.ts.map +1 -0
  1666. package/teaser-hero.js +51 -0
  1667. package/teaser-paid/teaser-paid.d.ts +20 -0
  1668. package/teaser-paid/teaser-paid.d.ts.map +1 -0
  1669. package/teaser-paid.d.ts +2 -0
  1670. package/teaser-paid.d.ts.map +1 -0
  1671. package/teaser-paid.js +28 -0
  1672. package/teaser.d.ts +2 -0
  1673. package/teaser.d.ts.map +1 -0
  1674. package/teaser.js +57 -0
  1675. package/time-input/time-input.d.ts +68 -0
  1676. package/time-input/time-input.d.ts.map +1 -0
  1677. package/time-input.d.ts +2 -0
  1678. package/time-input.d.ts.map +1 -0
  1679. package/time-input.js +176 -0
  1680. package/timetable-occupancy/timetable-occupancy.d.ts +23 -0
  1681. package/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
  1682. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
  1683. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
  1684. package/timetable-occupancy-icon.d.ts +2 -0
  1685. package/timetable-occupancy-icon.d.ts.map +1 -0
  1686. package/timetable-occupancy-icon.js +53 -0
  1687. package/timetable-occupancy.d.ts +2 -0
  1688. package/timetable-occupancy.d.ts.map +1 -0
  1689. package/timetable-occupancy.js +58 -0
  1690. package/title/title-base.d.ts +26 -0
  1691. package/title/title-base.d.ts.map +1 -0
  1692. package/title/title.d.ts +16 -0
  1693. package/title/title.d.ts.map +1 -0
  1694. package/title.d.ts +3 -0
  1695. package/title.d.ts.map +1 -0
  1696. package/title.js +58 -0
  1697. package/toast/toast.d.ts +79 -0
  1698. package/toast/toast.d.ts.map +1 -0
  1699. package/toast.d.ts +2 -0
  1700. package/toast.d.ts.map +1 -0
  1701. package/toast.js +147 -0
  1702. package/toggle/toggle/toggle.d.ts +63 -0
  1703. package/toggle/toggle/toggle.d.ts.map +1 -0
  1704. package/toggle/toggle-option/toggle-option.d.ts +37 -0
  1705. package/toggle/toggle-option/toggle-option.d.ts.map +1 -0
  1706. package/toggle/toggle-option.d.ts +2 -0
  1707. package/toggle/toggle-option.d.ts.map +1 -0
  1708. package/toggle/toggle-option.js +89 -0
  1709. package/toggle/toggle.d.ts +2 -0
  1710. package/toggle/toggle.d.ts.map +1 -0
  1711. package/toggle/toggle.js +129 -0
  1712. package/toggle-check/toggle-check.d.ts +34 -0
  1713. package/toggle-check/toggle-check.d.ts.map +1 -0
  1714. package/toggle-check.d.ts +2 -0
  1715. package/toggle-check.d.ts.map +1 -0
  1716. package/toggle-check.js +56 -0
  1717. package/toggle.d.ts +3 -0
  1718. package/toggle.d.ts.map +1 -0
  1719. package/toggle.js +2 -0
  1720. package/train/train/train.d.ts +48 -0
  1721. package/train/train/train.d.ts.map +1 -0
  1722. package/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
  1723. package/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
  1724. package/train/train-blocked-passage.d.ts +2 -0
  1725. package/train/train-blocked-passage.d.ts.map +1 -0
  1726. package/train/train-blocked-passage.js +26 -0
  1727. package/train/train-formation/train-formation.d.ts +40 -0
  1728. package/train/train-formation/train-formation.d.ts.map +1 -0
  1729. package/train/train-formation.d.ts +2 -0
  1730. package/train/train-formation.d.ts.map +1 -0
  1731. package/train/train-formation.js +104 -0
  1732. package/train/train-wagon/train-wagon.d.ts +49 -0
  1733. package/train/train-wagon/train-wagon.d.ts.map +1 -0
  1734. package/train/train-wagon.d.ts +2 -0
  1735. package/train/train-wagon.d.ts.map +1 -0
  1736. package/train/train-wagon.js +148 -0
  1737. package/train/train.d.ts +2 -0
  1738. package/train/train.d.ts.map +1 -0
  1739. package/train/train.js +93 -0
  1740. package/train.d.ts +5 -0
  1741. package/train.d.ts.map +1 -0
  1742. package/train.js +4 -0
  1743. package/typography.css +79 -0
  1744. package/visual-checkbox/visual-checkbox.d.ts +21 -0
  1745. package/visual-checkbox/visual-checkbox.d.ts.map +1 -0
  1746. package/visual-checkbox.d.ts +2 -0
  1747. package/visual-checkbox.d.ts.map +1 -0
  1748. package/visual-checkbox.js +49 -0
@@ -0,0 +1,1319 @@
1
+ import { css, LitElement, isServer, html, nothing } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { classMap } from "lit/directives/class-map.js";
4
+ import { sbbInputModalityDetector, isArrowKeyOrPageKeysPressed } from "./core/a11y.js";
5
+ import { SbbConnectedAbortController, SbbLanguageController } from "./core/controllers.js";
6
+ import { defaultDateAdapter, YEARS_PER_PAGE, DAYS_PER_ROW, MONTHS_PER_ROW, YEARS_PER_ROW } from "./core/datetime.js";
7
+ import { isBreakpoint } from "./core/dom.js";
8
+ import { EventEmitter } from "./core/eventing.js";
9
+ import { i18nPreviousMonth, i18nNextMonth, i18nYearMonthSelection, i18nPreviousYear, i18nNextYear, i18nCalendarDateSelection, i18nPreviousYearRange, i18nNextYearRange } from "./core/i18n.js";
10
+ import "./button/secondary-button.js";
11
+ import "./icon.js";
12
+ import "./screen-reader-only.js";
13
+ const style = css`/**
14
+ * Better font rendering (on OS X)
15
+ * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
16
+ *
17
+ * Usage:
18
+ *
19
+ * .var_dark_on_light {
20
+ * @include font-smoothing;
21
+ * }
22
+ * .var_light_on_dark {
23
+ * @include font-smoothing-reset;
24
+ * }
25
+ */
26
+ /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
27
+ *,
28
+ ::before,
29
+ ::after {
30
+ box-sizing: border-box;
31
+ }
32
+
33
+ :host {
34
+ --sbb-calendar-cell-size: 2.5rem;
35
+ --sbb-calendar-hover-shift: 0.0625rem;
36
+ --sbb-calendar-wide-cell-size: 4.375rem;
37
+ --sbb-calendar-cell-disabled-color: var(--sbb-color-granite);
38
+ --sbb-calendar-header-color: var(--sbb-color-granite);
39
+ --sbb-calendar-cell-background-color: transparent;
40
+ --sbb-calendar-cell-padding: 0.125rem;
41
+ --sbb-calendar-cell-color: var(--sbb-color-charcoal);
42
+ --sbb-calendar-cell-selected-color: var(--sbb-color-white);
43
+ --sbb-calendar-cell-selected-background-color: var(--sbb-color-charcoal);
44
+ --sbb-calendar-cell-disabled-height: 0.09375rem;
45
+ --sbb-calendar-cell-disabled-width: 1.59375rem;
46
+ --sbb-calendar-cell-transition-duration: var(
47
+ --sbb-disable-animation-zero-time,
48
+ var(--sbb-animation-duration-2x)
49
+ );
50
+ --sbb-calendar-cell-transition-easing-function: var(--sbb-animation-easing);
51
+ --sbb-calendar-tables-gap: var(--sbb-spacing-fixed-10x);
52
+ --sbb-calendar-table-animation-shift: 0.00625rem;
53
+ --sbb-calendar-table-animation-duration: 0.1ms;
54
+ --sbb-calendar-table-column-spaces: 12;
55
+ --sbb-calendar-control-view-change-height: 2.75rem;
56
+ --sbb-calendar-control-view-change-color: var(--sbb-color-charcoal);
57
+ --sbb-calendar-control-view-change-background: var(--sbb-color-white);
58
+ display: block;
59
+ width: max-content;
60
+ }
61
+ @media (min-width: calc(22.5rem)) {
62
+ :host {
63
+ --sbb-calendar-cell-size: 2.75rem;
64
+ --sbb-calendar-wide-cell-size: 4.8125rem;
65
+ --sbb-calendar-control-view-change-height: 3rem;
66
+ }
67
+ }
68
+
69
+ .sbb-calendar__wrapper {
70
+ width: 100%;
71
+ display: block;
72
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
73
+ }
74
+
75
+ .sbb-calendar__controls {
76
+ width: 100%;
77
+ display: inline-flex;
78
+ align-items: center;
79
+ gap: var(--sbb-spacing-fixed-2x);
80
+ margin-block-end: var(--sbb-spacing-fixed-4x);
81
+ }
82
+
83
+ .sbb-calendar__controls-month {
84
+ width: 100%;
85
+ display: flex;
86
+ gap: var(--sbb-calendar-tables-gap);
87
+ }
88
+
89
+ #sbb-calendar__controls-previous,
90
+ #sbb-calendar__controls-next {
91
+ -webkit-tap-highlight-color: transparent;
92
+ }
93
+
94
+ .sbb-calendar__controls-change-date {
95
+ -webkit-appearance: none;
96
+ -moz-appearance: none;
97
+ box-sizing: border-box;
98
+ margin: 0;
99
+ outline: none;
100
+ border: none;
101
+ border-radius: 0;
102
+ padding: 0;
103
+ background: none;
104
+ -webkit-tap-highlight-color: transparent;
105
+ color: inherit;
106
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
107
+ font-family: var(--sbb-typo-font-family);
108
+ font-weight: normal;
109
+ line-height: var(--sbb-typo-line-height-body-text);
110
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
111
+ font-size: var(--sbb-text-font-size);
112
+ display: flex;
113
+ align-items: center;
114
+ margin: auto;
115
+ height: var(--sbb-calendar-control-view-change-height);
116
+ text-transform: capitalize;
117
+ cursor: pointer;
118
+ padding-inline: var(--sbb-spacing-fixed-5x) var(--sbb-spacing-fixed-2x);
119
+ border-radius: var(--sbb-border-radius-infinity);
120
+ background-color: var(--sbb-calendar-control-view-change-background);
121
+ color: var(--sbb-calendar-control-view-change-color);
122
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
123
+ transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
124
+ transition-property: background-color, padding-block-end;
125
+ }
126
+ .sbb-calendar__controls-change-date:disabled {
127
+ --sbb-calendar-control-view-change-background: var(--sbb-color-milk);
128
+ --sbb-calendar-control-view-change-color: var(--sbb-calendar-cell-disabled-color);
129
+ cursor: unset;
130
+ }
131
+ .sbb-calendar__controls-change-date:focus-visible:not([data-focus-origin=mouse], [data-focus-origin=touch]) {
132
+ outline-offset: var(--sbb-focus-outline-offset);
133
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
134
+ outline-offset: var(--sbb-spacing-fixed-1x);
135
+ }
136
+ @media (any-hover: hover) {
137
+ .sbb-calendar__controls-change-date:not(:active, :disabled):hover {
138
+ padding-block-end: var(--sbb-calendar-hover-shift);
139
+ }
140
+ }
141
+ .sbb-calendar__controls-change-date:not(:disabled):active {
142
+ --sbb-calendar-control-view-change-background: var(--sbb-color-milk);
143
+ }
144
+
145
+ .sbb-calendar__table-month-view,
146
+ .sbb-calendar__table-year-view {
147
+ --sbb-calendar-table-column-spaces: 6;
148
+ }
149
+
150
+ .sbb-calendar__table-container {
151
+ display: flex;
152
+ gap: var(--sbb-calendar-tables-gap);
153
+ --sbb-calendar-min-width: calc(7 * var(--sbb-calendar-cell-size));
154
+ --sbb-calendar-overflow: calc(100% - var(--sbb-calendar-min-width));
155
+ --sbb-calendar-start-offset: min(
156
+ 0px,
157
+ -1 * (var(--sbb-calendar-overflow) / var(--sbb-calendar-table-column-spaces))
158
+ );
159
+ --sbb-calendar-margin: var(--sbb-calendar-start-offset);
160
+ margin-inline: var(--sbb-calendar-margin);
161
+ }
162
+ :host([data-wide]) .sbb-calendar__table-container {
163
+ --sbb-calendar-min-width: calc(
164
+ 2 * 7 * var(--sbb-calendar-cell-size) + var(--sbb-calendar-tables-gap)
165
+ );
166
+ --sbb-calendar-margin: calc(0.5 * var(--sbb-calendar-start-offset));
167
+ }
168
+
169
+ .sbb-calendar__table {
170
+ width: 100%;
171
+ border-collapse: collapse;
172
+ height: max-content;
173
+ animation-name: show;
174
+ animation-duration: var(--sbb-calendar-table-animation-duration);
175
+ }
176
+ .sbb-calendar__table.sbb-calendar__table-hide {
177
+ --sbb-calendar-cell-transition-duration: 0ms;
178
+ animation-name: hide;
179
+ animation-duration: var(--sbb-calendar-table-animation-duration);
180
+ }
181
+ :host(:not([data-wide])) .sbb-calendar__table {
182
+ min-width: 100%;
183
+ }
184
+
185
+ .sbb-calendar__table-header {
186
+ --sbb-text-font-size: var(--sbb-font-size-text-xs);
187
+ font-family: var(--sbb-typo-font-family);
188
+ font-weight: normal;
189
+ line-height: var(--sbb-typo-line-height-body-text);
190
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
191
+ font-size: var(--sbb-text-font-size);
192
+ color: var(--sbb-calendar-header-color);
193
+ width: var(--sbb-calendar-cell-size);
194
+ padding: 0;
195
+ padding-block-end: var(--sbb-spacing-fixed-4x);
196
+ text-align: center;
197
+ }
198
+
199
+ .sbb-calendar__table-data {
200
+ position: relative;
201
+ padding: 0;
202
+ text-align: center;
203
+ }
204
+
205
+ .sbb-calendar__cell {
206
+ -webkit-appearance: none;
207
+ -moz-appearance: none;
208
+ box-sizing: border-box;
209
+ margin: 0;
210
+ outline: none;
211
+ border: none;
212
+ border-radius: 0;
213
+ padding: 0;
214
+ background: none;
215
+ -webkit-tap-highlight-color: transparent;
216
+ color: inherit;
217
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
218
+ font-family: var(--sbb-typo-font-family);
219
+ font-weight: normal;
220
+ line-height: var(--sbb-typo-line-height-body-text);
221
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
222
+ font-size: var(--sbb-text-font-size);
223
+ height: var(--sbb-calendar-cell-size);
224
+ color: var(--sbb-calendar-cell-color);
225
+ cursor: pointer;
226
+ position: relative;
227
+ z-index: 0;
228
+ }
229
+ .sbb-calendar__cell::before {
230
+ content: "";
231
+ position: absolute;
232
+ inset: var(--sbb-calendar-cell-padding);
233
+ background-color: var(--sbb-calendar-cell-background-color);
234
+ border-radius: 50%;
235
+ z-index: -1;
236
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
237
+ transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
238
+ transition-property: background-color;
239
+ }
240
+ @media (any-hover: hover) {
241
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover {
242
+ --sbb-calendar-cell-background-color: var(--sbb-color-milk);
243
+ padding-block-end: var(--sbb-calendar-hover-shift);
244
+ }
245
+ }
246
+ @media (any-hover: hover) and (forced-colors: active) {
247
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover::before {
248
+ outline-offset: var(--sbb-focus-outline-offset);
249
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
250
+ }
251
+ }
252
+ .sbb-calendar__cell:disabled {
253
+ --sbb-calendar-cell-color: var(--sbb-calendar-cell-disabled-color);
254
+ cursor: unset;
255
+ }
256
+ .sbb-calendar__cell:focus-visible::before {
257
+ outline-offset: var(--sbb-focus-outline-offset);
258
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
259
+ }
260
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active {
261
+ --sbb-calendar-cell-background-color: var(--sbb-color-cloud);
262
+ }
263
+ @media (forced-colors: active) {
264
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active::before {
265
+ outline-offset: var(--sbb-focus-outline-offset);
266
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
267
+ }
268
+ }
269
+
270
+ .sbb-calendar__day {
271
+ border-radius: 50%;
272
+ width: var(--sbb-calendar-cell-size);
273
+ }
274
+ .sbb-calendar__day::before {
275
+ border-radius: 50%;
276
+ }
277
+
278
+ .sbb-calendar__pill {
279
+ width: var(--sbb-calendar-wide-cell-size);
280
+ border-radius: var(--sbb-border-radius-infinity);
281
+ }
282
+ .sbb-calendar__pill::before {
283
+ border-radius: var(--sbb-border-radius-infinity);
284
+ }
285
+
286
+ .sbb-calendar__crossed-out::after {
287
+ content: "";
288
+ height: var(--sbb-calendar-cell-disabled-height);
289
+ width: var(--sbb-calendar-cell-disabled-width);
290
+ position: absolute;
291
+ background-color: var(--sbb-calendar-cell-disabled-color);
292
+ top: 50%;
293
+ left: 50%;
294
+ transform: translate(-50%, -50%) rotate(-45deg);
295
+ }
296
+
297
+ .sbb-calendar__cell-current {
298
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
299
+ font-family: var(--sbb-typo-font-family);
300
+ font-weight: normal;
301
+ line-height: var(--sbb-typo-line-height-body-text);
302
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
303
+ font-size: var(--sbb-text-font-size);
304
+ font-weight: bold;
305
+ }
306
+
307
+ .sbb-calendar__selected {
308
+ --sbb-calendar-cell-color: var(--sbb-calendar-cell-selected-color);
309
+ --sbb-calendar-cell-background-color: var(--sbb-calendar-cell-selected-background-color);
310
+ }
311
+ @media (forced-colors: active) {
312
+ .sbb-calendar__selected {
313
+ --sbb-calendar-cell-background-color: ButtonText !important;
314
+ }
315
+ }
316
+
317
+ @keyframes show {
318
+ from {
319
+ opacity: 0;
320
+ transform: translateY(var(--sbb-calendar-table-animation-shift));
321
+ }
322
+ to {
323
+ opacity: 1;
324
+ transform: translateY(0%);
325
+ }
326
+ }
327
+ @keyframes hide {
328
+ from {
329
+ opacity: 1;
330
+ transform: translateY(0%);
331
+ }
332
+ to {
333
+ opacity: 0;
334
+ transform: translateY(var(--sbb-calendar-table-animation-shift));
335
+ }
336
+ }`;
337
+ var __defProp = Object.defineProperty;
338
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
339
+ var __decorateClass = (decorators, target, key, kind) => {
340
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
341
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
342
+ if (decorator = decorators[i])
343
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
344
+ if (kind && result)
345
+ __defProp(target, key, result);
346
+ return result;
347
+ };
348
+ let SbbCalendarElement = class extends LitElement {
349
+ constructor() {
350
+ super();
351
+ this.wide = false;
352
+ this._now = null;
353
+ this._dateAdapter = defaultDateAdapter;
354
+ this._dateSelected = new EventEmitter(
355
+ this,
356
+ SbbCalendarElement.events.dateSelected
357
+ );
358
+ this._activeDate = this.now;
359
+ this._calendarView = "day";
360
+ this._nextCalendarView = "day";
361
+ this._weeks = [];
362
+ this._monthNames = this._dateAdapter.getMonthNames("long");
363
+ this._resetFocus = false;
364
+ this._initialized = false;
365
+ this._abort = new SbbConnectedAbortController(this);
366
+ this._language = new SbbLanguageController(this).withHandler(() => {
367
+ this._monthNames = this._dateAdapter.getMonthNames("long");
368
+ this._createMonthRows();
369
+ });
370
+ this._createMonthRows();
371
+ this._setWeekdays();
372
+ }
373
+ set min(value) {
374
+ this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
375
+ }
376
+ get min() {
377
+ return this._min ?? null;
378
+ }
379
+ set max(value) {
380
+ this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
381
+ }
382
+ get max() {
383
+ return this._max ?? null;
384
+ }
385
+ set now(value) {
386
+ this._now = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
387
+ }
388
+ get now() {
389
+ return this._now ?? this._dateAdapter.today();
390
+ }
391
+ set selected(value) {
392
+ this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
393
+ if (!!this._selectedDate && (!this._isDayInRange(this._dateAdapter.toIso8601(this._selectedDate)) || this._dateFilter(this._selectedDate))) {
394
+ this._selected = this._dateAdapter.toIso8601(this._selectedDate);
395
+ } else {
396
+ this._selected = void 0;
397
+ }
398
+ }
399
+ get selected() {
400
+ return this._selectedDate ?? null;
401
+ }
402
+ set _wide(wide) {
403
+ this.toggleAttribute("data-wide", wide);
404
+ }
405
+ get _wide() {
406
+ return this.hasAttribute("data-wide");
407
+ }
408
+ /** A list of buttons corresponding to days, months or years depending on the view. */
409
+ get _cells() {
410
+ return Array.from(
411
+ this.shadowRoot.querySelectorAll(".sbb-calendar__cell") ?? []
412
+ );
413
+ }
414
+ get _dateFilter() {
415
+ return this.dateFilter ?? (() => true);
416
+ }
417
+ /** Resets the active month according to the new state of the calendar. */
418
+ resetPosition() {
419
+ if (this._calendarView !== "day") {
420
+ this._resetToDayView();
421
+ }
422
+ this._activeDate = this.selected ?? this.now;
423
+ this._init();
424
+ }
425
+ connectedCallback() {
426
+ var _a;
427
+ super.connectedCallback();
428
+ this.resetPosition();
429
+ this.focus = () => {
430
+ this._resetFocus = true;
431
+ this._focusCell();
432
+ };
433
+ (_a = globalThis.window) == null ? void 0 : _a.addEventListener("resize", () => this._init(), {
434
+ passive: true,
435
+ signal: this._abort.signal
436
+ });
437
+ }
438
+ willUpdate(changedProperties) {
439
+ super.willUpdate(changedProperties);
440
+ if (!this._initialized) {
441
+ return;
442
+ }
443
+ if (changedProperties.has("wide")) {
444
+ this.resetPosition();
445
+ }
446
+ }
447
+ updated(changedProperties) {
448
+ super.updated(changedProperties);
449
+ this._setTabIndex();
450
+ if (sbbInputModalityDetector.mostRecentModality === "keyboard") {
451
+ this._focusCell();
452
+ }
453
+ }
454
+ /** Initializes the component. */
455
+ _init(activeDate) {
456
+ if (isServer) {
457
+ return;
458
+ }
459
+ if (activeDate) {
460
+ this._assignActiveDate(activeDate);
461
+ }
462
+ this._wide = isBreakpoint("medium") && this.wide;
463
+ this._weeks = this._createWeekRows(this._activeDate);
464
+ this._years = this._createYearRows();
465
+ this._nextMonthWeeks = [[]];
466
+ this._nextMonthYears = [[]];
467
+ if (this._wide) {
468
+ const nextMonthDate = this._dateAdapter.addCalendarMonths(this._activeDate, 1);
469
+ this._nextMonthWeeks = this._createWeekRows(nextMonthDate);
470
+ this._nextMonthYears = this._createYearRows(YEARS_PER_PAGE);
471
+ }
472
+ this._initialized = true;
473
+ }
474
+ /** Focuses on a day cell prioritizing the selected day, the current day, and lastly, the first selectable day. */
475
+ _focusCell() {
476
+ var _a;
477
+ if (this._resetFocus) {
478
+ (_a = this._getFirstFocusable()) == null ? void 0 : _a.focus();
479
+ this._resetFocus = false;
480
+ }
481
+ }
482
+ /** Creates the array of weekdays. */
483
+ _setWeekdays() {
484
+ const narrowWeekdays = this._dateAdapter.getDayOfWeekNames("narrow");
485
+ const longWeekdays = this._dateAdapter.getDayOfWeekNames("long");
486
+ const weekdays = longWeekdays.map((long, i) => ({
487
+ long,
488
+ narrow: narrowWeekdays[i]
489
+ }));
490
+ const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();
491
+ this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));
492
+ }
493
+ /** Creates the rows for each week. */
494
+ _createWeekRows(value) {
495
+ const daysInMonth = this._dateAdapter.getNumDaysInMonth(value);
496
+ const dateNames = this._dateAdapter.getDateNames();
497
+ const weeks = [[]];
498
+ const weekOffset = this._dateAdapter.getFirstWeekOffset(value);
499
+ for (let i = 0, cell = weekOffset; i < daysInMonth; i++, cell++) {
500
+ if (cell === DAYS_PER_ROW) {
501
+ weeks.push([]);
502
+ cell = 0;
503
+ }
504
+ const date = this._dateAdapter.createDate(
505
+ this._dateAdapter.getYear(value),
506
+ this._dateAdapter.getMonth(value),
507
+ i + 1
508
+ );
509
+ weeks[weeks.length - 1].push({
510
+ value: this._dateAdapter.toIso8601(date),
511
+ dayValue: dateNames[i],
512
+ monthValue: String(this._dateAdapter.getMonth(date)),
513
+ yearValue: String(this._dateAdapter.getYear(date))
514
+ });
515
+ }
516
+ return weeks;
517
+ }
518
+ /** Creates the rows for the month selection view. */
519
+ _createMonthRows() {
520
+ const shortNames = this._dateAdapter.getMonthNames("short");
521
+ const months = new Array(12).fill(null).map(
522
+ (_, i) => ({
523
+ value: shortNames[i],
524
+ longValue: this._monthNames[i],
525
+ monthValue: i + 1
526
+ })
527
+ );
528
+ const rows = 12 / MONTHS_PER_ROW;
529
+ const monthArray = [];
530
+ for (let i = 0; i < rows; i++) {
531
+ monthArray.push(months.slice(MONTHS_PER_ROW * i, MONTHS_PER_ROW * (i + 1)));
532
+ }
533
+ this._months = monthArray;
534
+ }
535
+ /** Creates the rows for the year selection view. */
536
+ _createYearRows(offset = 0) {
537
+ const startValueYearView = this._getStartValueYearView();
538
+ const allYears = new Array(YEARS_PER_PAGE).fill(0).map((_, i) => startValueYearView + offset + i);
539
+ const rows = YEARS_PER_PAGE / YEARS_PER_ROW;
540
+ const yearArray = [];
541
+ for (let i = 0; i < rows; i++) {
542
+ yearArray.push(allYears.slice(YEARS_PER_ROW * i, YEARS_PER_ROW * (i + 1)));
543
+ }
544
+ return yearArray;
545
+ }
546
+ /**
547
+ * Calculates the first year that will be shown in the year selection panel.
548
+ * If `minDate` and `maxDate` are both null, the starting year is calculated as
549
+ * the multiple of YEARS_PER_PAGE closest to and less than activeDate,
550
+ * e.g., with `YEARS_PER_PAGE` = 24 and `activeDate` = 2020, the function will return 2016 (24 * 83),
551
+ * while with `activeDate` = 2000, the function will return 1992 (24 * 82).
552
+ * If `minDate` is not null, it returns the corresponding year; if `maxDate` is not null,
553
+ * it returns the corresponding year minus `YEARS_PER_PAGE`, so that the `maxDate` is the last rendered year.
554
+ * If both are not null, `maxDate` has priority over `minDate`.
555
+ */
556
+ _getStartValueYearView() {
557
+ let startingYear = 0;
558
+ if (this.max) {
559
+ startingYear = this._dateAdapter.getYear(this.max) - YEARS_PER_PAGE + 1;
560
+ } else if (this.min) {
561
+ startingYear = this._dateAdapter.getYear(this.min);
562
+ }
563
+ const activeYear = this._dateAdapter.getYear(this._activeDate);
564
+ return activeYear - ((activeYear - startingYear) % YEARS_PER_PAGE + YEARS_PER_PAGE) % YEARS_PER_PAGE;
565
+ }
566
+ /** Checks if date is within the min-max range. */
567
+ _isDayInRange(date) {
568
+ if (!this._min && !this._max) {
569
+ return true;
570
+ }
571
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.compareDate(this._min, this._dateAdapter.deserialize(date)) > 0;
572
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.compareDate(this._max, this._dateAdapter.deserialize(date)) < 0;
573
+ return !(isBeforeMin || isAfterMax);
574
+ }
575
+ _isMonthInRange(month) {
576
+ if (!this._min && !this._max) {
577
+ return true;
578
+ }
579
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) >= this._chosenYear && this._dateAdapter.getMonth(this._min) > month;
580
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) <= this._chosenYear && this._dateAdapter.getMonth(this._max) < month;
581
+ return !(isBeforeMin || isAfterMax);
582
+ }
583
+ _isYearInRange(year) {
584
+ if (!this._min && !this._max) {
585
+ return true;
586
+ }
587
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) > year;
588
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) < year;
589
+ return !(isBeforeMin || isAfterMax);
590
+ }
591
+ // Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/year-view.ts#L366
592
+ _isMonthFilteredOut(month) {
593
+ if (!this.dateFilter) {
594
+ return true;
595
+ }
596
+ const firstOfMonth = this._dateAdapter.createDate(this._chosenYear, month, 1);
597
+ for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {
598
+ if (this.dateFilter(date)) {
599
+ return true;
600
+ }
601
+ }
602
+ return false;
603
+ }
604
+ // Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/multi-year-view.ts#L351
605
+ _isYearFilteredOut(year) {
606
+ if (!this.dateFilter) {
607
+ return true;
608
+ }
609
+ const firstOfYear = this._dateAdapter.createDate(year, 1, 1);
610
+ for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {
611
+ if (this.dateFilter(date)) {
612
+ return true;
613
+ }
614
+ }
615
+ return false;
616
+ }
617
+ /** Emits the selected date and sets it internally. */
618
+ _selectDate(day) {
619
+ this._chosenMonth = void 0;
620
+ this._chosenYear = void 0;
621
+ if (this._selected !== day) {
622
+ this._selected = day;
623
+ this._dateSelected.emit(this._dateAdapter.deserialize(day));
624
+ }
625
+ }
626
+ _assignActiveDate(date) {
627
+ if (this._min && this._dateAdapter.compareDate(this._min, date) > 0) {
628
+ this._activeDate = this._min;
629
+ return;
630
+ }
631
+ if (this._max && this._dateAdapter.compareDate(this._max, date) < 0) {
632
+ this._activeDate = this._max;
633
+ return;
634
+ }
635
+ this._activeDate = date;
636
+ }
637
+ /** Goes to the month identified by the shift. */
638
+ _goToDifferentMonth(months) {
639
+ this._init(this._dateAdapter.addCalendarMonths(this._activeDate, months));
640
+ }
641
+ _goToDifferentYear(years) {
642
+ this._chosenYear += years;
643
+ this._activeDate = this._dateAdapter.createDate(
644
+ this._chosenYear,
645
+ this._dateAdapter.getMonth(this._activeDate),
646
+ this._dateAdapter.getDate(this._activeDate)
647
+ );
648
+ this._init();
649
+ }
650
+ _goToDifferentYearRange(years) {
651
+ this._init(this._dateAdapter.addCalendarYears(this._activeDate, years));
652
+ }
653
+ _prevDisabled(prevDate) {
654
+ if (!this._min) {
655
+ return false;
656
+ }
657
+ return this._dateAdapter.compareDate(prevDate, this._min) < 0;
658
+ }
659
+ _nextDisabled(nextDate) {
660
+ if (!this._max) {
661
+ return false;
662
+ }
663
+ return this._dateAdapter.compareDate(nextDate, this._max) > 0;
664
+ }
665
+ /** Checks if the "previous month" button should be disabled. */
666
+ _previousMonthDisabled() {
667
+ const prevMonth = this._dateAdapter.addCalendarDays(
668
+ this._activeDate,
669
+ this._dateAdapter.getDate(this._activeDate) * -1
670
+ );
671
+ return this._prevDisabled(prevMonth);
672
+ }
673
+ /** Checks if the "next month" button should be disabled. */
674
+ _nextMonthDisabled() {
675
+ let nextMonth = this._dateAdapter.addCalendarMonths(this._activeDate, this._wide ? 2 : 1);
676
+ nextMonth = this._dateAdapter.createDate(
677
+ this._dateAdapter.getYear(nextMonth),
678
+ this._dateAdapter.getMonth(nextMonth),
679
+ 1
680
+ );
681
+ return this._nextDisabled(nextMonth);
682
+ }
683
+ _previousYearDisabled() {
684
+ const prevYear = this._dateAdapter.createDate(
685
+ this._dateAdapter.getYear(this._activeDate) - 1,
686
+ 12,
687
+ 31
688
+ );
689
+ return this._prevDisabled(prevYear);
690
+ }
691
+ _nextYearDisabled() {
692
+ const nextYear = this._dateAdapter.createDate(
693
+ this._dateAdapter.getYear(this._activeDate) + 1,
694
+ 1,
695
+ 1
696
+ );
697
+ return this._nextDisabled(nextYear);
698
+ }
699
+ _previousYearRangeDisabled() {
700
+ const prevYear = this._dateAdapter.createDate(this._years[0][0] - 1, 12, 31);
701
+ return this._prevDisabled(prevYear);
702
+ }
703
+ _nextYearRangeDisabled() {
704
+ const years = isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years;
705
+ const lastYearRange = years[years.length - 1];
706
+ const lastYear = lastYearRange[lastYearRange.length - 1];
707
+ const nextYear = this._dateAdapter.createDate(lastYear + 1, 1, 1);
708
+ return this._nextDisabled(nextYear);
709
+ }
710
+ _handleTableBlur(eventTarget) {
711
+ if ((eventTarget == null ? void 0 : eventTarget.localName) !== "button") {
712
+ this._setTabIndex();
713
+ }
714
+ }
715
+ _setTabIndex() {
716
+ Array.from(
717
+ this.shadowRoot.querySelectorAll('.sbb-calendar__cell[tabindex="0"]') ?? []
718
+ ).forEach((day) => day.tabIndex = -1);
719
+ const firstFocusable = this._getFirstFocusable();
720
+ if (firstFocusable) {
721
+ firstFocusable.tabIndex = 0;
722
+ }
723
+ }
724
+ _getFirstFocusable() {
725
+ const active = this._selected ? this._dateAdapter.deserialize(this._selected) : this.now;
726
+ let firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__selected") ?? this.shadowRoot.querySelector(
727
+ `[data-day="${this._dateAdapter.getDate(active)} ${this._dateAdapter.getMonth(
728
+ active
729
+ )} ${this._dateAdapter.getYear(active)}"]`
730
+ ) ?? this.shadowRoot.querySelector(`[data-month="${this._dateAdapter.getMonth(active)}"]`) ?? this.shadowRoot.querySelector(`[data-year="${this._dateAdapter.getYear(active)}"]`);
731
+ if (!firstFocusable || (firstFocusable == null ? void 0 : firstFocusable.disabled)) {
732
+ firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__cell:not([disabled])");
733
+ }
734
+ return firstFocusable || null;
735
+ }
736
+ _handleKeyboardEvent(event, day) {
737
+ if (isArrowKeyOrPageKeysPressed(event)) {
738
+ event.preventDefault();
739
+ }
740
+ const cells = this._cells;
741
+ const index = cells.findIndex((e) => e === event.target);
742
+ const nextEl = this._navigateByKeyboard(event, index, cells, day);
743
+ const activeEl = this.shadowRoot.activeElement;
744
+ if (nextEl !== activeEl) {
745
+ nextEl.tabIndex = 0;
746
+ nextEl == null ? void 0 : nextEl.focus();
747
+ activeEl.tabIndex = -1;
748
+ }
749
+ }
750
+ /**
751
+ * Gets the index of the element to move to, based on a list of elements (which can be potentially disabled),
752
+ * the keyboard input and the position of the current element in the list.
753
+ * In the day view, the `day?: Day` parameter is mandatory for calculation,
754
+ * while in month and year view it's not due to the fixed amount of rendered cells.
755
+ */
756
+ _navigateByKeyboard(evt, index, cells, day) {
757
+ const {
758
+ elementIndexForWideMode,
759
+ offsetForWideMode,
760
+ lastElementIndexForWideMode,
761
+ verticalOffset
762
+ } = this._calculateParametersForKeyboardNavigation(
763
+ cells,
764
+ index,
765
+ day
766
+ );
767
+ switch (evt.key) {
768
+ case "ArrowUp":
769
+ return this._findNext(cells, index, -verticalOffset);
770
+ case "ArrowDown":
771
+ return this._findNext(cells, index, verticalOffset);
772
+ case "ArrowLeft":
773
+ return this._findNext(cells, index, -1);
774
+ case "ArrowRight":
775
+ return this._findNext(cells, index, 1);
776
+ case "Home":
777
+ return this._findFirst(cells, offsetForWideMode);
778
+ case "PageUp":
779
+ return this._findFirstOnColumn(
780
+ cells,
781
+ elementIndexForWideMode,
782
+ offsetForWideMode,
783
+ verticalOffset
784
+ );
785
+ case "PageDown":
786
+ return this._findLastOnColumn(cells, index, lastElementIndexForWideMode, verticalOffset);
787
+ case "End":
788
+ return this._findLast(cells, lastElementIndexForWideMode - 1);
789
+ default:
790
+ return cells[index];
791
+ }
792
+ }
793
+ /**
794
+ * Calculates the parameter needed in keyboard navigation.
795
+ * Since three views are now available, the function creates and returns the correct parameters for each of them
796
+ * by considering the number of cells per each row and the correction for the wide mode.
797
+ * @param cells The array of rendered table cells; they are buttons that can represent days, months or years.
798
+ * @param index The starting element's index in the cell array.
799
+ * @param day (optional) Only in the day view, the day represented by the starting cell.
800
+ */
801
+ _calculateParametersForKeyboardNavigation(cells, index, day) {
802
+ switch (this._calendarView) {
803
+ case "day": {
804
+ const indexInView = +day.dayValue - 1;
805
+ return {
806
+ verticalOffset: DAYS_PER_ROW,
807
+ elementIndexForWideMode: indexInView,
808
+ offsetForWideMode: index - indexInView,
809
+ lastElementIndexForWideMode: index === indexInView ? this._dateAdapter.getNumDaysInMonth(
810
+ this._dateAdapter.addCalendarMonths(
811
+ this._dateAdapter.deserialize(day.value),
812
+ -1
813
+ )
814
+ ) : cells.length
815
+ };
816
+ }
817
+ case "month": {
818
+ return {
819
+ verticalOffset: MONTHS_PER_ROW,
820
+ elementIndexForWideMode: index,
821
+ offsetForWideMode: 0,
822
+ lastElementIndexForWideMode: 12
823
+ };
824
+ }
825
+ case "year": {
826
+ const offset = Math.trunc(index / YEARS_PER_PAGE) * YEARS_PER_PAGE;
827
+ const indexInView = offset === 0 ? index : index - YEARS_PER_PAGE;
828
+ return {
829
+ verticalOffset: YEARS_PER_ROW,
830
+ elementIndexForWideMode: indexInView,
831
+ offsetForWideMode: index - indexInView,
832
+ lastElementIndexForWideMode: offset === 0 ? YEARS_PER_PAGE : YEARS_PER_PAGE * 2
833
+ };
834
+ }
835
+ }
836
+ }
837
+ /**
838
+ * Gets the next element of the provided array starting from `index` by adding `delta`.
839
+ * If the found element is disabled, it continues adding `delta` until it finds an enabled one in the array bounds.
840
+ */
841
+ _findNext(days, index, delta) {
842
+ var _a;
843
+ let nextIndex = index + delta;
844
+ while (nextIndex < days.length && ((_a = days[nextIndex]) == null ? void 0 : _a.disabled)) {
845
+ nextIndex += delta;
846
+ }
847
+ return days[nextIndex] ?? days[index];
848
+ }
849
+ /** Find the first enabled element in the provided array. */
850
+ _findFirst(days, firstOfCurrentMonth) {
851
+ return !days[firstOfCurrentMonth].disabled ? days[firstOfCurrentMonth] : this._findNext(days, firstOfCurrentMonth, 1);
852
+ }
853
+ /** Find the last enabled element in the provided array. */
854
+ _findLast(days, lastOfCurrentMonth) {
855
+ return !days[lastOfCurrentMonth].disabled ? days[lastOfCurrentMonth] : this._findNext(days, lastOfCurrentMonth, -1);
856
+ }
857
+ /** Find the first enabled element in the same column of the provided array. */
858
+ _findFirstOnColumn(days, index, offset, verticalOffset) {
859
+ const nextIndex = index % verticalOffset + offset;
860
+ return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, verticalOffset);
861
+ }
862
+ /** Find the last enabled element in the same column of the provided array. */
863
+ _findLastOnColumn(days, index, offset, verticalOffset) {
864
+ const nextIndex = index + Math.trunc((offset - index - 1) / verticalOffset) * verticalOffset;
865
+ return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, -verticalOffset);
866
+ }
867
+ _resetToDayView() {
868
+ this._resetFocus = true;
869
+ this._activeDate = this.selected ?? this.now;
870
+ this._chosenYear = void 0;
871
+ this._chosenMonth = void 0;
872
+ this._nextCalendarView = "day";
873
+ this._removeTable();
874
+ }
875
+ /** Render the view for the day selection. */
876
+ _renderDayView() {
877
+ const nextMonthActiveDate = this._wide ? this._dateAdapter.addCalendarMonths(this._activeDate, 1) : void 0;
878
+ return html`
879
+ <div class="sbb-calendar__controls">
880
+ ${this._getArrow(
881
+ "left",
882
+ () => this._goToDifferentMonth(-1),
883
+ i18nPreviousMonth[this._language.current],
884
+ this._previousMonthDisabled()
885
+ )}
886
+ <div class="sbb-calendar__controls-month">
887
+ ${this._createLabelForDayView(this._activeDate)}
888
+ ${this._wide ? this._createLabelForDayView(nextMonthActiveDate) : nothing}
889
+ <sbb-screen-reader-only role="status">
890
+ ${this._createAriaLabelForDayView(this._activeDate, nextMonthActiveDate)}
891
+ </sbb-screen-reader-only>
892
+ </div>
893
+ ${this._getArrow(
894
+ "right",
895
+ () => this._goToDifferentMonth(1),
896
+ i18nNextMonth[this._language.current],
897
+ this._nextMonthDisabled()
898
+ )}
899
+ </div>
900
+ <div class="sbb-calendar__table-container sbb-calendar__table-day-view">
901
+ ${this._createDayTable(this._weeks)}
902
+ ${this._wide ? this._createDayTable(this._nextMonthWeeks) : nothing}
903
+ </div>
904
+ `;
905
+ }
906
+ /** Creates the label with the month for the daily view. */
907
+ _createLabelForDayView(d) {
908
+ const monthLabel = `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)}`;
909
+ return html`
910
+ <button
911
+ type="button"
912
+ id="sbb-calendar__date-selection"
913
+ class="sbb-calendar__controls-change-date"
914
+ aria-label="${i18nYearMonthSelection[this._language.current]} ${monthLabel}"
915
+ @click=${() => {
916
+ this._resetFocus = true;
917
+ this._nextCalendarView = "year";
918
+ this._removeTable();
919
+ }}
920
+ >
921
+ ${monthLabel}
922
+ <sbb-icon name="chevron-small-down-small"></sbb-icon>
923
+ </button>
924
+ `;
925
+ }
926
+ /** Creates the aria-label for the daily view. */
927
+ _createAriaLabelForDayView(...dates) {
928
+ let monthLabel = "";
929
+ for (const d of dates) {
930
+ if (d) {
931
+ monthLabel += `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)} `;
932
+ }
933
+ }
934
+ return monthLabel;
935
+ }
936
+ /** Creates the calendar table for the daily view. */
937
+ _createDayTable(weeks) {
938
+ return html`
939
+ <table
940
+ class="sbb-calendar__table"
941
+ @focusout=${(event) => this._handleTableBlur(event.relatedTarget)}
942
+ @animationend=${(e) => this._tableAnimationEnd(e)}
943
+ >
944
+ <thead class="sbb-calendar__table-header">
945
+ <tr class="sbb-calendar__table-header-row">
946
+ ${this._createDayTableHeader()}
947
+ </tr>
948
+ </thead>
949
+ <tbody class="sbb-calendar__table-body">
950
+ ${this._createDayTableBody(weeks)}
951
+ </tbody>
952
+ </table>
953
+ `;
954
+ }
955
+ /** Creates the table header with the month header cells. */
956
+ _createDayTableHeader() {
957
+ return this._weekdays.map(
958
+ (day) => html`
959
+ <th class="sbb-calendar__table-header">
960
+ <sbb-screen-reader-only>${day.long}</sbb-screen-reader-only>
961
+ <span aria-hidden="true">${day.narrow}</span>
962
+ </th>
963
+ `
964
+ );
965
+ }
966
+ /** Creates the table body with the day cells. For the first row, it also considers the possible day's offset. */
967
+ _createDayTableBody(weeks) {
968
+ const today = this._dateAdapter.toIso8601(this.now);
969
+ return weeks.map((week, rowIndex) => {
970
+ const firstRowOffset = DAYS_PER_ROW - week.length;
971
+ if (rowIndex === 0 && firstRowOffset) {
972
+ return html`
973
+ <tr>
974
+ ${[...Array(firstRowOffset).keys()].map(
975
+ () => html`<td
976
+ class="sbb-calendar__table-data"
977
+ data-day=${`0 ${week[0].monthValue} ${week[0].yearValue}`}
978
+ ></td>`
979
+ )}
980
+ ${this._createDayCells(week, today)}
981
+ </tr>
982
+ `;
983
+ }
984
+ return html`<tr>
985
+ ${this._createDayCells(week, today)}
986
+ </tr>`;
987
+ });
988
+ }
989
+ /** Creates the cells for the daily view. */
990
+ _createDayCells(week, today) {
991
+ return week.map((day) => {
992
+ const isOutOfRange = !this._isDayInRange(day.value);
993
+ const isFilteredOut = !this._dateFilter(this._dateAdapter.deserialize(day.value));
994
+ const selected = !!this._selected && day.value === this._selected;
995
+ const dayValue = `${day.dayValue} ${day.monthValue} ${day.yearValue}`;
996
+ const isToday = day.value === today;
997
+ return html`
998
+ <td
999
+ class=${classMap({
1000
+ "sbb-calendar__table-data": true,
1001
+ "sbb-calendar__table-data-selected": selected
1002
+ })}
1003
+ >
1004
+ <button
1005
+ class=${classMap({
1006
+ "sbb-calendar__cell": true,
1007
+ "sbb-calendar__day": true,
1008
+ "sbb-calendar__cell-current": isToday,
1009
+ "sbb-calendar__selected": selected,
1010
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut
1011
+ })}
1012
+ @click=${() => this._selectDate(day.value)}
1013
+ ?disabled=${isOutOfRange || isFilteredOut}
1014
+ aria-label=${this._dateAdapter.getAccessibilityFormatDate(day.value)}
1015
+ aria-pressed=${selected}
1016
+ aria-disabled=${isOutOfRange || isFilteredOut}
1017
+ aria-current=${isToday ? "date" : nothing}
1018
+ data-day=${dayValue || nothing}
1019
+ tabindex="-1"
1020
+ @keydown=${(evt) => this._handleKeyboardEvent(evt, day)}
1021
+ sbb-popover-close
1022
+ >
1023
+ ${day.dayValue}
1024
+ </button>
1025
+ </td>
1026
+ `;
1027
+ });
1028
+ }
1029
+ /** Render the view for the month selection. */
1030
+ _renderMonthView() {
1031
+ return html`
1032
+ <div class="sbb-calendar__controls">
1033
+ ${this._getArrow(
1034
+ "left",
1035
+ () => this._goToDifferentYear(-1),
1036
+ i18nPreviousYear[this._language.current],
1037
+ this._previousYearDisabled()
1038
+ )}
1039
+ <div class="sbb-calendar__controls-month">${this._createLabelForMonthView()}</div>
1040
+ ${this._getArrow(
1041
+ "right",
1042
+ () => this._goToDifferentYear(1),
1043
+ i18nNextYear[this._language.current],
1044
+ this._nextYearDisabled()
1045
+ )}
1046
+ </div>
1047
+ <div class="sbb-calendar__table-container sbb-calendar__table-month-view">
1048
+ ${this._createMonthTable(this._months, this._chosenYear)}
1049
+ ${this._wide ? this._createMonthTable(this._months, this._chosenYear + 1, true) : nothing}
1050
+ </div>
1051
+ `;
1052
+ }
1053
+ /** Creates the label with the year for the monthly view. */
1054
+ _createLabelForMonthView() {
1055
+ return html` <button
1056
+ type="button"
1057
+ id="sbb-calendar__month-selection"
1058
+ class="sbb-calendar__controls-change-date"
1059
+ aria-label=${`${i18nCalendarDateSelection[this._language.current]} ${this._chosenYear}`}
1060
+ @click=${() => this._resetToDayView()}
1061
+ >
1062
+ ${this._chosenYear} ${this._wide ? ` - ${this._chosenYear + 1}` : nothing}
1063
+ <sbb-icon name="chevron-small-up-small"></sbb-icon>
1064
+ </button>
1065
+ <sbb-screen-reader-only role="status"> ${this._chosenYear} </sbb-screen-reader-only>`;
1066
+ }
1067
+ /** Creates the table for the month selection view. */
1068
+ _createMonthTable(months, year, shiftRight = false) {
1069
+ return html`
1070
+ <table
1071
+ class="sbb-calendar__table"
1072
+ @animationend=${(e) => this._tableAnimationEnd(e)}
1073
+ >
1074
+ ${this._wide ? html`<thead class="sbb-calendar__table-header" aria-hidden="true">
1075
+ <tr class="sbb-calendar__table-header-row">
1076
+ <th class="sbb-calendar__table-header" colspan=${MONTHS_PER_ROW}>${year}</th>
1077
+ </tr>
1078
+ </thead>` : nothing}
1079
+ <tbody class="sbb-calendar__table-body">
1080
+ ${months.map(
1081
+ (row) => html`
1082
+ <tr>
1083
+ ${row.map((month) => {
1084
+ const isOutOfRange = !this._isMonthInRange(month.monthValue);
1085
+ const isFilteredOut = !this._isMonthFilteredOut(month.monthValue);
1086
+ const selectedMonth = this._selected ? this._dateAdapter.getMonth(this._dateAdapter.deserialize(this._selected)) : void 0;
1087
+ const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
1088
+ const selected = !!this._selected && year === selectedYear && month.monthValue === selectedMonth;
1089
+ const isCurrentMonth = year === this._dateAdapter.getYear(this.now) && this._dateAdapter.getMonth(this.now) === month.monthValue;
1090
+ return html` <td
1091
+ class=${classMap({
1092
+ "sbb-calendar__table-data": true,
1093
+ "sbb-calendar__table-month": true
1094
+ })}
1095
+ >
1096
+ <button
1097
+ class=${classMap({
1098
+ "sbb-calendar__cell": true,
1099
+ "sbb-calendar__pill": true,
1100
+ "sbb-calendar__cell-current": isCurrentMonth,
1101
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
1102
+ "sbb-calendar__selected": selected
1103
+ })}
1104
+ @click=${() => this._onMonthSelection(month.monthValue, year, shiftRight)}
1105
+ ?disabled=${isOutOfRange || isFilteredOut}
1106
+ aria-label=${`${month.longValue} ${this._chosenYear}`}
1107
+ aria-pressed=${selected}
1108
+ aria-disabled=${String(isOutOfRange || isFilteredOut)}
1109
+ tabindex="-1"
1110
+ data-month=${month.monthValue || nothing}
1111
+ @keydown=${(evt) => this._handleKeyboardEvent(evt)}
1112
+ >
1113
+ ${month.value}
1114
+ </button>
1115
+ </td>`;
1116
+ })}
1117
+ </tr>
1118
+ `
1119
+ )}
1120
+ </tbody>
1121
+ </table>
1122
+ `;
1123
+ }
1124
+ /** Select the month and change the view to day selection. */
1125
+ _onMonthSelection(month, year, shiftRight) {
1126
+ this._chosenMonth = shiftRight ? month + 1 : month;
1127
+ this._nextCalendarView = "day";
1128
+ this._init(
1129
+ this._dateAdapter.createDate(
1130
+ year,
1131
+ this._chosenMonth,
1132
+ this._dateAdapter.getDate(this._activeDate)
1133
+ )
1134
+ );
1135
+ this._removeTable();
1136
+ }
1137
+ /** Render the view for the year selection. */
1138
+ _renderYearView() {
1139
+ return html`
1140
+ <div class="sbb-calendar__controls">
1141
+ ${this._getArrow(
1142
+ "left",
1143
+ () => this._goToDifferentYearRange(-YEARS_PER_PAGE),
1144
+ i18nPreviousYearRange(YEARS_PER_PAGE)[this._language.current],
1145
+ this._previousYearRangeDisabled()
1146
+ )}
1147
+ <div class="sbb-calendar__controls-month">${this._createLabelForYearView()}</div>
1148
+ ${this._getArrow(
1149
+ "right",
1150
+ () => this._goToDifferentYearRange(YEARS_PER_PAGE),
1151
+ i18nNextYearRange(YEARS_PER_PAGE)[this._language.current],
1152
+ this._nextYearRangeDisabled()
1153
+ )}
1154
+ </div>
1155
+ <div class="sbb-calendar__table-container sbb-calendar__table-year-view">
1156
+ ${this._createYearTable(this._years)}
1157
+ ${this._wide ? this._createYearTable(this._nextMonthYears, true) : nothing}
1158
+ </div>
1159
+ `;
1160
+ }
1161
+ /** Creates the button arrow for all the views. */
1162
+ _getArrow(direction, click, ariaLabel, disabled) {
1163
+ return html`<sbb-secondary-button
1164
+ size="m"
1165
+ icon-name="chevron-small-${direction}-small"
1166
+ aria-label=${ariaLabel}
1167
+ @click=${click}
1168
+ ?disabled=${disabled}
1169
+ id="sbb-calendar__controls-${direction === "left" ? "previous" : "next"}"
1170
+ ></sbb-secondary-button>`;
1171
+ }
1172
+ /** Creates the label with the year range for the yearly view. */
1173
+ _createLabelForYearView() {
1174
+ const firstYear = this._years.flat()[0];
1175
+ const lastYearArray = (isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years).flat();
1176
+ const lastYear = lastYearArray[lastYearArray.length - 1];
1177
+ const yearLabel = `${firstYear} - ${lastYear}`;
1178
+ return html`
1179
+ <button
1180
+ type="button"
1181
+ id="sbb-calendar__year-selection"
1182
+ class="sbb-calendar__controls-change-date"
1183
+ aria-label="${i18nCalendarDateSelection[this._language.current]} ${yearLabel}"
1184
+ @click=${() => this._resetToDayView()}
1185
+ >
1186
+ ${yearLabel}
1187
+ <sbb-icon name="chevron-small-up-small"></sbb-icon>
1188
+ </button>
1189
+ <sbb-screen-reader-only role="status"> ${yearLabel} </sbb-screen-reader-only>
1190
+ `;
1191
+ }
1192
+ /** Creates the table for the year selection view. */
1193
+ _createYearTable(years, shiftRight = false) {
1194
+ const now = this.now;
1195
+ return html` <table
1196
+ class="sbb-calendar__table"
1197
+ @animationend=${(e) => this._tableAnimationEnd(e)}
1198
+ >
1199
+ <tbody class="sbb-calendar__table-body">
1200
+ ${years.map(
1201
+ (row) => html` <tr>
1202
+ ${row.map((year) => {
1203
+ const isOutOfRange = !this._isYearInRange(year);
1204
+ const isFilteredOut = !this._isYearFilteredOut(year);
1205
+ const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
1206
+ const selected = !!this._selected && year === selectedYear;
1207
+ const isCurrentYear = this._dateAdapter.getYear(now) === year;
1208
+ return html` <td class="sbb-calendar__table-data sbb-calendar__table-year">
1209
+ <button
1210
+ class=${classMap({
1211
+ "sbb-calendar__cell": true,
1212
+ "sbb-calendar__pill": true,
1213
+ "sbb-calendar__cell-current": isCurrentYear,
1214
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
1215
+ "sbb-calendar__selected": selected
1216
+ })}
1217
+ @click=${() => this._onYearSelection(year, shiftRight)}
1218
+ ?disabled=${isOutOfRange || isFilteredOut}
1219
+ aria-label=${year}
1220
+ aria-pressed=${selected}
1221
+ aria-disabled=${String(isOutOfRange || isFilteredOut)}
1222
+ tabindex="-1"
1223
+ data-year=${year || nothing}
1224
+ @keydown=${(evt) => this._handleKeyboardEvent(evt)}
1225
+ >
1226
+ ${year}
1227
+ </button>
1228
+ </td>`;
1229
+ })}
1230
+ </tr>`
1231
+ )}
1232
+ </tbody>
1233
+ </table>`;
1234
+ }
1235
+ /** Select the year and change the view to month selection. */
1236
+ _onYearSelection(year, rightSide) {
1237
+ this._chosenYear = rightSide ? year - 1 : year;
1238
+ this._nextCalendarView = "month";
1239
+ this._assignActiveDate(
1240
+ this._dateAdapter.createDate(
1241
+ this._chosenYear,
1242
+ this._dateAdapter.getMonth(this._activeDate),
1243
+ this._dateAdapter.getDate(this._activeDate)
1244
+ )
1245
+ );
1246
+ this._removeTable();
1247
+ }
1248
+ get _getView() {
1249
+ switch (this._calendarView) {
1250
+ case "year":
1251
+ return this._renderYearView();
1252
+ case "month":
1253
+ return this._renderMonthView();
1254
+ case "day":
1255
+ default:
1256
+ return this._renderDayView();
1257
+ }
1258
+ }
1259
+ _tableAnimationEnd(event) {
1260
+ const table = event.target;
1261
+ if (event.animationName === "hide") {
1262
+ table.classList.remove("sbb-calendar__table-hide");
1263
+ this._resetFocus = true;
1264
+ this._calendarView = this._nextCalendarView;
1265
+ } else if (event.animationName === "show") {
1266
+ this.removeAttribute("data-transition");
1267
+ }
1268
+ }
1269
+ _removeTable() {
1270
+ this.toggleAttribute("data-transition", true);
1271
+ this.shadowRoot.querySelectorAll("table").forEach(
1272
+ (e) => e.classList.toggle("sbb-calendar__table-hide")
1273
+ );
1274
+ }
1275
+ render() {
1276
+ return html`<div class="sbb-calendar__wrapper">${this._getView}</div>`;
1277
+ }
1278
+ };
1279
+ SbbCalendarElement.styles = style;
1280
+ SbbCalendarElement.events = {
1281
+ dateSelected: "dateSelected"
1282
+ };
1283
+ __decorateClass([
1284
+ property({ type: Boolean })
1285
+ ], SbbCalendarElement.prototype, "wide", 2);
1286
+ __decorateClass([
1287
+ property()
1288
+ ], SbbCalendarElement.prototype, "min", 1);
1289
+ __decorateClass([
1290
+ property()
1291
+ ], SbbCalendarElement.prototype, "max", 1);
1292
+ __decorateClass([
1293
+ property()
1294
+ ], SbbCalendarElement.prototype, "now", 1);
1295
+ __decorateClass([
1296
+ property()
1297
+ ], SbbCalendarElement.prototype, "selected", 1);
1298
+ __decorateClass([
1299
+ property({ attribute: "date-filter" })
1300
+ ], SbbCalendarElement.prototype, "dateFilter", 2);
1301
+ __decorateClass([
1302
+ state()
1303
+ ], SbbCalendarElement.prototype, "_activeDate", 2);
1304
+ __decorateClass([
1305
+ state()
1306
+ ], SbbCalendarElement.prototype, "_selected", 2);
1307
+ __decorateClass([
1308
+ state()
1309
+ ], SbbCalendarElement.prototype, "_wide", 1);
1310
+ __decorateClass([
1311
+ state()
1312
+ ], SbbCalendarElement.prototype, "_calendarView", 2);
1313
+ SbbCalendarElement = __decorateClass([
1314
+ customElement("sbb-calendar")
1315
+ ], SbbCalendarElement);
1316
+ export {
1317
+ SbbCalendarElement
1318
+ };
1319
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcblxuaW1wb3J0IHsgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLCBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7XG4gIERBWVNfUEVSX1JPVyxcbiAgZGVmYXVsdERhdGVBZGFwdGVyLFxuICBNT05USFNfUEVSX1JPVyxcbiAgWUVBUlNfUEVSX1BBR0UsXG4gIFlFQVJTX1BFUl9ST1csXG59IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgaXNCcmVha3BvaW50IH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uLFxuICBpMThuTmV4dE1vbnRoLFxuICBpMThuTmV4dFllYXIsXG4gIGkxOG5OZXh0WWVhclJhbmdlLFxuICBpMThuUHJldmlvdXNNb250aCxcbiAgaTE4blByZXZpb3VzWWVhcixcbiAgaTE4blByZXZpb3VzWWVhclJhbmdlLFxuICBpMThuWWVhck1vbnRoU2VsZWN0aW9uLFxufSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSB9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcy5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NhbGVuZGFyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9pY29uLmpzJztcbmltcG9ydCAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLyoqXG4gKiBJbiBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aGUgY2VsbCdzIGluZGV4IGFuZCB0aGUgZWxlbWVudCdzIGluZGV4IGluIGl0cyBtb250aCAvIHllYXIgYmF0Y2ggbXVzdCBiZSBkaXN0aW5ndWlzaGVkO1xuICogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbmF2aWdhdGlvbiBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uIHVzaW5nIHNvbWUga2V5cyBpcyByZXN0cmljdGVkIHRvIGEgc2luZ2xlIG1vbnRoIGZvciBkYXlzLFxuICogYW5kIHRvIGEgc2luZ2xlIHJhbmdlIG9mIDI0IHllYXJzIGZvciB5ZWFycy4gV2hpbGUgdGhlIGxhdHRlciBpcyBlYXN5IHRvIHVuZGVyc3RhbmQsIHRoZSBjZWxsJ3MgaW5kZXggaXMgdGhlIGluZGV4XG4gKiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgb2YgYWxsIHRoZSByZW5kZXJlZCBjZWxscy4gSW4gbm9uLXdpZGUgbW9kZSwgdGhlcmUncyBubyBpc3N1ZSBiZWNhdXNlIHRoZSBlbGVtZW50IGluZGV4XG4gKiBpcyBiYXNpY2FsbHkgdGhlIGNlbGwncyBpbmRleCBwbHVzIDEgKGVsZW1lbnQgd2l0aCBpbmRleCAwIGRpc3BsYXlzIHRoZSAxc3Qgb2YgbW9udGgsIGVsZW1lbnQgd2l0aCBpbmRleCAxIGRpc3BsYXlzIHRoZSAybmQgYW5kIHNvIG9uKS5cbiAqIEluIHdpZGUgbW9kZSwgdGhlIGNlbGwncyBpbmRleCBjYW4gZ28gZnJvbSAwIHRvIDQ3IGZvciB5ZWFycyAodHdvIGJhdGNoZXMgb2YgMjQgeWVhcnMpLCBhbmQgZnJvbSAwIHRvIGEgbWF4aW11bSBvZiA2MSBmb3IgZGF5c1xuICogKHR3byBjb25zZWN1dGl2ZSBtb250aHMgb2YgMzEgZGF5cywgYXMgSnVseS1BdWd1c3Qgb3IgRGVjZW1iZXItSmFudWFyeSksIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RocyBvZiB0aGUgcmVuZGVyZWQgbW9udGhzO1xuICogdGhlIGVsZW1lbnQgaW5kZXggaW5zdGVhZCBnb2VzIGZyb20gMCB0byBhIG1heCB2YWx1ZSBvZiAyNCBmb3IgeWVhcnMgYW5kIDMxIGZvciBkYXlzLlxuICogTW9yZW92ZXIsIGluIGRheSB2aWV3LCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgc2Vjb25kIHJlbmRlcmVkIG1vbnRoIGFuZCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcmVuZGVyZWQgZGF5XG4gKiBjYW4gYWxzbyB2YXJ5IGRlcGVuZGluZyBvbiB3aGljaCBtb250aHMgYXJlIHJlbmRlcmVkOyBmb3IgSnVseS1BdWd1c3QgdGhleSBhcmUgZXF1YWxzIHRvIDMxIGFuZCA2MSwgd2hpbGUgZm9yIEZlYnJ1YXJ5LU1hcmNoIHRoZXkgYXJlIDI4IGFuZCA1OC5cbiAqIFNvLCBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgbmVlZGVkLCBiZXNpZGUgdGhlIGNlbGwncyBpbmRleCwgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgZWxlbWVudCB0byBuYXZpZ2F0ZSB0by5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyB7XG4gIC8qKiBUaGUgZWxlbWVudCBpbmRleCB3aXRoaW4gaXRzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIEluIHdpZGUgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZWNvbmQgcGFuZWwsIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBwYW5lbC4gKi9cbiAgb2Zmc2V0Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHdpdGhpbiB0aGUgZWxlbWVudCdzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGNlbGxzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3csIGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyZWQgdmlldy4gKi9cbiAgdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXkge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXlWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBzdHJpbmc7XG4gIHllYXJWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbG9uZ1ZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJWaWV3ID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY2FsZW5kYXIgd2hpY2ggYWxsb3dzIHRvIGNob29zZSBhIGRhdGUuXG4gKlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxUPn0gZGF0ZVNlbGVjdGVkIC0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jYWxlbmRhcicpXG5leHBvcnQgY2xhc3MgU2JiQ2FsZW5kYXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGF0ZVNlbGVjdGVkOiAnZGF0ZVNlbGVjdGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZCAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyB3aWRlID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fbWluID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBtaW4oKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW4gPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9taW4/OiBUIHwgbnVsbDtcblxuICAvKiogVGhlIG1heGltdW0gdmFsaWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21heCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWF4KCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfbWF4PzogVCB8IG51bGw7XG5cbiAgLyoqIEEgY29uZmlndXJlZCBkYXRlIHdoaWNoIGFjdHMgYXMgdGhlIGN1cnJlbnQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSByZWFsIGN1cnJlbnQgZGF0ZS4gUmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbm93KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5fc2VsZWN0ZWREYXRlICYmXG4gICAgICAoIXRoaXMuX2lzRGF5SW5SYW5nZSh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKSkgfHxcbiAgICAgICAgdGhpcy5fZGF0ZUZpbHRlcih0aGlzLl9zZWxlY3RlZERhdGUpKVxuICAgICkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZERhdGU/OiBUIHwgbnVsbDtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGUtZmlsdGVyJyB9KSBwdWJsaWMgZGF0ZUZpbHRlcj86IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcblxuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSBkZWZhdWx0RGF0ZUFkYXB0ZXIgYXMgdW5rbm93biBhcyBEYXRlQWRhcHRlcjxUPjtcblxuICAvKiogRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfZGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiQ2FsZW5kYXJFbGVtZW50LmV2ZW50cy5kYXRlU2VsZWN0ZWQsXG4gICk7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRhdGUuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX2FjdGl2ZURhdGU6IFQgPSB0aGlzLm5vdztcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUgYXMgSVNPU3RyaW5nLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zZWxlY3RlZD86IHN0cmluZztcblxuICAvKiogVGhlIGN1cnJlbnQgd2lkZSBwcm9wZXJ0eSBjb25zaWRlcmluZyBwcm9wZXJ0eSB2YWx1ZSBhbmQgYnJlYWtwb2ludHMuIEZyb20gemVybyB0byBzbWFsbCBgd2lkZWAgaGFzIGFsd2F5cyB0byBiZSBmYWxzZS4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3dpZGUod2lkZTogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXdpZGUnLCB3aWRlKTtcbiAgfVxuICBwcml2YXRlIGdldCBfd2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2lkZScpO1xuICB9XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICBwcml2YXRlIF9uZXh0Q2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAvKiogQSBsaXN0IG9mIGRheXMsIGluIHR3byBmb3JtYXRzIChsb25nIGFuZCBzaW5nbGUgY2hhcikuICovXG4gIHByaXZhdGUgX3dlZWtkYXlzITogV2Vla2RheVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrczogRGF5W11bXSA9IFtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyBtb250aHMuICovXG4gIHByaXZhdGUgX21vbnRocyE6IE1vbnRoW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMuICovXG4gIHByaXZhdGUgX3llYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMgZm9yIHRoZSB3aWRlIHZpZXcuICovXG4gIHByaXZhdGUgX25leHRNb250aFllYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBuZXh0IG1vbnRoLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhXZWVrcyE6IERheVtdW107XG5cbiAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBtb250aCBuYW1lcyBpbiB0aGUgY3VycmVudCBsYW5ndWFnZS4gKi9cbiAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG5cbiAgLyoqIEEgbGlzdCBvZiBidXR0b25zIGNvcnJlc3BvbmRpbmcgdG8gZGF5cywgbW9udGhzIG9yIHllYXJzIGRlcGVuZGluZyBvbiB0aGUgdmlldy4gKi9cbiAgcHJpdmF0ZSBnZXQgX2NlbGxzKCk6IEhUTUxCdXR0b25FbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKCcuc2JiLWNhbGVuZGFyX19jZWxsJykgPz8gW10sXG4gICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudFtdO1xuICB9XG5cbiAgLyoqIFRoZSBjaG9zZW4geWVhciBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuWWVhcj86IG51bWJlcjtcblxuICAvKiogVGhlIGNob3NlbiBtb250aCBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuTW9udGg/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZvY3VzIHNob3VsZCBiZSByZXNldCBvbiBmb2N1c0NlbGwuICovXG4gIHByaXZhdGUgX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpLndpdGhIYW5kbGVyKCgpID0+IHtcbiAgICB0aGlzLl9tb250aE5hbWVzID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuICAgIHRoaXMuX2NyZWF0ZU1vbnRoUm93cygpO1xuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jcmVhdGVNb250aFJvd3MoKTtcbiAgICB0aGlzLl9zZXRXZWVrZGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2RhdGVGaWx0ZXIoKTogKGRhdGU6IFQpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXIgPz8gKCgpID0+IHRydWUpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyVmlldyAhPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuX3Jlc2V0VG9EYXlWaWV3KCk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkID8/IHRoaXMubm93O1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH07XG4gICAgZ2xvYmFsVGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX2luaXQoKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fYWJvcnQuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICAgIC8vIFdoZW4gY2hhbmdpbmcgdmlldyB0byB5ZWFyL21vbnRoLCB0aGUgdGFiaW5kZXggaXMgY2hhbmdlZCwgYnV0IHRoZSBmb2N1c2VkIGVsZW1lbnQgaXMgbm90LFxuICAgIC8vIHNvIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUgdmlhIGtleWJvYXJkLCB0aGVyZSdzIHRoZSBuZWVkXG4gICAgLy8gdG8gY2FsbCB0aGUgYF9mb2N1c0NlbGwoKWAgbWV0aG9kIGV4cGxpY2l0bHkgdG8gY29ycmVjdGx5IHNldCB0aGUgZm9jdXMuXG4gICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9pbml0KGFjdGl2ZURhdGU/OiBUKTogdm9pZCB7XG4gICAgLy9EdWUgdG8gaXRzIGNvbXBsZXhpdHksIHRoZSBjYWxlZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShhY3RpdmVEYXRlKTtcbiAgICB9XG4gICAgdGhpcy5fd2lkZSA9IGlzQnJlYWtwb2ludCgnbWVkaXVtJykgJiYgdGhpcy53aWRlO1xuICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgdGhpcy5feWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cygpO1xuICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gW1tdXTtcbiAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IFtbXV07XG4gICAgaWYgKHRoaXMuX3dpZGUpIHtcbiAgICAgIGNvbnN0IG5leHRNb250aERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCAxKTtcbiAgICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3MobmV4dE1vbnRoRGF0ZSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKFlFQVJTX1BFUl9QQUdFKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgb24gYSBkYXkgY2VsbCBwcmlvcml0aXppbmcgdGhlIHNlbGVjdGVkIGRheSwgdGhlIGN1cnJlbnQgZGF5LCBhbmQgbGFzdGx5LCB0aGUgZmlyc3Qgc2VsZWN0YWJsZSBkYXkuICovXG4gIHByaXZhdGUgX2ZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVzZXRGb2N1cykge1xuICAgICAgdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJyYXkgb2Ygd2Vla2RheXMuICovXG4gIHByaXZhdGUgX3NldFdlZWtkYXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcbiAgICBjb25zdCBsb25nV2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCB3ZWVrZGF5czogV2Vla2RheVtdID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZzogc3RyaW5nLCBpOiBudW1iZXIpID0+ICh7XG4gICAgICBsb25nLFxuICAgICAgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSxcbiAgICB9KSk7XG5cbiAgICAvLyBSb3RhdGVzIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2Vlay4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3ModmFsdWU6IFQpOiBEYXlbXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IGRhdGVOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICBjb25zdCB3ZWVrczogRGF5W11bXSA9IFtbXV07XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF0ZSksXG4gICAgICAgIGRheVZhbHVlOiBkYXRlTmFtZXNbaV0sXG4gICAgICAgIG1vbnRoVmFsdWU6IFN0cmluZyh0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSksXG4gICAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoUm93cygpOiB2b2lkIHtcbiAgICBjb25zdCBzaG9ydE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbW9udGhzOiBNb250aFtdID0gbmV3IEFycmF5KDEyKS5maWxsKG51bGwpLm1hcChcbiAgICAgIChfLCBpOiBudW1iZXIpOiBNb250aCA9PiAoe1xuICAgICAgICB2YWx1ZTogc2hvcnROYW1lc1tpXSxcbiAgICAgICAgbG9uZ1ZhbHVlOiB0aGlzLl9tb250aE5hbWVzW2ldLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgb2Zmc2V0ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX21pbiAmJiAhdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNCZWZvcmVNaW46IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLl9taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4hLCB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKSEpID4gMDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fbWF4ISwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkhKSA8IDA7XG4gICAgcmV0dXJuICEoaXNCZWZvcmVNaW4gfHwgaXNBZnRlck1heCk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vbnRoSW5SYW5nZShtb250aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9taW4hKSA+PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWluISkgPiBtb250aDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9tYXghKSA8PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWF4ISkgPCBtb250aDtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzWWVhckluUmFuZ2UoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21pbiEpID4geWVhcjtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21heCEpIDwgeWVhcjtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvZGF0ZXBpY2tlci95ZWFyLXZpZXcudHMjTDM2NlxuICBwcml2YXRlIF9pc01vbnRoRmlsdGVyZWRPdXQobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRlRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuX2Nob3NlblllYXIhLCBtb250aCwgMSkhO1xuICAgIGZvciAoXG4gICAgICBsZXQgZGF0ZTogVCA9IGZpcnN0T2ZNb250aDtcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09IG1vbnRoO1xuICAgICAgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRhdGlvbiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvbXVsdGkteWVhci12aWV3LnRzI0wzNTFcbiAgcHJpdmF0ZSBfaXNZZWFyRmlsdGVyZWRPdXQoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSE7XG4gICAgZm9yIChcbiAgICAgIGxldCBkYXRlOiBUID0gZmlyc3RPZlllYXI7XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fY2hvc2VuWWVhciA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQgIT09IGRheSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBkYXk7XG4gICAgICB0aGlzLl9kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXkpISk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21pbiAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4sIGRhdGUpID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21pbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heCAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9tYXgsIGRhdGUpIDwgMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21heDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbW9udGggaWRlbnRpZmllZCBieSB0aGUgc2hpZnQuICovXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRNb250aChtb250aHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgbW9udGhzKSk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhcih5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciEgKz0geWVhcnM7XG4gICAgLy8gQ2FuJ3QgdXNlIGBfYXNzaWduQWN0aXZlRGF0ZSguLi4pYCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgc2V0IGl0IHRvIG1pbi9tYXggdmFsdWUgaWYgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlXG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyISxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9hY3RpdmVEYXRlLCB5ZWFycykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldkRpc2FibGVkKHByZXZEYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLl9taW4pIDwgMDtcbiAgfVxuXG4gIHByaXZhdGUgX25leHREaXNhYmxlZChuZXh0RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgdGhpcy5fbWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5fd2lkZSA/IDIgOiAxKTtcbiAgICBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXh0TW9udGgpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV4dE1vbnRoKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRNb250aCk7XG4gIH1cblxuICBwcml2YXRlIF9wcmV2aW91c1llYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpIC0gMSxcbiAgICAgIDEyLFxuICAgICAgMzEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX25leHRZZWFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9hY3RpdmVEYXRlKSArIDEsXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHllYXJzID0gaXNCcmVha3BvaW50KCdtZWRpdW0nKSAmJiB0aGlzLndpZGUgPyB0aGlzLl9uZXh0TW9udGhZZWFycyA6IHRoaXMuX3llYXJzO1xuICAgIGNvbnN0IGxhc3RZZWFyUmFuZ2UgPSB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGxhc3RZZWFyUmFuZ2VbbGFzdFllYXJSYW5nZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUobGFzdFllYXIgKyAxLCAxLCAxKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVRhYmxlQmx1cihldmVudFRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQ/LmxvY2FsTmFtZSAhPT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnLnNiYi1jYWxlbmRhcl9fY2VsbFt0YWJpbmRleD1cIjBcIl0nKSA/PyBbXSxcbiAgICApLmZvckVhY2goKGRheSkgPT4gKChkYXkgYXMgSFRNTEVsZW1lbnQpLnRhYkluZGV4ID0gLTEpKTtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBmaXJzdEZvY3VzYWJsZS50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGUoKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX3NlbGVjdGVkID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5fc2VsZWN0ZWQpISA6IHRoaXMubm93O1xuICAgIGxldCBmaXJzdEZvY3VzYWJsZSA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItY2FsZW5kYXJfX3NlbGVjdGVkJykgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFtkYXRhLWRheT1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShhY3RpdmUpfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKFxuICAgICAgICAgIGFjdGl2ZSxcbiAgICAgICAgKX0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGFjdGl2ZSl9XCJdYCxcbiAgICAgICkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEtbW9udGg9XCIke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGFjdGl2ZSl9XCJdYCkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEteWVhcj1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihhY3RpdmUpfVwiXWApO1xuICAgIGlmICghZmlyc3RGb2N1c2FibGUgfHwgKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KT8uZGlzYWJsZWQpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLWNhbGVuZGFyX19jZWxsOm5vdChbZGlzYWJsZWRdKScpO1xuICAgIH1cbiAgICByZXR1cm4gKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZGF5PzogRGF5KTogdm9pZCB7XG4gICAgaWYgKGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8vIEdldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCB0YWJsZSdzIGNlbGw7XG4gICAgLy8gdGhleSBjb3VsZCBiZSBkYXlzLCBtb250aHMgb3IgeWVhcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZpZXcuXG4gICAgLy8gSWYgYHdpZGVgIGlzIHRydWUsIHllYXJzIGFyZSBkb3VibGVkIGluIG51bWJlciBhbmQgZGF5cyBhcmUgKHJvdWdobHkpIGRvdWJsZWQgdG9vLCBhZmZlY3RpbmcgdGhlIGBpbmRleGAgY2FsY3VsYXRpb24uXG4gICAgY29uc3QgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10gPSB0aGlzLl9jZWxscztcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gY2VsbHMuZmluZEluZGV4KChlOiBIVE1MQnV0dG9uRWxlbWVudCkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KTtcbiAgICBjb25zdCBuZXh0RWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5fbmF2aWdhdGVCeUtleWJvYXJkKGV2ZW50LCBpbmRleCwgY2VsbHMsIGRheSk7XG4gICAgY29uc3QgYWN0aXZlRWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50IGFzIEhUTUxCdXR0b25FbGVtZW50O1xuICAgIGlmIChuZXh0RWwgIT09IGFjdGl2ZUVsKSB7XG4gICAgICAobmV4dEVsIGFzIEhUTUxCdXR0b25FbGVtZW50KS50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWw/LmZvY3VzKCk7XG4gICAgICAoYWN0aXZlRWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhYkluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgZGF5PzogRGF5LFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIHZlcnRpY2FsT2Zmc2V0LFxuICAgIH06IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHRoaXMuX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgICBjZWxscyxcbiAgICAgIGluZGV4LFxuICAgICAgZGF5LFxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLTEpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIDEpO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3QoY2VsbHMsIG9mZnNldEZvcldpZGVNb2RlKTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3RPbkNvbHVtbihcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0T25Db2x1bW4oY2VsbHMsIGluZGV4LCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdChjZWxscywgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlIC0gMSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwYXJhbWV0ZXIgbmVlZGVkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqIFNpbmNlIHRocmVlIHZpZXdzIGFyZSBub3cgYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mIHRoZW1cbiAgICogYnkgY29uc2lkZXJpbmcgdGhlIG51bWJlciBvZiBjZWxscyBwZXIgZWFjaCByb3cgYW5kIHRoZSBjb3JyZWN0aW9uIGZvciB0aGUgd2lkZSBtb2RlLlxuICAgKiBAcGFyYW0gY2VsbHMgVGhlIGFycmF5IG9mIHJlbmRlcmVkIHRhYmxlIGNlbGxzOyB0aGV5IGFyZSBidXR0b25zIHRoYXQgY2FuIHJlcHJlc2VudCBkYXlzLCBtb250aHMgb3IgeWVhcnMuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgc3RhcnRpbmcgZWxlbWVudCdzIGluZGV4IGluIHRoZSBjZWxsIGFycmF5LlxuICAgKiBAcGFyYW0gZGF5IChvcHRpb25hbCkgT25seSBpbiB0aGUgZGF5IHZpZXcsIHRoZSBkYXkgcmVwcmVzZW50ZWQgYnkgdGhlIHN0YXJ0aW5nIGNlbGwuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGNlbGxzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5PzogRGF5LFxuICApOiBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvblBhcmFtZXRlcnMge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3ID0gK2RheSEuZGF5VmFsdWUgLSAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBEQVlTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4SW5WaWV3LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTpcbiAgICAgICAgICAgIGluZGV4ID09PSBpbmRleEluVmlld1xuICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSEudmFsdWUpISxcbiAgICAgICAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBjZWxscy5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBNb250aCB2aWV3IGlzIG5vdCBkZXBlbmRlbnQgZnJvbSBgd2lkZWAgdmFsdWUsIHNvIHNvbWUgcGFyYW1ldGVycyBhcmUgZml4ZWQuXG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTU9OVEhTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiAwLFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogMTIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBZRUFSU19QRVJfUEFHRSkgKiBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgY29uc3QgaW5kZXhJblZpZXc6IG51bWJlciA9IG9mZnNldCA9PT0gMCA/IGluZGV4IDogaW5kZXggLSBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogWUVBUlNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXhJblZpZXcsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBZRUFSU19QRVJfUEFHRSA6IFlFQVJTX1BFUl9QQUdFICogMixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sIGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgZmlyc3RPZkN1cnJlbnRNb250aDogbnVtYmVyKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIHJldHVybiAhZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGZpcnN0T2ZDdXJyZW50TW9udGgsIDEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxhc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuICFkYXlzW2xhc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tsYXN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGxhc3RPZkN1cnJlbnRNb250aCwgLTEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IChpbmRleCAlIHZlcnRpY2FsT2Zmc2V0KSArIG9mZnNldDtcbiAgICByZXR1cm4gIWRheXNbbmV4dEluZGV4XS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW25leHRJbmRleF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbmV4dEluZGV4LCB2ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbGFzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHNhbWUgY29sdW1uIG9mIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgTWF0aC50cnVuYygob2Zmc2V0IC0gaW5kZXggLSAxKSAvIHZlcnRpY2FsT2Zmc2V0KSAqIHZlcnRpY2FsT2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIC12ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldFRvRGF5VmlldygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdztcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnZGF5JztcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlckRheVZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5leHRNb250aEFjdGl2ZURhdGUgPSB0aGlzLl93aWRlXG4gICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIDEpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRNb250aCgtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzTW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNNb250aERpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+XG4gICAgICAgICAgJHt0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSl9XG4gICAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlTGFiZWxGb3JEYXlWaWV3KG5leHRNb250aEFjdGl2ZURhdGUhKSA6IG5vdGhpbmd9XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVBcmlhTGFiZWxGb3JEYXlWaWV3KHRoaXMuX2FjdGl2ZURhdGUsIG5leHRNb250aEFjdGl2ZURhdGUhKX1cbiAgICAgICAgICA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKDEpLFxuICAgICAgICAgIGkxOG5OZXh0TW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dE1vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUtZGF5LXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl93ZWVrcyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZURheVRhYmxlKHRoaXMuX25leHRNb250aFdlZWtzKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIG1vbnRoIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JEYXlWaWV3KGQ6IFQpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbW9udGhMYWJlbCA9IGAke1xuICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZCl9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19kYXRlLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAke21vbnRoTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJpYS1sYWJlbCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcoLi4uZGF0ZXM6IFRbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1vbnRoTGFiZWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChkKSB7XG4gICAgICAgIG1vbnRoTGFiZWwgKz0gYCR7XG4gICAgICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9udGhMYWJlbDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgIEBmb2N1c291dD0keyhldmVudDogRm9jdXNFdmVudCkgPT5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgICAgPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZUhlYWRlcigpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBoZWFkZXIgd2l0aCB0aGUgbW9udGggaGVhZGVyIGNlbGxzLiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZUhlYWRlcigpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fd2Vla2RheXMubWFwKFxuICAgICAgKGRheTogV2Vla2RheSkgPT4gaHRtbGBcbiAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke2RheS5sb25nfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2RheS5uYXJyb3d9PC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGJvZHkgd2l0aCB0aGUgZGF5IGNlbGxzLiBGb3IgdGhlIGZpcnN0IHJvdywgaXQgYWxzbyBjb25zaWRlcnMgdGhlIHBvc3NpYmxlIGRheSdzIG9mZnNldC4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgY29uc3QgdG9kYXk6IHN0cmluZyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLm5vdyk7XG4gICAgcmV0dXJuIHdlZWtzLm1hcCgod2VlazogRGF5W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Um93T2Zmc2V0OiBudW1iZXIgPSBEQVlTX1BFUl9ST1cgLSB3ZWVrLmxlbmd0aDtcbiAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBmaXJzdFJvd09mZnNldCkge1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAke1suLi5BcnJheShmaXJzdFJvd09mZnNldCkua2V5cygpXS5tYXAoXG4gICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgaHRtbGA8dGRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtZGF5PSR7YDAgJHt3ZWVrWzBdLm1vbnRoVmFsdWV9ICR7d2Vla1swXS55ZWFyVmFsdWV9YH1cbiAgICAgICAgICAgICAgICA+PC90ZD5gLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbGA8dHI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgPC90cj5gO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGNlbGxzIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5Q2VsbHMod2VlazogRGF5W10sIHRvZGF5OiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gd2Vlay5tYXAoKGRheTogRGF5KSA9PiB7XG4gICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNEYXlJblJhbmdlKGRheS52YWx1ZSk7XG4gICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2RhdGVGaWx0ZXIodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5LnZhbHVlKSEpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIGRheS52YWx1ZSA9PT0gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICBjb25zdCBkYXlWYWx1ZSA9IGAke2RheS5kYXlWYWx1ZX0gJHtkYXkubW9udGhWYWx1ZX0gJHtkYXkueWVhclZhbHVlfWA7XG4gICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LnZhbHVlID09PSB0b2RheTtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEnOiB0cnVlLFxuICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fdGFibGUtZGF0YS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19kYXknOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsLWN1cnJlbnQnOiBpc1RvZGF5LFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fc2VsZWN0RGF0ZShkYXkudmFsdWUpfVxuICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0QWNjZXNzaWJpbGl0eUZvcm1hdERhdGUoZGF5LnZhbHVlKX1cbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0ke3NlbGVjdGVkfVxuICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke2lzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0fVxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PSR7aXNUb2RheSA/ICdkYXRlJyA6IG5vdGhpbmd9XG4gICAgICAgICAgICBkYXRhLWRheT0ke2RheVZhbHVlIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQsIGRheSl9XG4gICAgICAgICAgICBzYmItcG9wb3Zlci1jbG9zZVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7ZGF5LmRheVZhbHVlfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aFwiPiR7dGhpcy5fY3JlYXRlTGFiZWxGb3JNb250aFZpZXcoKX08L2Rpdj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKDEpLFxuICAgICAgICAgIGkxOG5OZXh0WWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0WWVhckRpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLW1vbnRoLXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEpfVxuICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEgKyAxLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgZm9yIHRoZSBtb250aGx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUxhYmVsRm9yTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWQ9XCJzYmItY2FsZW5kYXJfX21vbnRoLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9JHtgJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fcmVzZXRUb0RheVZpZXcoKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9jaG9zZW5ZZWFyfSAke3RoaXMuX3dpZGUgPyBgIC0gJHt0aGlzLl9jaG9zZW5ZZWFyISArIDF9YCA6IG5vdGhpbmd9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC11cC1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5IHJvbGU9XCJzdGF0dXNcIj4gJHt0aGlzLl9jaG9zZW5ZZWFyfSA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+YDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVNb250aFRhYmxlKG1vbnRoczogTW9udGhbXVtdLCB5ZWFyOiBudW1iZXIsIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl93aWRlXG4gICAgICAgICAgPyBodG1sYDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgY29sc3Bhbj0ke01PTlRIU19QRVJfUk9XfT4ke3llYXJ9PC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICAgJHttb250aHMubWFwKFxuICAgICAgICAgICAgKHJvdzogTW9udGhbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNNb250aEluUmFuZ2UobW9udGgubW9udGhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzTW9udGhGaWx0ZXJlZE91dChtb250aC5tb250aFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aC5tb250aFZhbHVlID09PSBzZWxlY3RlZE1vbnRoO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPT09IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5ub3cpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubm93KSA9PT0gbW9udGgubW9udGhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1tb250aCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNDdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3NlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7YCR7bW9udGgubG9uZ1ZhbHVlfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7U3RyaW5nKGlzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0KX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnRoPSR7bW9udGgubW9udGhWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgJHttb250aC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSBtb250aCBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX29uTW9udGhTZWxlY3Rpb24obW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBzaGlmdFJpZ2h0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSBzaGlmdFJpZ2h0ID8gbW9udGggKyAxIDogbW9udGg7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICdkYXknO1xuICAgIHRoaXMuX2luaXQoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB5ZWFyLFxuICAgICAgICB0aGlzLl9jaG9zZW5Nb250aCxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKC1ZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+JHt0aGlzLl9jcmVhdGVMYWJlbEZvclllYXJWaWV3KCl9PC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICBpMThuTmV4dFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dFllYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLXllYXItdmlld1wiPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl95ZWFycyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl9uZXh0TW9udGhZZWFycywgdHJ1ZSkgOiBub3RoaW5nfVxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBidXR0b24gYXJyb3cgZm9yIGFsbCB0aGUgdmlld3MuICovXG4gIHByaXZhdGUgX2dldEFycm93KFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgc2l6ZT1cIm1cIlxuICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC0ke2RpcmVjdGlvbn0tc21hbGxcIlxuICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbH1cbiAgICAgIEBjbGljaz0ke2NsaWNrfVxuICAgICAgP2Rpc2FibGVkPSR7ZGlzYWJsZWR9XG4gICAgICBpZD1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtJHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgcmFuZ2UgZm9yIHRoZSB5ZWFybHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KClbMF07XG4gICAgY29uc3QgbGFzdFllYXJBcnJheTogbnVtYmVyW10gPSAoXG4gICAgICBpc0JyZWFrcG9pbnQoJ21lZGl1bScpICYmIHRoaXMud2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnNcbiAgICApLmZsYXQoKTtcbiAgICBjb25zdCBsYXN0WWVhcjogbnVtYmVyID0gbGFzdFllYXJBcnJheVtsYXN0WWVhckFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHllYXJMYWJlbCA9IGAke2ZpcnN0WWVhcn0gLSAke2xhc3RZZWFyfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNiYi1jYWxlbmRhcl9feWVhci1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3llYXJMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9yZXNldFRvRGF5VmlldygpfVxuICAgICAgPlxuICAgICAgICAke3llYXJMYWJlbH1cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3llYXJMYWJlbH0gPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyVGFibGUoeWVhcnM6IG51bWJlcltdW10sIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdztcbiAgICByZXR1cm4gaHRtbGAgPHRhYmxlXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgPlxuICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICR7eWVhcnMubWFwKFxuICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgaHRtbGAgPHRyPlxuICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0T2ZSYW5nZSA9ICF0aGlzLl9pc1llYXJJblJhbmdlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyZWRPdXQgPSAhdGhpcy5faXNZZWFyRmlsdGVyZWRPdXQoeWVhcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihub3cpID09PSB5ZWFyO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwtY3VycmVudCc6IGlzQ3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt5ZWFyfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke1N0cmluZyhpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dCl9XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXllYXI9JHt5ZWFyIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAke3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2dldFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlVGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtdHJhbnNpdGlvbicsIHRydWUpO1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdzYmItY2FsZW5kYXJfX3RhYmxlLWhpZGUnKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fd3JhcHBlclwiPiR7dGhpcy5fZ2V0Vmlld308L2Rpdj5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2FsZW5kYXInOiBTYmJDYWxlbmRhckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRGYSxJQUFBLHFCQUFOLGNBQTJDLFdBQVc7QUFBQSxFQXFJcEQsY0FBYztBQUNiO0FBL0hxQixTQUFPLE9BQU87QUE4QjNDLFNBQVEsT0FBaUI7QUF3QnpCLFNBQVEsZUFBK0I7QUFHdkMsU0FBUSxnQkFBaUMsSUFBSTtBQUFBLE1BQzNDO0FBQUEsTUFDQSxtQkFBbUIsT0FBTztBQUFBLElBQUE7QUFJbkIsU0FBUSxjQUFpQixLQUFLO0FBYzlCLFNBQVEsZ0JBQThCO0FBRS9DLFNBQVEsb0JBQWtDO0FBTTFDLFNBQVEsU0FBa0I7QUFlMUIsU0FBUSxjQUF3QixLQUFLLGFBQWEsY0FBYyxNQUFNO0FBZ0J0RSxTQUFRLGNBQWM7QUFFdEIsU0FBUSxlQUFlO0FBRWYsU0FBQSxTQUFTLElBQUksNEJBQTRCLElBQUk7QUFDckQsU0FBUSxZQUFZLElBQUksc0JBQXNCLElBQUksRUFBRSxZQUFZLE1BQU07QUFDcEUsV0FBSyxjQUFjLEtBQUssYUFBYSxjQUFjLE1BQU07QUFDekQsV0FBSyxpQkFBaUI7QUFBQSxJQUFBLENBQ3ZCO0FBSUMsU0FBSyxpQkFBaUI7QUFDdEIsU0FBSyxhQUFhO0FBQUEsRUFDcEI7QUFBQSxFQTlIQSxJQUFXLElBQUksT0FBOEI7QUFDdEMsU0FBQSxPQUFPLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLFlBQVksS0FBSyxDQUFDO0FBQUEsRUFDdkY7QUFBQSxFQUNBLElBQVcsTUFBZ0I7QUFDekIsV0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN0QjtBQUFBLEVBS0EsSUFBVyxJQUFJLE9BQW1DO0FBQzNDLFNBQUEsT0FBTyxLQUFLLGFBQWEsbUJBQW1CLEtBQUssYUFBYSxZQUFZLEtBQUssQ0FBQztBQUFBLEVBQ3ZGO0FBQUEsRUFDQSxJQUFXLE1BQWdCO0FBQ3pCLFdBQU8sS0FBSyxRQUFRO0FBQUEsRUFDdEI7QUFBQSxFQUtBLElBQVcsSUFBSSxPQUFtQztBQUMzQyxTQUFBLE9BQU8sS0FBSyxhQUFhLG1CQUFtQixLQUFLLGFBQWEsWUFBWSxLQUFLLENBQUM7QUFBQSxFQUN2RjtBQUFBLEVBQ0EsSUFBVyxNQUFTO0FBQ2xCLFdBQU8sS0FBSyxRQUFRLEtBQUssYUFBYSxNQUFNO0FBQUEsRUFDOUM7QUFBQSxFQUtBLElBQVcsU0FBUyxPQUFtQztBQUNoRCxTQUFBLGdCQUFnQixLQUFLLGFBQWEsbUJBQW1CLEtBQUssYUFBYSxZQUFZLEtBQUssQ0FBQztBQUM5RixRQUNFLENBQUMsQ0FBQyxLQUFLLGtCQUNOLENBQUMsS0FBSyxjQUFjLEtBQUssYUFBYSxVQUFVLEtBQUssYUFBYSxDQUFDLEtBQ2xFLEtBQUssWUFBWSxLQUFLLGFBQWEsSUFDckM7QUFDQSxXQUFLLFlBQVksS0FBSyxhQUFhLFVBQVUsS0FBSyxhQUFhO0FBQUEsSUFBQSxPQUMxRDtBQUNMLFdBQUssWUFBWTtBQUFBLElBQ25CO0FBQUEsRUFDRjtBQUFBLEVBQ0EsSUFBVyxXQUFxQjtBQUM5QixXQUFPLEtBQUssaUJBQWlCO0FBQUEsRUFDL0I7QUFBQSxFQXNCQSxJQUFZLE1BQU0sTUFBZTtBQUMxQixTQUFBLGdCQUFnQixhQUFhLElBQUk7QUFBQSxFQUN4QztBQUFBLEVBQ0EsSUFBWSxRQUFpQjtBQUNwQixXQUFBLEtBQUssYUFBYSxXQUFXO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBNEJBLElBQVksU0FBOEI7QUFDeEMsV0FBTyxNQUFNO0FBQUEsTUFDWCxLQUFLLFdBQVksaUJBQWlCLHFCQUFxQixLQUFLLENBQUM7QUFBQSxJQUFBO0FBQUEsRUFFakU7QUFBQSxFQXlCQSxJQUFZLGNBQW9DO0FBQ3ZDLFdBQUEsS0FBSyxlQUFlLE1BQU07QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHTyxnQkFBc0I7QUFDdkIsUUFBQSxLQUFLLGtCQUFrQixPQUFPO0FBQ2hDLFdBQUssZ0JBQWdCO0FBQUEsSUFDdkI7QUFDSyxTQUFBLGNBQWMsS0FBSyxZQUFZLEtBQUs7QUFDekMsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQUFBLEVBRWdCLG9CQUEwQjs7QUFDeEMsVUFBTSxrQkFBa0I7QUFDeEIsU0FBSyxjQUFjO0FBQ25CLFNBQUssUUFBUSxNQUFNO0FBQ2pCLFdBQUssY0FBYztBQUNuQixXQUFLLFdBQVc7QUFBQSxJQUFBO0FBRWxCLHFCQUFXLFdBQVgsbUJBQW1CLGlCQUFpQixVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQUEsTUFDaEUsU0FBUztBQUFBLE1BQ1QsUUFBUSxLQUFLLE9BQU87QUFBQSxJQUFBO0FBQUEsRUFFeEI7QUFBQSxFQUVtQixXQUFXLG1CQUErQztBQUMzRSxVQUFNLFdBQVcsaUJBQWlCO0FBRTlCLFFBQUEsQ0FBQyxLQUFLLGNBQWM7QUFDdEI7QUFBQSxJQUNGO0FBRUksUUFBQSxrQkFBa0IsSUFBSSxNQUFNLEdBQUc7QUFDakMsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQUEsRUFFbUIsUUFBUSxtQkFBK0M7QUFDeEUsVUFBTSxRQUFRLGlCQUFpQjtBQUcvQixTQUFLLGFBQWE7QUFJZCxRQUFBLHlCQUF5Qix1QkFBdUIsWUFBWTtBQUM5RCxXQUFLLFdBQVc7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBR1EsTUFBTSxZQUFzQjtBQUVsQyxRQUFJLFVBQVU7QUFDWjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFlBQVk7QUFDZCxXQUFLLGtCQUFrQixVQUFVO0FBQUEsSUFDbkM7QUFDQSxTQUFLLFFBQVEsYUFBYSxRQUFRLEtBQUssS0FBSztBQUM1QyxTQUFLLFNBQVMsS0FBSyxnQkFBZ0IsS0FBSyxXQUFXO0FBQzlDLFNBQUEsU0FBUyxLQUFLO0FBQ2QsU0FBQSxrQkFBa0IsQ0FBQyxDQUFBLENBQUU7QUFDckIsU0FBQSxrQkFBa0IsQ0FBQyxDQUFBLENBQUU7QUFDMUIsUUFBSSxLQUFLLE9BQU87QUFDZCxZQUFNLGdCQUFnQixLQUFLLGFBQWEsa0JBQWtCLEtBQUssYUFBYSxDQUFDO0FBQ3hFLFdBQUEsa0JBQWtCLEtBQUssZ0JBQWdCLGFBQWE7QUFDcEQsV0FBQSxrQkFBa0IsS0FBSyxnQkFBZ0IsY0FBYztBQUFBLElBQzVEO0FBQ0EsU0FBSyxlQUFlO0FBQUEsRUFDdEI7QUFBQTtBQUFBLEVBR1EsYUFBbUI7O0FBQ3pCLFFBQUksS0FBSyxhQUFhO0FBQ2YsaUJBQUEseUJBQUEsbUJBQXNCO0FBQzNCLFdBQUssY0FBYztBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFHUSxlQUFxQjtBQUMzQixVQUFNLGlCQUEyQixLQUFLLGFBQWEsa0JBQWtCLFFBQVE7QUFDN0UsVUFBTSxlQUF5QixLQUFLLGFBQWEsa0JBQWtCLE1BQU07QUFDekUsVUFBTSxXQUFzQixhQUFhLElBQUksQ0FBQyxNQUFjLE9BQWU7QUFBQSxNQUN6RTtBQUFBLE1BQ0EsUUFBUSxlQUFlLENBQUM7QUFBQSxJQUN4QixFQUFBO0FBR0ksVUFBQSxpQkFBeUIsS0FBSyxhQUFhLGtCQUFrQjtBQUM5RCxTQUFBLFlBQVksU0FBUyxNQUFNLGNBQWMsRUFBRSxPQUFPLFNBQVMsTUFBTSxHQUFHLGNBQWMsQ0FBQztBQUFBLEVBQzFGO0FBQUE7QUFBQSxFQUdRLGdCQUFnQixPQUFtQjtBQUN6QyxVQUFNLGNBQXNCLEtBQUssYUFBYSxrQkFBa0IsS0FBSztBQUMvRCxVQUFBLFlBQXNCLEtBQUssYUFBYSxhQUFhO0FBQ3JELFVBQUEsUUFBaUIsQ0FBQyxDQUFBLENBQUU7QUFDMUIsVUFBTSxhQUFhLEtBQUssYUFBYSxtQkFBbUIsS0FBSztBQUM3RCxhQUFTLElBQUksR0FBRyxPQUFPLFlBQVksSUFBSSxhQUFhLEtBQUssUUFBUTtBQUMvRCxVQUFJLFNBQVMsY0FBYztBQUNuQixjQUFBLEtBQUssQ0FBQSxDQUFFO0FBQ04sZUFBQTtBQUFBLE1BQ1Q7QUFDTSxZQUFBLE9BQU8sS0FBSyxhQUFhO0FBQUEsUUFDN0IsS0FBSyxhQUFhLFFBQVEsS0FBSztBQUFBLFFBQy9CLEtBQUssYUFBYSxTQUFTLEtBQUs7QUFBQSxRQUNoQyxJQUFJO0FBQUEsTUFBQTtBQUVOLFlBQU0sTUFBTSxTQUFTLENBQUMsRUFBRSxLQUFLO0FBQUEsUUFDM0IsT0FBTyxLQUFLLGFBQWEsVUFBVSxJQUFJO0FBQUEsUUFDdkMsVUFBVSxVQUFVLENBQUM7QUFBQSxRQUNyQixZQUFZLE9BQU8sS0FBSyxhQUFhLFNBQVMsSUFBSSxDQUFDO0FBQUEsUUFDbkQsV0FBVyxPQUFPLEtBQUssYUFBYSxRQUFRLElBQUksQ0FBQztBQUFBLE1BQUEsQ0FDbEQ7QUFBQSxJQUNIO0FBQ08sV0FBQTtBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR1EsbUJBQXlCO0FBQy9CLFVBQU0sYUFBdUIsS0FBSyxhQUFhLGNBQWMsT0FBTztBQUNwRSxVQUFNLFNBQWtCLElBQUksTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUMvQyxDQUFDLEdBQUcsT0FBc0I7QUFBQSxRQUN4QixPQUFPLFdBQVcsQ0FBQztBQUFBLFFBQ25CLFdBQVcsS0FBSyxZQUFZLENBQUM7QUFBQSxRQUM3QixZQUFZLElBQUk7QUFBQSxNQUFBO0FBQUEsSUFDbEI7QUFFRixVQUFNLE9BQWUsS0FBSztBQUMxQixVQUFNLGFBQXdCLENBQUE7QUFDOUIsYUFBUyxJQUFZLEdBQUcsSUFBSSxNQUFNLEtBQUs7QUFDMUIsaUJBQUEsS0FBSyxPQUFPLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLElBQUksRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFDQSxTQUFLLFVBQVU7QUFBQSxFQUNqQjtBQUFBO0FBQUEsRUFHUSxnQkFBZ0IsU0FBaUIsR0FBZTtBQUNoRCxVQUFBLHFCQUE2QixLQUFLO0FBQ3hDLFVBQU0sV0FBcUIsSUFBSSxNQUFNLGNBQWMsRUFDaEQsS0FBSyxDQUFDLEVBQ04sSUFBSSxDQUFDLEdBQUcsTUFBYyxxQkFBcUIsU0FBUyxDQUFDO0FBQ3hELFVBQU0sT0FBZSxpQkFBaUI7QUFDdEMsVUFBTSxZQUF3QixDQUFBO0FBQzlCLGFBQVMsSUFBWSxHQUFHLElBQUksTUFBTSxLQUFLO0FBQzNCLGdCQUFBLEtBQUssU0FBUyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztBQUFBLElBQzNFO0FBQ08sV0FBQTtBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBWVEseUJBQWlDO0FBQ3ZDLFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssS0FBSztBQUNaLHFCQUFlLEtBQUssYUFBYSxRQUFRLEtBQUssR0FBRyxJQUFJLGlCQUFpQjtBQUFBLElBQUEsV0FDN0QsS0FBSyxLQUFLO0FBQ25CLHFCQUFlLEtBQUssYUFBYSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ25EO0FBQ0EsVUFBTSxhQUFhLEtBQUssYUFBYSxRQUFRLEtBQUssV0FBVztBQUM3RCxXQUNFLGVBQ0ksYUFBYSxnQkFBZ0IsaUJBQWtCLGtCQUFrQjtBQUFBLEVBRXpFO0FBQUE7QUFBQSxFQUdRLGNBQWMsTUFBdUI7QUFDM0MsUUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLEtBQUssTUFBTTtBQUNyQixhQUFBO0FBQUEsSUFDVDtBQUNBLFVBQU0sY0FDSixLQUFLLGFBQWEsUUFBUSxLQUFLLElBQUksS0FDbkMsS0FBSyxhQUFhLFlBQVksS0FBSyxNQUFPLEtBQUssYUFBYSxZQUFZLElBQUksQ0FBRSxJQUFJO0FBQ3BGLFVBQU0sYUFDSixLQUFLLGFBQWEsUUFBUSxLQUFLLElBQUksS0FDbkMsS0FBSyxhQUFhLFlBQVksS0FBSyxNQUFPLEtBQUssYUFBYSxZQUFZLElBQUksQ0FBRSxJQUFJO0FBQ3BGLFdBQU8sRUFBRSxlQUFlO0FBQUEsRUFDMUI7QUFBQSxFQUVRLGdCQUFnQixPQUF3QjtBQUM5QyxRQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsS0FBSyxNQUFNO0FBQ3JCLGFBQUE7QUFBQSxJQUNUO0FBQ00sVUFBQSxjQUNKLEtBQUssYUFBYSxRQUFRLEtBQUssSUFBSSxLQUNuQyxLQUFLLGFBQWEsUUFBUSxLQUFLLElBQUssS0FBSyxLQUFLLGVBQzlDLEtBQUssYUFBYSxTQUFTLEtBQUssSUFBSyxJQUFJO0FBQ3JDLFVBQUEsYUFDSixLQUFLLGFBQWEsUUFBUSxLQUFLLElBQUksS0FDbkMsS0FBSyxhQUFhLFFBQVEsS0FBSyxJQUFLLEtBQUssS0FBSyxlQUM5QyxLQUFLLGFBQWEsU0FBUyxLQUFLLElBQUssSUFBSTtBQUMzQyxXQUFPLEVBQUUsZUFBZTtBQUFBLEVBQzFCO0FBQUEsRUFFUSxlQUFlLE1BQXVCO0FBQzVDLFFBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFLLE1BQU07QUFDckIsYUFBQTtBQUFBLElBQ1Q7QUFDQSxVQUFNLGNBQ0osS0FBSyxhQUFhLFFBQVEsS0FBSyxJQUFJLEtBQUssS0FBSyxhQUFhLFFBQVEsS0FBSyxJQUFLLElBQUk7QUFDbEYsVUFBTSxhQUNKLEtBQUssYUFBYSxRQUFRLEtBQUssSUFBSSxLQUFLLEtBQUssYUFBYSxRQUFRLEtBQUssSUFBSyxJQUFJO0FBQ2xGLFdBQU8sRUFBRSxlQUFlO0FBQUEsRUFDMUI7QUFBQTtBQUFBLEVBR1Esb0JBQW9CLE9BQXdCO0FBQzlDLFFBQUEsQ0FBQyxLQUFLLFlBQVk7QUFDYixhQUFBO0FBQUEsSUFDVDtBQUVBLFVBQU0sZUFBZSxLQUFLLGFBQWEsV0FBVyxLQUFLLGFBQWMsT0FBTyxDQUFDO0FBQzdFLGFBQ00sT0FBVSxjQUNkLEtBQUssYUFBYSxTQUFTLElBQUksS0FBSyxPQUNwQyxPQUFPLEtBQUssYUFBYSxnQkFBZ0IsTUFBTSxDQUFDLEdBQ2hEO0FBQ0ksVUFBQSxLQUFLLFdBQVcsSUFBSSxHQUFHO0FBQ2xCLGVBQUE7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVPLFdBQUE7QUFBQSxFQUNUO0FBQUE7QUFBQSxFQUdRLG1CQUFtQixNQUF1QjtBQUM1QyxRQUFBLENBQUMsS0FBSyxZQUFZO0FBQ2IsYUFBQTtBQUFBLElBQ1Q7QUFFQSxVQUFNLGNBQWMsS0FBSyxhQUFhLFdBQVcsTUFBTSxHQUFHLENBQUM7QUFDM0QsYUFDTSxPQUFVLGFBQ2QsS0FBSyxhQUFhLFFBQVEsSUFBSSxLQUFLLE1BQ25DLE9BQU8sS0FBSyxhQUFhLGdCQUFnQixNQUFNLENBQUMsR0FDaEQ7QUFDSSxVQUFBLEtBQUssV0FBVyxJQUFJLEdBQUc7QUFDbEIsZUFBQTtBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRU8sV0FBQTtBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR1EsWUFBWSxLQUFtQjtBQUNyQyxTQUFLLGVBQWU7QUFDcEIsU0FBSyxjQUFjO0FBQ2YsUUFBQSxLQUFLLGNBQWMsS0FBSztBQUMxQixXQUFLLFlBQVk7QUFDakIsV0FBSyxjQUFjLEtBQUssS0FBSyxhQUFhLFlBQVksR0FBRyxDQUFFO0FBQUEsSUFDN0Q7QUFBQSxFQUNGO0FBQUEsRUFFUSxrQkFBa0IsTUFBZTtBQUNuQyxRQUFBLEtBQUssUUFBUSxLQUFLLGFBQWEsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDbkUsV0FBSyxjQUFjLEtBQUs7QUFDeEI7QUFBQSxJQUNGO0FBQ0ksUUFBQSxLQUFLLFFBQVEsS0FBSyxhQUFhLFlBQVksS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHO0FBQ25FLFdBQUssY0FBYyxLQUFLO0FBQ3hCO0FBQUEsSUFDRjtBQUNBLFNBQUssY0FBYztBQUFBLEVBQ3JCO0FBQUE7QUFBQSxFQUdRLG9CQUFvQixRQUFzQjtBQUNoRCxTQUFLLE1BQU0sS0FBSyxhQUFhLGtCQUFrQixLQUFLLGFBQWEsTUFBTSxDQUFDO0FBQUEsRUFDMUU7QUFBQSxFQUVRLG1CQUFtQixPQUFxQjtBQUM5QyxTQUFLLGVBQWdCO0FBRWhCLFNBQUEsY0FBYyxLQUFLLGFBQWE7QUFBQSxNQUNuQyxLQUFLO0FBQUEsTUFDTCxLQUFLLGFBQWEsU0FBUyxLQUFLLFdBQVc7QUFBQSxNQUMzQyxLQUFLLGFBQWEsUUFBUSxLQUFLLFdBQVc7QUFBQSxJQUFBO0FBRTVDLFNBQUssTUFBTTtBQUFBLEVBQ2I7QUFBQSxFQUVRLHdCQUF3QixPQUFxQjtBQUNuRCxTQUFLLE1BQU0sS0FBSyxhQUFhLGlCQUFpQixLQUFLLGFBQWEsS0FBSyxDQUFDO0FBQUEsRUFDeEU7QUFBQSxFQUVRLGNBQWMsVUFBc0I7QUFDdEMsUUFBQSxDQUFDLEtBQUssTUFBTTtBQUNQLGFBQUE7QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLGFBQWEsWUFBWSxVQUFVLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFDOUQ7QUFBQSxFQUVRLGNBQWMsVUFBc0I7QUFDdEMsUUFBQSxDQUFDLEtBQUssTUFBTTtBQUNQLGFBQUE7QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLGFBQWEsWUFBWSxVQUFVLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFDOUQ7QUFBQTtBQUFBLEVBR1EseUJBQWtDO0FBQ2xDLFVBQUEsWUFBWSxLQUFLLGFBQWE7QUFBQSxNQUNsQyxLQUFLO0FBQUEsTUFDTCxLQUFLLGFBQWEsUUFBUSxLQUFLLFdBQVcsSUFBSTtBQUFBLElBQUE7QUFFekMsV0FBQSxLQUFLLGNBQWMsU0FBUztBQUFBLEVBQ3JDO0FBQUE7QUFBQSxFQUdRLHFCQUE4QjtBQUNoQyxRQUFBLFlBQVksS0FBSyxhQUFhLGtCQUFrQixLQUFLLGFBQWEsS0FBSyxRQUFRLElBQUksQ0FBQztBQUN4RixnQkFBWSxLQUFLLGFBQWE7QUFBQSxNQUM1QixLQUFLLGFBQWEsUUFBUSxTQUFTO0FBQUEsTUFDbkMsS0FBSyxhQUFhLFNBQVMsU0FBUztBQUFBLE1BQ3BDO0FBQUEsSUFBQTtBQUVLLFdBQUEsS0FBSyxjQUFjLFNBQVM7QUFBQSxFQUNyQztBQUFBLEVBRVEsd0JBQWlDO0FBQ2pDLFVBQUEsV0FBVyxLQUFLLGFBQWE7QUFBQSxNQUNqQyxLQUFLLGFBQWEsUUFBUSxLQUFLLFdBQVcsSUFBSTtBQUFBLE1BQzlDO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFFSyxXQUFBLEtBQUssY0FBYyxRQUFRO0FBQUEsRUFDcEM7QUFBQSxFQUVRLG9CQUE2QjtBQUM3QixVQUFBLFdBQVcsS0FBSyxhQUFhO0FBQUEsTUFDakMsS0FBSyxhQUFhLFFBQVEsS0FBSyxXQUFXLElBQUk7QUFBQSxNQUM5QztBQUFBLE1BQ0E7QUFBQSxJQUFBO0FBRUssV0FBQSxLQUFLLGNBQWMsUUFBUTtBQUFBLEVBQ3BDO0FBQUEsRUFFUSw2QkFBc0M7QUFDNUMsVUFBTSxXQUFXLEtBQUssYUFBYSxXQUFXLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQ3BFLFdBQUEsS0FBSyxjQUFjLFFBQVE7QUFBQSxFQUNwQztBQUFBLEVBRVEseUJBQWtDO0FBQ2xDLFVBQUEsUUFBUSxhQUFhLFFBQVEsS0FBSyxLQUFLLE9BQU8sS0FBSyxrQkFBa0IsS0FBSztBQUNoRixVQUFNLGdCQUFnQixNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzVDLFVBQU0sV0FBVyxjQUFjLGNBQWMsU0FBUyxDQUFDO0FBQ3ZELFVBQU0sV0FBVyxLQUFLLGFBQWEsV0FBVyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3pELFdBQUEsS0FBSyxjQUFjLFFBQVE7QUFBQSxFQUNwQztBQUFBLEVBRVEsaUJBQWlCLGFBQWdDO0FBQ25ELFNBQUEsMkNBQWEsZUFBYyxVQUFVO0FBQ3ZDLFdBQUssYUFBYTtBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUFBLEVBRVEsZUFBcUI7QUFDckIsVUFBQTtBQUFBLE1BQ0osS0FBSyxXQUFZLGlCQUFpQixtQ0FBbUMsS0FBSyxDQUFDO0FBQUEsSUFBQSxFQUMzRSxRQUFRLENBQUMsUUFBVSxJQUFvQixXQUFXLEVBQUc7QUFDakQsVUFBQSxpQkFBaUIsS0FBSztBQUM1QixRQUFJLGdCQUFnQjtBQUNsQixxQkFBZSxXQUFXO0FBQUEsSUFDNUI7QUFBQSxFQUNGO0FBQUEsRUFFUSxxQkFBd0M7QUFDeEMsVUFBQSxTQUFTLEtBQUssWUFBWSxLQUFLLGFBQWEsWUFBWSxLQUFLLFNBQVMsSUFBSyxLQUFLO0FBQ3RGLFFBQUksaUJBQ0YsS0FBSyxXQUFZLGNBQWMseUJBQXlCLEtBQ3hELEtBQUssV0FBWTtBQUFBLE1BQ2YsY0FBYyxLQUFLLGFBQWEsUUFBUSxNQUFNLENBQUMsSUFBSSxLQUFLLGFBQWE7QUFBQSxRQUNuRTtBQUFBLE1BQUEsQ0FDRCxJQUFJLEtBQUssYUFBYSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ3hDLEtBQ0EsS0FBSyxXQUFZLGNBQWMsZ0JBQWdCLEtBQUssYUFBYSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEtBQ3JGLEtBQUssV0FBWSxjQUFjLGVBQWUsS0FBSyxhQUFhLFFBQVEsTUFBTSxDQUFDLElBQUk7QUFDakYsUUFBQSxDQUFDLG1CQUFtQixpREFBc0MsV0FBVTtBQUNyRCx1QkFBQSxLQUFLLFdBQVksY0FBYyxxQ0FBcUM7QUFBQSxJQUN2RjtBQUNBLFdBQVEsa0JBQXdDO0FBQUEsRUFDbEQ7QUFBQSxFQUVRLHFCQUFxQixPQUFzQixLQUFpQjtBQUM5RCxRQUFBLDRCQUE0QixLQUFLLEdBQUc7QUFDdEMsWUFBTSxlQUFlO0FBQUEsSUFDdkI7QUFJQSxVQUFNLFFBQTZCLEtBQUs7QUFDeEMsVUFBTSxRQUFnQixNQUFNLFVBQVUsQ0FBQyxNQUF5QixNQUFNLE1BQU0sTUFBTTtBQUNsRixVQUFNLFNBQTRCLEtBQUssb0JBQW9CLE9BQU8sT0FBTyxPQUFPLEdBQUc7QUFDN0UsVUFBQSxXQUE4QixLQUFLLFdBQVk7QUFDckQsUUFBSSxXQUFXLFVBQVU7QUFDdEIsYUFBNkIsV0FBVztBQUN6Qyx1Q0FBUTtBQUNQLGVBQStCLFdBQVc7QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFRLG9CQUNOLEtBQ0EsT0FDQSxPQUNBLEtBQ21CO0FBQ2IsVUFBQTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxRQUN3QyxLQUFLO0FBQUEsTUFDN0M7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFHRixZQUFRLElBQUksS0FBSztBQUFBLE1BQ2YsS0FBSztBQUNILGVBQU8sS0FBSyxVQUFVLE9BQU8sT0FBTyxDQUFDLGNBQWM7QUFBQSxNQUNyRCxLQUFLO0FBQ0gsZUFBTyxLQUFLLFVBQVUsT0FBTyxPQUFPLGNBQWM7QUFBQSxNQUNwRCxLQUFLO0FBQ0gsZUFBTyxLQUFLLFVBQVUsT0FBTyxPQUFPLEVBQUU7QUFBQSxNQUN4QyxLQUFLO0FBQ0gsZUFBTyxLQUFLLFVBQVUsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUN2QyxLQUFLO0FBQ0ksZUFBQSxLQUFLLFdBQVcsT0FBTyxpQkFBaUI7QUFBQSxNQUNqRCxLQUFLO0FBQ0gsZUFBTyxLQUFLO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQUE7QUFBQSxNQUVKLEtBQUs7QUFDSCxlQUFPLEtBQUssa0JBQWtCLE9BQU8sT0FBTyw2QkFBNkIsY0FBYztBQUFBLE1BQ3pGLEtBQUs7QUFDSCxlQUFPLEtBQUssVUFBVSxPQUFPLDhCQUE4QixDQUFDO0FBQUEsTUFDOUQ7QUFDRSxlQUFPLE1BQU0sS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVRLDBDQUNOLE9BQ0EsT0FDQSxLQUNzQztBQUN0QyxZQUFRLEtBQUssZUFBZTtBQUFBLE1BQzFCLEtBQUssT0FBTztBQUNKLGNBQUEsY0FBYyxDQUFDLElBQUssV0FBVztBQUM5QixlQUFBO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQix5QkFBeUI7QUFBQSxVQUN6QixtQkFBbUIsUUFBUTtBQUFBLFVBQzNCLDZCQUNFLFVBQVUsY0FDTixLQUFLLGFBQWE7QUFBQSxZQUNoQixLQUFLLGFBQWE7QUFBQSxjQUNoQixLQUFLLGFBQWEsWUFBWSxJQUFLLEtBQUs7QUFBQSxjQUN4QztBQUFBLFlBQ0Y7QUFBQSxjQUVGLE1BQU07QUFBQSxRQUFBO0FBQUEsTUFFaEI7QUFBQSxNQUVBLEtBQUssU0FBUztBQUNMLGVBQUE7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLHlCQUF5QjtBQUFBLFVBQ3pCLG1CQUFtQjtBQUFBLFVBQ25CLDZCQUE2QjtBQUFBLFFBQUE7QUFBQSxNQUVqQztBQUFBLE1BQ0EsS0FBSyxRQUFRO0FBQ1gsY0FBTSxTQUFpQixLQUFLLE1BQU0sUUFBUSxjQUFjLElBQUk7QUFDNUQsY0FBTSxjQUFzQixXQUFXLElBQUksUUFBUSxRQUFRO0FBQ3BELGVBQUE7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLHlCQUF5QjtBQUFBLFVBQ3pCLG1CQUFtQixRQUFRO0FBQUEsVUFDM0IsNkJBQTZCLFdBQVcsSUFBSSxpQkFBaUIsaUJBQWlCO0FBQUEsUUFBQTtBQUFBLE1BRWxGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVEsVUFBVSxNQUEyQixPQUFlLE9BQWtDOztBQUM1RixRQUFJLFlBQVksUUFBUTtBQUN4QixXQUFPLFlBQVksS0FBSyxZQUFVLFVBQUssU0FBUyxNQUFkLG1CQUFpQixXQUFVO0FBQzlDLG1CQUFBO0FBQUEsSUFDZjtBQUNBLFdBQU8sS0FBSyxTQUFTLEtBQUssS0FBSyxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBR1EsV0FBVyxNQUEyQixxQkFBZ0Q7QUFDNUYsV0FBTyxDQUFDLEtBQUssbUJBQW1CLEVBQUUsV0FDOUIsS0FBSyxtQkFBbUIsSUFDeEIsS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFBQSxFQUNqRDtBQUFBO0FBQUEsRUFHUSxVQUFVLE1BQTJCLG9CQUErQztBQUMxRixXQUFPLENBQUMsS0FBSyxrQkFBa0IsRUFBRSxXQUM3QixLQUFLLGtCQUFrQixJQUN2QixLQUFLLFVBQVUsTUFBTSxvQkFBb0IsRUFBRTtBQUFBLEVBQ2pEO0FBQUE7QUFBQSxFQUdRLG1CQUNOLE1BQ0EsT0FDQSxRQUNBLGdCQUNtQjtBQUNiLFVBQUEsWUFBYSxRQUFRLGlCQUFrQjtBQUM3QyxXQUFPLENBQUMsS0FBSyxTQUFTLEVBQUUsV0FDcEIsS0FBSyxTQUFTLElBQ2QsS0FBSyxVQUFVLE1BQU0sV0FBVyxjQUFjO0FBQUEsRUFDcEQ7QUFBQTtBQUFBLEVBR1Esa0JBQ04sTUFDQSxPQUNBLFFBQ0EsZ0JBQ21CO0FBQ2IsVUFBQSxZQUFZLFFBQVEsS0FBSyxPQUFPLFNBQVMsUUFBUSxLQUFLLGNBQWMsSUFBSTtBQUM5RSxXQUFPLENBQUMsS0FBSyxTQUFTLEVBQUUsV0FDcEIsS0FBSyxTQUFTLElBQ2QsS0FBSyxVQUFVLE1BQU0sV0FBVyxDQUFDLGNBQWM7QUFBQSxFQUNyRDtBQUFBLEVBRVEsa0JBQXdCO0FBQzlCLFNBQUssY0FBYztBQUNkLFNBQUEsY0FBYyxLQUFLLFlBQVksS0FBSztBQUN6QyxTQUFLLGNBQWM7QUFDbkIsU0FBSyxlQUFlO0FBQ3BCLFNBQUssb0JBQW9CO0FBQ3pCLFNBQUssYUFBYTtBQUFBLEVBQ3BCO0FBQUE7QUFBQSxFQUdRLGlCQUFpQztBQUNqQyxVQUFBLHNCQUFzQixLQUFLLFFBQzdCLEtBQUssYUFBYSxrQkFBa0IsS0FBSyxhQUFhLENBQUMsSUFDdkQ7QUFDRyxXQUFBO0FBQUE7QUFBQSxVQUVELEtBQUs7QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLEtBQUssb0JBQW9CLEVBQUU7QUFBQSxNQUNqQyxrQkFBa0IsS0FBSyxVQUFVLE9BQU87QUFBQSxNQUN4QyxLQUFLLHVCQUF1QjtBQUFBLElBQUEsQ0FDN0I7QUFBQTtBQUFBLFlBRUcsS0FBSyx1QkFBdUIsS0FBSyxXQUFXLENBQUM7QUFBQSxZQUM3QyxLQUFLLFFBQVEsS0FBSyx1QkFBdUIsbUJBQW9CLElBQUksT0FBTztBQUFBO0FBQUEsY0FFdEUsS0FBSywyQkFBMkIsS0FBSyxhQUFhLG1CQUFvQixDQUFDO0FBQUE7QUFBQTtBQUFBLFVBRzNFLEtBQUs7QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLEtBQUssb0JBQW9CLENBQUM7QUFBQSxNQUNoQyxjQUFjLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDcEMsS0FBSyxtQkFBbUI7QUFBQSxJQUFBLENBQ3pCO0FBQUE7QUFBQTtBQUFBLFVBR0MsS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLENBQUM7QUFBQSxVQUNqQyxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsS0FBSyxlQUFlLElBQUksT0FBTztBQUFBO0FBQUE7QUFBQSxFQUd6RTtBQUFBO0FBQUEsRUFHUSx1QkFBdUIsR0FBc0I7QUFDbkQsVUFBTSxhQUFhLEdBQ2pCLEtBQUssWUFBWSxLQUFLLGFBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUNwRCxJQUFJLEtBQUssYUFBYSxRQUFRLENBQUMsQ0FBQztBQUN6QixXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFLVyx1QkFBdUIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUFJLFVBQVU7QUFBQSxpQkFDakUsTUFBTTtBQUNiLFdBQUssY0FBYztBQUNuQixXQUFLLG9CQUFvQjtBQUN6QixXQUFLLGFBQWE7QUFBQSxJQUFBLENBQ25CO0FBQUE7QUFBQSxVQUVDLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlsQjtBQUFBO0FBQUEsRUFHUSw4QkFBOEIsT0FBb0I7QUFDeEQsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsS0FBSyxPQUFPO0FBQ3JCLFVBQUksR0FBRztBQUNMLHNCQUFjLEdBQ1osS0FBSyxZQUFZLEtBQUssYUFBYSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQ3BELElBQUksS0FBSyxhQUFhLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQ08sV0FBQTtBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR1EsZ0JBQWdCLE9BQWdDO0FBQy9DLFdBQUE7QUFBQTtBQUFBO0FBQUEsb0JBR1MsQ0FBQyxVQUNYLEtBQUssaUJBQWlCLE1BQU0sYUFBNEIsQ0FBQztBQUFBLHdCQUMzQyxDQUFDLE1BQXNCLEtBQUssbUJBQW1CLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBSTNELEtBQUssdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJOUIsS0FBSyxvQkFBb0IsS0FBSyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJekM7QUFBQTtBQUFBLEVBR1Esd0JBQTBDO0FBQ2hELFdBQU8sS0FBSyxVQUFVO0FBQUEsTUFDcEIsQ0FBQyxRQUFpQjtBQUFBO0FBQUEsb0NBRVksSUFBSSxJQUFJO0FBQUEscUNBQ1AsSUFBSSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBQUE7QUFBQSxFQUk3QztBQUFBO0FBQUEsRUFHUSxvQkFBb0IsT0FBa0M7QUFDNUQsVUFBTSxRQUFnQixLQUFLLGFBQWEsVUFBVSxLQUFLLEdBQUc7QUFDMUQsV0FBTyxNQUFNLElBQUksQ0FBQyxNQUFhLGFBQXFCO0FBQzVDLFlBQUEsaUJBQXlCLGVBQWUsS0FBSztBQUMvQyxVQUFBLGFBQWEsS0FBSyxnQkFBZ0I7QUFDN0IsZUFBQTtBQUFBO0FBQUEsY0FFRCxDQUFDLEdBQUcsTUFBTSxjQUFjLEVBQUUsS0FBQSxDQUFNLEVBQUU7QUFBQSxVQUNsQyxNQUNFO0FBQUE7QUFBQSw2QkFFYSxLQUFLLEtBQUssQ0FBQyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFBQTtBQUFBLFFBQUEsQ0FFOUQ7QUFBQSxjQUNDLEtBQUssZ0JBQWdCLE1BQU0sS0FBSyxDQUFDO0FBQUE7QUFBQTtBQUFBLE1BR3pDO0FBQ08sYUFBQTtBQUFBLFVBQ0gsS0FBSyxnQkFBZ0IsTUFBTSxLQUFLLENBQUM7QUFBQTtBQUFBLElBQUEsQ0FFdEM7QUFBQSxFQUNIO0FBQUE7QUFBQSxFQUdRLGdCQUFnQixNQUFhLE9BQWlDO0FBQzdELFdBQUEsS0FBSyxJQUFJLENBQUMsUUFBYTtBQUM1QixZQUFNLGVBQWUsQ0FBQyxLQUFLLGNBQWMsSUFBSSxLQUFLO0FBQzVDLFlBQUEsZ0JBQWdCLENBQUMsS0FBSyxZQUFZLEtBQUssYUFBYSxZQUFZLElBQUksS0FBSyxDQUFFO0FBQ2pGLFlBQU0sV0FBb0IsQ0FBQyxDQUFDLEtBQUssYUFBYSxJQUFJLFVBQVUsS0FBSztBQUMzRCxZQUFBLFdBQVcsR0FBRyxJQUFJLFFBQVEsSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLFNBQVM7QUFDN0QsWUFBQSxVQUFVLElBQUksVUFBVTtBQUN2QixhQUFBO0FBQUE7QUFBQSxrQkFFSyxTQUFTO0FBQUEsUUFDZiw0QkFBNEI7QUFBQSxRQUM1QixxQ0FBcUM7QUFBQSxNQUFBLENBQ3RDLENBQUM7QUFBQTtBQUFBO0FBQUEsb0JBR1EsU0FBUztBQUFBLFFBQ2Ysc0JBQXNCO0FBQUEsUUFDdEIscUJBQXFCO0FBQUEsUUFDckIsOEJBQThCO0FBQUEsUUFDOUIsMEJBQTBCO0FBQUEsUUFDMUIsNkJBQTZCLENBQUMsZ0JBQWdCO0FBQUEsTUFBQSxDQUMvQyxDQUFDO0FBQUEscUJBQ08sTUFBTSxLQUFLLFlBQVksSUFBSSxLQUFLLENBQUM7QUFBQSx3QkFDOUIsZ0JBQWdCLGFBQWE7QUFBQSx5QkFDNUIsS0FBSyxhQUFhLDJCQUEyQixJQUFJLEtBQUssQ0FBQztBQUFBLDJCQUNyRCxRQUFRO0FBQUEsNEJBQ1AsZ0JBQWdCLGFBQWE7QUFBQSwyQkFDOUIsVUFBVSxTQUFTLE9BQU87QUFBQSx1QkFDOUIsWUFBWSxPQUFPO0FBQUE7QUFBQSx1QkFFbkIsQ0FBQyxRQUF1QixLQUFLLHFCQUFxQixLQUFLLEdBQUcsQ0FBQztBQUFBO0FBQUE7QUFBQSxjQUdwRSxJQUFJLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBLENBSXJCO0FBQUEsRUFDSDtBQUFBO0FBQUEsRUFHUSxtQkFBbUM7QUFDbEMsV0FBQTtBQUFBO0FBQUEsVUFFRCxLQUFLO0FBQUEsTUFDTDtBQUFBLE1BQ0EsTUFBTSxLQUFLLG1CQUFtQixFQUFFO0FBQUEsTUFDaEMsaUJBQWlCLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDdkMsS0FBSyxzQkFBc0I7QUFBQSxJQUFBLENBQzVCO0FBQUEsb0RBQzJDLEtBQUssMEJBQTBCO0FBQUEsVUFDekUsS0FBSztBQUFBLE1BQ0w7QUFBQSxNQUNBLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQztBQUFBLE1BQy9CLGFBQWEsS0FBSyxVQUFVLE9BQU87QUFBQSxNQUNuQyxLQUFLLGtCQUFrQjtBQUFBLElBQUEsQ0FDeEI7QUFBQTtBQUFBO0FBQUEsVUFHQyxLQUFLLGtCQUFrQixLQUFLLFNBQVMsS0FBSyxXQUFZLENBQUM7QUFBQSxVQUN2RCxLQUFLLFFBQVEsS0FBSyxrQkFBa0IsS0FBSyxTQUFTLEtBQUssY0FBZSxHQUFHLElBQUksSUFBSSxPQUFPO0FBQUE7QUFBQTtBQUFBLEVBR2hHO0FBQUE7QUFBQSxFQUdRLDJCQUEyQztBQUMxQyxXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBSVUsR0FBRywwQkFBMEIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQUEsaUJBQzlFLE1BQU0sS0FBSyxpQkFBaUI7QUFBQTtBQUFBLFVBRW5DLEtBQUssV0FBVyxJQUFJLEtBQUssUUFBUSxNQUFNLEtBQUssY0FBZSxDQUFDLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQSwrQ0FHbkMsS0FBSyxXQUFXO0FBQUEsRUFDN0Q7QUFBQTtBQUFBLEVBR1Esa0JBQWtCLFFBQW1CLE1BQWMsYUFBYSxPQUF1QjtBQUN0RixXQUFBO0FBQUE7QUFBQTtBQUFBLHdCQUdhLENBQUMsTUFBc0IsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0FBQUE7QUFBQSxVQUUvRCxLQUFLLFFBQ0g7QUFBQTtBQUFBLGlFQUVxRCxjQUFjLElBQUksSUFBSTtBQUFBO0FBQUEsd0JBRzNFLE9BQU87QUFBQTtBQUFBLFlBRVAsT0FBTztBQUFBLE1BQ1AsQ0FBQyxRQUFpQjtBQUFBO0FBQUEsa0JBRVosSUFBSSxJQUFJLENBQUMsVUFBaUI7QUFDMUIsY0FBTSxlQUFlLENBQUMsS0FBSyxnQkFBZ0IsTUFBTSxVQUFVO0FBQzNELGNBQU0sZ0JBQWdCLENBQUMsS0FBSyxvQkFBb0IsTUFBTSxVQUFVO0FBQ2hFLGNBQU0sZ0JBQWdCLEtBQUssWUFDdkIsS0FBSyxhQUFhLFNBQVMsS0FBSyxhQUFhLFlBQVksS0FBSyxTQUFTLENBQUUsSUFDekU7QUFDSixjQUFNLGVBQWUsS0FBSyxZQUN0QixLQUFLLGFBQWEsUUFBUSxLQUFLLGFBQWEsWUFBWSxLQUFLLFNBQVMsQ0FBRSxJQUN4RTtBQUNFLGNBQUEsV0FDSixDQUFDLENBQUMsS0FBSyxhQUFhLFNBQVMsZ0JBQWdCLE1BQU0sZUFBZTtBQUVwRSxjQUFNLGlCQUNKLFNBQVMsS0FBSyxhQUFhLFFBQVEsS0FBSyxHQUFHLEtBQzNDLEtBQUssYUFBYSxTQUFTLEtBQUssR0FBRyxNQUFNLE1BQU07QUFFMUMsZUFBQTtBQUFBLDRCQUNHLFNBQVM7QUFBQSxVQUNmLDRCQUE0QjtBQUFBLFVBQzVCLDZCQUE2QjtBQUFBLFFBQUEsQ0FDOUIsQ0FBQztBQUFBO0FBQUE7QUFBQSw4QkFHUSxTQUFTO0FBQUEsVUFDZixzQkFBc0I7QUFBQSxVQUN0QixzQkFBc0I7QUFBQSxVQUN0Qiw4QkFBOEI7QUFBQSxVQUM5Qiw2QkFBNkIsQ0FBQyxnQkFBZ0I7QUFBQSxVQUM5QywwQkFBMEI7QUFBQSxRQUFBLENBQzNCLENBQUM7QUFBQSwrQkFDTyxNQUFNLEtBQUssa0JBQWtCLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztBQUFBLGtDQUM3RCxnQkFBZ0IsYUFBYTtBQUFBLG1DQUM1QixHQUFHLE1BQU0sU0FBUyxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQUEscUNBQ3RDLFFBQVE7QUFBQSxzQ0FDUCxPQUFPLGdCQUFnQixhQUFhLENBQUM7QUFBQTtBQUFBLG1DQUV4QyxNQUFNLGNBQWMsT0FBTztBQUFBLGlDQUM3QixDQUFDLFFBQXVCLEtBQUsscUJBQXFCLEdBQUcsQ0FBQztBQUFBO0FBQUEsd0JBRS9ELE1BQU0sS0FBSztBQUFBO0FBQUE7QUFBQSxNQUFBLENBR2xCLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFBQSxDQUdQO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVDtBQUFBO0FBQUEsRUFHUSxrQkFBa0IsT0FBZSxNQUFjLFlBQTJCO0FBQzNFLFNBQUEsZUFBZSxhQUFhLFFBQVEsSUFBSTtBQUM3QyxTQUFLLG9CQUFvQjtBQUNwQixTQUFBO0FBQUEsTUFDSCxLQUFLLGFBQWE7QUFBQSxRQUNoQjtBQUFBLFFBQ0EsS0FBSztBQUFBLFFBQ0wsS0FBSyxhQUFhLFFBQVEsS0FBSyxXQUFXO0FBQUEsTUFDNUM7QUFBQSxJQUFBO0FBRUYsU0FBSyxhQUFhO0FBQUEsRUFDcEI7QUFBQTtBQUFBLEVBR1Esa0JBQWtDO0FBQ2pDLFdBQUE7QUFBQTtBQUFBLFVBRUQsS0FBSztBQUFBLE1BQ0w7QUFBQSxNQUNBLE1BQU0sS0FBSyx3QkFBd0IsQ0FBQyxjQUFjO0FBQUEsTUFDbEQsc0JBQXNCLGNBQWMsRUFBRSxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQzVELEtBQUssMkJBQTJCO0FBQUEsSUFBQSxDQUNqQztBQUFBLG9EQUMyQyxLQUFLLHlCQUF5QjtBQUFBLFVBQ3hFLEtBQUs7QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLEtBQUssd0JBQXdCLGNBQWM7QUFBQSxNQUNqRCxrQkFBa0IsY0FBYyxFQUFFLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDeEQsS0FBSyx1QkFBdUI7QUFBQSxJQUFBLENBQzdCO0FBQUE7QUFBQTtBQUFBLFVBR0MsS0FBSyxpQkFBaUIsS0FBSyxNQUFNLENBQUM7QUFBQSxVQUNsQyxLQUFLLFFBQVEsS0FBSyxpQkFBaUIsS0FBSyxpQkFBaUIsSUFBSSxJQUFJLE9BQU87QUFBQTtBQUFBO0FBQUEsRUFHaEY7QUFBQTtBQUFBLEVBR1EsVUFDTixXQUNBLE9BQ0EsV0FDQSxVQUNnQjtBQUNULFdBQUE7QUFBQTtBQUFBLGlDQUVzQixTQUFTO0FBQUEsbUJBQ3ZCLFNBQVM7QUFBQSxlQUNiLEtBQUs7QUFBQSxrQkFDRixRQUFRO0FBQUEsbUNBQ1MsY0FBYyxTQUFTLGFBQWEsTUFBTTtBQUFBO0FBQUEsRUFFM0U7QUFBQTtBQUFBLEVBR1EsMEJBQTBDO0FBQ2hELFVBQU0sWUFBb0IsS0FBSyxPQUFPLE9BQU8sQ0FBQztBQUN4QyxVQUFBLGlCQUNKLGFBQWEsUUFBUSxLQUFLLEtBQUssT0FBTyxLQUFLLGtCQUFrQixLQUFLLFFBQ2xFLEtBQUs7QUFDUCxVQUFNLFdBQW1CLGNBQWMsY0FBYyxTQUFTLENBQUM7QUFDL0QsVUFBTSxZQUFZLEdBQUcsU0FBUyxNQUFNLFFBQVE7QUFDckMsV0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBS1csMEJBQTBCLEtBQUssVUFBVSxPQUFPLENBQUMsSUFBSSxTQUFTO0FBQUEsaUJBQ25FLE1BQU0sS0FBSyxpQkFBaUI7QUFBQTtBQUFBLFVBRW5DLFNBQVM7QUFBQTtBQUFBO0FBQUEsK0NBRzRCLFNBQVM7QUFBQTtBQUFBLEVBRXREO0FBQUE7QUFBQSxFQUdRLGlCQUFpQixPQUFtQixhQUFhLE9BQXVCO0FBQzlFLFVBQU0sTUFBTSxLQUFLO0FBQ1YsV0FBQTtBQUFBO0FBQUEsc0JBRVcsQ0FBQyxNQUFzQixLQUFLLG1CQUFtQixDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUEsVUFHN0QsTUFBTTtBQUFBLE1BQ04sQ0FBQyxRQUNDO0FBQUEsZ0JBQ0ksSUFBSSxJQUFJLENBQUMsU0FBaUI7QUFDMUIsY0FBTSxlQUFlLENBQUMsS0FBSyxlQUFlLElBQUk7QUFDOUMsY0FBTSxnQkFBZ0IsQ0FBQyxLQUFLLG1CQUFtQixJQUFJO0FBQ25ELGNBQU0sZUFBZSxLQUFLLFlBQ3RCLEtBQUssYUFBYSxRQUFRLEtBQUssYUFBYSxZQUFZLEtBQUssU0FBUyxDQUFFLElBQ3hFO0FBQ0osY0FBTSxXQUFvQixDQUFDLENBQUMsS0FBSyxhQUFhLFNBQVM7QUFDdkQsY0FBTSxnQkFBZ0IsS0FBSyxhQUFhLFFBQVEsR0FBRyxNQUFNO0FBQ2xELGVBQUE7QUFBQTtBQUFBLDRCQUVLLFNBQVM7QUFBQSxVQUNmLHNCQUFzQjtBQUFBLFVBQ3RCLHNCQUFzQjtBQUFBLFVBQ3RCLDhCQUE4QjtBQUFBLFVBQzlCLDZCQUE2QixDQUFDLGdCQUFnQjtBQUFBLFVBQzlDLDBCQUEwQjtBQUFBLFFBQUEsQ0FDM0IsQ0FBQztBQUFBLDZCQUNPLE1BQU0sS0FBSyxpQkFBaUIsTUFBTSxVQUFVLENBQUM7QUFBQSxnQ0FDMUMsZ0JBQWdCLGFBQWE7QUFBQSxpQ0FDNUIsSUFBSTtBQUFBLG1DQUNGLFFBQVE7QUFBQSxvQ0FDUCxPQUFPLGdCQUFnQixhQUFhLENBQUM7QUFBQTtBQUFBLGdDQUV6QyxRQUFRLE9BQU87QUFBQSwrQkFDaEIsQ0FBQyxRQUF1QixLQUFLLHFCQUFxQixHQUFHLENBQUM7QUFBQTtBQUFBLHNCQUUvRCxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BQUEsQ0FHWCxDQUFDO0FBQUE7QUFBQSxJQUFBLENBRVA7QUFBQTtBQUFBO0FBQUEsRUFHUDtBQUFBO0FBQUEsRUFHUSxpQkFBaUIsTUFBYyxXQUEwQjtBQUMxRCxTQUFBLGNBQWMsWUFBWSxPQUFPLElBQUk7QUFDMUMsU0FBSyxvQkFBb0I7QUFDcEIsU0FBQTtBQUFBLE1BQ0gsS0FBSyxhQUFhO0FBQUEsUUFDaEIsS0FBSztBQUFBLFFBQ0wsS0FBSyxhQUFhLFNBQVMsS0FBSyxXQUFXO0FBQUEsUUFDM0MsS0FBSyxhQUFhLFFBQVEsS0FBSyxXQUFXO0FBQUEsTUFDNUM7QUFBQSxJQUFBO0FBRUYsU0FBSyxhQUFhO0FBQUEsRUFDcEI7QUFBQSxFQUVBLElBQVksV0FBMkI7QUFDckMsWUFBUSxLQUFLLGVBQWU7QUFBQSxNQUMxQixLQUFLO0FBQ0gsZUFBTyxLQUFLO01BQ2QsS0FBSztBQUNILGVBQU8sS0FBSztNQUNkLEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyxLQUFLO0lBQ2hCO0FBQUEsRUFDRjtBQUFBLEVBRVEsbUJBQW1CLE9BQTZCO0FBQ3RELFVBQU0sUUFBUSxNQUFNO0FBQ2hCLFFBQUEsTUFBTSxrQkFBa0IsUUFBUTtBQUM1QixZQUFBLFVBQVUsT0FBTywwQkFBMEI7QUFDakQsV0FBSyxjQUFjO0FBQ25CLFdBQUssZ0JBQWdCLEtBQUs7QUFBQSxJQUFBLFdBQ2pCLE1BQU0sa0JBQWtCLFFBQVE7QUFDekMsV0FBSyxnQkFBZ0IsaUJBQWlCO0FBQUEsSUFDeEM7QUFBQSxFQUNGO0FBQUEsRUFFUSxlQUFxQjtBQUN0QixTQUFBLGdCQUFnQixtQkFBbUIsSUFBSTtBQUN2QyxTQUFBLFdBQVksaUJBQWlCLE9BQU8sRUFBRTtBQUFBLE1BQVEsQ0FBQyxNQUNsRCxFQUFFLFVBQVUsT0FBTywwQkFBMEI7QUFBQSxJQUFBO0FBQUEsRUFFakQ7QUFBQSxFQUVtQixTQUF5QjtBQUNuQyxXQUFBLDBDQUEwQyxLQUFLLFFBQVE7QUFBQSxFQUNoRTtBQUNGO0FBbHBDYSxtQkFDWSxTQUF5QjtBQURyQyxtQkFFWSxTQUFTO0FBQUEsRUFDOUIsY0FBYztBQUNoQjtBQUdvQyxnQkFBQTtBQUFBLEVBQW5DLFNBQVMsRUFBRSxNQUFNLFNBQVM7QUFBQSxHQVBoQixtQkFPeUIsV0FBQSxRQUFBLENBQUE7QUFJekIsZ0JBQUE7QUFBQSxFQURWLFNBQVM7QUFBQSxHQVZDLG1CQVdBLFdBQUEsT0FBQSxDQUFBO0FBVUEsZ0JBQUE7QUFBQSxFQURWLFNBQVM7QUFBQSxHQXBCQyxtQkFxQkEsV0FBQSxPQUFBLENBQUE7QUFVQSxnQkFBQTtBQUFBLEVBRFYsU0FBUztBQUFBLEdBOUJDLG1CQStCQSxXQUFBLE9BQUEsQ0FBQTtBQVVBLGdCQUFBO0FBQUEsRUFEVixTQUFTO0FBQUEsR0F4Q0MsbUJBeUNBLFdBQUEsWUFBQSxDQUFBO0FBa0JvQyxnQkFBQTtBQUFBLEVBQTlDLFNBQVMsRUFBRSxXQUFXLGVBQWU7QUFBQSxHQTNEM0IsbUJBMkRvQyxXQUFBLGNBQUEsQ0FBQTtBQVc5QixnQkFBQTtBQUFBLEVBQWhCLE1BQU07QUFBQSxHQXRFSSxtQkFzRU0sV0FBQSxlQUFBLENBQUE7QUFHQSxnQkFBQTtBQUFBLEVBQWhCLE1BQU07QUFBQSxHQXpFSSxtQkF5RU0sV0FBQSxhQUFBLENBQUE7QUFJTCxnQkFBQTtBQUFBLEVBRFgsTUFBTTtBQUFBLEdBNUVJLG1CQTZFQyxXQUFBLFNBQUEsQ0FBQTtBQU9LLGdCQUFBO0FBQUEsRUFBaEIsTUFBTTtBQUFBLEdBcEZJLG1CQW9GTSxXQUFBLGlCQUFBLENBQUE7QUFwRk4scUJBQU4sZ0JBQUE7QUFBQSxFQUROLGNBQWMsY0FBYztBQUFBLEdBQ2hCLGtCQUFBOyJ9