@sbb-esta/lyne-elements-dev 4.9.0-dev.1775054429 → 4.9.0-dev.1775065821

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 (724) hide show
  1. package/{block-link-common-CoPShhIc.js → block-link-common-DzGY49Xc.js} +1 -1
  2. package/calendar/common/calendar-cell-base-element.js +1 -1
  3. package/calendar/common.js +1 -1
  4. package/core/i18n/i18n.js +6 -1
  5. package/core/i18n.js +2 -2
  6. package/core.js +23 -23
  7. package/custom-elements.json +589 -31
  8. package/development/{block-link-common-DpyfVuA5.js → block-link-common-GckvjULA.js} +2 -2
  9. package/development/calendar/common/calendar-cell-base-element.js +1 -1
  10. package/development/calendar/common.js +1 -1
  11. package/development/{calendar-cell-base-element-kJ39Rg4Q.js → calendar-cell-base-element-BXohfDSl.js} +1 -1
  12. package/development/{compact-paginator.component-C7KIOEiW.js → compact-paginator.component-TfDVt_ST.js} +1 -1
  13. package/development/core/i18n/i18n.d.ts +1 -0
  14. package/development/core/i18n/i18n.d.ts.map +1 -1
  15. package/development/core/i18n/i18n.js +8 -2
  16. package/development/core/i18n.js +2 -2
  17. package/development/core.js +2 -2
  18. package/development/{error.component-CUqDJHb2.js → error.component-xD_c9IBA.js} +1 -3
  19. package/development/form-field/error/error.component.d.ts.map +1 -1
  20. package/development/form-field/error/error.component.js +1 -1
  21. package/development/form-field/error.js +1 -1
  22. package/development/form-field/form-field/form-field.component.d.ts +9 -2
  23. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  24. package/development/form-field/form-field/form-field.component.js +1 -1
  25. package/development/form-field/form-field-text-counter/form-field-text-counter.component.d.ts +27 -0
  26. package/development/form-field/form-field-text-counter/form-field-text-counter.component.d.ts.map +1 -0
  27. package/development/form-field/form-field-text-counter/form-field-text-counter.component.js +113 -0
  28. package/development/form-field/form-field.js +1 -1
  29. package/development/form-field/hint/hint.component.d.ts +23 -0
  30. package/development/form-field/hint/hint.component.d.ts.map +1 -0
  31. package/development/form-field/hint/hint.component.js +2 -0
  32. package/development/form-field.component-BEXX0OcL.js +702 -0
  33. package/development/form-field.d.ts.map +1 -1
  34. package/development/form-field.js +9 -5
  35. package/development/form-field.pure.d.ts +3 -1
  36. package/development/form-field.pure.d.ts.map +1 -1
  37. package/development/form-field.pure.js +5 -3
  38. package/development/header/common/header-action-common.js +1 -1
  39. package/development/header/common.js +1 -1
  40. package/development/header/header/header.component.js +1 -1
  41. package/development/header/header-environment/header-environment.component.js +1 -1
  42. package/development/header/header-environment.js +1 -1
  43. package/development/header/header.js +1 -1
  44. package/development/{header-action-common-C5NDTcye.js → header-action-common-MTYV0dqA.js} +1 -1
  45. package/development/{header-environment.component-ubJnFyq6.js → header-environment.component-DHqoX_lg.js} +1 -1
  46. package/development/{header.component-BEHRo9sO.js → header.component-Cg0ZcA1s.js} +1 -1
  47. package/development/header.js +3 -3
  48. package/development/header.pure.js +3 -3
  49. package/development/hint.component-BsIzdUOV.js +38 -0
  50. package/development/icon/icon-base.js +1 -1
  51. package/development/icon/icon.component.js +1 -1
  52. package/development/{icon-base-DQHsE1Bf.js → icon-base-DHN9pz2I.js} +1 -1
  53. package/development/icon-sidebar/icon-sidebar/icon-sidebar.component.js +1 -1
  54. package/development/icon-sidebar/icon-sidebar-container/icon-sidebar-container.component.js +1 -1
  55. package/development/icon-sidebar/icon-sidebar-container.js +1 -1
  56. package/development/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
  57. package/development/icon-sidebar/icon-sidebar-content.js +1 -1
  58. package/development/icon-sidebar/icon-sidebar.js +1 -1
  59. package/development/{icon-sidebar-container.component-BjhFuBjz.js → icon-sidebar-container.component-BH_R88Rf.js} +1 -1
  60. package/development/{icon-sidebar-content.component-1JELEFzz.js → icon-sidebar-content.component-yoF6FjkW.js} +1 -1
  61. package/development/{icon-sidebar.component-ClXVHOXd.js → icon-sidebar.component-BGEkfXVs.js} +1 -1
  62. package/development/icon-sidebar.js +3 -3
  63. package/development/icon-sidebar.pure.js +3 -3
  64. package/development/icon.js +1 -1
  65. package/development/icon.pure.js +1 -1
  66. package/development/image/image.component.js +1 -1
  67. package/development/{image.component-Cs7gWePk.js → image.component-BD0jc-u-.js} +1 -1
  68. package/development/image.js +1 -1
  69. package/development/image.pure.js +1 -1
  70. package/development/{inline-link-common-BEJPxuSK.js → inline-link-common-CgTIwFAI.js} +2 -2
  71. package/development/journey-header/journey-header.component.js +1 -1
  72. package/development/{journey-header.component-DIhnX1zx.js → journey-header.component-Ch1IqWeE.js} +1 -1
  73. package/development/journey-header.js +1 -1
  74. package/development/journey-header.pure.js +1 -1
  75. package/development/lead-container/lead-container.component.js +1 -1
  76. package/development/{lead-container.component-Bk2kiEls.js → lead-container.component-CGVdBWJr.js} +1 -1
  77. package/development/lead-container.js +1 -1
  78. package/development/lead-container.pure.js +1 -1
  79. package/development/link/common/block-link-common.js +1 -1
  80. package/development/link/common/inline-link-common.js +1 -1
  81. package/development/link/common/link-common.js +1 -1
  82. package/development/link/common.js +3 -3
  83. package/development/{link-common-Dd7sIH_i.js → link-common-DJ2FfG_Q.js} +1 -1
  84. package/development/link-list/common/link-list-base.js +1 -1
  85. package/development/link-list/common.js +1 -1
  86. package/development/link-list/link-list-anchor.js +1 -1
  87. package/development/link-list/link-list.component.js +1 -1
  88. package/development/link-list/link-list.js +1 -1
  89. package/development/link-list-anchor/link-list-anchor.component.js +1 -1
  90. package/development/{link-list-anchor.component-rNtfve0u.js → link-list-anchor.component-Du7kfDZ-.js} +1 -1
  91. package/development/link-list-anchor.js +1 -1
  92. package/development/link-list-anchor.pure.js +1 -1
  93. package/development/{link-list-base-CZs_KIZj.js → link-list-base-CKMNz30d.js} +1 -1
  94. package/development/{link-list.component-xc1HUr40.js → link-list.component-DQMg8MdQ.js} +2 -2
  95. package/development/link-list.js +3 -3
  96. package/development/link-list.pure.js +2 -2
  97. package/development/link.js +3 -3
  98. package/development/link.pure.js +3 -3
  99. package/development/loading-indicator/loading-indicator.component.js +1 -1
  100. package/development/loading-indicator-circle/loading-indicator-circle.component.js +1 -1
  101. package/development/{loading-indicator-circle.component-CPItDDUV.js → loading-indicator-circle.component-np96Tu5S.js} +1 -1
  102. package/development/loading-indicator-circle.js +1 -1
  103. package/development/loading-indicator-circle.pure.js +1 -1
  104. package/development/{loading-indicator.component-CsCLE8As.js → loading-indicator.component-CgHYNMxB.js} +1 -1
  105. package/development/loading-indicator.js +1 -1
  106. package/development/loading-indicator.pure.js +1 -1
  107. package/development/logo/logo.component.js +1 -1
  108. package/development/{logo.component-B5UHRriz.js → logo.component-I0yP2SKr.js} +1 -1
  109. package/development/logo.js +1 -1
  110. package/development/logo.pure.js +1 -1
  111. package/development/map-container/map-container.component.js +1 -1
  112. package/development/{map-container.component-C-uFT6aq.js → map-container.component-D9NWw-wA.js} +1 -1
  113. package/development/map-container.js +1 -1
  114. package/development/map-container.pure.js +1 -1
  115. package/development/menu/common/menu-action-common.js +1 -1
  116. package/development/menu/common.js +1 -1
  117. package/development/menu/menu/menu.component.js +1 -1
  118. package/development/menu/menu.js +1 -1
  119. package/development/{menu-action-common-D7dnFDw3.js → menu-action-common-CBZCra6n.js} +1 -1
  120. package/development/{menu.component-CkhaeLr_.js → menu.component-Lh3JbVow.js} +1 -1
  121. package/development/menu.js +2 -2
  122. package/development/menu.pure.js +2 -2
  123. package/development/message/message.component.js +1 -1
  124. package/development/{message.component-CYAkINUN.js → message.component-CeJhYXSC.js} +1 -1
  125. package/development/message.js +1 -1
  126. package/development/message.pure.js +1 -1
  127. package/development/mini-calendar/mini-calendar/mini-calendar.component.js +1 -1
  128. package/development/mini-calendar/mini-calendar-day/mini-calendar-day.component.js +1 -1
  129. package/development/mini-calendar/mini-calendar-day.js +1 -1
  130. package/development/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +1 -1
  131. package/development/mini-calendar/mini-calendar-month.js +1 -1
  132. package/development/mini-calendar/mini-calendar.js +1 -1
  133. package/development/{mini-calendar-day.component-CmjhXs9O.js → mini-calendar-day.component-BUNVO4ZU.js} +1 -1
  134. package/development/{mini-calendar-month.component-BcZmTWNY.js → mini-calendar-month.component-DZXvAhc3.js} +1 -1
  135. package/development/{mini-calendar.component-JHNd5prE.js → mini-calendar.component-BufzKw74.js} +1 -1
  136. package/development/mini-calendar.js +3 -3
  137. package/development/mini-calendar.pure.js +3 -3
  138. package/development/navigation/common/navigation-action-common.js +1 -1
  139. package/development/navigation/common.js +1 -1
  140. package/development/navigation/navigation/navigation.component.js +1 -1
  141. package/development/navigation/navigation-list/navigation-list.component.js +1 -1
  142. package/development/navigation/navigation-list.js +1 -1
  143. package/development/navigation/navigation-marker/navigation-marker.component.js +1 -1
  144. package/development/navigation/navigation-marker.js +1 -1
  145. package/development/navigation/navigation-section/navigation-section.component.js +1 -1
  146. package/development/navigation/navigation-section.js +1 -1
  147. package/development/navigation/navigation.js +1 -1
  148. package/development/{navigation-action-common-C-_fYlAw.js → navigation-action-common-DpBp7-eZ.js} +1 -1
  149. package/development/{navigation-list.component-CM0B5xFD.js → navigation-list.component-DqITJqFx.js} +1 -1
  150. package/development/{navigation-marker.component-DY5lO3RR.js → navigation-marker.component-BpZdT4xz.js} +1 -1
  151. package/development/{navigation-section.component-BhF6ZZWa.js → navigation-section.component-CtZtuacK.js} +1 -1
  152. package/development/{navigation.component-DMuXItrW.js → navigation.component-CTNQ1dix.js} +1 -1
  153. package/development/navigation.js +5 -5
  154. package/development/navigation.pure.js +5 -5
  155. package/development/notification/notification.component.js +1 -1
  156. package/development/{notification.component-BNKixp4j.js → notification.component-Co9QChXc.js} +1 -1
  157. package/development/notification.js +1 -1
  158. package/development/notification.pure.js +1 -1
  159. package/development/{optgroup-base-element-CZoLdLWC.js → optgroup-base-element-BaG2W_AP.js} +1 -1
  160. package/development/option/optgroup/optgroup-base-element.js +1 -1
  161. package/development/option/optgroup/optgroup.component.js +1 -1
  162. package/development/option/optgroup.js +1 -1
  163. package/development/option/option/option.component.js +1 -1
  164. package/development/option/option-hint/option-hint.component.js +1 -1
  165. package/development/option/option-hint.js +1 -1
  166. package/development/option/option.js +1 -1
  167. package/development/{option-hint.component-Brtsetng.js → option-hint.component-BH8dP1fM.js} +1 -1
  168. package/development/{option.component-93rtf-Aa.js → option.component-CdL7fdzZ.js} +1 -1
  169. package/development/option.js +3 -3
  170. package/development/option.pure.js +3 -3
  171. package/development/overlay/overlay.component.js +1 -1
  172. package/development/{overlay.component-Dii256s8.js → overlay.component-M0JuSq4C.js} +1 -1
  173. package/development/overlay.js +1 -1
  174. package/development/overlay.pure.js +1 -1
  175. package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
  176. package/development/paginator/compact-paginator.js +1 -1
  177. package/development/paginator/paginator/paginator.component.js +1 -1
  178. package/development/paginator/paginator.js +1 -1
  179. package/development/{paginator.component-Bw_gPwHM.js → paginator.component-DAdS2mMm.js} +1 -1
  180. package/development/paginator.js +2 -2
  181. package/development/paginator.pure.js +2 -2
  182. package/development/popover/popover.component.js +1 -1
  183. package/development/{popover.component-BYcsPVtW.js → popover.component-BCMdJBUR.js} +1 -1
  184. package/development/popover.js +1 -1
  185. package/development/popover.pure.js +1 -1
  186. package/development/radio-button/common/radio-button-common.js +1 -1
  187. package/development/radio-button/common.js +1 -1
  188. package/development/radio-button/radio-button.component.js +1 -1
  189. package/development/radio-button/radio-button.js +1 -1
  190. package/development/{radio-button-common-D_lUbY_T.js → radio-button-common-C3-xuY78.js} +1 -1
  191. package/development/{radio-button.component-DZYxSPQ1.js → radio-button.component-BrQF2FfA.js} +2 -2
  192. package/development/radio-button.js +2 -2
  193. package/development/radio-button.pure.js +2 -2
  194. package/development/screen-reader-only/screen-reader-only.component.js +1 -1
  195. package/development/{screen-reader-only.component-ClEbjMgG.js → screen-reader-only.component-B77UuVCI.js} +1 -1
  196. package/development/screen-reader-only.js +1 -1
  197. package/development/screen-reader-only.pure.js +1 -1
  198. package/development/select/select.component.js +1 -1
  199. package/development/{select.component-Il_cpCFV.js → select.component-CY7l3oc2.js} +1 -1
  200. package/development/select.js +1 -1
  201. package/development/select.pure.js +1 -1
  202. package/development/selection-action-panel/selection-action-panel.component.js +1 -1
  203. package/development/{selection-action-panel.component-B0kzCPuW.js → selection-action-panel.component-D6I5wdEL.js} +1 -1
  204. package/development/selection-action-panel.js +1 -1
  205. package/development/selection-action-panel.pure.js +1 -1
  206. package/development/selection-expansion-panel/selection-expansion-panel.component.js +1 -1
  207. package/development/{selection-expansion-panel.component-B5U1-EIH.js → selection-expansion-panel.component-eO7b_EQF.js} +1 -1
  208. package/development/selection-expansion-panel.js +1 -1
  209. package/development/selection-expansion-panel.pure.js +1 -1
  210. package/development/sidebar/common/styles.js +1 -1
  211. package/development/sidebar/common.js +1 -1
  212. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  213. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.js +1 -1
  214. package/development/sidebar/sidebar-close-button.js +1 -1
  215. package/development/sidebar/sidebar-container/sidebar-container.component.js +1 -1
  216. package/development/sidebar/sidebar-container.js +1 -1
  217. package/development/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  218. package/development/sidebar/sidebar-content.js +1 -1
  219. package/development/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  220. package/development/sidebar/sidebar-title.js +1 -1
  221. package/development/sidebar/sidebar.js +1 -1
  222. package/development/{sidebar-close-button.component-BLXSUD8K.js → sidebar-close-button.component-CYWv39Mu.js} +1 -1
  223. package/development/{sidebar-container.component-EPxCv4OU.js → sidebar-container.component-BDSoDAym.js} +1 -1
  224. package/development/{sidebar-content.component-BPj82v8W.js → sidebar-content.component-JcVKpKbK.js} +1 -1
  225. package/development/{sidebar-title.component-C26T-aj0.js → sidebar-title.component-BA_j-Igh.js} +1 -1
  226. package/development/{sidebar.component-BnzIgC5r.js → sidebar.component-DvRTyNry.js} +1 -1
  227. package/development/sidebar.js +5 -5
  228. package/development/sidebar.pure.js +5 -5
  229. package/development/signet/signet.component.js +1 -1
  230. package/development/{signet.component-rqmXUSLH.js → signet.component-3D2ZsajP.js} +1 -1
  231. package/development/signet.js +1 -1
  232. package/development/signet.pure.js +1 -1
  233. package/development/skiplink-list/skiplink-list.component.js +1 -1
  234. package/development/{skiplink-list.component-CO25nOlI.js → skiplink-list.component-EDPOitEB.js} +1 -1
  235. package/development/skiplink-list.js +1 -1
  236. package/development/skiplink-list.pure.js +1 -1
  237. package/development/slider/slider.component.js +1 -1
  238. package/development/{slider.component-pqrTtsJM.js → slider.component-BjfLnUvP.js} +1 -1
  239. package/development/slider.js +1 -1
  240. package/development/slider.pure.js +1 -1
  241. package/development/status/status.component.js +1 -1
  242. package/development/{status.component-BglE6AsK.js → status.component-CHC2pBa-.js} +1 -1
  243. package/development/status.js +1 -1
  244. package/development/status.pure.js +1 -1
  245. package/development/{step-label.component--mgZ4YOV.js → step-label.component-CJFPHIZa.js} +1 -1
  246. package/development/{step.component-CxNwo99y.js → step.component-B-n26urC.js} +1 -1
  247. package/development/stepper/step/step.component.js +1 -1
  248. package/development/stepper/step-label/step-label.component.js +1 -1
  249. package/development/stepper/step-label.js +1 -1
  250. package/development/stepper/step.js +1 -1
  251. package/development/stepper/stepper/stepper.component.js +1 -1
  252. package/development/stepper/stepper.js +1 -1
  253. package/development/{stepper.component-BAuHFBuI.js → stepper.component-CxOBayI1.js} +1 -1
  254. package/development/stepper.js +3 -3
  255. package/development/stepper.pure.js +3 -3
  256. package/development/{styles-uic4FJu4.js → styles-D2RLaAYK.js} +1 -1
  257. package/development/{styles-DC4ScFJf.js → styles-DCQBzC2C.js} +1 -1
  258. package/development/{tab-group.component-p0zom_-m.js → tab-group.component-DRipdAyc.js} +1 -1
  259. package/development/{tab-label.component-DXdlEjWb.js → tab-label.component-14j2eh4Z.js} +1 -1
  260. package/development/{tab-nav-bar.component-D1u_2faV.js → tab-nav-bar.component-CgYwCSVY.js} +1 -1
  261. package/development/{tab.component-OWUc8Gpx.js → tab.component-DThKG7-a.js} +1 -1
  262. package/development/table/table-wrapper/table-wrapper.component.js +1 -1
  263. package/development/table/table-wrapper.js +1 -1
  264. package/development/{table-wrapper.component-KoVtmnY0.js → table-wrapper.component-D1p7kqCB.js} +1 -1
  265. package/development/table.js +1 -1
  266. package/development/table.pure.js +1 -1
  267. package/development/tabs/common/styles.js +1 -1
  268. package/development/tabs/common.js +1 -1
  269. package/development/tabs/tab/tab.component.js +1 -1
  270. package/development/tabs/tab-group/tab-group.component.js +1 -1
  271. package/development/tabs/tab-group.js +1 -1
  272. package/development/tabs/tab-label/tab-label.component.js +1 -1
  273. package/development/tabs/tab-label.js +1 -1
  274. package/development/tabs/tab-nav-bar/tab-nav-bar.component.js +1 -1
  275. package/development/tabs/tab-nav-bar.js +1 -1
  276. package/development/tabs/tab.js +1 -1
  277. package/development/tabs.js +5 -5
  278. package/development/tabs.pure.js +5 -5
  279. package/development/tag/tag/tag.component.js +1 -1
  280. package/development/tag/tag-group/tag-group.component.js +1 -1
  281. package/development/tag/tag-group.js +1 -1
  282. package/development/tag/tag.js +1 -1
  283. package/development/{tag-group.component-CdvXWCGq.js → tag-group.component-B7bBirrj.js} +1 -1
  284. package/development/{tag.component-C3aB89se.js → tag.component-0vKnvMOm.js} +1 -1
  285. package/development/tag.js +2 -2
  286. package/development/tag.pure.js +2 -2
  287. package/development/teaser/teaser.component.js +1 -1
  288. package/development/teaser-hero/teaser-hero.component.js +1 -1
  289. package/development/{teaser-hero.component-DHqOeggr.js → teaser-hero.component-DNlc8Tbl.js} +1 -1
  290. package/development/teaser-hero.js +1 -1
  291. package/development/teaser-hero.pure.js +1 -1
  292. package/development/teaser-product/common/teaser-product-common.js +1 -1
  293. package/development/teaser-product/common.js +1 -1
  294. package/development/teaser-product/teaser-product/teaser-product.component.js +1 -1
  295. package/development/teaser-product/teaser-product.js +1 -1
  296. package/development/{teaser-product-common-CSzXfXlG.js → teaser-product-common-B_r7GkGw.js} +1 -1
  297. package/development/{teaser-product.component-25RrjfNG.js → teaser-product.component-DjAMYUmw.js} +1 -1
  298. package/development/teaser-product.js +2 -2
  299. package/development/teaser-product.pure.js +2 -2
  300. package/development/{teaser.component-BUvUPsDr.js → teaser.component-C63t0z1I.js} +1 -1
  301. package/development/teaser.js +1 -1
  302. package/development/teaser.pure.js +1 -1
  303. package/development/time-input/time-input.component.js +1 -1
  304. package/development/{time-input.component-XS0aJ6M7.js → time-input.component-BtdSR8kB.js} +1 -1
  305. package/development/time-input.js +1 -1
  306. package/development/time-input.pure.js +1 -1
  307. package/development/timetable-form/timetable-form/timetable-form.component.js +1 -1
  308. package/development/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
  309. package/development/timetable-form/timetable-form-details.js +1 -1
  310. package/development/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
  311. package/development/timetable-form/timetable-form-field.js +1 -1
  312. package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +1 -1
  313. package/development/timetable-form/timetable-form-swap-button.js +1 -1
  314. package/development/timetable-form/timetable-form.js +1 -1
  315. package/development/{timetable-form-details.component-DrixSXZ_.js → timetable-form-details.component-C8awcdP5.js} +1 -1
  316. package/development/{timetable-form-field.component-Cf9CSQkd.js → timetable-form-field.component-BI24VjkC.js} +1 -1
  317. package/development/{timetable-form-swap-button.component-BkMV4VjB.js → timetable-form-swap-button.component-BUKUjrpl.js} +1 -1
  318. package/development/{timetable-form.component-BfHFgAom.js → timetable-form.component-CUG86CSN.js} +1 -1
  319. package/development/timetable-form.js +4 -4
  320. package/development/timetable-form.pure.js +4 -4
  321. package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
  322. package/development/timetable-occupancy-icon/timetable-occupancy-icon.component.js +1 -1
  323. package/development/{timetable-occupancy-icon.component-DNc9ZPXq.js → timetable-occupancy-icon.component-lI7__-G5.js} +1 -1
  324. package/development/timetable-occupancy-icon.js +1 -1
  325. package/development/timetable-occupancy-icon.pure.js +1 -1
  326. package/development/{timetable-occupancy.component-BcY0Bx6d.js → timetable-occupancy.component-D_PXXvI9.js} +1 -1
  327. package/development/timetable-occupancy.js +1 -1
  328. package/development/timetable-occupancy.pure.js +1 -1
  329. package/development/title/title-base.js +1 -1
  330. package/development/title/title.component.js +1 -1
  331. package/development/{title-base-DJpSmwtr.js → title-base-CBE_2Hkb.js} +1 -1
  332. package/development/{title.component-sv6WOvh6.js → title.component-Dk23JVct.js} +2 -2
  333. package/development/title.js +2 -2
  334. package/development/title.pure.js +2 -2
  335. package/development/toast/toast.component.js +1 -1
  336. package/development/{toast.component-BhSgkoKC.js → toast.component-BnbpuU9L.js} +1 -1
  337. package/development/toast.js +1 -1
  338. package/development/toast.pure.js +1 -1
  339. package/development/toggle/toggle/toggle.component.js +1 -1
  340. package/development/toggle/toggle-option/toggle-option.component.js +1 -1
  341. package/development/toggle/toggle-option.js +1 -1
  342. package/development/toggle/toggle.js +1 -1
  343. package/development/toggle-check/toggle-check.component.js +1 -1
  344. package/development/{toggle-check.component-ClPic4fO.js → toggle-check.component-BG4w_sE8.js} +1 -1
  345. package/development/toggle-check.js +1 -1
  346. package/development/toggle-check.pure.js +1 -1
  347. package/development/{toggle-option.component-uCFGyBBW.js → toggle-option.component-D-F7Fh7i.js} +1 -1
  348. package/development/{toggle.component-CsWt2dg0.js → toggle.component-BFYLRN8o.js} +1 -1
  349. package/development/toggle.js +2 -2
  350. package/development/toggle.pure.js +2 -2
  351. package/development/tooltip/tooltip.component.js +1 -1
  352. package/development/{tooltip.component-DqPwGT8l.js → tooltip.component-DzSd9VjW.js} +1 -1
  353. package/development/tooltip.js +1 -1
  354. package/development/tooltip.pure.js +1 -1
  355. package/development/train/train/train.component.js +1 -1
  356. package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  357. package/development/train/train-blocked-passage.js +1 -1
  358. package/development/train/train-formation/train-formation.component.js +1 -1
  359. package/development/train/train-formation.js +1 -1
  360. package/development/train/train-wagon/train-wagon.component.js +1 -1
  361. package/development/train/train-wagon.js +1 -1
  362. package/development/train/train.js +1 -1
  363. package/development/{train-blocked-passage.component-D37GNq9K.js → train-blocked-passage.component-BrUJK0gf.js} +1 -1
  364. package/development/{train-formation.component-CLXwFFw_.js → train-formation.component-vt-nYQXA.js} +1 -1
  365. package/development/{train-wagon.component-BogxEvfg.js → train-wagon.component-BzA8-S_6.js} +1 -1
  366. package/development/{train.component-H1eyQwth.js → train.component-BgpmEDx-.js} +1 -1
  367. package/development/train.js +4 -4
  368. package/development/train.pure.js +4 -4
  369. package/development/visual-checkbox/visual-checkbox.component.js +1 -1
  370. package/development/{visual-checkbox.component-cvNCtfMJ.js → visual-checkbox.component-rdeoQN40.js} +1 -1
  371. package/development/visual-checkbox.js +1 -1
  372. package/development/visual-checkbox.pure.js +1 -1
  373. package/{error.component-D8ehHa6T.js → error.component-B_D8WUP5.js} +3 -3
  374. package/form-field/error/error.component.js +1 -1
  375. package/form-field/error.js +1 -1
  376. package/form-field/form-field/form-field.component.js +1 -1
  377. package/form-field/form-field-text-counter/form-field-text-counter.component.js +82 -0
  378. package/form-field/form-field.js +1 -1
  379. package/form-field/hint/hint.component.js +2 -0
  380. package/form-field.component-D50q1wC0.js +478 -0
  381. package/form-field.js +7 -5
  382. package/form-field.pure.js +6 -4
  383. package/header/common/header-action-common.js +1 -1
  384. package/header/common.js +1 -1
  385. package/header/header/header.component.js +1 -1
  386. package/header/header-environment/header-environment.component.js +1 -1
  387. package/header/header-environment.js +1 -1
  388. package/header/header.js +1 -1
  389. package/header.js +3 -3
  390. package/header.pure.js +3 -3
  391. package/hint.component-BVUUrSSu.js +24 -0
  392. package/icon/icon-base.js +1 -1
  393. package/icon/icon.component.js +1 -1
  394. package/icon-sidebar/icon-sidebar/icon-sidebar.component.js +1 -1
  395. package/icon-sidebar/icon-sidebar-container/icon-sidebar-container.component.js +1 -1
  396. package/icon-sidebar/icon-sidebar-container.js +1 -1
  397. package/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
  398. package/icon-sidebar/icon-sidebar-content.js +1 -1
  399. package/icon-sidebar/icon-sidebar.js +1 -1
  400. package/icon-sidebar.js +3 -3
  401. package/icon-sidebar.pure.js +3 -3
  402. package/icon.js +1 -1
  403. package/icon.pure.js +1 -1
  404. package/image/image.component.js +1 -1
  405. package/image.js +1 -1
  406. package/image.pure.js +1 -1
  407. package/index.d.ts +3 -1
  408. package/index.js +3 -1
  409. package/{inline-link-common-Qnx3tjAC.js → inline-link-common-B5AHg8oa.js} +1 -1
  410. package/journey-header/journey-header.component.js +1 -1
  411. package/journey-header.js +1 -1
  412. package/journey-header.pure.js +1 -1
  413. package/lead-container/lead-container.component.js +1 -1
  414. package/lead-container.js +1 -1
  415. package/lead-container.pure.js +1 -1
  416. package/link/common/block-link-common.js +1 -1
  417. package/link/common/inline-link-common.js +1 -1
  418. package/link/common/link-common.js +1 -1
  419. package/link/common.js +3 -3
  420. package/link-list/common/link-list-base.js +1 -1
  421. package/link-list/common.js +1 -1
  422. package/link-list/link-list-anchor.js +1 -1
  423. package/link-list/link-list.component.js +1 -1
  424. package/link-list/link-list.js +1 -1
  425. package/link-list-anchor/link-list-anchor.component.js +1 -1
  426. package/link-list-anchor.js +1 -1
  427. package/link-list-anchor.pure.js +1 -1
  428. package/{link-list.component-C-ZCzBsN.js → link-list.component-AiEJJGPT.js} +1 -1
  429. package/link-list.js +3 -3
  430. package/link-list.pure.js +2 -2
  431. package/link.js +3 -3
  432. package/link.pure.js +3 -3
  433. package/loading-indicator/loading-indicator.component.js +1 -1
  434. package/loading-indicator-circle/loading-indicator-circle.component.js +1 -1
  435. package/loading-indicator-circle.js +1 -1
  436. package/loading-indicator-circle.pure.js +1 -1
  437. package/loading-indicator.js +1 -1
  438. package/loading-indicator.pure.js +1 -1
  439. package/logo/logo.component.js +1 -1
  440. package/logo.js +1 -1
  441. package/logo.pure.js +1 -1
  442. package/map-container/map-container.component.js +1 -1
  443. package/map-container.js +1 -1
  444. package/map-container.pure.js +1 -1
  445. package/menu/common/menu-action-common.js +1 -1
  446. package/menu/common.js +1 -1
  447. package/menu/menu/menu.component.js +1 -1
  448. package/menu/menu.js +1 -1
  449. package/menu.js +2 -2
  450. package/menu.pure.js +2 -2
  451. package/message/message.component.js +1 -1
  452. package/message.js +1 -1
  453. package/message.pure.js +1 -1
  454. package/mini-calendar/mini-calendar/mini-calendar.component.js +1 -1
  455. package/mini-calendar/mini-calendar-day/mini-calendar-day.component.js +1 -1
  456. package/mini-calendar/mini-calendar-day.js +1 -1
  457. package/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +1 -1
  458. package/mini-calendar/mini-calendar-month.js +1 -1
  459. package/mini-calendar/mini-calendar.js +1 -1
  460. package/mini-calendar.js +3 -3
  461. package/mini-calendar.pure.js +3 -3
  462. package/navigation/common/navigation-action-common.js +1 -1
  463. package/navigation/common.js +1 -1
  464. package/navigation/navigation/navigation.component.js +1 -1
  465. package/navigation/navigation-list/navigation-list.component.js +1 -1
  466. package/navigation/navigation-list.js +1 -1
  467. package/navigation/navigation-marker/navigation-marker.component.js +1 -1
  468. package/navigation/navigation-marker.js +1 -1
  469. package/navigation/navigation-section/navigation-section.component.js +1 -1
  470. package/navigation/navigation-section.js +1 -1
  471. package/navigation/navigation.js +1 -1
  472. package/navigation.js +5 -5
  473. package/navigation.pure.js +5 -5
  474. package/notification/notification.component.js +1 -1
  475. package/notification.js +1 -1
  476. package/notification.pure.js +1 -1
  477. package/option/optgroup/optgroup-base-element.js +1 -1
  478. package/option/optgroup/optgroup.component.js +1 -1
  479. package/option/optgroup.js +1 -1
  480. package/option/option/option.component.js +1 -1
  481. package/option/option-hint/option-hint.component.js +1 -1
  482. package/option/option-hint.js +1 -1
  483. package/option/option.js +1 -1
  484. package/option.js +3 -3
  485. package/option.pure.js +3 -3
  486. package/overlay/overlay.component.js +1 -1
  487. package/overlay.js +1 -1
  488. package/overlay.pure.js +1 -1
  489. package/package.json +2 -2
  490. package/paginator/compact-paginator/compact-paginator.component.js +1 -1
  491. package/paginator/compact-paginator.js +1 -1
  492. package/paginator/paginator/paginator.component.js +1 -1
  493. package/paginator/paginator.js +1 -1
  494. package/paginator.js +2 -2
  495. package/paginator.pure.js +2 -2
  496. package/popover/popover.component.js +1 -1
  497. package/popover.js +1 -1
  498. package/popover.pure.js +1 -1
  499. package/radio-button/common/radio-button-common.js +1 -1
  500. package/radio-button/common.js +1 -1
  501. package/radio-button/radio-button.component.js +1 -1
  502. package/radio-button/radio-button.js +1 -1
  503. package/{radio-button.component-LTWtP3vA.js → radio-button.component-BiGeOI5L.js} +1 -1
  504. package/radio-button.js +2 -2
  505. package/radio-button.pure.js +2 -2
  506. package/screen-reader-only/screen-reader-only.component.js +1 -1
  507. package/screen-reader-only.js +1 -1
  508. package/screen-reader-only.pure.js +1 -1
  509. package/select/select.component.js +1 -1
  510. package/select.js +1 -1
  511. package/select.pure.js +1 -1
  512. package/selection-action-panel/selection-action-panel.component.js +1 -1
  513. package/selection-action-panel.js +1 -1
  514. package/selection-action-panel.pure.js +1 -1
  515. package/selection-expansion-panel/selection-expansion-panel.component.js +1 -1
  516. package/selection-expansion-panel.js +1 -1
  517. package/selection-expansion-panel.pure.js +1 -1
  518. package/sidebar/common/styles.js +1 -1
  519. package/sidebar/common.js +1 -1
  520. package/sidebar/sidebar/sidebar.component.js +1 -1
  521. package/sidebar/sidebar-close-button/sidebar-close-button.component.js +1 -1
  522. package/sidebar/sidebar-close-button.js +1 -1
  523. package/sidebar/sidebar-container/sidebar-container.component.js +1 -1
  524. package/sidebar/sidebar-container.js +1 -1
  525. package/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  526. package/sidebar/sidebar-content.js +1 -1
  527. package/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  528. package/sidebar/sidebar-title.js +1 -1
  529. package/sidebar/sidebar.js +1 -1
  530. package/sidebar.js +5 -5
  531. package/sidebar.pure.js +5 -5
  532. package/signet/signet.component.js +1 -1
  533. package/signet.js +1 -1
  534. package/signet.pure.js +1 -1
  535. package/skiplink-list/skiplink-list.component.js +1 -1
  536. package/skiplink-list.js +1 -1
  537. package/skiplink-list.pure.js +1 -1
  538. package/slider/slider.component.js +1 -1
  539. package/slider.js +1 -1
  540. package/slider.pure.js +1 -1
  541. package/status/status.component.js +1 -1
  542. package/status.js +1 -1
  543. package/status.pure.js +1 -1
  544. package/stepper/step/step.component.js +1 -1
  545. package/stepper/step-label/step-label.component.js +1 -1
  546. package/stepper/step-label.js +1 -1
  547. package/stepper/step.js +1 -1
  548. package/stepper/stepper/stepper.component.js +1 -1
  549. package/stepper/stepper.js +1 -1
  550. package/stepper.js +3 -3
  551. package/stepper.pure.js +3 -3
  552. package/table/table-wrapper/table-wrapper.component.js +1 -1
  553. package/table/table-wrapper.js +1 -1
  554. package/table.js +1 -1
  555. package/table.pure.js +1 -1
  556. package/tabs/common/styles.js +1 -1
  557. package/tabs/common.js +1 -1
  558. package/tabs/tab/tab.component.js +1 -1
  559. package/tabs/tab-group/tab-group.component.js +1 -1
  560. package/tabs/tab-group.js +1 -1
  561. package/tabs/tab-label/tab-label.component.js +1 -1
  562. package/tabs/tab-label.js +1 -1
  563. package/tabs/tab-nav-bar/tab-nav-bar.component.js +1 -1
  564. package/tabs/tab-nav-bar.js +1 -1
  565. package/tabs/tab.js +1 -1
  566. package/tabs.js +5 -5
  567. package/tabs.pure.js +5 -5
  568. package/tag/tag/tag.component.js +1 -1
  569. package/tag/tag-group/tag-group.component.js +1 -1
  570. package/tag/tag-group.js +1 -1
  571. package/tag/tag.js +1 -1
  572. package/tag.js +2 -2
  573. package/tag.pure.js +2 -2
  574. package/teaser/teaser.component.js +1 -1
  575. package/teaser-hero/teaser-hero.component.js +1 -1
  576. package/teaser-hero.js +1 -1
  577. package/teaser-hero.pure.js +1 -1
  578. package/teaser-product/common/teaser-product-common.js +1 -1
  579. package/teaser-product/common.js +1 -1
  580. package/teaser-product/teaser-product/teaser-product.component.js +1 -1
  581. package/teaser-product/teaser-product.js +1 -1
  582. package/teaser-product.js +2 -2
  583. package/teaser-product.pure.js +2 -2
  584. package/teaser.js +1 -1
  585. package/teaser.pure.js +1 -1
  586. package/time-input/time-input.component.js +1 -1
  587. package/time-input.js +1 -1
  588. package/time-input.pure.js +1 -1
  589. package/timetable-form/timetable-form/timetable-form.component.js +1 -1
  590. package/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
  591. package/timetable-form/timetable-form-details.js +1 -1
  592. package/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
  593. package/timetable-form/timetable-form-field.js +1 -1
  594. package/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +1 -1
  595. package/timetable-form/timetable-form-swap-button.js +1 -1
  596. package/timetable-form/timetable-form.js +1 -1
  597. package/timetable-form.js +4 -4
  598. package/timetable-form.pure.js +4 -4
  599. package/timetable-occupancy/timetable-occupancy.component.js +1 -1
  600. package/timetable-occupancy-icon/timetable-occupancy-icon.component.js +1 -1
  601. package/timetable-occupancy-icon.js +1 -1
  602. package/timetable-occupancy-icon.pure.js +1 -1
  603. package/timetable-occupancy.js +1 -1
  604. package/timetable-occupancy.pure.js +1 -1
  605. package/title/title-base.js +1 -1
  606. package/title/title.component.js +1 -1
  607. package/{title.component-DTF6ezI7.js → title.component-CoMa84Sz.js} +1 -1
  608. package/title.js +2 -2
  609. package/title.pure.js +2 -2
  610. package/toast/toast.component.js +1 -1
  611. package/toast.js +1 -1
  612. package/toast.pure.js +1 -1
  613. package/toggle/toggle/toggle.component.js +1 -1
  614. package/toggle/toggle-option/toggle-option.component.js +1 -1
  615. package/toggle/toggle-option.js +1 -1
  616. package/toggle/toggle.js +1 -1
  617. package/toggle-check/toggle-check.component.js +1 -1
  618. package/toggle-check.js +1 -1
  619. package/toggle-check.pure.js +1 -1
  620. package/toggle.js +2 -2
  621. package/toggle.pure.js +2 -2
  622. package/tooltip/tooltip.component.js +1 -1
  623. package/tooltip.js +1 -1
  624. package/tooltip.pure.js +1 -1
  625. package/train/train/train.component.js +1 -1
  626. package/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  627. package/train/train-blocked-passage.js +1 -1
  628. package/train/train-formation/train-formation.component.js +1 -1
  629. package/train/train-formation.js +1 -1
  630. package/train/train-wagon/train-wagon.component.js +1 -1
  631. package/train/train-wagon.js +1 -1
  632. package/train/train.js +1 -1
  633. package/train.js +4 -4
  634. package/train.pure.js +4 -4
  635. package/visual-checkbox/visual-checkbox.component.js +1 -1
  636. package/visual-checkbox.js +1 -1
  637. package/visual-checkbox.pure.js +1 -1
  638. package/development/form-field.component-DnUA6Uds.js +0 -650
  639. package/form-field.component-D2R9BpyQ.js +0 -447
  640. /package/{calendar-cell-base-element-YuddqT5m.js → calendar-cell-base-element-CBaanSU3.js} +0 -0
  641. /package/{compact-paginator.component-Co8YvCZK.js → compact-paginator.component-Cyi-t_YD.js} +0 -0
  642. /package/{header-action-common-6ZwwwdGK.js → header-action-common-DSx5QDWI.js} +0 -0
  643. /package/{header-environment.component-CFcPt4Jz.js → header-environment.component-rUR1XhR5.js} +0 -0
  644. /package/{header.component-COdYikfO.js → header.component-hZqs06Yh.js} +0 -0
  645. /package/{icon-base-BAIoRuzE.js → icon-base-ChhGqAkg.js} +0 -0
  646. /package/{icon-sidebar-container.component-D5gPD_fK.js → icon-sidebar-container.component-BrBnPZP_.js} +0 -0
  647. /package/{icon-sidebar-content.component-DB-T5oM6.js → icon-sidebar-content.component-DXoyBsGO.js} +0 -0
  648. /package/{icon-sidebar.component-CbRd64VY.js → icon-sidebar.component-CSUM1GjR.js} +0 -0
  649. /package/{image.component-CHq0_Pdb.js → image.component-9ttsTuRh.js} +0 -0
  650. /package/{journey-header.component-DEyoiEWa.js → journey-header.component-BBRryMN8.js} +0 -0
  651. /package/{lead-container.component-Db1K6vO5.js → lead-container.component-D9Wotyyl.js} +0 -0
  652. /package/{link-common-Y5P6WKwP.js → link-common-C-LzCFHg.js} +0 -0
  653. /package/{link-list-anchor.component-BJV10WQ7.js → link-list-anchor.component-B1hvFA17.js} +0 -0
  654. /package/{link-list-base-61EYfzp8.js → link-list-base-COzF-Lbi.js} +0 -0
  655. /package/{loading-indicator-circle.component-C-vSHsMV.js → loading-indicator-circle.component-BSVoTtX4.js} +0 -0
  656. /package/{loading-indicator.component-04ibColy.js → loading-indicator.component-B85wTVDM.js} +0 -0
  657. /package/{logo.component-DMm7NpGb.js → logo.component-COL1QTWW.js} +0 -0
  658. /package/{map-container.component-BTlJ7FIz.js → map-container.component-CEyz8sfi.js} +0 -0
  659. /package/{menu-action-common-CahV0SY9.js → menu-action-common-p5YGaq2r.js} +0 -0
  660. /package/{menu.component-9oijbV_R.js → menu.component-DohFZw2N.js} +0 -0
  661. /package/{message.component-rMwea_q5.js → message.component-BQjnZ5Z3.js} +0 -0
  662. /package/{mini-calendar-day.component-RCyRsXKX.js → mini-calendar-day.component-DOMxLDsW.js} +0 -0
  663. /package/{mini-calendar-month.component-tGmrtTbD.js → mini-calendar-month.component-BAN0k3N6.js} +0 -0
  664. /package/{mini-calendar.component-B2lR4LKk.js → mini-calendar.component-DJfOT7ir.js} +0 -0
  665. /package/{navigation-action-common-4VIAc9FT.js → navigation-action-common-2ix0xrBs.js} +0 -0
  666. /package/{navigation-list.component-BUXXEC9a.js → navigation-list.component-BIl68kYy.js} +0 -0
  667. /package/{navigation-marker.component-DXV5IzZs.js → navigation-marker.component-DKxK16IU.js} +0 -0
  668. /package/{navigation-section.component-DTwwuIB9.js → navigation-section.component-CvjXVn5r.js} +0 -0
  669. /package/{navigation.component-BRlZyn2A.js → navigation.component-D3xUqPZB.js} +0 -0
  670. /package/{notification.component-DPE80gHo.js → notification.component-DjXJFh1G.js} +0 -0
  671. /package/{optgroup-base-element-DZpAUA_K.js → optgroup-base-element-B2WJv9gb.js} +0 -0
  672. /package/{option-hint.component-BkyU_7Qz.js → option-hint.component-CZH1i3mN.js} +0 -0
  673. /package/{option.component-BWEHCsOO.js → option.component-M-V_tdSC.js} +0 -0
  674. /package/{overlay.component-Cv-ZjwhZ.js → overlay.component-CbvHE6Lw.js} +0 -0
  675. /package/{paginator.component-BfUG2qfH.js → paginator.component-CZt7Epaf.js} +0 -0
  676. /package/{popover.component-Dd6_AuRe.js → popover.component-DWNuW4wM.js} +0 -0
  677. /package/{radio-button-common-D_KbhErH.js → radio-button-common-DP4Izwwf.js} +0 -0
  678. /package/{screen-reader-only.component-oKv949nW.js → screen-reader-only.component-Dxj7rAnR.js} +0 -0
  679. /package/{select.component-DMzvfiNM.js → select.component-GAwqix4S.js} +0 -0
  680. /package/{selection-action-panel.component-B5eN9396.js → selection-action-panel.component-C3g4OJY9.js} +0 -0
  681. /package/{selection-expansion-panel.component-B_Q_ncWJ.js → selection-expansion-panel.component-CGSkSA6y.js} +0 -0
  682. /package/{sidebar-close-button.component-BfcXTDpx.js → sidebar-close-button.component-BEYnX3Hk.js} +0 -0
  683. /package/{sidebar-container.component-C685gr2b.js → sidebar-container.component-BGh7mxq4.js} +0 -0
  684. /package/{sidebar-content.component-BQzWV9qh.js → sidebar-content.component-BEI3kpFh.js} +0 -0
  685. /package/{sidebar-title.component-CE0QQtbI.js → sidebar-title.component-CvKixoOS.js} +0 -0
  686. /package/{sidebar.component-APJCELuU.js → sidebar.component-DxOx02l6.js} +0 -0
  687. /package/{signet.component-DbWPRhDO.js → signet.component-ImdnCMXV.js} +0 -0
  688. /package/{skiplink-list.component-B0G4VO5R.js → skiplink-list.component-hqQIOxQD.js} +0 -0
  689. /package/{slider.component-D6OlU-Cm.js → slider.component-CoqCppCq.js} +0 -0
  690. /package/{status.component-C3yUe9Cg.js → status.component-BFyXTFXH.js} +0 -0
  691. /package/{step-label.component-jos0QpVe.js → step-label.component-DnQBwnL8.js} +0 -0
  692. /package/{step.component-CGb7wrW5.js → step.component-uBZl9yiJ.js} +0 -0
  693. /package/{stepper.component-CxUqITW_.js → stepper.component-CYLW1eRI.js} +0 -0
  694. /package/{styles-DEPbQ2X3.js → styles-BUpK1iP2.js} +0 -0
  695. /package/{styles-Bi-meo1w.js → styles-Dqjgvm-Y.js} +0 -0
  696. /package/{tab-group.component-CmoxDIUx.js → tab-group.component-Doy39cEh.js} +0 -0
  697. /package/{tab-label.component-XalFgxFV.js → tab-label.component-CD56RH1Z.js} +0 -0
  698. /package/{tab-nav-bar.component-C9Ee7Qjm.js → tab-nav-bar.component-7mG-Dk6g.js} +0 -0
  699. /package/{tab.component-D2QUMUCd.js → tab.component-rEJAbgtn.js} +0 -0
  700. /package/{table-wrapper.component-BHIm-2KW.js → table-wrapper.component-BpMpU8um.js} +0 -0
  701. /package/{tag-group.component-Cn0EqjGS.js → tag-group.component-DyEB8c6w.js} +0 -0
  702. /package/{tag.component-DoSliZAp.js → tag.component-C3ogN9Th.js} +0 -0
  703. /package/{teaser-hero.component-BL9zIJPw.js → teaser-hero.component-CHy82SKQ.js} +0 -0
  704. /package/{teaser-product-common-B9fZrp6w.js → teaser-product-common-qTPSq_o7.js} +0 -0
  705. /package/{teaser-product.component-XY7319H9.js → teaser-product.component-IyBPFzdf.js} +0 -0
  706. /package/{teaser.component-Drf3Eafw.js → teaser.component-u1uLVhwo.js} +0 -0
  707. /package/{time-input.component-Jv2xorV5.js → time-input.component-CuQ-3YEM.js} +0 -0
  708. /package/{timetable-form-details.component-CZp8RZSL.js → timetable-form-details.component-CBZ7QSAx.js} +0 -0
  709. /package/{timetable-form-field.component-BC86joSW.js → timetable-form-field.component-BKxQQqt7.js} +0 -0
  710. /package/{timetable-form-swap-button.component-BhCaN83Z.js → timetable-form-swap-button.component-C71eoTQH.js} +0 -0
  711. /package/{timetable-form.component-DdaSxRTK.js → timetable-form.component-CU1FXAZH.js} +0 -0
  712. /package/{timetable-occupancy-icon.component-uluD8AMi.js → timetable-occupancy-icon.component-Ck0VCzxz.js} +0 -0
  713. /package/{timetable-occupancy.component-BXuU3o7A.js → timetable-occupancy.component-Db9SfiyD.js} +0 -0
  714. /package/{title-base-BDfI9bCJ.js → title-base-D72Xo2SW.js} +0 -0
  715. /package/{toast.component-C4YpMnyP.js → toast.component-BDE1vYLS.js} +0 -0
  716. /package/{toggle-check.component-MsWfelVs.js → toggle-check.component-B6Ww5pLD.js} +0 -0
  717. /package/{toggle-option.component-6zS_NbTl.js → toggle-option.component-Bw-GXUQK.js} +0 -0
  718. /package/{toggle.component-lnDw0Rsg.js → toggle.component-BPpsMMPG.js} +0 -0
  719. /package/{tooltip.component-CS8d_5t5.js → tooltip.component-BY9mV5Sw.js} +0 -0
  720. /package/{train-blocked-passage.component-CO2uXJYY.js → train-blocked-passage.component-C-ltrsRr.js} +0 -0
  721. /package/{train-formation.component-Ce_AU4_i.js → train-formation.component-y0TGSIGR.js} +0 -0
  722. /package/{train-wagon.component-BLoxPxgb.js → train-wagon.component-BwCcF4GD.js} +0 -0
  723. /package/{train.component-Be7d8Ggx.js → train.component-NTimqCpY.js} +0 -0
  724. /package/{visual-checkbox.component-BqqxEaSW.js → visual-checkbox.component-CJWm74Zi.js} +0 -0
@@ -1,650 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { html, isServer, nothing, unsafeCSS } from "lit";
3
- import { property, state } from "lit/decorators.js";
4
- import { SbbElement } from "./core/base-elements.js";
5
- import { forceType } from "./core/decorators.js";
6
- import { isLean } from "./core/dom.js";
7
- import { SbbNegativeMixin, appendAriaElements, removeAriaElements } from "./core/mixins.js";
8
- import { boxSizingStyles } from "./core/styles.js";
9
- import { SbbLanguageController } from "./core/controllers.js";
10
- import { i18nOptional } from "./core/i18n.js";
11
- import "./icon.js";
12
- import { sbbInputModalityDetector } from "./core/a11y.js";
13
- //#region src/elements/form-field/form-field/form-field.scss?inline
14
- var form_field_default = "@charset \"UTF-8\";\n:host {\n --sbb-form-field-error-divider-width: var(--sbb-spacing-fixed-1x);\n --sbb-form-field-error-padding-block-start: var(--sbb-form-field-error-divider-width);\n --sbb-form-field-select-inline-padding-end: calc(\n var(--sbb-icon-svg-width) + var(--sbb-form-field-gap)\n );\n --sbb-form-field-label-size: calc(\n var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text)\n );\n --sbb-form-field-text-line-height: calc(\n var(--sbb-form-field-input-text-size) * var(--sbb-typo-line-height-text)\n );\n --sbb-form-field-margin-block-start: calc(\n (\n var(--sbb-form-field-min-height) - var(--sbb-form-field-label-size) - var(\n --sbb-form-field-text-line-height\n ) +\n var(--_sbb-form-field-label-to-input-overlapping)\n ) /\n 2\n );\n --sbb-icon-svg-width: var(--sbb-form-field-icon-size);\n --sbb-icon-svg-height: var(--sbb-form-field-icon-size);\n --sbb-focus-outline-color: var(--sbb-focus-outline-color-default);\n --sbb-focus-outline-color: light-dark(\n var(--sbb-focus-outline-color-default),\n var(--sbb-focus-outline-color-dark)\n );\n display: inline-block;\n color: var(--sbb-form-field-color);\n font-weight: normal;\n}\n\n:host(:where(:not([width=collapse]))) {\n min-width: 9.375rem;\n width: min(18.75rem, 100%);\n}\n\n:host([negative]) {\n color: var(--sbb-color-3-negative);\n --sbb-form-field-background-color: var(--sbb-background-color-1-negative);\n --sbb-form-field-border-color: var(--sbb-border-color-5);\n --sbb-form-field-label-color: var(--sbb-color-5);\n --sbb-form-field-prefix-color: var(--sbb-color-5);\n --sbb-form-field-text-color: var(--sbb-color-3-negative);\n --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);\n --sbb-form-field-arrow-color: var(--sbb-color-3-negative);\n}\n@media (forced-colors: active) {\n :host([negative]) {\n --sbb-form-field-border-color: ButtonBorder;\n }\n}\n\n:host([size=s]) {\n --sbb-form-field-min-height: var(--sbb-size-element-xs);\n --sbb-form-field-padding-inline: var(--sbb-spacing-fixed-2x);\n --sbb-form-field-input-text-size: var(--sbb-text-font-size-s);\n --sbb-form-field-label-text-size: var(--sbb-text-font-size-xxs);\n --_sbb-form-field-label-to-input-overlapping: 0.625rem;\n --_sbb-form-field-floating-label-transform: 0.34375rem;\n --_sbb-form-field-spacer-margin-block-end: -0.53125rem;\n}\n@media (min-width: calc(64rem)) {\n :host([size=s]) {\n --_sbb-form-field-label-to-input-overlapping: 0.6875rem;\n --_sbb-form-field-floating-label-transform: 0.3125rem;\n --_sbb-form-field-spacer-margin-block-end: -0.5rem;\n }\n}\n\n:host([size=m]) {\n --sbb-form-field-min-height: var(--sbb-size-element-m);\n --sbb-form-field-padding-inline: var(--sbb-spacing-fixed-3x);\n --sbb-form-field-input-text-size: var(--sbb-text-font-size-m);\n --sbb-form-field-label-text-size: var(--sbb-text-font-size-xs);\n --_sbb-form-field-label-to-input-overlapping: var(--sbb-spacing-fixed-1x);\n --_sbb-form-field-floating-label-transform: 0.53125rem;\n --_sbb-form-field-spacer-margin-block-end: calc(\n -1 * var(--_sbb-form-field-label-to-input-overlapping)\n );\n}\n@media (min-width: calc(64rem)) {\n :host([size=m]) {\n --_sbb-form-field-floating-label-transform: 0.65625rem;\n }\n}\n\n:host([size=l]) {\n --sbb-form-field-min-height: var(--sbb-size-element-l);\n --sbb-form-field-padding-inline: var(--sbb-spacing-responsive-xxxs);\n}\n\n:host([error-space=reserve]) {\n --sbb-form-field-error-min-height: calc(\n var(--sbb-typo-line-height-text) * var(--sbb-text-font-size-xs)\n );\n --sbb-form-field-error-padding-block-start-override: var(--sbb-form-field-error-divider-width);\n}\n\n:host(:where(:is(:state(readonly),[state--readonly]), :is(:state(disabled),[state--disabled]))) {\n --sbb-form-field-background-color: var(--sbb-background-color-3);\n --sbb-form-field-border-color: var(--sbb-color-graphite);\n --sbb-form-field-border-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));\n --sbb-form-field-arrow-color: var(--sbb-color-granite);\n --sbb-form-field-arrow-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm));\n}\n@media (forced-colors: active) {\n :host(:where(:is(:state(readonly),[state--readonly]), :is(:state(disabled),[state--disabled]))) {\n --sbb-form-field-border-color: ButtonBorder;\n }\n}\n\n:host(:where(:is(:state(readonly),[state--readonly]), :is(:state(disabled),[state--disabled]))[negative]) {\n --sbb-form-field-background-color: var(--sbb-background-color-3-negative);\n --sbb-form-field-border-color: var(--sbb-border-color-5);\n --sbb-form-field-arrow-color: var(--sbb-border-color-5);\n}\n\n:host(:where(:is(:state(disabled),[state--disabled]))) {\n --sbb-form-field-label-color: var(--sbb-color-granite);\n --sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));\n --sbb-form-field-prefix-color: var(--sbb-color-granite);\n --sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm));\n --sbb-form-field-border-style: dashed;\n}\n@media (forced-colors: active) {\n :host(:where(:is(:state(disabled),[state--disabled]))) {\n --sbb-form-field-label-color: GrayText !important;\n --sbb-form-field-prefix-color: GrayText !important;\n --sbb-form-field-text-color: GrayText !important;\n --sbb-form-field-border-color: GrayText !important;\n }\n}\n\n:host(:where(:is(:state(disabled),[state--disabled]))[negative]) {\n --sbb-form-field-text-color: var(--sbb-color-5);\n --sbb-form-field-label-color: var(--sbb-color-5);\n --sbb-form-field-prefix-color: var(--sbb-color-5);\n}\n\n:host(:where(:is(:state(readonly),[state--readonly])):not([negative])) {\n --sbb-form-field-label-color: var(--sbb-color-granite);\n --sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));\n --sbb-form-field-prefix-color: var(--sbb-color-granite);\n --sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm));\n}\n\n:host(:where(:is(:state(focus),[state--focus]))) {\n --sbb-form-field-border-color: var(--sbb-border-color-3);\n --sbb-form-field-prefix-color: var(--sbb-color-3);\n --sbb-form-field-border-width: var(--sbb-border-width-2x);\n}\n\n:host(:where(:is(:state(focus),[state--focus]))[negative]) {\n --sbb-form-field-border-color: var(--sbb-border-color-3-negative);\n --sbb-form-field-prefix-color: var(--sbb-color-3-negative);\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(focus),[state--focus])) {\n --sbb-form-field-border-color: Highlight;\n --sbb-form-field-prefix-color: Highlight;\n }\n}\n\n:host(:not(:where(:is(:state(has-error),[state--has-error])))) {\n --sbb-form-field-error-padding-block-start: 0;\n}\n\n:host([floating-label]) {\n --sbb-select-placeholder-color: transparent;\n}\n@media (forced-colors: active) {\n :host([floating-label]) {\n --sbb-select-placeholder-color: Canvas;\n }\n}\n\n:host(:is(:not(:is(:state(slotted-label),[state--slotted-label])), [hidden-label])) {\n --sbb-form-field-label-size: 0rem;\n --_sbb-form-field-label-to-input-overlapping: 0rem;\n}\n\n:host(:where(:is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))) {\n --sbb-form-field-overflow: visible;\n}\n\n.sbb-form-field__space-wrapper {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.sbb-form-field__space-wrapper::before {\n content: \"​\";\n user-select: none;\n width: 0;\n height: 0;\n}\n\n.sbb-form-field__wrapper {\n display: flex;\n flex: 1;\n gap: var(--sbb-form-field-gap);\n padding-inline: var(--sbb-form-field-padding-inline);\n border-radius: var(--sbb-form-field-border-radius);\n min-height: var(--sbb-form-field-min-height);\n max-height: var(--sbb-form-field-max-height);\n background-color: var(--sbb-form-field-background-color);\n position: relative;\n}\n.sbb-form-field__wrapper::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n border: var(--sbb-form-field-border-width) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);\n border-radius: var(--sbb-form-field-border-radius);\n pointer-events: none;\n}\n:host(:where(:is(:state(focus),[state--focus]):is(:state(focus-origin-keyboard),[state--focus-origin-keyboard]))) .sbb-form-field__wrapper {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n outline-offset: var(--sbb-form-field-outline-offset, var(--sbb-focus-outline-offset));\n}\n@media (forced-colors: none) {\n :host(:is([borderless], :is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))) .sbb-form-field__wrapper::before {\n border-color: transparent;\n }\n :host(:where(:is(:state(focus),[state--focus]), :is(:state(disabled),[state--disabled]))[borderless]) .sbb-form-field__wrapper::after {\n content: \"\";\n position: absolute;\n border-block-end: var(--sbb-border-width-1x) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);\n inset-inline: var(--sbb-form-field-padding-inline);\n inset-block-end: 0;\n z-index: var(--sbb-form-field-focus-underline-z-index, initial);\n }\n}\n\n::slotted(*[slot=prefix]) {\n color: var(--sbb-form-field-prefix-color);\n}\n\n::slotted(*[slot=prefix]),\n::slotted(*[slot=suffix]) {\n display: flex;\n min-width: var(--sbb-icon-svg-width);\n margin-block-start: calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2);\n}\n\n:host(:where(:is(:state(empty),[state--empty]), :is(:state(disabled),[state--disabled]), :is(:state(readonly),[state--readonly]))) ::slotted(sbb-form-field-clear) {\n display: none;\n}\n\n::slotted(sbb-datepicker-toggle) {\n padding-block-end: calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2);\n}\n\n@media (forced-colors: active) {\n ::slotted(*[slot=suffix]) {\n color: var(--sbb-form-field-prefix-color);\n }\n}\n.sbb-form-field__select-input-icon {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n position: absolute;\n inset-inline-end: 0;\n margin-block-start: calc(-1 * var(--sbb-form-field-margin-block-start) / 2);\n pointer-events: none;\n color: var(--sbb-form-field-arrow-color);\n}\n\n.sbb-form-field__input-container {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n position: relative;\n margin-block-start: var(--sbb-form-field-margin-block-start);\n min-width: 0;\n}\n\n.sbb-form-field__label-spacer {\n display: flex;\n height: calc(var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text));\n margin-block-end: var(--_sbb-form-field-spacer-margin-block-end);\n}\n\n:host(:not(:is(:state(slotted-label),[state--slotted-label]))) :is(.sbb-form-field__label, .sbb-form-field__label-spacer) {\n display: none;\n}\n:host([hidden-label]) :is(.sbb-form-field__label, .sbb-form-field__label-spacer) {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.sbb-form-field__label {\n display: flex;\n max-width: 100%;\n cursor: var(--sbb-cursor-default);\n position: absolute;\n inset-block-start: 0;\n color: var(--sbb-form-field-label-color);\n font-size: var(--sbb-form-field-label-text-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n}\n:host(:where(:is(:state(input-type-select),[state--input-type-select]), :is(:state(input-type-sbb-select),[state--input-type-sbb-select]))) .sbb-form-field__label {\n padding-inline-end: var(--sbb-form-field-select-inline-padding-end);\n}\n:host([floating-label]) .sbb-form-field__label {\n transform-origin: 0 0;\n pointer-events: none;\n backface-visibility: hidden;\n will-change: transform, font-size;\n transition-duration: var(--sbb-disable-animation-duration, var(--sbb-animation-duration-2x));\n transition-timing-function: var(--sbb-animation-easing);\n transition-property: transform, font-size;\n}\n:host([floating-label]:is(:not(:where(:is(:state(focus),[state--focus])):not(:where(:is(:state(input-type-sbb-select),[state--input-type-sbb-select]))),\n:where(:is(:state(has-popup-open),[state--has-popup-open]))),\n:where(:is(:state(readonly),[state--readonly]))):where(:is(:state(empty),[state--empty]))) .sbb-form-field__label {\n font-size: var(--sbb-form-field-input-text-size);\n transform: translateY(var(--_sbb-form-field-floating-label-transform));\n}\n@media (forced-colors: active) {\n :host(:where(:is(:state(input-type-textarea),[state--input-type-textarea]))) .sbb-form-field__label {\n z-index: 1;\n }\n}\n\n.sbb-form-field__label-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.sbb-form-field__input {\n display: flex;\n flex: 1;\n align-items: start;\n}\n:host([size=s]:is(:is(:state(input-type-input),[state--input-type-input]),\n:is(:state(input-type-select),[state--input-type-select]),\n:is(:state(input-type-sbb-select),[state--input-type-sbb-select]),\n:is(:state(input-type-sbb-date-input),[state--input-type-sbb-date-input]),\n:is(:state(input-type-sbb-time-input),[state--input-type-sbb-time-input]))) .sbb-form-field__input {\n margin-block-end: -0.125rem;\n}\n\n.sbb-form-field__error {\n display: flex;\n min-height: var(--sbb-form-field-error-min-height);\n flex-direction: column;\n margin-block-start: var(--sbb-form-field-error-padding-block-start-override, var(--sbb-form-field-error-padding-block-start));\n}";
15
- //#endregion
16
- //#region src/elements/form-field/form-field/form-field.component.ts
17
- var nextId = 0;
18
- var patchedInputs = /* @__PURE__ */ new WeakMap();
19
- var nativeInputElements = [
20
- "input",
21
- "textarea",
22
- "select"
23
- ];
24
- var SbbFormFieldControlEvent = class extends Event {
25
- get control() {
26
- return this._control;
27
- }
28
- constructor(control) {
29
- super("formfieldcontrol");
30
- this._control = control;
31
- }
32
- };
33
- /**
34
- * It wraps an input element adding label, errors, icon, etc.
35
- *
36
- * @slot - Use this slot to render an input/select or a supported non-native element.
37
- * @slot label - Use this slot to render a label.
38
- * @slot prefix - Use this slot to render an icon on the left side of the input.
39
- * @slot suffix - Use this slot to render an icon on the right side of the input.
40
- * @slot error - Use this slot to render an error.
41
- *
42
- * @cssprop [--sbb-form-field-outline-offset] - To override the focus outline offset,
43
- * @cssprop [--sbb-form-field-focus-underline-z-index] - To override the z-index of the focus underline effect,
44
- */
45
- var SbbFormFieldElement = (() => {
46
- let _classSuper = SbbNegativeMixin(SbbElement);
47
- let _errorSpace_decorators;
48
- let _errorSpace_initializers = [];
49
- let _errorSpace_extraInitializers = [];
50
- let _optional_decorators;
51
- let _optional_initializers = [];
52
- let _optional_extraInitializers = [];
53
- let _size_decorators;
54
- let _size_initializers = [];
55
- let _size_extraInitializers = [];
56
- let _borderless_decorators;
57
- let _borderless_initializers = [];
58
- let _borderless_extraInitializers = [];
59
- let _width_decorators;
60
- let _width_initializers = [];
61
- let _width_extraInitializers = [];
62
- let _hiddenLabel_decorators;
63
- let _hiddenLabel_initializers = [];
64
- let _hiddenLabel_extraInitializers = [];
65
- let _floatingLabel_decorators;
66
- let _floatingLabel_initializers = [];
67
- let _floatingLabel_extraInitializers = [];
68
- let __errorElements_decorators;
69
- let __errorElements_initializers = [];
70
- let __errorElements_extraInitializers = [];
71
- let __input_decorators;
72
- let __input_initializers = [];
73
- let __input_extraInitializers = [];
74
- let __label_decorators;
75
- let __label_initializers = [];
76
- let __label_extraInitializers = [];
77
- return class SbbFormFieldElement extends _classSuper {
78
- static {
79
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
80
- _errorSpace_decorators = [property({
81
- attribute: "error-space",
82
- reflect: true
83
- })];
84
- _optional_decorators = [forceType(), property({ type: Boolean })];
85
- _size_decorators = [property({ reflect: true })];
86
- _borderless_decorators = [forceType(), property({
87
- reflect: true,
88
- type: Boolean
89
- })];
90
- _width_decorators = [property({ reflect: true })];
91
- _hiddenLabel_decorators = [forceType(), property({
92
- attribute: "hidden-label",
93
- reflect: true,
94
- type: Boolean
95
- })];
96
- _floatingLabel_decorators = [forceType(), property({
97
- attribute: "floating-label",
98
- reflect: true,
99
- type: Boolean
100
- })];
101
- __errorElements_decorators = [state()];
102
- __input_decorators = [state()];
103
- __label_decorators = [state()];
104
- __esDecorate(this, null, _errorSpace_decorators, {
105
- kind: "accessor",
106
- name: "errorSpace",
107
- static: false,
108
- private: false,
109
- access: {
110
- has: (obj) => "errorSpace" in obj,
111
- get: (obj) => obj.errorSpace,
112
- set: (obj, value) => {
113
- obj.errorSpace = value;
114
- }
115
- },
116
- metadata: _metadata
117
- }, _errorSpace_initializers, _errorSpace_extraInitializers);
118
- __esDecorate(this, null, _optional_decorators, {
119
- kind: "accessor",
120
- name: "optional",
121
- static: false,
122
- private: false,
123
- access: {
124
- has: (obj) => "optional" in obj,
125
- get: (obj) => obj.optional,
126
- set: (obj, value) => {
127
- obj.optional = value;
128
- }
129
- },
130
- metadata: _metadata
131
- }, _optional_initializers, _optional_extraInitializers);
132
- __esDecorate(this, null, _size_decorators, {
133
- kind: "accessor",
134
- name: "size",
135
- static: false,
136
- private: false,
137
- access: {
138
- has: (obj) => "size" in obj,
139
- get: (obj) => obj.size,
140
- set: (obj, value) => {
141
- obj.size = value;
142
- }
143
- },
144
- metadata: _metadata
145
- }, _size_initializers, _size_extraInitializers);
146
- __esDecorate(this, null, _borderless_decorators, {
147
- kind: "accessor",
148
- name: "borderless",
149
- static: false,
150
- private: false,
151
- access: {
152
- has: (obj) => "borderless" in obj,
153
- get: (obj) => obj.borderless,
154
- set: (obj, value) => {
155
- obj.borderless = value;
156
- }
157
- },
158
- metadata: _metadata
159
- }, _borderless_initializers, _borderless_extraInitializers);
160
- __esDecorate(this, null, _width_decorators, {
161
- kind: "accessor",
162
- name: "width",
163
- static: false,
164
- private: false,
165
- access: {
166
- has: (obj) => "width" in obj,
167
- get: (obj) => obj.width,
168
- set: (obj, value) => {
169
- obj.width = value;
170
- }
171
- },
172
- metadata: _metadata
173
- }, _width_initializers, _width_extraInitializers);
174
- __esDecorate(this, null, _hiddenLabel_decorators, {
175
- kind: "accessor",
176
- name: "hiddenLabel",
177
- static: false,
178
- private: false,
179
- access: {
180
- has: (obj) => "hiddenLabel" in obj,
181
- get: (obj) => obj.hiddenLabel,
182
- set: (obj, value) => {
183
- obj.hiddenLabel = value;
184
- }
185
- },
186
- metadata: _metadata
187
- }, _hiddenLabel_initializers, _hiddenLabel_extraInitializers);
188
- __esDecorate(this, null, _floatingLabel_decorators, {
189
- kind: "accessor",
190
- name: "floatingLabel",
191
- static: false,
192
- private: false,
193
- access: {
194
- has: (obj) => "floatingLabel" in obj,
195
- get: (obj) => obj.floatingLabel,
196
- set: (obj, value) => {
197
- obj.floatingLabel = value;
198
- }
199
- },
200
- metadata: _metadata
201
- }, _floatingLabel_initializers, _floatingLabel_extraInitializers);
202
- __esDecorate(this, null, __errorElements_decorators, {
203
- kind: "accessor",
204
- name: "_errorElements",
205
- static: false,
206
- private: false,
207
- access: {
208
- has: (obj) => "_errorElements" in obj,
209
- get: (obj) => obj._errorElements,
210
- set: (obj, value) => {
211
- obj._errorElements = value;
212
- }
213
- },
214
- metadata: _metadata
215
- }, __errorElements_initializers, __errorElements_extraInitializers);
216
- __esDecorate(this, null, __input_decorators, {
217
- kind: "accessor",
218
- name: "_input",
219
- static: false,
220
- private: false,
221
- access: {
222
- has: (obj) => "_input" in obj,
223
- get: (obj) => obj._input,
224
- set: (obj, value) => {
225
- obj._input = value;
226
- }
227
- },
228
- metadata: _metadata
229
- }, __input_initializers, __input_extraInitializers);
230
- __esDecorate(this, null, __label_decorators, {
231
- kind: "accessor",
232
- name: "_label",
233
- static: false,
234
- private: false,
235
- access: {
236
- has: (obj) => "_label" in obj,
237
- get: (obj) => obj._label,
238
- set: (obj, value) => {
239
- obj._label = value;
240
- }
241
- },
242
- metadata: _metadata
243
- }, __label_initializers, __label_extraInitializers);
244
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
245
- enumerable: true,
246
- configurable: true,
247
- writable: true,
248
- value: _metadata
249
- });
250
- }
251
- static {
252
- this.elementName = "sbb-form-field";
253
- }
254
- static {
255
- this.styles = [boxSizingStyles, unsafeCSS(form_field_default)];
256
- }
257
- #errorSpace_accessor_storage;
258
- /**
259
- * Whether to reserve space for an error message.
260
- * `none` does not reserve any space.
261
- * `reserve` does reserve one row for an error message.
262
- */
263
- get errorSpace() {
264
- return this.#errorSpace_accessor_storage;
265
- }
266
- set errorSpace(value) {
267
- this.#errorSpace_accessor_storage = value;
268
- }
269
- #optional_accessor_storage;
270
- /**
271
- * Indicates whether the input is optional.
272
- * @deprecated Set the (optional) label text manually. Will be removed with next major version.
273
- */
274
- get optional() {
275
- return this.#optional_accessor_storage;
276
- }
277
- set optional(value) {
278
- this.#optional_accessor_storage = value;
279
- }
280
- #size_accessor_storage;
281
- /**
282
- * Size variant, either l, m or s.
283
- * @default 'm' / 's' (lean)
284
- */
285
- get size() {
286
- return this.#size_accessor_storage;
287
- }
288
- set size(value) {
289
- this.#size_accessor_storage = value;
290
- }
291
- #borderless_accessor_storage;
292
- /** Whether to display the form field without a border. */
293
- get borderless() {
294
- return this.#borderless_accessor_storage;
295
- }
296
- set borderless(value) {
297
- this.#borderless_accessor_storage = value;
298
- }
299
- #width_accessor_storage;
300
- /** Defines the width of the component:
301
- * - `default`: the component has defined width and min-width;
302
- * - `collapse`: the component adapts itself to its inner input content. */
303
- get width() {
304
- return this.#width_accessor_storage;
305
- }
306
- set width(value) {
307
- this.#width_accessor_storage = value;
308
- }
309
- #hiddenLabel_accessor_storage;
310
- /** Whether to visually hide the label. If hidden, screen readers will still read it. */
311
- get hiddenLabel() {
312
- return this.#hiddenLabel_accessor_storage;
313
- }
314
- set hiddenLabel(value) {
315
- this.#hiddenLabel_accessor_storage = value;
316
- }
317
- #floatingLabel_accessor_storage;
318
- /** Whether the label should float. If activated, the placeholder of the input is hidden. */
319
- get floatingLabel() {
320
- return this.#floatingLabel_accessor_storage;
321
- }
322
- set floatingLabel(value) {
323
- this.#floatingLabel_accessor_storage = value;
324
- }
325
- #_errorElements_accessor_storage;
326
- /** It is used internally to get the `error` slot. */
327
- get _errorElements() {
328
- return this.#_errorElements_accessor_storage;
329
- }
330
- set _errorElements(value) {
331
- this.#_errorElements_accessor_storage = value;
332
- }
333
- #_input_accessor_storage;
334
- /** Reference to the slotted input element. */
335
- get _input() {
336
- return this.#_input_accessor_storage;
337
- }
338
- set _input(value) {
339
- this.#_input_accessor_storage = value;
340
- }
341
- #_label_accessor_storage;
342
- /** Reference to the slotted label elements. */
343
- get _label() {
344
- return this.#_label_accessor_storage;
345
- }
346
- set _label(value) {
347
- this.#_label_accessor_storage = value;
348
- }
349
- /** Returns the input element. */
350
- get inputElement() {
351
- return this._input;
352
- }
353
- /** Reference to the slotted label. */
354
- get label() {
355
- return this._label;
356
- }
357
- constructor() {
358
- super();
359
- this._excludedFocusElements = [
360
- "button",
361
- "sbb-popover",
362
- "sbb-option",
363
- "sbb-chip"
364
- ];
365
- this._floatingLabelSupportedInputElements = [
366
- "input",
367
- "select",
368
- "textarea",
369
- "sbb-select"
370
- ];
371
- this._floatingLabelSupportedInputTypes = [
372
- "email",
373
- "number",
374
- "password",
375
- "search",
376
- "tel",
377
- "text",
378
- "url"
379
- ];
380
- this.#errorSpace_accessor_storage = __runInitializers(this, _errorSpace_initializers, "none");
381
- this.#optional_accessor_storage = (__runInitializers(this, _errorSpace_extraInitializers), __runInitializers(this, _optional_initializers, false));
382
- this.#size_accessor_storage = (__runInitializers(this, _optional_extraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
383
- this.#borderless_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _borderless_initializers, false));
384
- this.#width_accessor_storage = (__runInitializers(this, _borderless_extraInitializers), __runInitializers(this, _width_initializers, "default"));
385
- this.#hiddenLabel_accessor_storage = (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _hiddenLabel_initializers, false));
386
- this.#floatingLabel_accessor_storage = (__runInitializers(this, _hiddenLabel_extraInitializers), __runInitializers(this, _floatingLabel_initializers, false));
387
- this.#_errorElements_accessor_storage = (__runInitializers(this, _floatingLabel_extraInitializers), __runInitializers(this, __errorElements_initializers, []));
388
- this.#_input_accessor_storage = (__runInitializers(this, __errorElements_extraInitializers), __runInitializers(this, __input_initializers, null));
389
- this.#_label_accessor_storage = (__runInitializers(this, __input_extraInitializers), __runInitializers(this, __label_initializers, void 0));
390
- this._language = (__runInitializers(this, __label_extraInitializers), new SbbLanguageController(this));
391
- /**
392
- * Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
393
- */
394
- this._formFieldAttributeObserver = !isServer ? new MutationObserver((mutations) => {
395
- if (mutations.some((m) => m.type === "attributes") && this._input) {
396
- this._readInputState();
397
- this._registerInputFormListener();
398
- this._checkAndUpdateInputEmpty();
399
- }
400
- }) : null;
401
- this._inputFormAbortController = new AbortController();
402
- this._control = null;
403
- this.addEventListener?.("focusin", (event) => {
404
- if (event.target === this.inputElement || event.target === this.inputElement?.inputElement) {
405
- this.internals.states.add("focus");
406
- this.internals.states.add(`focus-origin-${sbbInputModalityDetector.mostRecentModality}`);
407
- }
408
- }, { passive: true });
409
- this.addEventListener?.("focusout", (event) => {
410
- if (event.target === this.inputElement || event.target === this.inputElement?.inputElement) {
411
- this._checkAndUpdateInputEmpty();
412
- this.internals.states.delete("focus");
413
- for (const state of this.internals.states) if (state.startsWith("focus-origin-")) this.internals.states.delete(state);
414
- }
415
- }, { passive: true });
416
- this.addEventListener("input", () => this._checkAndUpdateInputEmpty());
417
- this.addEventListener("displayvaluechange", () => this._checkAndUpdateInputEmpty());
418
- this.addEventListener("invalid", (e) => e.preventDefault(), { capture: true });
419
- this.addEventListener("formfieldcontrol", (e) => {
420
- this._control = e.control;
421
- if (this._connectInputElement() === "unchanged") {
422
- this._assignErrorMessageElements();
423
- this._readInputState();
424
- this._checkAndUpdateInputEmpty();
425
- }
426
- });
427
- }
428
- connectedCallback() {
429
- super.connectedCallback();
430
- this._assignSlots();
431
- this._connectInputElement();
432
- this._syncNegative();
433
- this._syncSize();
434
- }
435
- willUpdate(changedProperties) {
436
- super.willUpdate(changedProperties);
437
- if (changedProperties.has("negative")) this._syncNegative();
438
- if (changedProperties.has("size")) this._syncSize();
439
- }
440
- disconnectedCallback() {
441
- super.disconnectedCallback();
442
- this._formFieldAttributeObserver?.disconnect();
443
- this._inputFormAbortController.abort();
444
- if (this._input?.localName === "input") this._unpatchInputValue();
445
- }
446
- _handleWrapperClick(event) {
447
- if (this._isElementFocusExcluded(event)) return;
448
- if (this._control?.onContainerClick) this._control?.onContainerClick(event);
449
- else if (event.target.localName !== "label") {
450
- if (this._input?.localName === "sbb-select" && event.target.localName !== "sbb-select") this._input.click();
451
- this._input?.focus();
452
- }
453
- }
454
- _isElementFocusExcluded(event) {
455
- return event.composedPath().some((el) => el instanceof window.HTMLElement && (el.getAttribute("tabindex") === "0" || el.hasAttribute("contenteditable")) || this._excludedFocusElements.includes(el.localName));
456
- }
457
- _onSlotLabelChange() {
458
- this._label = Array.from(this.querySelectorAll("label"))[0];
459
- this._syncLabelInputReferences();
460
- }
461
- /**
462
- * It is used internally to assign the attributes of `<input>` to `_id` and `_input` and to observe the native readonly and disabled attributes.
463
- */
464
- _onSlotInputChange() {
465
- this._assignSlots();
466
- this._connectInputElement();
467
- }
468
- _assignSlots() {
469
- this.querySelectorAll("label:not([slot])").forEach((e) => e.setAttribute("slot", "label"));
470
- this.querySelectorAll("sbb-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
471
- }
472
- _connectInputElement() {
473
- let newInput;
474
- if (this._control?.id) newInput = this.getRootNode().getElementById(this._control.id);
475
- else {
476
- const inputCandidates = Array.from(this.querySelectorAll("*:not([slot],sbb-chip-group)"));
477
- newInput = (inputCandidates.find((e) => this._isInputElement(e)) || inputCandidates[0]) ?? null;
478
- }
479
- if (newInput === this._input) return "unchanged";
480
- else if (this._input) {
481
- this.internals.states.delete(`input-type-${this._input.localName}`);
482
- if (this._input.localName === "input") this._unpatchInputValue();
483
- }
484
- if (!newInput) {
485
- this._input = null;
486
- return "no-input";
487
- }
488
- this._input = newInput;
489
- this._registerInputFormListener();
490
- this._assignErrorMessageElements();
491
- this._readInputState();
492
- this._checkAndUpdateInputEmpty();
493
- if (this._input.localName === "textarea") this._input.setAttribute("rows", this._input.getAttribute("rows") || "3");
494
- else if (this._input.localName === "input") this._patchInputValue();
495
- else if ((this._input.localName === "select" || this._input.localName === "sbb-select") && !this.hasUpdated) this.hydrationComplete.then(() => this.requestUpdate());
496
- this._formFieldAttributeObserver?.disconnect();
497
- this._formFieldAttributeObserver?.observe(this._input, {
498
- attributes: true,
499
- attributeFilter: [
500
- "readonly",
501
- "disabled",
502
- "form",
503
- "class",
504
- "data-expanded"
505
- ]
506
- });
507
- this.internals.states.add(`input-type-${this._input.localName}`);
508
- this._syncLabelInputReferences();
509
- return "changed";
510
- }
511
- _syncLabelInputReferences() {
512
- if (!this._input || !this._label) return;
513
- if (nativeInputElements.includes(this._input.localName) || customElements.get(this._input.localName)?.formAssociated) {
514
- this._input.id ||= `sbb-form-field-input-${nextId++}`;
515
- this._label.htmlFor = this._input.id;
516
- } else {
517
- this._label.id ||= `sbb-form-field-label-${nextId++}`;
518
- const labelledby = this._input.getAttribute("aria-labelledby")?.split(" ").filter((l) => !!l && l !== this._label.id) ?? [];
519
- this._input.setAttribute("aria-labelledby", [...labelledby, this._label.id].join(" "));
520
- }
521
- }
522
- _isInputElement(input) {
523
- return nativeInputElements.includes(input.localName) || !!customElements.get(input.localName)?.formAssociated;
524
- }
525
- _readInputState() {
526
- this.toggleState("readonly", this._control?.readOnly ?? this._input.hasAttribute("readonly"));
527
- this.toggleState("disabled", this._control?.disabled ?? this._input.hasAttribute("disabled"));
528
- this.toggleState("has-popup-open", this._input.hasAttribute("data-expanded"));
529
- }
530
- _registerInputFormListener() {
531
- this._inputFormAbortController.abort();
532
- const { signal } = this._inputFormAbortController = new AbortController();
533
- const form = this._input?.form ?? this._input?.closest("form");
534
- const resetHandler = () => setTimeout(() => this.reset());
535
- form?.addEventListener("reset", resetHandler, { signal });
536
- }
537
- _patchInputValue() {
538
- const inputElement = this._input;
539
- if (!inputElement || patchedInputs.has(inputElement)) return;
540
- const originalDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(inputElement), "value");
541
- if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.get) return;
542
- patchedInputs.set(inputElement, originalDescriptor);
543
- const { get: getter, set: setter } = originalDescriptor;
544
- const checkAndUpdateInputEmpty = () => this._checkAndUpdateInputEmpty();
545
- Object.defineProperty(inputElement, "value", {
546
- ...originalDescriptor,
547
- get() {
548
- return getter.call(this);
549
- },
550
- set(newValue) {
551
- setter.call(this, newValue);
552
- checkAndUpdateInputEmpty();
553
- }
554
- });
555
- }
556
- _unpatchInputValue() {
557
- const inputElement = this._input;
558
- const originalDescriptor = patchedInputs.get(inputElement);
559
- if (originalDescriptor) {
560
- Object.defineProperty(inputElement, "value", originalDescriptor);
561
- patchedInputs.delete(inputElement);
562
- }
563
- }
564
- _checkAndUpdateInputEmpty() {
565
- this.toggleState("empty", this._control?.empty ?? (((this._floatingLabelSupportedInputElements.includes(this._input?.localName) || this._input?.constructor?.formFieldAssociated) ?? false) && this._isInputEmpty()));
566
- }
567
- _isInputEmpty() {
568
- const chipGroupElem = this.querySelector("sbb-chip-group");
569
- if (chipGroupElem) return this._isInputValueEmpty() && (Array.isArray(chipGroupElem.value) ? chipGroupElem.value.length === 0 : !chipGroupElem.querySelector("sbb-chip"));
570
- else if (this._input instanceof HTMLInputElement) return this._floatingLabelSupportedInputTypes.includes(this._input.type) && this._isInputValueEmpty();
571
- else if (this._input instanceof HTMLSelectElement) return this._input.selectedOptions?.item(0)?.label?.trim() === "";
572
- else if (this._input?.localName === "sbb-select") return this._input.getDisplayValue?.()?.trim() === "";
573
- else return this._isInputValueEmpty();
574
- }
575
- _isInputValueEmpty() {
576
- const value = this._input.value;
577
- return [
578
- "",
579
- void 0,
580
- null
581
- ].includes(value) || Array.isArray(value) && value.length === 0;
582
- }
583
- /**
584
- * It is used internally to set the aria-describedby attribute for the slotted input referencing available <sbb-error> instances.
585
- */
586
- _onSlotErrorChange(event) {
587
- const errorElements = event.target.assignedElements();
588
- if (this._input && this._input.ariaDescribedByElements?.length) this._input.ariaDescribedByElements = removeAriaElements(this._input.ariaDescribedByElements, ...this._errorElements ?? []);
589
- this._errorElements = errorElements;
590
- for (const el of this._errorElements) el.role ||= "status";
591
- this._assignErrorMessageElements();
592
- this.toggleState("has-error", !!this._errorElements.length);
593
- this._syncNegative();
594
- }
595
- _assignErrorMessageElements() {
596
- if (this._input) this._input.ariaDescribedByElements = appendAriaElements(this._input.ariaDescribedByElements, ...this._errorElements);
597
- }
598
- /** Manually reset the form field. Currently, this only resets the floating label. */
599
- reset() {
600
- this._checkAndUpdateInputEmpty();
601
- }
602
- /** Manually clears the input value. It only works for inputs, selects are not supported. */
603
- clear() {
604
- if (this._input?.localName !== "input") return;
605
- this._input.value = "";
606
- this._checkAndUpdateInputEmpty();
607
- }
608
- _syncNegative() {
609
- this.querySelectorAll?.("sbb-error,sbb-mini-button,sbb-mini-button-link,sbb-form-field-clear,sbb-datepicker-next-day,sbb-datepicker-previous-day,sbb-datepicker-toggle,sbb-select,sbb-autocomplete,sbb-autocomplete-grid,sbb-chip-group").forEach((element) => element.toggleAttribute("negative", this.negative));
610
- }
611
- _syncSize() {
612
- this.querySelectorAll?.("sbb-autocomplete,sbb-autocomplete-grid,sbb-select").forEach((element) => element.size = this.size === "s" ? "s" : "m");
613
- }
614
- render() {
615
- return html`
616
- <div class="sbb-form-field__space-wrapper">
617
- ${""}
618
- <div @click=${this._handleWrapperClick} class="sbb-form-field__wrapper" id="overlay-anchor">
619
- <slot name="prefix" @slotchange=${this._syncNegative}></slot>
620
- <div class="sbb-form-field__input-container">
621
- <span class="sbb-form-field__label-spacer" aria-hidden="true"></span>
622
- <span class="sbb-form-field__label">
623
- <span class="sbb-form-field__label-ellipsis">
624
- <slot name="label" @slotchange=${this._onSlotLabelChange}></slot>
625
- ${this.optional ? html` <span aria-hidden="true"> ${i18nOptional[this._language.current]} </span>` : nothing}
626
- </span>
627
- </span>
628
- <div class="sbb-form-field__input">
629
- <slot @slotchange=${this._onSlotInputChange}></slot>
630
- </div>
631
- ${this.hasUpdated && ["select", "sbb-select"].includes(this._input?.localName) ? html`<sbb-icon
632
- name="chevron-small-down-small"
633
- class="sbb-form-field__select-input-icon"
634
- ></sbb-icon>` : nothing}
635
- </div>
636
- <slot name="suffix" @slotchange=${this._syncNegative}></slot>
637
- </div>
638
-
639
- <div class="sbb-form-field__error">
640
- <slot name="error" @slotchange=${this._onSlotErrorChange}></slot>
641
- </div>
642
- </div>
643
- `;
644
- }
645
- };
646
- })();
647
- //#endregion
648
- export { SbbFormFieldElement as n, SbbFormFieldControlEvent as t };
649
-
650
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQtRG5VQTZVZHMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIC0tc2JiLWZvcm0tZmllbGQtZXJyb3ItZGl2aWRlci13aWR0aDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICAtLXNiYi1mb3JtLWZpZWxkLWVycm9yLXBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNiYi1mb3JtLWZpZWxkLWVycm9yLWRpdmlkZXItd2lkdGgpO1xuICAtLXNiYi1mb3JtLWZpZWxkLXNlbGVjdC1pbmxpbmUtcGFkZGluZy1lbmQ6IGNhbGMoXG4gICAgdmFyKC0tc2JiLWljb24tc3ZnLXdpZHRoKSArIHZhcigtLXNiYi1mb3JtLWZpZWxkLWdhcClcbiAgKTtcbiAgLS1zYmItZm9ybS1maWVsZC1sYWJlbC1zaXplOiBjYWxjKFxuICAgIHZhcigtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLXRleHQtc2l6ZSkgKiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KVxuICApO1xuICAtLXNiYi1mb3JtLWZpZWxkLXRleHQtbGluZS1oZWlnaHQ6IGNhbGMoXG4gICAgdmFyKC0tc2JiLWZvcm0tZmllbGQtaW5wdXQtdGV4dC1zaXplKSAqIHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpXG4gICk7XG4gIC0tc2JiLWZvcm0tZmllbGQtbWFyZ2luLWJsb2NrLXN0YXJ0OiBjYWxjKFxuICAgIChcbiAgICAgICAgdmFyKC0tc2JiLWZvcm0tZmllbGQtbWluLWhlaWdodCkgLSB2YXIoLS1zYmItZm9ybS1maWVsZC1sYWJlbC1zaXplKSAtIHZhcihcbiAgICAgICAgICAgIC0tc2JiLWZvcm0tZmllbGQtdGV4dC1saW5lLWhlaWdodFxuICAgICAgICAgICkgK1xuICAgICAgICAgIHZhcigtLV9zYmItZm9ybS1maWVsZC1sYWJlbC10by1pbnB1dC1vdmVybGFwcGluZylcbiAgICAgICkgL1xuICAgICAgMlxuICApO1xuXG4gIC8vIExvY2sgc2JiLWljb24gc2l6ZVxuICAtLXNiYi1pY29uLXN2Zy13aWR0aDogdmFyKC0tc2JiLWZvcm0tZmllbGQtaWNvbi1zaXplKTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiB2YXIoLS1zYmItZm9ybS1maWVsZC1pY29uLXNpemUpO1xuXG4gIC8vIEFzIHRoZSBmb3JtIGZpZWxkIGhhcyBhbHdheXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCB3ZSBoYXZlIHRvIGZpeCB0aGUgZm9jdXMgb3V0bGluZSBjb2xvclxuICAvLyB0byBkZWZhdWx0IGNvbG9yIGZvciBjYXNlcyB3aGVyZSB0aGUgZm9ybSBmaWVsZCBpcyB1c2VkIGluIGEgbmVnYXRpdmUgY29udGV4dC5cbiAgLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvcjogbGlnaHQtZGFyayhcbiAgICB2YXIoLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvci1kZWZhdWx0KSxcbiAgICB2YXIoLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvci1kYXJrKVxuICApO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6IHZhcigtLXNiYi1mb3JtLWZpZWxkLWNvbG9yKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuOmhvc3QoOndoZXJlKDpub3QoW3dpZHRoPSdjb2xsYXBzZSddKSkpIHtcbiAgbWluLXdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTUwKX07XG4gIHdpZHRoOiBtaW4oI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDMwMCl9LCAxMDAlKTtcbn1cblxuOmhvc3QoW25lZ2F0aXZlXSkge1xuICBjb2xvcjogdmFyKC0tc2JiLWNvbG9yLTMtbmVnYXRpdmUpO1xuXG4gIC0tc2JiLWZvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMS1uZWdhdGl2ZSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zYmItYm9yZGVyLWNvbG9yLTUpO1xuICAtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItNSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtcHJlZml4LWNvbG9yOiB2YXIoLS1zYmItY29sb3ItNSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtdGV4dC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTMtbmVnYXRpdmUpO1xuICAtLXNiYi1mb2N1cy1vdXRsaW5lLWNvbG9yOiB2YXIoLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvci1kYXJrKTtcbiAgLS1zYmItZm9ybS1maWVsZC1hcnJvdy1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTMtbmVnYXRpdmUpO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci1jb2xvcjogQnV0dG9uQm9yZGVyO1xuICB9XG59XG5cbjpob3N0KFtzaXplPSdzJ10pIHtcbiAgLS1zYmItZm9ybS1maWVsZC1taW4taGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1lbGVtZW50LXhzKTtcbiAgLS1zYmItZm9ybS1maWVsZC1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi1mb3JtLWZpZWxkLWlucHV0LXRleHQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLXMpO1xuICAtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLXRleHQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLXh4cyk7XG5cbiAgLy8gVmFsdWVzIGZvdW5kIGJ5IHRyeSBhbmQgZXJyb3JcbiAgLS1fc2JiLWZvcm0tZmllbGQtbGFiZWwtdG8taW5wdXQtb3ZlcmxhcHBpbmc6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxMCl9O1xuICAtLV9zYmItZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC10cmFuc2Zvcm06ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1LjUpfTtcbiAgLS1fc2JiLWZvcm0tZmllbGQtc3BhY2VyLW1hcmdpbi1ibG9jay1lbmQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgtOC41KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC8vIFZhbHVlcyBmb3VuZCBieSB0cnkgYW5kIGVycm9yXG4gICAgLS1fc2JiLWZvcm0tZmllbGQtbGFiZWwtdG8taW5wdXQtb3ZlcmxhcHBpbmc6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxMSl9O1xuICAgIC0tX3NiYi1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXRyYW5zZm9ybTogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDUpfTtcbiAgICAtLV9zYmItZm9ybS1maWVsZC1zcGFjZXItbWFyZ2luLWJsb2NrLWVuZDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKC04KX07XG4gIH1cbn1cblxuOmhvc3QoW3NpemU9J20nXSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLW1pbi1oZWlnaHQ6IHZhcigtLXNiYi1zaXplLWVsZW1lbnQtbSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgLS1zYmItZm9ybS1maWVsZC1pbnB1dC10ZXh0LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1tKTtcbiAgLS1zYmItZm9ybS1maWVsZC1sYWJlbC10ZXh0LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG4gIC0tX3NiYi1mb3JtLWZpZWxkLWxhYmVsLXRvLWlucHV0LW92ZXJsYXBwaW5nOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG4gIC0tX3NiYi1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXRyYW5zZm9ybTogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDguNSl9O1xuICAtLV9zYmItZm9ybS1maWVsZC1zcGFjZXItbWFyZ2luLWJsb2NrLWVuZDogY2FsYyhcbiAgICAtMSAqIHZhcigtLV9zYmItZm9ybS1maWVsZC1sYWJlbC10by1pbnB1dC1vdmVybGFwcGluZylcbiAgKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1fc2JiLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtdHJhbnNmb3JtOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTAuNSl9O1xuICB9XG59XG5cbjpob3N0KFtzaXplPSdsJ10pIHtcbiAgLS1zYmItZm9ybS1maWVsZC1taW4taGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1lbGVtZW50LWwpO1xuICAtLXNiYi1mb3JtLWZpZWxkLXBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXh4eHMpO1xufVxuXG46aG9zdChbZXJyb3Itc3BhY2U9J3Jlc2VydmUnXSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLWVycm9yLW1pbi1oZWlnaHQ6IGNhbGMoXG4gICAgdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkgKiB2YXIoLS1zYmItdGV4dC1mb250LXNpemUteHMpXG4gICk7XG4gIC0tc2JiLWZvcm0tZmllbGQtZXJyb3ItcGFkZGluZy1ibG9jay1zdGFydC1vdmVycmlkZTogdmFyKC0tc2JiLWZvcm0tZmllbGQtZXJyb3ItZGl2aWRlci13aWR0aCk7XG59XG5cbjpob3N0KDp3aGVyZSg6c3RhdGUocmVhZG9ubHkpLCA6c3RhdGUoZGlzYWJsZWQpKSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTMpO1xuICAtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3JhcGhpdGUpLCB2YXIoLS1zYmItY29sb3Itc21va2UpKTtcbiAgLS1zYmItZm9ybS1maWVsZC1hcnJvdy1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSksIHZhcigtLXNiYi1jb2xvci1zdG9ybSkpO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci1jb2xvcjogQnV0dG9uQm9yZGVyO1xuICB9XG59XG5cbjpob3N0KDp3aGVyZSg6c3RhdGUocmVhZG9ubHkpLCA6c3RhdGUoZGlzYWJsZWQpKVtuZWdhdGl2ZV0pIHtcbiAgLS1zYmItZm9ybS1maWVsZC1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zLW5lZ2F0aXZlKTtcbiAgLS1zYmItZm9ybS1maWVsZC1ib3JkZXItY29sb3I6IHZhcigtLXNiYi1ib3JkZXItY29sb3ItNSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtYXJyb3ctY29sb3I6IHZhcigtLXNiYi1ib3JkZXItY29sb3ItNSk7XG59XG5cbjpob3N0KDp3aGVyZSg6c3RhdGUoZGlzYWJsZWQpKSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSwgdmFyKC0tc2JiLWNvbG9yLXNtb2tlKSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtcHJlZml4LWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSwgdmFyKC0tc2JiLWNvbG9yLXN0b3JtKSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLWZvcm0tZmllbGQtbGFiZWwtY29sb3I6IEdyYXlUZXh0ICFpbXBvcnRhbnQ7XG4gICAgLS1zYmItZm9ybS1maWVsZC1wcmVmaXgtY29sb3I6IEdyYXlUZXh0ICFpbXBvcnRhbnQ7XG4gICAgLS1zYmItZm9ybS1maWVsZC10ZXh0LWNvbG9yOiBHcmF5VGV4dCAhaW1wb3J0YW50O1xuICAgIC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLWNvbG9yOiBHcmF5VGV4dCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIDp3aGVyZSBpcyB0byBhbGlnbiBzcGVjaWZpY2l0eVxuOmhvc3QoOndoZXJlKDpzdGF0ZShkaXNhYmxlZCkpW25lZ2F0aXZlXSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLXRleHQtY29sb3I6IHZhcigtLXNiYi1jb2xvci01KTtcbiAgLS1zYmItZm9ybS1maWVsZC1sYWJlbC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTUpO1xuICAtLXNiYi1mb3JtLWZpZWxkLXByZWZpeC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTUpO1xufVxuXG4vLyA6d2hlcmUgaXMgdG8gYWxpZ24gc3BlY2lmaWNpdHlcbjpob3N0KDp3aGVyZSg6c3RhdGUocmVhZG9ubHkpKTpub3QoW25lZ2F0aXZlXSkpIHtcbiAgLS1zYmItZm9ybS1maWVsZC1sYWJlbC1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSksIHZhcigtLXNiYi1jb2xvci1zbW9rZSkpO1xuICAtLXNiYi1mb3JtLWZpZWxkLXByZWZpeC1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSksIHZhcigtLXNiYi1jb2xvci1zdG9ybSkpO1xufVxuXG4vLyA6d2hlcmUgaXMgdG8gYWxpZ24gc3BlY2lmaWNpdHlcbjpob3N0KDp3aGVyZSg6c3RhdGUoZm9jdXMpKSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci1jb2xvcjogdmFyKC0tc2JiLWJvcmRlci1jb2xvci0zKTtcbiAgLS1zYmItZm9ybS1maWVsZC1wcmVmaXgtY29sb3I6IHZhcigtLXNiYi1jb2xvci0zKTtcbiAgLS1zYmItZm9ybS1maWVsZC1ib3JkZXItd2lkdGg6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMngpO1xufVxuXG4vLyA6d2hlcmUgaXMgdG8gYWxpZ24gc3BlY2lmaWNpdHlcbjpob3N0KDp3aGVyZSg6c3RhdGUoZm9jdXMpKVtuZWdhdGl2ZV0pIHtcbiAgLS1zYmItZm9ybS1maWVsZC1ib3JkZXItY29sb3I6IHZhcigtLXNiYi1ib3JkZXItY29sb3ItMy1uZWdhdGl2ZSk7XG4gIC0tc2JiLWZvcm0tZmllbGQtcHJlZml4LWNvbG9yOiB2YXIoLS1zYmItY29sb3ItMy1uZWdhdGl2ZSk7XG59XG5cbi8vIFdlIG11c3Qgbm90IHVzZSA6d2hlcmUgaGVyZSwgYXMgaXQgbmVlZHMgdGhlIGFkZGVkIHNwZWNpZmljaXR5IHRvIHByb3Blcmx5IHdvcmtcbjpob3N0KDpzdGF0ZShmb2N1cykpIHtcbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLWNvbG9yOiBIaWdobGlnaHQ7XG4gICAgLS1zYmItZm9ybS1maWVsZC1wcmVmaXgtY29sb3I6IEhpZ2hsaWdodDtcbiAgfVxufVxuXG4vLyA6d2hlcmUgaXMgdG8gYWxpZ24gc3BlY2lmaWNpdHlcbjpob3N0KDpub3QoOndoZXJlKDpzdGF0ZShoYXMtZXJyb3IpKSkpIHtcbiAgLS1zYmItZm9ybS1maWVsZC1lcnJvci1wYWRkaW5nLWJsb2NrLXN0YXJ0OiAwO1xufVxuXG46aG9zdChbZmxvYXRpbmctbGFiZWxdKSB7XG4gIC0tc2JiLXNlbGVjdC1wbGFjZWhvbGRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLXNlbGVjdC1wbGFjZWhvbGRlci1jb2xvcjogQ2FudmFzO1xuICB9XG59XG5cbjpob3N0KDppcyg6bm90KDpzdGF0ZShzbG90dGVkLWxhYmVsKSksIFtoaWRkZW4tbGFiZWxdKSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLXNpemU6IDByZW07XG4gIC0tX3NiYi1mb3JtLWZpZWxkLWxhYmVsLXRvLWlucHV0LW92ZXJsYXBwaW5nOiAwcmVtO1xufVxuXG4vLyBTaG91bGQgYmUgYWZ0ZXIgb3RoZXIgZGVmaW5pdGlvbnMgdG8gb3ZlcnJpZGUgb3ZlcmZsb3dcbi8vIDp3aGVyZSBpcyB0byBhbGlnbiBzcGVjaWZpY2l0eVxuOmhvc3QoOndoZXJlKDpzdGF0ZShpbnB1dC10eXBlLXNiYi1zbGlkZXIpKSkge1xuICAtLXNiYi1mb3JtLWZpZWxkLW92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4uc2JiLWZvcm0tZmllbGRfX3NwYWNlLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG5cbiAgQGluY2x1ZGUgc2JiLnplcm8td2lkdGgtc3BhY2U7XG59XG5cbi5zYmItZm9ybS1maWVsZF9fd3JhcHBlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGdhcDogdmFyKC0tc2JiLWZvcm0tZmllbGQtZ2FwKTtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1mb3JtLWZpZWxkLXBhZGRpbmctaW5saW5lKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLXJhZGl1cyk7XG4gIG1pbi1oZWlnaHQ6IHZhcigtLXNiYi1mb3JtLWZpZWxkLW1pbi1oZWlnaHQpO1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1zYmItZm9ybS1maWVsZC1tYXgtaGVpZ2h0KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWZvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcik7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBVc2UgOjpiZWZvcmUgdG8gYXZvaWQgY29udGVudCBzaGlmdGluZyB3aGVuIGJvcmRlciB3aWR0aCBjaGFuZ2VzLlxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBib3JkZXI6IHZhcigtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci13aWR0aCkgdmFyKC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLXN0eWxlKVxuICAgICAgdmFyKC0tc2JiLWZvcm0tZmllbGQtYm9yZGVyLWNvbG9yKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItZm9ybS1maWVsZC1ib3JkZXItcmFkaXVzKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC8vIDp3aGVyZSBpcyB0byBhbGlnbiBzcGVjaWZpY2l0eVxuICA6aG9zdCg6d2hlcmUoOnN0YXRlKGZvY3VzKTpzdGF0ZShmb2N1cy1vcmlnaW4ta2V5Ym9hcmQpKSkgJiB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG5cbiAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tc2JiLWZvcm0tZmllbGQtb3V0bGluZS1vZmZzZXQsIHZhcigtLXNiYi1mb2N1cy1vdXRsaW5lLW9mZnNldCkpO1xuICB9XG5cbiAgLy8gSW4gaGlnaCBjb250cmFzdCwgdGhlcmUgaXMgbm8gYm9yZGVybGVzcyB2YXJpYW50XG4gIEBtZWRpYSAoZm9yY2VkLWNvbG9yczogbm9uZSkge1xuICAgIDpob3N0KDppcyhbYm9yZGVybGVzc10sIDpzdGF0ZShpbnB1dC10eXBlLXNiYi1zbGlkZXIpKSkgJiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIDpob3N0KDp3aGVyZSg6c3RhdGUoZm9jdXMpLCA6c3RhdGUoZGlzYWJsZWQpKVtib3JkZXJsZXNzXSkgJiB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvcmRlci1ibG9jay1lbmQ6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMXgpIHZhcigtLXNiYi1mb3JtLWZpZWxkLWJvcmRlci1zdHlsZSlcbiAgICAgICAgICB2YXIoLS1zYmItZm9ybS1maWVsZC1ib3JkZXItY29sb3IpO1xuICAgICAgICBpbnNldC1pbmxpbmU6IHZhcigtLXNiYi1mb3JtLWZpZWxkLXBhZGRpbmctaW5saW5lKTtcbiAgICAgICAgaW5zZXQtYmxvY2stZW5kOiAwO1xuICAgICAgICB6LWluZGV4OiB2YXIoLS1zYmItZm9ybS1maWVsZC1mb2N1cy11bmRlcmxpbmUtei1pbmRleCwgaW5pdGlhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbjo6c2xvdHRlZCgqW3Nsb3Q9J3ByZWZpeCddKSB7XG4gIGNvbG9yOiB2YXIoLS1zYmItZm9ybS1maWVsZC1wcmVmaXgtY29sb3IpO1xufVxuXG4vLyBFbnN1cmUgc2xvdHRlZCBpbmxpbmUgZWxlbWVudHMgYXJlIHZlcnRpY2FsbHkgY2VudGVyZWRcbjo6c2xvdHRlZCgqW3Nsb3Q9J3ByZWZpeCddKSxcbjo6c2xvdHRlZCgqW3Nsb3Q9J3N1ZmZpeCddKSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1pbi13aWR0aDogdmFyKC0tc2JiLWljb24tc3ZnLXdpZHRoKTtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBjYWxjKCh2YXIoLS1zYmItZm9ybS1maWVsZC1taW4taGVpZ2h0KSAtIHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpKSAvIDIpO1xufVxuXG46OnNsb3R0ZWQoc2JiLWZvcm0tZmllbGQtY2xlYXIpIHtcbiAgOmhvc3QoOndoZXJlKDpzdGF0ZShlbXB0eSksIDpzdGF0ZShkaXNhYmxlZCksIDpzdGF0ZShyZWFkb25seSkpKSAmIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIEFzIHRoZSBjYWxlbmRhciBzaG91bGQgYmUgc2hvd24gYmVsb3cgdGhlIGZvcm0gZmllbGQgYm9yZGVyLCB3ZSBoYXZlIHRvIHN0cmV0Y2ggdGhlIHRvZ2dsZSdzIGhlaWdodC5cbi8vIFRPRE86IE1heWJlIG1vdmUgdGhpcyB0byB0aGUgZGF0ZXBpY2tlci10b2dnbGUgY29tcG9uZW50LlxuOjpzbG90dGVkKHNiYi1kYXRlcGlja2VyLXRvZ2dsZSkge1xuICBwYWRkaW5nLWJsb2NrLWVuZDogY2FsYygodmFyKC0tc2JiLWZvcm0tZmllbGQtbWluLWhlaWdodCkgLSB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKSkgLyAyKTtcbn1cblxuQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAvLyBBbGlnbiB3aXRoIHByZWZpeCBjb2xvclxuICA6OnNsb3R0ZWQoKltzbG90PSdzdWZmaXgnXSkge1xuICAgIGNvbG9yOiB2YXIoLS1zYmItZm9ybS1maWVsZC1wcmVmaXgtY29sb3IpO1xuICB9XG59XG5cbi5zYmItZm9ybS1maWVsZF9fc2VsZWN0LWlucHV0LWljb24ge1xuICBAaW5jbHVkZSBzYmIuYWJzb2x1dGUtY2VudGVyLXk7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldC1pbmxpbmUtZW5kOiAwO1xuICBtYXJnaW4tYmxvY2stc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1zYmItZm9ybS1maWVsZC1tYXJnaW4tYmxvY2stc3RhcnQpIC8gMik7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjb2xvcjogdmFyKC0tc2JiLWZvcm0tZmllbGQtYXJyb3ctY29sb3IpO1xufVxuXG4uc2JiLWZvcm0tZmllbGRfX2lucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogdmFyKC0tc2JiLWZvcm0tZmllbGQtbWFyZ2luLWJsb2NrLXN0YXJ0KTtcblxuICAvLyBQcmV2ZW50cyBvdmVyZmxvd2luZyBwYXJlbnRcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uc2JiLWZvcm0tZmllbGRfX2xhYmVsLXNwYWNlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogY2FsYyh2YXIoLS1zYmItZm9ybS1maWVsZC1sYWJlbC10ZXh0LXNpemUpICogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkpO1xuXG4gIC8vIE1vdmVzIGxhYmVsIGRvd24gYW5kIGlucHV0IHVwIHRvIG1lZXQgcG9zaXRpb25pbmcgcmVxdWlyZW1lbnRzXG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLV9zYmItZm9ybS1maWVsZC1zcGFjZXItbWFyZ2luLWJsb2NrLWVuZCk7XG59XG5cbi8vIFRvIGF2b2lkIGRvdWJsZWQgcGF5bG9hZCwgd2UgZ3JvdXAgdGhlIHJ1bGVzLlxuOmlzKC5zYmItZm9ybS1maWVsZF9fbGFiZWwsIC5zYmItZm9ybS1maWVsZF9fbGFiZWwtc3BhY2VyKSB7XG4gIDpob3N0KDpub3QoOnN0YXRlKHNsb3R0ZWQtbGFiZWwpKSkgJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDpob3N0KFtoaWRkZW4tbGFiZWxdKSAmIHtcbiAgICBAaW5jbHVkZSBzYmIuc2NyZWVuLXJlYWRlci1vbmx5O1xuICB9XG59XG5cbi5zYmItZm9ybS1maWVsZF9fbGFiZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1kZWZhdWx0KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgY29sb3I6IHZhcigtLXNiYi1mb3JtLWZpZWxkLWxhYmVsLWNvbG9yKTtcbiAgZm9udC1zaXplOiB2YXIoLS1zYmItZm9ybS1maWVsZC1sYWJlbC10ZXh0LXNpemUpO1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tc2JiLXR5cG8tbGV0dGVyLXNwYWNpbmctdGV4dCk7XG5cbiAgOmhvc3QoOndoZXJlKDpzdGF0ZShpbnB1dC10eXBlLXNlbGVjdCksIDpzdGF0ZShpbnB1dC10eXBlLXNiYi1zZWxlY3QpKSkgJiB7XG4gICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1zYmItZm9ybS1maWVsZC1zZWxlY3QtaW5saW5lLXBhZGRpbmctZW5kKTtcbiAgfVxuXG4gIDpob3N0KFtmbG9hdGluZy1sYWJlbF0pICYge1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgLy8gV2Ugc2hvdWxkbid0IGNhdGNoIG1vdXNlIGV2ZW50cyAobGV0IHRoZW0gdGhyb3VnaCkuXG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIGZvbnQtc2l6ZTtcblxuICAgIHRyYW5zaXRpb246IHtcbiAgICAgIGR1cmF0aW9uOiB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpKTtcbiAgICAgIHRpbWluZy1mdW5jdGlvbjogdmFyKC0tc2JiLWFuaW1hdGlvbi1lYXNpbmcpO1xuICAgICAgcHJvcGVydHk6IHRyYW5zZm9ybSwgZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIGZsb2F0aW5nLWxhYmVsIGlzIGFjdGl2YXRlZCBhbmQgdGhlcmUgaXMgbm8gZm9jdXMgaW4gaXQgKGV4Y2VwdCBmb3Igc2VsZWN0KSBhbmQgbm8gcG9wdXAgaXMgb3BlblxuICAvLyBhbmQgaW5wdXQgaXMgZW1wdHkgdGhlbiBhcHBseSB0aGUgbGFiZWwgdHJhbnNpdGlvbi5cbiAgLy8gSWYgaXQgaXMgZW1wdHkgYW5kIHJlYWRvbmx5LCBhbHdheXMgYXBwbHkgdHJhbnNpdGlvblxuICAvLyA6d2hlcmUgaXMgdG8gYWxpZ24gc3BlY2lmaWNpdHlcbiAgOmhvc3QoXG4gICAgICBbZmxvYXRpbmctbGFiZWxdOmlzKFxuICAgICAgICAgIDpub3QoXG4gICAgICAgICAgICA6d2hlcmUoOnN0YXRlKGZvY3VzKSk6bm90KDp3aGVyZSg6c3RhdGUoaW5wdXQtdHlwZS1zYmItc2VsZWN0KSkpLFxuICAgICAgICAgICAgOndoZXJlKDpzdGF0ZShoYXMtcG9wdXAtb3BlbikpXG4gICAgICAgICAgKSxcbiAgICAgICAgICA6d2hlcmUoOnN0YXRlKHJlYWRvbmx5KSlcbiAgICAgICAgKTp3aGVyZSg6c3RhdGUoZW1wdHkpKVxuICAgIClcbiAgICAmIHtcbiAgICBmb250LXNpemU6IHZhcigtLXNiYi1mb3JtLWZpZWxkLWlucHV0LXRleHQtc2l6ZSk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLV9zYmItZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC10cmFuc2Zvcm0pKTtcbiAgfVxuXG4gIC8vIDp3aGVyZSBpcyB0byBhbGlnbiBzcGVjaWZpY2l0eVxuICA6aG9zdCg6d2hlcmUoOnN0YXRlKGlucHV0LXR5cGUtdGV4dGFyZWEpKSkgJiB7XG4gICAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgICAgLy8gVGhlIGJhY2tncm91bmQgb2YgdGhlIHRleHRhcmVhIGlzIHNldCB0byBDYW52YXMgYW5kIHRoZXJlZm9yZSBoaWRlcyB0aGUgbGFiZWwgYmVoaW5kLlxuICAgICAgLy8gQnkgc2V0dGluZyB0aGUgei1pbmRleCB0byAxLCB3ZSBtb3ZlIHRoZSBsYWJlbCBpbiBmcm9udCBvZiB0aGUgdGV4dGFyZWEuXG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuXG4uc2JiLWZvcm0tZmllbGRfX2xhYmVsLWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgc2JiLmVsbGlwc2lzO1xufVxuXG4uc2JiLWZvcm0tZmllbGRfX2lucHV0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuXG4gIDpob3N0KFxuICAgICAgW3NpemU9J3MnXTppcyhcbiAgICAgICAgOnN0YXRlKGlucHV0LXR5cGUtaW5wdXQpLFxuICAgICAgICA6c3RhdGUoaW5wdXQtdHlwZS1zZWxlY3QpLFxuICAgICAgICA6c3RhdGUoaW5wdXQtdHlwZS1zYmItc2VsZWN0KSxcbiAgICAgICAgOnN0YXRlKGlucHV0LXR5cGUtc2JiLWRhdGUtaW5wdXQpLFxuICAgICAgICA6c3RhdGUoaW5wdXQtdHlwZS1zYmItdGltZS1pbnB1dClcbiAgICAgIClcbiAgICApXG4gICAgJiB7XG4gICAgLy8gSW4gc2l6ZSBzLCB0aGUgbmF0dXJhbCBoZWlnaHQgb2YgdGhlIHRleHQgaW5wdXQgaXMgdG9vIHNtYWxsLlxuICAgIC8vIFRvIG5vdCByZXNlcnZlIHRvbyBtdWNoIHNwYWNlLCB3ZSBkZWNyZWFzZSB0aGUgaGVpZ2h0LlxuICAgIG1hcmdpbi1ibG9jay1lbmQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgtMil9O1xuICB9XG59XG5cbi5zYmItZm9ybS1maWVsZF9fZXJyb3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4taGVpZ2h0OiB2YXIoLS1zYmItZm9ybS1maWVsZC1lcnJvci1taW4taGVpZ2h0KTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoXG4gICAgLS1zYmItZm9ybS1maWVsZC1lcnJvci1wYWRkaW5nLWJsb2NrLXN0YXJ0LW92ZXJyaWRlLFxuICAgIHZhcigtLXNiYi1mb3JtLWZpZWxkLWVycm9yLXBhZGRpbmctYmxvY2stc3RhcnQpXG4gICk7XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vYXV0b2NvbXBsZXRlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiQ2hpcEdyb3VwRWxlbWVudCB9IGZyb20gJy4uLy4uL2NoaXAudHMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20udHMnO1xuaW1wb3J0IHsgaTE4bk9wdGlvbmFsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZEFyaWFFbGVtZW50cyxcbiAgcmVtb3ZlQXJpYUVsZW1lbnRzLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUsXG4gIFNiYk5lZ2F0aXZlTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2Zvcm0tZmllbGQuc2Nzcz9pbmxpbmUnO1xuXG5pbXBvcnQgJy4uLy4uL2ljb24udHMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuY29uc3QgcGF0Y2hlZElucHV0cyA9IG5ldyBXZWFrTWFwPEhUTUxJbnB1dEVsZW1lbnQsIFByb3BlcnR5RGVzY3JpcHRvcj4oKTtcbmNvbnN0IG5hdGl2ZUlucHV0RWxlbWVudHMgPSBbJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCddO1xuXG4vKiogQW4gaW50ZXJmYWNlIHdoaWNoIGFsbG93cyBhIGNvbnRyb2wgdG8gd29yayBpbnNpZGUgYSBgU2JiRm9ybUZpZWxkYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JiRm9ybUZpZWxkRWxlbWVudENvbnRyb2wge1xuICAvKiogVGhlIGlkIG9mIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb250cm9sIGlzIGVtcHR5LiAqL1xuICByZWFkb25seSBlbXB0eTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVhZG9ubHkuICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXG4gIHJlYWRvbmx5IGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbnRyb2wncyBjb250YWluZXIuXG4gICAqIElmIG5vdCBpbXBsZW1lbnRlZCwgZm9jdXMoKSBvZiB0aGUgZWxlbWVudCBpcyBjYWxsZWQuXG4gICAqL1xuICBvbkNvbnRhaW5lckNsaWNrPyhldmVudDogTW91c2VFdmVudCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTYmJGb3JtRmllbGRDb250cm9sRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHByaXZhdGUgX2NvbnRyb2w6IFNiYkZvcm1GaWVsZEVsZW1lbnRDb250cm9sIHwgbnVsbDtcblxuICBwdWJsaWMgZ2V0IGNvbnRyb2woKTogU2JiRm9ybUZpZWxkRWxlbWVudENvbnRyb2wgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb250cm9sOiBTYmJGb3JtRmllbGRFbGVtZW50Q29udHJvbCB8IG51bGwpIHtcbiAgICBzdXBlcignZm9ybWZpZWxkY29udHJvbCcpO1xuICAgIHRoaXMuX2NvbnRyb2wgPSBjb250cm9sO1xuICB9XG59XG5cbi8qKlxuICogSXQgd3JhcHMgYW4gaW5wdXQgZWxlbWVudCBhZGRpbmcgbGFiZWwsIGVycm9ycywgaWNvbiwgZXRjLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaW5wdXQvc2VsZWN0IG9yIGEgc3VwcG9ydGVkIG5vbi1uYXRpdmUgZWxlbWVudC5cbiAqIEBzbG90IGxhYmVsIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYSBsYWJlbC5cbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IGVycm9yIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gZXJyb3IuXG4gKlxuICogQGNzc3Byb3AgWy0tc2JiLWZvcm0tZmllbGQtb3V0bGluZS1vZmZzZXRdIC0gVG8gb3ZlcnJpZGUgdGhlIGZvY3VzIG91dGxpbmUgb2Zmc2V0LFxuICogQGNzc3Byb3AgWy0tc2JiLWZvcm0tZmllbGQtZm9jdXMtdW5kZXJsaW5lLXotaW5kZXhdIC0gVG8gb3ZlcnJpZGUgdGhlIHotaW5kZXggb2YgdGhlIGZvY3VzIHVuZGVybGluZSBlZmZlY3QsXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJGb3JtRmllbGRFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItZm9ybS1maWVsZCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8vIExpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGZvY3VzIGlucHV0IG9uIGNsaWNrXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4Y2x1ZGVkRm9jdXNFbGVtZW50cyA9IFsnYnV0dG9uJywgJ3NiYi1wb3BvdmVyJywgJ3NiYi1vcHRpb24nLCAnc2JiLWNoaXAnXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAnaW5wdXQnLFxuICAgICdzZWxlY3QnLFxuICAgICd0ZXh0YXJlYScsXG4gICAgJ3NiYi1zZWxlY3QnLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzID0gW1xuICAgICdlbWFpbCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnc2VhcmNoJyxcbiAgICAndGVsJyxcbiAgICAndGV4dCcsXG4gICAgJ3VybCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogYG5vbmVgIGRvZXMgbm90IHJlc2VydmUgYW55IHNwYWNlLlxuICAgKiBgcmVzZXJ2ZWAgZG9lcyByZXNlcnZlIG9uZSByb3cgZm9yIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdlcnJvci1zcGFjZScsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGVycm9yU3BhY2U6ICdub25lJyB8ICdyZXNlcnZlJyA9ICdub25lJztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIG9wdGlvbmFsLlxuICAgKiBAZGVwcmVjYXRlZCBTZXQgdGhlIChvcHRpb25hbCkgbGFiZWwgdGV4dCBtYW51YWxseS4gV2lsbCBiZSByZW1vdmVkIHdpdGggbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIG9wdGlvbmFsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIGwsIG0gb3Igcy5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ2wnIHwgJ20nIHwgJ3MnID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZm9ybSBmaWVsZCB3aXRob3V0IGEgYm9yZGVyLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYm9yZGVybGVzczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgY29tcG9uZW50OlxuICAgKiAtIGBkZWZhdWx0YDogdGhlIGNvbXBvbmVudCBoYXMgZGVmaW5lZCB3aWR0aCBhbmQgbWluLXdpZHRoO1xuICAgKiAtIGBjb2xsYXBzZWA6IHRoZSBjb21wb25lbnQgYWRhcHRzIGl0c2VsZiB0byBpdHMgaW5uZXIgaW5wdXQgY29udGVudC4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igd2lkdGg6ICdkZWZhdWx0JyB8ICdjb2xsYXBzZScgPSAnZGVmYXVsdCc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gdmlzdWFsbHkgaGlkZSB0aGUgbGFiZWwuIElmIGhpZGRlbiwgc2NyZWVuIHJlYWRlcnMgd2lsbCBzdGlsbCByZWFkIGl0LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZGVuLWxhYmVsJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaGlkZGVuTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGZsb2F0LiBJZiBhY3RpdmF0ZWQsIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXQgaXMgaGlkZGVuLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZmxvYXRpbmctbGFiZWwnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmbG9hdGluZ0xhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBnZXQgdGhlIGBlcnJvcmAgc2xvdC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfZXJyb3JFbGVtZW50czogRWxlbWVudFtdID0gW107XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2xvdHRlZCBpbnB1dCBlbGVtZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9pbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCBudWxsID1cbiAgICBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNsb3R0ZWQgbGFiZWwgZWxlbWVudHMuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2xhYmVsITogSFRNTExhYmVsRWxlbWVudDtcblxuICAvKiogUmV0dXJucyB0aGUgaW5wdXQgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCBpbnB1dEVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gIH1cblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGxhYmVsLiAqL1xuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IEhUTUxMYWJlbEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnMuc29tZSgobSkgPT4gbS50eXBlID09PSAnYXR0cmlidXRlcycpICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk7XG4gICAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHByaXZhdGUgX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfY29udHJvbDogU2JiRm9ybUZpZWxkRWxlbWVudENvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c2luJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudCB8fFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gKHRoaXMuaW5wdXRFbGVtZW50IGFzIFNiYlNlbGVjdEVsZW1lbnQgfCB1bmRlZmluZWQpPy5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZm9jdXMnKTtcbiAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBmb2N1cy1vcmlnaW4tJHtzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5fWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c291dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uaW5wdXRFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2ZvY3VzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0aGlzLmludGVybmFscy5zdGF0ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdGFydHNXaXRoKCdmb2N1cy1vcmlnaW4tJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZGlzcGxheXZhbHVlY2hhbmdlJywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCkpO1xuICAgIC8vIFdlIHdhbnQgdG8gcHJldmVudCB0aGUgbmF0aXZlIGJyb3dzZXIgdmFsaWRhdGlvbiBtZXNzYWdlIHBvcG92ZXJcbiAgICAvLyB0byBiZSBzaG93bi4gVGhpcyBhbHNvIHByZXZlbnRzIGEgYnVnIGluIFdlYktpdCwgd2hpY2ggd291bGQgbm90XG4gICAgLy8gYWxsb3cgaG9zdCBhcyB0aGUgdmFsaWRpdHkgYW5jaG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODMyXG4gICAgLy8gVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIGZvcm0gYXNzb2NpYXRlZCBtaXhpbiBmb3IgdGhlIG5hdGl2ZVxuICAgIC8vIGlucHV0IGNvbnRyb2xzIChlLmcuIDxpbnB1dD4gb3IgPHNlbGVjdD4pLlxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Zvcm1maWVsZGNvbnRyb2wnLCAoZTogU2JiRm9ybUZpZWxkQ29udHJvbEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9jb250cm9sID0gZS5jb250cm9sO1xuICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKSA9PT0gJ3VuY2hhbmdlZCcpIHtcbiAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JNZXNzYWdlRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9hc3NpZ25TbG90cygpO1xuICAgIHRoaXMuX2Nvbm5lY3RJbnB1dEVsZW1lbnQoKTtcbiAgICB0aGlzLl9zeW5jTmVnYXRpdmUoKTtcbiAgICB0aGlzLl9zeW5jU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLl9zeW5jTmVnYXRpdmUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9zeW5jU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgaWYgKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuX3VucGF0Y2hJbnB1dFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRyb2w/Lm9uQ29udGFpbmVyQ2xpY2spIHtcbiAgICAgIHRoaXMuX2NvbnRyb2w/Lm9uQ29udGFpbmVyQ2xpY2soZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdsYWJlbCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ3NiYi1zZWxlY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lucHV0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5zb21lKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgKGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAoZWwuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnMCcgfHwgZWwuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkpIHx8XG4gICAgICAgICAgdGhpcy5fZXhjbHVkZWRGb2N1c0VsZW1lbnRzLmluY2x1ZGVzKChlbCBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNsb3RMYWJlbENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwnKSk7XG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYgJiYgbGFiZWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYERldGVjdGVkIG1vcmUgdGhhbiBvbmUgbGFiZWwgaW4gc2JiLWZvcm0tZmllbGQjJHt0aGlzLmlkfS4gT25seSBvbmUgbGFiZWwgaXMgc3VwcG9ydGVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9sYWJlbCA9IGxhYmVsc1swXTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YCB0byBgX2lkYCBhbmQgYF9pbnB1dGAgYW5kIHRvIG9ic2VydmUgdGhlIG5hdGl2ZSByZWFkb25seSBhbmQgZGlzYWJsZWQgYXR0cmlidXRlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdElucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnblNsb3RzKCk7XG4gICAgdGhpcy5fY29ubmVjdElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduU2xvdHMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbDpub3QoW3Nsb3RdKScpLmZvckVhY2goKGUpID0+IGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2xhYmVsJykpO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnc2JiLWVycm9yOm5vdChbc2xvdF0pJykuZm9yRWFjaCgoZSkgPT4gZS5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnZXJyb3InKSk7XG4gIH1cblxuICBwcml2YXRlIF9jb25uZWN0SW5wdXRFbGVtZW50KCk6ICdjaGFuZ2VkJyB8ICduby1pbnB1dCcgfCAndW5jaGFuZ2VkJyB7XG4gICAgbGV0IG5ld0lucHV0OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2w/LmlkKSB7XG4gICAgICBuZXdJbnB1dCA9ICh0aGlzLmdldFJvb3ROb2RlKCkgYXMgRG9jdW1lbnQgfCBTaGFkb3dSb290KS5nZXRFbGVtZW50QnlJZCh0aGlzLl9jb250cm9sLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmluZCB0aGUgc2xvdHRlZCBpbnB1dCBlbGVtZW50LCBldmVuIGlmIGl0J3MgbmVzdGVkIChlLmcuIGNoaXAgZ3JvdXApXG4gICAgICBjb25zdCBpbnB1dENhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcqOm5vdChbc2xvdF0sc2JiLWNoaXAtZ3JvdXApJyksXG4gICAgICApO1xuICAgICAgbmV3SW5wdXQgPVxuICAgICAgICAoaW5wdXRDYW5kaWRhdGVzLmZpbmQoKGUpID0+IHRoaXMuX2lzSW5wdXRFbGVtZW50KGUpKSB8fCBpbnB1dENhbmRpZGF0ZXNbMF0pID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lucHV0ID09PSB0aGlzLl9pbnB1dCkge1xuICAgICAgcmV0dXJuICd1bmNoYW5nZWQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoYGlucHV0LXR5cGUtJHt0aGlzLl9pbnB1dC5sb2NhbE5hbWV9YCk7XG4gICAgICBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICAgIHRoaXMuX3VucGF0Y2hJbnB1dFZhbHVlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFuZXdJbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQgPSBudWxsO1xuICAgICAgcmV0dXJuICduby1pbnB1dCc7XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQgPSBuZXdJbnB1dDtcbiAgICB0aGlzLl9yZWdpc3RlcklucHV0Rm9ybUxpc3RlbmVyKCk7XG4gICAgdGhpcy5fYXNzaWduRXJyb3JNZXNzYWdlRWxlbWVudHMoKTtcbiAgICB0aGlzLl9yZWFkSW5wdXRTdGF0ZSgpO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdyb3dzJywgdGhpcy5faW5wdXQuZ2V0QXR0cmlidXRlKCdyb3dzJykgfHwgJzMnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5fcGF0Y2hJbnB1dFZhbHVlKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdzZWxlY3QnIHx8IHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSAmJlxuICAgICAgIXRoaXMuaGFzVXBkYXRlZFxuICAgICkge1xuICAgICAgLy8gRHVlIHRvIFNTUiB0aGUgZHJvcGRvd24gaWNvbiBmb3Igc2VsZWN0cyBjYW5ub3QgYmUgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHJlbmRlciBwYXNzLlxuICAgICAgLy8gRHVlIHRvIHRoaXMgd2Ugc2NoZWR1bGUgYSByZS1yZW5kZXIgdG8gcmVuZGVyIHRoZSBpY29uLlxuICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+IHRoaXMucmVxdWVzdFVwZGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMuX2lucHV0LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJywgJ2Zvcm0nLCAnY2xhc3MnLCAnZGF0YS1leHBhbmRlZCddLFxuICAgIH0pO1xuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYGlucHV0LXR5cGUtJHt0aGlzLl9pbnB1dC5sb2NhbE5hbWV9YCk7XG4gICAgdGhpcy5fc3luY0xhYmVsSW5wdXRSZWZlcmVuY2VzKCk7XG4gICAgcmV0dXJuICdjaGFuZ2VkJztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0IHx8ICF0aGlzLl9sYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5hdGl2ZUlucHV0RWxlbWVudHMuaW5jbHVkZXModGhpcy5faW5wdXQubG9jYWxOYW1lKSB8fFxuICAgICAgKGN1c3RvbUVsZW1lbnRzLmdldCh0aGlzLl9pbnB1dC5sb2NhbE5hbWUpIGFzIHsgZm9ybUFzc29jaWF0ZWQ/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpXG4gICAgICAgID8uZm9ybUFzc29jaWF0ZWRcbiAgICApIHtcbiAgICAgIC8vIEZvciBuYXRpdmUgaW5wdXQgZWxlbWVudHMgd2UgdXNlIHRoZSBgZm9yYCBhdHRyaWJ1dGUgb24gdGhlIGxhYmVsIHRvIHJlZmVyZW5jZSB0aGUgaW5wdXRcbiAgICAgIC8vIHZpYSBpZCByZWZlcmVuY2UuXG4gICAgICB0aGlzLl9pbnB1dC5pZCB8fD0gYHNiYi1mb3JtLWZpZWxkLWlucHV0LSR7bmV4dElkKyt9YDtcbiAgICAgIHRoaXMuX2xhYmVsLmh0bWxGb3IgPSB0aGlzLl9pbnB1dC5pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIG5vbi1uYXRpdmUgaW5wdXQgZWxlbWVudHMsIHRoYXQgZG8gbm90IHN1cHBvcnQgcmVmZXJlbmNlcyB2aWEgdGhlIGxhYmVsIGZvciBhdHRyaWJ1dGUsXG4gICAgICAvLyB3ZSB1c2UgYXJpYS1sYWJlbGxlZGJ5IG9uIHRoZSBpbnB1dCBlbGVtZW50IHRvIHJlZmVyZW5jZSB0aGUgbGFiZWwgZWxlbWVudCB2aWEgaWQuXG4gICAgICAvLyBUT0RPOiBNaWdyYXRlIHRvIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHMgd2hlbiBhdmFpbGFibGU6XG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hcmlhTGFiZWxsZWRCeUVsZW1lbnRzXG4gICAgICB0aGlzLl9sYWJlbC5pZCB8fD0gYHNiYi1mb3JtLWZpZWxkLWxhYmVsLSR7bmV4dElkKyt9YDtcbiAgICAgIGNvbnN0IGxhYmVsbGVkYnkgPVxuICAgICAgICB0aGlzLl9pbnB1dFxuICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpXG4gICAgICAgICAgPy5zcGxpdCgnICcpXG4gICAgICAgICAgLmZpbHRlcigobCkgPT4gISFsICYmIGwgIT09IHRoaXMuX2xhYmVsIS5pZCkgPz8gW107XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIFsuLi5sYWJlbGxlZGJ5LCB0aGlzLl9sYWJlbC5pZF0uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0lucHV0RWxlbWVudChpbnB1dDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBuYXRpdmVJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKGlucHV0LmxvY2FsTmFtZSkgfHxcbiAgICAgICEhKGN1c3RvbUVsZW1lbnRzLmdldChpbnB1dC5sb2NhbE5hbWUpIGFzIHsgZm9ybUFzc29jaWF0ZWQ/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpXG4gICAgICAgID8uZm9ybUFzc29jaWF0ZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZElucHV0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgncmVhZG9ubHknLCB0aGlzLl9jb250cm9sPy5yZWFkT25seSA/PyB0aGlzLl9pbnB1dCEuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlZCcsIHRoaXMuX2NvbnRyb2w/LmRpc2FibGVkID8/IHRoaXMuX2lucHV0IS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgY29uc3QgeyBzaWduYWwgfSA9ICh0aGlzLl9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCkpO1xuXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uZm9ybSA/P1xuICAgICAgdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICBjb25zdCByZXNldEhhbmRsZXIgPSAoKTogdW5rbm93biA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSk7XG4gICAgZm9ybT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCByZXNldEhhbmRsZXIsIHsgc2lnbmFsIH0pO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBwYXRjaCB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIEhUTUxJbnB1dEVsZW1lbnQgaW4gb3JkZXJcbiAgLy8gdG8gYmUgYWJsZSB0byByZXNldCB0aGUgZmxvYXRpbmcgbGFiZWwgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICBwcml2YXRlIF9wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBwYXRjaGVkSW5wdXRzLmhhcyhpbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ2VtcHR5JyxcbiAgICAgIHRoaXMuX2NvbnRyb2w/LmVtcHR5ID8/XG4gICAgICAgICgoKHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSB8fFxuICAgICAgICAgICh0aGlzLl9pbnB1dD8uY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkIHwgdHlwZW9mIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUpXG4gICAgICAgICAgICA/LmZvcm1GaWVsZEFzc29jaWF0ZWQpID8/XG4gICAgICAgICAgZmFsc2UpICYmXG4gICAgICAgICAgdGhpcy5faXNJbnB1dEVtcHR5KCkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9pc0lucHV0RW1wdHkoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hpcEdyb3VwRWxlbTogU2JiQ2hpcEdyb3VwRWxlbWVudCB8IG51bGwgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jaGlwLWdyb3VwJyk7XG4gICAgaWYgKGNoaXBHcm91cEVsZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuX2lzSW5wdXRWYWx1ZUVtcHR5KCkgJiZcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoY2hpcEdyb3VwRWxlbS52YWx1ZSlcbiAgICAgICAgICA/IGNoaXBHcm91cEVsZW0udmFsdWUubGVuZ3RoID09PSAwXG4gICAgICAgICAgOiAhY2hpcEdyb3VwRWxlbS5xdWVyeVNlbGVjdG9yKCdzYmItY2hpcCcpKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fZmxvYXRpbmdMYWJlbFN1cHBvcnRlZElucHV0VHlwZXMuaW5jbHVkZXModGhpcy5faW5wdXQudHlwZSkgJiZcbiAgICAgICAgdGhpcy5faXNJbnB1dFZhbHVlRW1wdHkoKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dC5zZWxlY3RlZE9wdGlvbnM/Lml0ZW0oMCk/LmxhYmVsPy50cmltKCkgPT09ICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2lucHV0IGFzIFNiYlNlbGVjdEVsZW1lbnQpLmdldERpc3BsYXlWYWx1ZT8uKCk/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgICByZXR1cm4gWycnLCB1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbHVlKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gc2V0IHRoZSBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIHNsb3R0ZWQgaW5wdXQgcmVmZXJlbmNpbmcgYXZhaWxhYmxlIDxzYmItZXJyb3I+IGluc3RhbmNlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdEVycm9yQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yRWxlbWVudHMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTbG90RWxlbWVudCkuYXNzaWduZWRFbGVtZW50cygpO1xuICAgIGlmICh0aGlzLl9pbnB1dCAmJiB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyA9IHJlbW92ZUFyaWFFbGVtZW50cyhcbiAgICAgICAgdGhpcy5faW5wdXQuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMsXG4gICAgICAgIC4uLih0aGlzLl9lcnJvckVsZW1lbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IGVycm9yRWxlbWVudHM7XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLl9lcnJvckVsZW1lbnRzKSB7XG4gICAgICAvLyBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgY29udGFpbmVyIHdpdGggYW4gYXJpYS1saXZlIHJlZ2lvbiBhcyBleHBlY3RlZCwgd2UgaGFkIHRvIGNoYW5nZVxuICAgICAgLy8gc2V0dGluZyBpdCBmb3IgZXZlcnkgc2xvdHRlZCBlbGVtZW50IHRvIHByb3Blcmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGFuZCBzY3JlZW4gcmVhZGVyIGNvbWJpbmF0aW9ucy5cbiAgICAgIGVsLnJvbGUgfHw9ICdzdGF0dXMnO1xuICAgIH1cblxuICAgIHRoaXMuX2Fzc2lnbkVycm9yTWVzc2FnZUVsZW1lbnRzKCk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnaGFzLWVycm9yJywgISF0aGlzLl9lcnJvckVsZW1lbnRzLmxlbmd0aCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25FcnJvck1lc3NhZ2VFbGVtZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0LmFyaWFEZXNjcmliZWRCeUVsZW1lbnRzID0gYXBwZW5kQXJpYUVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9pbnB1dC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyxcbiAgICAgICAgLi4udGhpcy5fZXJyb3JFbGVtZW50cyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hbnVhbGx5IHJlc2V0IHRoZSBmb3JtIGZpZWxkLiBDdXJyZW50bHksIHRoaXMgb25seSByZXNldHMgdGhlIGZsb2F0aW5nIGxhYmVsLiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICAvKiogTWFudWFsbHkgY2xlYXJzIHRoZSBpbnB1dCB2YWx1ZS4gSXQgb25seSB3b3JrcyBmb3IgaW5wdXRzLCBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgIT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKFxuICAgICAgJ3NiYi1lcnJvcixzYmItbWluaS1idXR0b24sc2JiLW1pbmktYnV0dG9uLWxpbmssc2JiLWZvcm0tZmllbGQtY2xlYXIsc2JiLWRhdGVwaWNrZXItbmV4dC1kYXksc2JiLWRhdGVwaWNrZXItcHJldmlvdXMtZGF5LHNiYi1kYXRlcGlja2VyLXRvZ2dsZSxzYmItc2VsZWN0LHNiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1jaGlwLWdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCduZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNTaXplKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uPFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IHwgU2JiU2VsZWN0RWxlbWVudD4oXG4gICAgICAnc2JiLWF1dG9jb21wbGV0ZSxzYmItYXV0b2NvbXBsZXRlLWdyaWQsc2JiLXNlbGVjdCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC5zaXplID0gdGhpcy5zaXplID09PSAncycgPyAncycgOiAnbScpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19zcGFjZS13cmFwcGVyXCI+XG4gICAgICAgICR7LyogUXVlcmllZCBieSBpZCBmcm9tIHRoZSBhdXRvY29tcGxldGUvc2VsZWN0IHRvIGJlIHVzZWQgYXMgdGhlIGFuY2hvciBlbGVtZW50ICovICcnfVxuICAgICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuX2hhbmRsZVdyYXBwZXJDbGlja30gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fd3JhcHBlclwiIGlkPVwib3ZlcmxheS1hbmNob3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwicHJlZml4XCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zeW5jTmVnYXRpdmV9Pjwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2lucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtc3BhY2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwibGFiZWxcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdExhYmVsQ2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgJHt0aGlzLm9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiAke2kxOG5PcHRpb25hbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dFwiPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdElucHV0Q2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICR7dGhpcy5oYXNVcGRhdGVkICYmIFsnc2VsZWN0JywgJ3NiYi1zZWxlY3QnXS5pbmNsdWRlcyh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgPyBodG1sYDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtZG93bi1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19zZWxlY3QtaW5wdXQtaWNvblwiXG4gICAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInN1ZmZpeFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fc3luY05lZ2F0aXZlfT48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fZXJyb3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwiZXJyb3JcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdEVycm9yQ2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWZvcm0tZmllbGQnOiBTYmJGb3JtRmllbGRFbGVtZW50O1xuICB9XG5cbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50RXZlbnRNYXAge1xuICAgIGZvcm1maWVsZGNvbnRyb2w6IFNiYkZvcm1GaWVsZENvbnRyb2xFdmVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FDZ0NBLElBQUksU0FBUztBQUViLElBQU0sZ0NBQWdCLElBQUksU0FBK0M7QUFDekUsSUFBTSxzQkFBc0I7Q0FBQztDQUFTO0NBQVk7Q0FBUztBQW9CM0QsSUFBYSwyQkFBYixjQUE4QyxNQUFLO0NBR2pELElBQVcsVUFBTztBQUNoQixTQUFPLEtBQUs7O0NBR2QsWUFBbUIsU0FBMEM7QUFDM0QsUUFBTSxtQkFBbUI7QUFDekIsT0FBSyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7SUFnQlAsNkJBQW1CO21CQUFTLGlCQUFpQixXQUFX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