@sbb-esta/lyne-elements 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) hide show
  1. package/accordion/accordion.d.ts +0 -1
  2. package/action-group/action-group.d.ts +0 -1
  3. package/alert/alert/alert.d.ts +0 -1
  4. package/alert/alert-group/alert-group.d.ts +0 -1
  5. package/alert/alert.js +1 -1
  6. package/autocomplete/autocomplete-base-element.d.ts +0 -1
  7. package/autocomplete/autocomplete.d.ts +0 -1
  8. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  9. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  10. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  11. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  12. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  13. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  14. package/autocomplete.js +1 -1
  15. package/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  16. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  17. package/breadcrumb/breadcrumb-group.js +2 -2
  18. package/breadcrumb/breadcrumb.js +11 -11
  19. package/button/button/button.d.ts +0 -1
  20. package/button/button-link/button-link.d.ts +0 -1
  21. package/button/button-static/button-static.d.ts +0 -1
  22. package/button/common/button-common.d.ts +0 -1
  23. package/button/mini-button/mini-button-base-element.d.ts +0 -1
  24. package/button/mini-button/mini-button.d.ts +0 -1
  25. package/button/mini-button-group/index.d.ts +2 -0
  26. package/button/mini-button-group/index.d.ts.map +1 -0
  27. package/button/mini-button-group/mini-button-group.d.ts +28 -0
  28. package/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  29. package/button/mini-button-group.d.ts +2 -0
  30. package/button/mini-button-group.d.ts.map +1 -0
  31. package/button/mini-button-group.js +47 -0
  32. package/button/secondary-button/secondary-button.d.ts +0 -1
  33. package/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  34. package/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  35. package/button/tertiary-button/tertiary-button.d.ts +0 -1
  36. package/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  37. package/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  38. package/button/transparent-button/transparent-button.d.ts +0 -1
  39. package/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  40. package/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  41. package/button.d.ts +1 -0
  42. package/button.d.ts.map +1 -1
  43. package/button.js +1 -0
  44. package/calendar/calendar.d.ts +0 -1
  45. package/calendar.js +1 -1
  46. package/card/card/card.d.ts +0 -1
  47. package/card/card-badge/card-badge.d.ts +0 -1
  48. package/card/card-button/card-button.d.ts +0 -1
  49. package/card/card-link/card-link.d.ts +0 -1
  50. package/card/card.js +1 -1
  51. package/card/common/card-action-common.d.ts +0 -1
  52. package/checkbox/checkbox/checkbox.d.ts +0 -1
  53. package/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  54. package/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  55. package/checkbox/common/checkbox-common.d.ts +0 -1
  56. package/chip/chip.d.ts +0 -1
  57. package/chip.js +1 -1
  58. package/clock/clock.d.ts +0 -1
  59. package/clock/clock.d.ts.map +1 -1
  60. package/container/container/container.d.ts +1 -1
  61. package/container/container/container.d.ts.map +1 -1
  62. package/container/container.js +21 -16
  63. package/container/sticky-bar/sticky-bar.d.ts +0 -1
  64. package/container/sticky-bar.js +5 -5
  65. package/core/a11y/focus-visible-within-controller.d.ts +0 -1
  66. package/core/base-elements/action-base-element.d.ts +0 -1
  67. package/core/base-elements/button-base-element.d.ts +0 -1
  68. package/core/base-elements/link-base-element.d.ts +0 -1
  69. package/core/base-elements/open-close-base-element.d.ts +0 -1
  70. package/core/config/config.d.ts +0 -1
  71. package/core/controllers/connected-abort-controller.d.ts +0 -1
  72. package/core/controllers/language-controller.d.ts +0 -1
  73. package/core/controllers/slot-state-controller.d.ts +0 -1
  74. package/core/datetime/native-date-adapter.d.ts +0 -1
  75. package/core/decorators/host-attributes.d.ts +0 -1
  76. package/core/decorators/slot-state.d.ts +0 -1
  77. package/core/dom/ssr.d.ts +0 -1
  78. package/core/eventing/form-element-handlers.d.ts +0 -1
  79. package/core/i18n/i18n.d.ts +0 -1
  80. package/core/i18n.js +1 -1
  81. package/core/images.d.ts.map +1 -1
  82. package/core/mixins/disabled-mixin.d.ts +0 -1
  83. package/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  84. package/core/mixins/form-associated-mixin.d.ts +0 -1
  85. package/core/mixins/hydration-mixin.d.ts +0 -1
  86. package/core/mixins/named-slot-list-mixin.d.ts +7 -2
  87. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  88. package/core/mixins/negative-mixin.d.ts +0 -1
  89. package/core/mixins/panel-mixin.d.ts +0 -1
  90. package/core/mixins/required-mixin.d.ts +0 -1
  91. package/core/mixins/update-scheduler-mixin.d.ts +0 -1
  92. package/core/mixins.js +100 -88
  93. package/core/overlay/overlay.d.ts +0 -1
  94. package/core/styles/core.scss +21 -19
  95. package/core/styles/mixins/link.scss +9 -6
  96. package/core/styles/mixins/lists.scss +5 -5
  97. package/core/styles/mixins/pearl-chain-bullet.scss +14 -9
  98. package/core/styles/mixins/table.scss +19 -17
  99. package/core/testing/mocha-extensions.d.ts +0 -1
  100. package/core/testing/wait-for-image-ready.d.ts +0 -1
  101. package/core/testing/wait-for-render.d.ts +0 -1
  102. package/core.css +10 -8
  103. package/custom-elements.json +2893 -691
  104. package/datepicker/common/datepicker-button.d.ts +0 -1
  105. package/datepicker/datepicker/datepicker.d.ts +0 -1
  106. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  107. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  108. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -1
  109. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  110. package/development/accordion/accordion.d.ts +0 -1
  111. package/development/action-group/action-group.d.ts +0 -1
  112. package/development/alert/alert/alert.d.ts +0 -1
  113. package/development/alert/alert-group/alert-group.d.ts +0 -1
  114. package/development/alert/alert.js +1 -1
  115. package/development/autocomplete/autocomplete-base-element.d.ts +0 -1
  116. package/development/autocomplete/autocomplete.d.ts +0 -1
  117. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  118. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  119. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  120. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  121. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  122. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  123. package/development/autocomplete.js +7 -5
  124. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  125. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  126. package/development/breadcrumb/breadcrumb-group.js +4 -4
  127. package/development/breadcrumb/breadcrumb.js +8 -6
  128. package/development/button/button/button.d.ts +0 -1
  129. package/development/button/button-link/button-link.d.ts +0 -1
  130. package/development/button/button-static/button-static.d.ts +0 -1
  131. package/development/button/common/button-common.d.ts +0 -1
  132. package/development/button/mini-button/mini-button-base-element.d.ts +0 -1
  133. package/development/button/mini-button/mini-button.d.ts +0 -1
  134. package/development/button/mini-button-group/index.d.ts +2 -0
  135. package/development/button/mini-button-group/index.d.ts.map +1 -0
  136. package/development/button/mini-button-group/mini-button-group.d.ts +28 -0
  137. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  138. package/development/button/mini-button-group.d.ts +2 -0
  139. package/development/button/mini-button-group.d.ts.map +1 -0
  140. package/development/button/mini-button-group.js +142 -0
  141. package/development/button/secondary-button/secondary-button.d.ts +0 -1
  142. package/development/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  143. package/development/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  144. package/development/button/tertiary-button/tertiary-button.d.ts +0 -1
  145. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  146. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  147. package/development/button/transparent-button/transparent-button.d.ts +0 -1
  148. package/development/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  149. package/development/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  150. package/development/button.d.ts +1 -0
  151. package/development/button.d.ts.map +1 -1
  152. package/development/button.js +2 -1
  153. package/development/calendar/calendar.d.ts +0 -1
  154. package/development/calendar.js +3 -3
  155. package/development/card/card/card.d.ts +0 -1
  156. package/development/card/card-badge/card-badge.d.ts +0 -1
  157. package/development/card/card-button/card-button.d.ts +0 -1
  158. package/development/card/card-link/card-link.d.ts +0 -1
  159. package/development/card/card.js +3 -3
  160. package/development/card/common/card-action-common.d.ts +0 -1
  161. package/development/checkbox/checkbox/checkbox.d.ts +0 -1
  162. package/development/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  163. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  164. package/development/checkbox/common/checkbox-common.d.ts +0 -1
  165. package/development/chip/chip.d.ts +0 -1
  166. package/development/chip.js +4 -2
  167. package/development/clock/clock.d.ts +0 -1
  168. package/development/clock/clock.d.ts.map +1 -1
  169. package/development/clock.js +1 -1
  170. package/development/container/container/container.d.ts +1 -1
  171. package/development/container/container/container.d.ts.map +1 -1
  172. package/development/container/container.js +39 -3
  173. package/development/container/sticky-bar/sticky-bar.d.ts +0 -1
  174. package/development/container/sticky-bar.js +1 -4
  175. package/development/core/a11y/focus-visible-within-controller.d.ts +0 -1
  176. package/development/core/base-elements/action-base-element.d.ts +0 -1
  177. package/development/core/base-elements/button-base-element.d.ts +0 -1
  178. package/development/core/base-elements/link-base-element.d.ts +0 -1
  179. package/development/core/base-elements/open-close-base-element.d.ts +0 -1
  180. package/development/core/config/config.d.ts +0 -1
  181. package/development/core/controllers/connected-abort-controller.d.ts +0 -1
  182. package/development/core/controllers/language-controller.d.ts +0 -1
  183. package/development/core/controllers/slot-state-controller.d.ts +0 -1
  184. package/development/core/datetime/native-date-adapter.d.ts +0 -1
  185. package/development/core/decorators/host-attributes.d.ts +0 -1
  186. package/development/core/decorators/slot-state.d.ts +0 -1
  187. package/development/core/dom/ssr.d.ts +0 -1
  188. package/development/core/eventing/form-element-handlers.d.ts +0 -1
  189. package/development/core/i18n/i18n.d.ts +0 -1
  190. package/development/core/i18n.js +2 -2
  191. package/development/core/images.d.ts.map +1 -1
  192. package/development/core/mixins/disabled-mixin.d.ts +0 -1
  193. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  194. package/development/core/mixins/form-associated-mixin.d.ts +0 -1
  195. package/development/core/mixins/hydration-mixin.d.ts +0 -1
  196. package/development/core/mixins/named-slot-list-mixin.d.ts +7 -2
  197. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  198. package/development/core/mixins/negative-mixin.d.ts +0 -1
  199. package/development/core/mixins/panel-mixin.d.ts +0 -1
  200. package/development/core/mixins/required-mixin.d.ts +0 -1
  201. package/development/core/mixins/update-scheduler-mixin.d.ts +0 -1
  202. package/development/core/mixins.js +24 -12
  203. package/development/core/overlay/overlay.d.ts +0 -1
  204. package/development/core/testing/mocha-extensions.d.ts +0 -1
  205. package/development/core/testing/wait-for-image-ready.d.ts +0 -1
  206. package/development/core/testing/wait-for-render.d.ts +0 -1
  207. package/development/datepicker/common/datepicker-button.d.ts +0 -1
  208. package/development/datepicker/datepicker/datepicker.d.ts +0 -1
  209. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  210. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  211. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -1
  212. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  213. package/development/datepicker/datepicker-toggle.js +4 -2
  214. package/development/dialog/dialog/dialog.d.ts +0 -1
  215. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  216. package/development/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  217. package/development/dialog/dialog-content/dialog-content.d.ts +0 -1
  218. package/development/dialog/dialog-content.js +8 -6
  219. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  220. package/development/dialog/dialog.js +7 -3
  221. package/development/divider/divider.d.ts +0 -1
  222. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  223. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  224. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  225. package/development/expansion-panel/expansion-panel-header.js +1 -1
  226. package/development/file-selector/file-selector.d.ts +0 -1
  227. package/development/flip-card/flip-card/flip-card.d.ts +22 -7
  228. package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
  229. package/development/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  230. package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  231. package/development/flip-card/flip-card-summary.js +3 -1
  232. package/development/flip-card/flip-card.js +93 -24
  233. package/development/footer/footer.d.ts +0 -1
  234. package/development/footer.js +1 -1
  235. package/development/form-error/form-error.d.ts +0 -1
  236. package/development/form-error.js +4 -4
  237. package/development/form-field/form-field/form-field.d.ts +1 -2
  238. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  239. package/development/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  240. package/development/form-field/form-field.js +72 -29
  241. package/development/header/common/header-action-common.d.ts +0 -1
  242. package/development/header/common.js +2 -2
  243. package/development/header/header/header.d.ts +0 -1
  244. package/development/header/header-button/header-button.d.ts +0 -1
  245. package/development/header/header-link/header-link.d.ts +0 -1
  246. package/development/header/header.js +2 -2
  247. package/development/icon/icon-base.d.ts +0 -1
  248. package/development/icon/icon-name-mixin.d.ts +0 -1
  249. package/development/icon/icon.d.ts +0 -1
  250. package/development/image/image.d.ts +0 -1
  251. package/development/image.js +2 -2
  252. package/development/journey-header/journey-header.d.ts +0 -1
  253. package/development/lead-container/lead-container.d.ts +0 -1
  254. package/development/lead-container.js +1 -1
  255. package/development/link/block-link/block-link.d.ts +0 -1
  256. package/development/link/block-link-button/block-link-button.d.ts +0 -1
  257. package/development/link/block-link-static/block-link-static.d.ts +0 -1
  258. package/development/link/common/block-link-common.d.ts +0 -1
  259. package/development/link/common/inline-link-common.d.ts +0 -1
  260. package/development/link/common/link-common.d.ts +0 -1
  261. package/development/link/common.js +9 -7
  262. package/development/link/link/link.d.ts +0 -1
  263. package/development/link/link-button/link-button.d.ts +0 -1
  264. package/development/link/link-static/link-static.d.ts +0 -1
  265. package/development/link-list/common/link-list-base.d.ts +27 -0
  266. package/development/link-list/common/link-list-base.d.ts.map +1 -0
  267. package/development/link-list/common.d.ts +2 -0
  268. package/development/link-list/common.d.ts.map +1 -0
  269. package/development/link-list/common.js +113 -0
  270. package/development/link-list/link-list/link-list.d.ts +22 -0
  271. package/development/link-list/link-list/link-list.d.ts.map +1 -0
  272. package/development/link-list/link-list-anchor/index.d.ts +2 -0
  273. package/development/link-list/link-list-anchor/index.d.ts.map +1 -0
  274. package/development/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  275. package/development/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  276. package/development/link-list/link-list-anchor.d.ts +2 -0
  277. package/development/link-list/link-list-anchor.d.ts.map +1 -0
  278. package/development/link-list/link-list-anchor.js +91 -0
  279. package/development/link-list/link-list.d.ts +1 -38
  280. package/development/link-list/link-list.d.ts.map +1 -1
  281. package/development/link-list/link-list.js +194 -0
  282. package/development/link-list.d.ts +2 -0
  283. package/development/link-list.d.ts.map +1 -1
  284. package/development/link-list.js +4 -260
  285. package/development/loading-indicator/loading-indicator.d.ts +0 -1
  286. package/development/logo/logo.d.ts +0 -1
  287. package/development/logo.js +2 -2
  288. package/development/map-container/map-container.d.ts +0 -1
  289. package/development/map-container.js +13 -11
  290. package/development/menu/common/menu-action-common.d.ts +0 -1
  291. package/development/menu/menu/menu.d.ts +0 -1
  292. package/development/menu/menu-button/menu-button.d.ts +0 -1
  293. package/development/menu/menu-link/menu-link.d.ts +0 -1
  294. package/development/menu/menu.js +8 -6
  295. package/development/message/message.d.ts +0 -1
  296. package/development/navigation/common/navigation-action-common.d.ts +0 -1
  297. package/development/navigation/navigation/navigation.d.ts +0 -1
  298. package/development/navigation/navigation-button/navigation-button.d.ts +0 -1
  299. package/development/navigation/navigation-link/navigation-link.d.ts +0 -1
  300. package/development/navigation/navigation-list/navigation-list.d.ts +0 -1
  301. package/development/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  302. package/development/navigation/navigation-section/navigation-section.d.ts +0 -1
  303. package/development/navigation/navigation-section.js +7 -5
  304. package/development/navigation/navigation.js +13 -11
  305. package/development/notification/notification.d.ts +0 -1
  306. package/development/option/optgroup/optgroup-base-element.d.ts +0 -1
  307. package/development/option/optgroup/optgroup.d.ts +0 -1
  308. package/development/option/option/option-base-element.d.ts +0 -1
  309. package/development/option/option/option.d.ts +0 -1
  310. package/development/overlay/overlay-base-element.d.ts +0 -1
  311. package/development/overlay/overlay.d.ts +0 -1
  312. package/development/overlay/overlay.d.ts.map +1 -1
  313. package/development/overlay.js +9 -5
  314. package/development/popover/popover/popover.d.ts +0 -1
  315. package/development/popover/popover/popover.d.ts.map +1 -1
  316. package/development/popover/popover-trigger/popover-trigger.d.ts +0 -1
  317. package/development/popover/popover-trigger.js +3 -3
  318. package/development/popover/popover.js +5 -3
  319. package/development/radio-button/common/radio-button-common.d.ts +0 -1
  320. package/development/radio-button/common.js +6 -6
  321. package/development/radio-button/radio-button/radio-button.d.ts +0 -1
  322. package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  323. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  324. package/development/screen-reader-only/screen-reader-only.d.ts +0 -1
  325. package/development/select/select.d.ts +0 -1
  326. package/development/select.js +7 -5
  327. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  328. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  329. package/development/selection-expansion-panel.js +6 -2
  330. package/development/signet/signet.d.ts +0 -1
  331. package/development/signet.js +1 -1
  332. package/development/skiplink-list/skiplink-list.d.ts +0 -1
  333. package/development/slider/slider.d.ts +0 -1
  334. package/development/slider.js +4 -4
  335. package/development/status/status.d.ts +0 -1
  336. package/development/stepper/step/step.d.ts +0 -1
  337. package/development/stepper/step-label/step-label.d.ts +0 -1
  338. package/development/stepper/stepper/stepper.d.ts +0 -1
  339. package/development/table/table-wrapper/table-wrapper.d.ts +0 -1
  340. package/development/tabs/tab/tab.d.ts +0 -1
  341. package/development/tabs/tab-group/tab-group.d.ts +0 -1
  342. package/development/tabs/tab-label/tab-label.d.ts +0 -1
  343. package/development/tabs/tab-label.js +10 -10
  344. package/development/tag/tag/tag.d.ts +0 -1
  345. package/development/tag/tag-group/tag-group.d.ts +0 -1
  346. package/development/tag/tag.js +3 -3
  347. package/development/teaser/teaser.d.ts +0 -1
  348. package/development/teaser-hero/teaser-hero.d.ts +27 -0
  349. package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
  350. package/development/teaser-hero.d.ts +2 -0
  351. package/development/teaser-hero.d.ts.map +1 -0
  352. package/development/teaser-hero.js +207 -0
  353. package/development/teaser-product/common/teaser-product-common.d.ts +7 -0
  354. package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  355. package/development/teaser-product/common.d.ts +2 -0
  356. package/development/teaser-product/common.d.ts.map +1 -0
  357. package/development/teaser-product/common.js +219 -0
  358. package/development/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  359. package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  360. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  361. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  362. package/development/teaser-product/teaser-product-static.d.ts +2 -0
  363. package/development/teaser-product/teaser-product-static.d.ts.map +1 -0
  364. package/development/teaser-product/teaser-product-static.js +25 -0
  365. package/development/teaser-product/teaser-product.d.ts +2 -0
  366. package/development/teaser-product/teaser-product.d.ts.map +1 -0
  367. package/development/teaser-product/teaser-product.js +80 -0
  368. package/development/teaser-product.d.ts +4 -0
  369. package/development/teaser-product.d.ts.map +1 -0
  370. package/development/teaser-product.js +4 -0
  371. package/development/time-input/time-input.d.ts +0 -1
  372. package/development/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  373. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  374. package/development/timetable-occupancy.js +1 -1
  375. package/development/title/title-base.d.ts +0 -1
  376. package/development/title/title.d.ts +0 -1
  377. package/development/toast/toast.d.ts +0 -1
  378. package/development/toggle/toggle/toggle.d.ts +0 -1
  379. package/development/toggle/toggle-option/toggle-option.d.ts +0 -1
  380. package/development/toggle/toggle.js +1 -1
  381. package/development/toggle-check/toggle-check.d.ts +0 -1
  382. package/development/train/train/train.d.ts +0 -1
  383. package/development/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  384. package/development/train/train-blocked-passage.js +1 -1
  385. package/development/train/train-formation/train-formation.d.ts +0 -1
  386. package/development/train/train-formation.js +9 -7
  387. package/development/train/train-wagon/train-wagon.d.ts +0 -1
  388. package/development/train/train-wagon.js +1 -1
  389. package/development/train/train.js +1 -1
  390. package/development/visual-checkbox/visual-checkbox.d.ts +0 -1
  391. package/development/visual-checkbox.js +1 -1
  392. package/dialog/dialog/dialog.d.ts +0 -1
  393. package/dialog/dialog/dialog.d.ts.map +1 -1
  394. package/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  395. package/dialog/dialog-content/dialog-content.d.ts +0 -1
  396. package/dialog/dialog-content.js +1 -1
  397. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  398. package/dialog/dialog.js +3 -3
  399. package/divider/divider.d.ts +0 -1
  400. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  401. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  402. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  403. package/expansion-panel/expansion-panel-header.js +1 -1
  404. package/file-selector/file-selector.d.ts +0 -1
  405. package/flip-card/flip-card/flip-card.d.ts +22 -7
  406. package/flip-card/flip-card/flip-card.d.ts.map +1 -1
  407. package/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  408. package/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  409. package/flip-card/flip-card-summary.js +8 -8
  410. package/flip-card/flip-card.js +63 -32
  411. package/footer/footer.d.ts +0 -1
  412. package/footer.js +1 -1
  413. package/form-error/form-error.d.ts +0 -1
  414. package/form-error.js +1 -1
  415. package/form-field/form-field/form-field.d.ts +1 -2
  416. package/form-field/form-field/form-field.d.ts.map +1 -1
  417. package/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  418. package/form-field/form-field.js +22 -22
  419. package/header/common/header-action-common.d.ts +0 -1
  420. package/header/common.js +1 -1
  421. package/header/header/header.d.ts +0 -1
  422. package/header/header-button/header-button.d.ts +0 -1
  423. package/header/header-link/header-link.d.ts +0 -1
  424. package/header/header.js +1 -1
  425. package/icon/icon-base.d.ts +0 -1
  426. package/icon/icon-name-mixin.d.ts +0 -1
  427. package/icon/icon.d.ts +0 -1
  428. package/image/image.d.ts +0 -1
  429. package/image.js +25 -25
  430. package/index.d.ts +11 -1
  431. package/index.js +11 -1
  432. package/journey-header/journey-header.d.ts +0 -1
  433. package/lead-container/lead-container.d.ts +0 -1
  434. package/lead-container.js +1 -1
  435. package/link/block-link/block-link.d.ts +0 -1
  436. package/link/block-link-button/block-link-button.d.ts +0 -1
  437. package/link/block-link-static/block-link-static.d.ts +0 -1
  438. package/link/common/block-link-common.d.ts +0 -1
  439. package/link/common/inline-link-common.d.ts +0 -1
  440. package/link/common/link-common.d.ts +0 -1
  441. package/link/common.js +6 -6
  442. package/link/link/link.d.ts +0 -1
  443. package/link/link-button/link-button.d.ts +0 -1
  444. package/link/link-static/link-static.d.ts +0 -1
  445. package/link-list/common/link-list-base.d.ts +27 -0
  446. package/link-list/common/link-list-base.d.ts.map +1 -0
  447. package/link-list/common.d.ts +2 -0
  448. package/link-list/common.d.ts.map +1 -0
  449. package/link-list/common.js +59 -0
  450. package/link-list/link-list/link-list.d.ts +22 -0
  451. package/link-list/link-list/link-list.d.ts.map +1 -0
  452. package/link-list/link-list-anchor/index.d.ts +2 -0
  453. package/link-list/link-list-anchor/index.d.ts.map +1 -0
  454. package/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  455. package/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  456. package/link-list/link-list-anchor.d.ts +2 -0
  457. package/link-list/link-list-anchor.d.ts.map +1 -0
  458. package/link-list/link-list-anchor.js +18 -0
  459. package/link-list/link-list.d.ts +1 -38
  460. package/link-list/link-list.d.ts.map +1 -1
  461. package/link-list/link-list.js +27 -0
  462. package/link-list.d.ts +2 -0
  463. package/link-list.d.ts.map +1 -1
  464. package/link-list.js +3 -66
  465. package/loading-indicator/loading-indicator.d.ts +0 -1
  466. package/logo/logo.d.ts +0 -1
  467. package/logo.js +1 -1
  468. package/map-container/map-container.d.ts +0 -1
  469. package/map-container.js +1 -1
  470. package/menu/common/menu-action-common.d.ts +0 -1
  471. package/menu/menu/menu.d.ts +0 -1
  472. package/menu/menu-button/menu-button.d.ts +0 -1
  473. package/menu/menu-link/menu-link.d.ts +0 -1
  474. package/menu/menu.js +1 -1
  475. package/message/message.d.ts +0 -1
  476. package/navigation/common/navigation-action-common.d.ts +0 -1
  477. package/navigation/navigation/navigation.d.ts +0 -1
  478. package/navigation/navigation-button/navigation-button.d.ts +0 -1
  479. package/navigation/navigation-link/navigation-link.d.ts +0 -1
  480. package/navigation/navigation-list/navigation-list.d.ts +0 -1
  481. package/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  482. package/navigation/navigation-section/navigation-section.d.ts +0 -1
  483. package/navigation/navigation-section.js +1 -1
  484. package/navigation/navigation.js +1 -1
  485. package/notification/notification.d.ts +0 -1
  486. package/option/optgroup/optgroup-base-element.d.ts +0 -1
  487. package/option/optgroup/optgroup.d.ts +0 -1
  488. package/option/option/option-base-element.d.ts +0 -1
  489. package/option/option/option.d.ts +0 -1
  490. package/overlay/overlay-base-element.d.ts +0 -1
  491. package/overlay/overlay.d.ts +0 -1
  492. package/overlay/overlay.d.ts.map +1 -1
  493. package/overlay.js +2 -2
  494. package/package.json +46 -1
  495. package/popover/popover/popover.d.ts +0 -1
  496. package/popover/popover/popover.d.ts.map +1 -1
  497. package/popover/popover-trigger/popover-trigger.d.ts +0 -1
  498. package/popover/popover-trigger.js +1 -1
  499. package/popover/popover.js +1 -1
  500. package/radio-button/common/radio-button-common.d.ts +0 -1
  501. package/radio-button/common.js +1 -1
  502. package/radio-button/radio-button/radio-button.d.ts +0 -1
  503. package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  504. package/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  505. package/screen-reader-only/screen-reader-only.d.ts +0 -1
  506. package/select/select.d.ts +0 -1
  507. package/select.js +1 -1
  508. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  509. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  510. package/signet/signet.d.ts +0 -1
  511. package/signet.js +1 -1
  512. package/skiplink-list/skiplink-list.d.ts +0 -1
  513. package/slider/slider.d.ts +0 -1
  514. package/slider.js +1 -1
  515. package/standard-theme.css +19 -13
  516. package/status/status.d.ts +0 -1
  517. package/stepper/step/step.d.ts +0 -1
  518. package/stepper/step-label/step-label.d.ts +0 -1
  519. package/stepper/stepper/stepper.d.ts +0 -1
  520. package/table/table-wrapper/table-wrapper.d.ts +0 -1
  521. package/tabs/tab/tab.d.ts +0 -1
  522. package/tabs/tab-group/tab-group.d.ts +0 -1
  523. package/tabs/tab-label/tab-label.d.ts +0 -1
  524. package/tabs/tab-label.js +1 -1
  525. package/tag/tag/tag.d.ts +0 -1
  526. package/tag/tag-group/tag-group.d.ts +0 -1
  527. package/tag/tag.js +1 -1
  528. package/teaser/teaser.d.ts +0 -1
  529. package/teaser-hero/teaser-hero.d.ts +27 -0
  530. package/teaser-hero/teaser-hero.d.ts.map +1 -0
  531. package/teaser-hero.d.ts +2 -0
  532. package/teaser-hero.d.ts.map +1 -0
  533. package/teaser-hero.js +58 -0
  534. package/teaser-product/common/teaser-product-common.d.ts +7 -0
  535. package/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  536. package/teaser-product/common.d.ts +2 -0
  537. package/teaser-product/common.d.ts.map +1 -0
  538. package/teaser-product/common.js +38 -0
  539. package/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  540. package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  541. package/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  542. package/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  543. package/teaser-product/teaser-product-static.d.ts +2 -0
  544. package/teaser-product/teaser-product-static.d.ts.map +1 -0
  545. package/teaser-product/teaser-product-static.js +19 -0
  546. package/teaser-product/teaser-product.d.ts +2 -0
  547. package/teaser-product/teaser-product.d.ts.map +1 -0
  548. package/teaser-product/teaser-product.js +21 -0
  549. package/teaser-product.d.ts +4 -0
  550. package/teaser-product.d.ts.map +1 -0
  551. package/teaser-product.js +3 -0
  552. package/time-input/time-input.d.ts +0 -1
  553. package/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  554. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  555. package/timetable-occupancy.js +1 -1
  556. package/title/title-base.d.ts +0 -1
  557. package/title/title.d.ts +0 -1
  558. package/toast/toast.d.ts +0 -1
  559. package/toggle/toggle/toggle.d.ts +0 -1
  560. package/toggle/toggle-option/toggle-option.d.ts +0 -1
  561. package/toggle/toggle.js +1 -1
  562. package/toggle-check/toggle-check.d.ts +0 -1
  563. package/train/train/train.d.ts +0 -1
  564. package/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  565. package/train/train-blocked-passage.js +1 -1
  566. package/train/train-formation/train-formation.d.ts +0 -1
  567. package/train/train-formation.js +1 -1
  568. package/train/train-wagon/train-wagon.d.ts +0 -1
  569. package/train/train-wagon.js +1 -1
  570. package/train/train.js +1 -1
  571. package/visual-checkbox/visual-checkbox.d.ts +0 -1
  572. package/visual-checkbox.js +1 -1
@@ -31,9 +31,9 @@ const style = css`/**
31
31
  }
32
32
 
33
33
  :host {
34
- --sbb-popover-color: inherit;
35
- outline: none !important;
36
34
  display: inline-block;
35
+ outline: none !important;
36
+ --sbb-popover-color: inherit;
37
37
  }
38
38
  @media (forced-colors: active) {
39
39
  :host {
@@ -62,8 +62,8 @@ const style = css`/**
62
62
  }
63
63
 
64
64
  :host([disabled]) {
65
- --sbb-popover-color: var(--sbb-color-graphite);
66
65
  pointer-events: none;
66
+ --sbb-popover-color: var(--sbb-color-graphite);
67
67
  }
68
68
  @media (forced-colors: active) {
69
69
  :host([disabled]) {
@@ -122,8 +122,8 @@ const style = css`/**
122
122
  animation-timing-function: var(--sbb-popover-animation-easing);
123
123
  }
124
124
  .sbb-popover::after {
125
- box-shadow: var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color), var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color);
126
125
  z-index: -1;
126
+ box-shadow: var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color), var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color);
127
127
  }
128
128
  @media (forced-colors: active) {
129
129
  .sbb-popover::after {
@@ -386,7 +386,9 @@ let SbbPopoverElement = class extends SbbHydrationMixin(SbbOpenCloseBaseElement)
386
386
  this._triggerElement.addEventListener(
387
387
  "click",
388
388
  () => {
389
- this.state === "closed" && this.open();
389
+ if (this.state === "closed") {
390
+ this.open();
391
+ }
390
392
  },
391
393
  {
392
394
  signal: this._popoverController.signal
@@ -563,4 +565,4 @@ SbbPopoverElement = __decorateClass([
563
565
  export {
564
566
  SbbPopoverElement
565
567
  };
566
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2xvc2VQb3BvdmVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5cbmNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDE2O1xuY29uc3QgSE9SSVpPTlRBTF9PRkZTRVQgPSAzMjtcblxubGV0IG5leHRJZCA9IDA7XG5cbmNvbnN0IHBvcG92ZXJzUmVmID0gbmV3IFNldDxTYmJQb3BvdmVyRWxlbWVudD4oKTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdpdGhpbiBhIHBvcG92ZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBwb3BvdmVyLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZ1xuICogdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx7IGNsb3NlVGFyZ2V0OiBIVE1MRWxlbWVudCB9Pn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItcG9wb3Zlci16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3ZlcicpXG5leHBvcnQgY2xhc3MgU2JiUG9wb3ZlckVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHBvcG92ZXIgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgdHJpZ2dlcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9zZSBidXR0b24gc2hvdWxkIGJlIGhpZGRlbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZS1jbG9zZS1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBoaWRlQ2xvc2VCdXR0b24/OiBib29sZWFuID1cbiAgICBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdHJpZ2dlcmVkIG9uIGhvdmVyLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Zlci10cmlnZ2VyJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgaG92ZXJUcmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9wZW4gdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdvcGVuLWRlbGF5JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBvcGVuRGVsYXk/ID0gMDtcblxuICAvKiogQ2xvc2UgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjbG9zZS1kZWxheScsIHR5cGU6IE51bWJlciB9KSBwdWJsaWMgY2xvc2VEZWxheT8gPSAwO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGNsb3NlIGJ1dHRvbiBlbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KSBwdWJsaWMgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLndpbGxDbG9zZSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIC8vIFRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCByZWNlaXZlIGZvY3VzIGFmdGVyIGNsb3NpbmcgYmFzZWQgb24gd2hlcmUgaW4gdGhlIGJhY2tkcm9wIHRoZSB1c2VyIGNsaWNrcy5cbiAgcHJpdmF0ZSBfbmV4dEZvY3VzZWRFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3NraXBDbG9zZUZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcG9wb3ZlckNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5TdGF0ZUNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaG92ZXJUcmlnZ2VyID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5UaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2Nsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyIG9uIHRyaWdnZXIgY2xpY2suICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NpbmcnKSB8fCAhdGhpcy5fb3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgb3RoZXIgcG9wb3ZlcnNcbiAgICBmb3IgKGNvbnN0IHBvcG92ZXIgb2YgQXJyYXkuZnJvbShwb3BvdmVyc1JlZikpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gcG9wb3Zlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnKSBhcyBTYmJPcGVuZWRDbG9zZWRTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSAmJiAoc3RhdGUgPT09ICdvcGVuZWQnIHx8IHN0YXRlID09PSAnb3BlbmluZycpKSB7XG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgcHVibGljIGNsb3NlKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRhcmdldCB9KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBwb3BvdmVyIG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbiAgICBvbGRWYWx1ZT86IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IGBzYmItcG9wb3Zlci0keysrbmV4dElkfWA7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHBvcG92ZXJzUmVmLmFkZCh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpKSB7XG4gICAgICB0aGlzLl9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcih0aGlzLnRyaWdnZXIsIGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgndHJpZ2dlcicpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdob3ZlclRyaWdnZXInKSkge1xuICAgICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHRoaXMuX2hvdmVyVHJpZ2dlcikge1xuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25PdmVybGF5TW91c2VFbnRlcigpKTtcbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uT3ZlcmxheU1vdXNlTGVhdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHBvcG92ZXJzUmVmLmRlbGV0ZSh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fY29uZmlndXJlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcblxuICAgIGlmICghdGhpcy50cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBmaW5kUmVmZXJlbmNlZEVsZW1lbnQodGhpcy50cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnZGlhbG9nJywgdGhpcy5pZCwgdGhpcy5zdGF0ZSk7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSB0cmlnZ2VyIGNhbiBiZSBob3ZlcmVkLiBTb21lIGRldmljZXMgbWlnaHQgaW50ZXJwcmV0IHRoZSBtZWRpYSBxdWVyeSAoaG92ZXI6IGhvdmVyKSBkaWZmZXJlbnRseSxcbiAgICAvLyBhbmQgbm90IHJlc3BlY3QgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBvbiB0aGUgY2xpY2suIFRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyBwcmVmZXJyZWQgdG8gaWRlbnRpZnlcbiAgICAvLyBhbGwgbm9uLXRvdWNoc2NyZWVuIGRldmljZXMuXG4gICAgdGhpcy5faG92ZXJUcmlnZ2VyID0gdGhpcy5ob3ZlclRyaWdnZXIgJiYgIXdpbmRvdy5tYXRjaE1lZGlhKCcocG9pbnRlcjogY29hcnNlKScpLm1hdGNoZXM7XG5cbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBpZiAodGhpcy5faG92ZXJUcmlnZ2VyKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5fb25UcmlnZ2VyTW91c2VFbnRlciwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fb25UcmlnZ2VyTW91c2VMZWF2ZSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAna2V5ZG93bicsXG4gICAgICAgIChldnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZ0LmNvZGUgPT09ICdTcGFjZScgfHwgZXZ0LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnICYmIHRoaXMub3BlbigpO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9wb3BvdmVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBwb3BvdmVyIG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2ssIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbG9zZSB0aGUgcG9wb3ZlciBvbiBjbGljayBvZiBhbnkgZWxlbWVudCB0aGF0IGhhcyB0aGUgJ3NiYi1wb3BvdmVyLWNsb3NlJyBhdHRyaWJ1dGUuXG4gIHByaXZhdGUgX2Nsb3NlT25TYmJQb3BvdmVyQ2xvc2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZUVsZW1lbnQgPSBjb21wb3NlZFBhdGhIYXNBdHRyaWJ1dGUoZXZlbnQsICdzYmItcG9wb3Zlci1jbG9zZScsIHRoaXMpO1xuXG4gICAgaWYgKGNsb3NlRWxlbWVudCAmJiAhY2xvc2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKGNsb3NlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIHBvcG92ZXIuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciA9IGlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIENsb3NlIHBvcG92ZXIgb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciAmJiAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCkpIHtcbiAgICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IGV2ZW50XG4gICAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgICAuZmlsdGVyKChlbCkgPT4gZWwgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAgIC5maW5kKChlbCkgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKElTX0ZPQ1VTQUJMRV9RVUVSWSkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uVHJpZ2dlck1vdXNlRW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5fb3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbigpLCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vblRyaWdnZXJNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUVudGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgcG9wb3ZlciBwb3NpdGlvbiAoeCwgeSkgdG8gJzAnIG9uY2UgdGhlIHBvcG92ZXIgaXMgY2xvc2VkIGFuZCB0aGUgdHJhbnNpdGlvbiBlbmRlZCB0byBwcmV2ZW50IHRoZVxuICAvLyB2aWV3cG9ydCBmcm9tIG92ZXJmbG93aW5nLiBBbmQgc2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgb25jZSB0aGUgcG9wb3ZlciBpcyBvcGVuLlxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uUG9wb3ZlckFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgICAgIHRoaXMuaW5lcnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2F0dGFjaFdpbmRvd0V2ZW50cygpO1xuICAgICAgdGhpcy5fc2V0UG9wb3ZlckZvY3VzKCk7XG4gICAgICB0aGlzLl9mb2N1c0hhbmRsZXIudHJhcCh0aGlzLCB7XG4gICAgICAgIHBvc3RGaWx0ZXI6IChlbCkgPT4gZWwgIT09IHRoaXMuX292ZXJsYXksXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICB0aGlzLl9vdmVybGF5Py5maXJzdEVsZW1lbnRDaGlsZD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cbiAgICAgIGlmICghdGhpcy5fc2tpcENsb3NlRm9jdXMpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSB0aGlzLl9uZXh0Rm9jdXNlZEVsZW1lbnQgfHwgdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG5cbiAgICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIC8vIFRvIGVuYWJsZSBmb2N1c2luZyBvdGhlciBlbGVtZW50IHRoYW4gdGhlIHRyaWdnZXIsIHdlIG5lZWQgdG8gY2FsbCBmb2N1cygpIGEgc2Vjb25kIHRpbWUuXG4gICAgICAgIGVsZW1lbnRUb0ZvY3VzPy5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpZENsb3NlLmVtaXQoeyBjbG9zZVRhcmdldDogdGhpcy5fcG9wb3ZlckNsb3NlRWxlbWVudCB9KTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQuXG4gIHByaXZhdGUgX3NldFBvcG92ZXJGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdbc2JiLXBvcG92ZXItY2xvc2VdJykgfHxcbiAgICAgIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudChcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpLFxuICAgICAgKTtcbiAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgICAgZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5fb3ZlcmxheSk7XG4gICAgICB0aGlzLl9vdmVybGF5LmZvY3VzKCk7XG5cbiAgICAgIC8vIFdoZW4gYSBibHVyIG9jY3Vycywgd2Uga25vdyB0aGF0IHRoZSBwb3BvdmVyIGhhcyB0byBiZSBjbG9zZWQsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHBvcG92ZXIuXG4gICAgICAvLyBXaGVuIGEgd2luZG93L3RhYiBjaGFuZ2Ugb2NjdXJzLCBhIGJsdXIgZXZlbnQgaXMgYWxzbyBmaXJlZC4gSG93ZXZlciwgd2hlbiB0aGUgY3VycmVudCB3aW5kb3cvdGFiXG4gICAgICAvLyBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgaXQgZm9jdXNlcyBvbmNlIGFnYWluIHRoZSBwb3BvdmVyLlxuICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBjYW5ub3QgbGlzdGVuIHRvIHRoZSBibHVyIGV2ZW50IG9ubHkgb25jZS5cbiAgICAgIC8vIFRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IGNsb3NpbmcgdGhlIHBvcG92ZXIsIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSB3aW5kb3cvdGFiIHN0YXRlLlxuICAgICAgLy8gV2UgY2FuIGFjaGlldmUgdGhpcyBieSB1c2luZyB2aXNpYmlsaXR5U3RhdGUsIHdoaWNoIG9ubHkgd29ya3Mgd2l0aCBzZXRUaW1lb3V0KCkuXG4gICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdibHVyJyxcbiAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheT8ucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpcENsb3NlRm9jdXMgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFBvcG92ZXJQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX292ZXJsYXkgfHwgIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9wb3ZlclBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uKFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXBvcG92ZXJfX2NvbnRhaW5lcicpISxcbiAgICAgIHtcbiAgICAgICAgdmVydGljYWxPZmZzZXQ6IFZFUlRJQ0FMX09GRlNFVCxcbiAgICAgICAgaG9yaXpvbnRhbE9mZnNldDogSE9SSVpPTlRBTF9PRkZTRVQsXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICByZXNwb25zaXZlSGVpZ2h0OiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXBvc2l0aW9uJywgcG9wb3ZlclBvc2l0aW9uLmFsaWdubWVudC52ZXJ0aWNhbCk7XG5cbiAgICBjb25zdCBhcnJvd1hQb3NpdGlvbiA9XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBvcG92ZXJQb3NpdGlvbi5sZWZ0ICtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtXG4gICAgICA4OyAvLyBoYWxmIHRoZSBzaXplIG9mIHRoZSBwb3BvdmVyIGFycm93XG5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1wb3BvdmVyLXBvc2l0aW9uLXgnLCBgJHtwb3BvdmVyUG9zaXRpb24ubGVmdH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItcG9zaXRpb24teScsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1wb3BvdmVyLWFycm93LXBvc2l0aW9uLXgnLCBgJHthcnJvd1hQb3NpdGlvbn1weGApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcG9wb3Zlcl9fY2xvc2VcIj5cbiAgICAgICAgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWwgfHwgaTE4bkNsb3NlUG9wb3Zlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbi1uYW1lPVwiY3Jvc3Mtc21hbGxcIlxuICAgICAgICAgIHNiYi1wb3BvdmVyLWNsb3NlXG4gICAgICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIGA7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItcG9wb3Zlcl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGV2ZW50OiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fb25Qb3BvdmVyQW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1wb3BvdmVyXCJcbiAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCkgPT4gKHRoaXMuX292ZXJsYXkgPSBlbCBhcyBIVE1MRGl2RWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5fY2xvc2VPblNiYlBvcG92ZXJDbG9zZUNsaWNrKGV2ZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXBvcG92ZXJfX2NvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7IXRoaXMuaGlkZUNsb3NlQnV0dG9uICYmICF0aGlzLl9ob3ZlclRyaWdnZXIgPyBjbG9zZUJ1dHRvbiA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHNsb3Q+Tm8gY29udGVudDwvc2xvdD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItcG9wb3Zlcic6IFNiYlBvcG92ZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
568
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2xvc2VQb3BvdmVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5cbmNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDE2O1xuY29uc3QgSE9SSVpPTlRBTF9PRkZTRVQgPSAzMjtcblxubGV0IG5leHRJZCA9IDA7XG5cbmNvbnN0IHBvcG92ZXJzUmVmID0gbmV3IFNldDxTYmJQb3BvdmVyRWxlbWVudD4oKTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdpdGhpbiBhIHBvcG92ZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBwb3BvdmVyLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZ1xuICogdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx7IGNsb3NlVGFyZ2V0OiBIVE1MRWxlbWVudCB9Pn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItcG9wb3Zlci16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3ZlcicpXG5leHBvcnQgY2xhc3MgU2JiUG9wb3ZlckVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHBvcG92ZXIgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgdHJpZ2dlcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9zZSBidXR0b24gc2hvdWxkIGJlIGhpZGRlbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZS1jbG9zZS1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBoaWRlQ2xvc2VCdXR0b24/OiBib29sZWFuID1cbiAgICBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdHJpZ2dlcmVkIG9uIGhvdmVyLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Zlci10cmlnZ2VyJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgaG92ZXJUcmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9wZW4gdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdvcGVuLWRlbGF5JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBvcGVuRGVsYXk/ID0gMDtcblxuICAvKiogQ2xvc2UgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjbG9zZS1kZWxheScsIHR5cGU6IE51bWJlciB9KSBwdWJsaWMgY2xvc2VEZWxheT8gPSAwO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGNsb3NlIGJ1dHRvbiBlbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KSBwdWJsaWMgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLndpbGxDbG9zZSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIC8vIFRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCByZWNlaXZlIGZvY3VzIGFmdGVyIGNsb3NpbmcgYmFzZWQgb24gd2hlcmUgaW4gdGhlIGJhY2tkcm9wIHRoZSB1c2VyIGNsaWNrcy5cbiAgcHJpdmF0ZSBfbmV4dEZvY3VzZWRFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3NraXBDbG9zZUZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcG9wb3ZlckNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5TdGF0ZUNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaG92ZXJUcmlnZ2VyID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5UaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2Nsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyIG9uIHRyaWdnZXIgY2xpY2suICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NpbmcnKSB8fCAhdGhpcy5fb3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgb3RoZXIgcG9wb3ZlcnNcbiAgICBmb3IgKGNvbnN0IHBvcG92ZXIgb2YgQXJyYXkuZnJvbShwb3BvdmVyc1JlZikpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gcG9wb3Zlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnKSBhcyBTYmJPcGVuZWRDbG9zZWRTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSAmJiAoc3RhdGUgPT09ICdvcGVuZWQnIHx8IHN0YXRlID09PSAnb3BlbmluZycpKSB7XG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgcHVibGljIGNsb3NlKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRhcmdldCB9KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBwb3BvdmVyIG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbiAgICBvbGRWYWx1ZT86IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IGBzYmItcG9wb3Zlci0keysrbmV4dElkfWA7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHBvcG92ZXJzUmVmLmFkZCh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpKSB7XG4gICAgICB0aGlzLl9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcih0aGlzLnRyaWdnZXIsIGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgndHJpZ2dlcicpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdob3ZlclRyaWdnZXInKSkge1xuICAgICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHRoaXMuX2hvdmVyVHJpZ2dlcikge1xuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25PdmVybGF5TW91c2VFbnRlcigpKTtcbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uT3ZlcmxheU1vdXNlTGVhdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHBvcG92ZXJzUmVmLmRlbGV0ZSh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fY29uZmlndXJlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcblxuICAgIGlmICghdGhpcy50cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBmaW5kUmVmZXJlbmNlZEVsZW1lbnQodGhpcy50cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnZGlhbG9nJywgdGhpcy5pZCwgdGhpcy5zdGF0ZSk7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSB0cmlnZ2VyIGNhbiBiZSBob3ZlcmVkLiBTb21lIGRldmljZXMgbWlnaHQgaW50ZXJwcmV0IHRoZSBtZWRpYSBxdWVyeSAoaG92ZXI6IGhvdmVyKSBkaWZmZXJlbnRseSxcbiAgICAvLyBhbmQgbm90IHJlc3BlY3QgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBvbiB0aGUgY2xpY2suIFRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyBwcmVmZXJyZWQgdG8gaWRlbnRpZnlcbiAgICAvLyBhbGwgbm9uLXRvdWNoc2NyZWVuIGRldmljZXMuXG4gICAgdGhpcy5faG92ZXJUcmlnZ2VyID0gdGhpcy5ob3ZlclRyaWdnZXIgJiYgIXdpbmRvdy5tYXRjaE1lZGlhKCcocG9pbnRlcjogY29hcnNlKScpLm1hdGNoZXM7XG5cbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBpZiAodGhpcy5faG92ZXJUcmlnZ2VyKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5fb25UcmlnZ2VyTW91c2VFbnRlciwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fb25UcmlnZ2VyTW91c2VMZWF2ZSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAna2V5ZG93bicsXG4gICAgICAgIChldnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZ0LmNvZGUgPT09ICdTcGFjZScgfHwgZXZ0LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9wb3BvdmVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBwb3BvdmVyIG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2ssIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbG9zZSB0aGUgcG9wb3ZlciBvbiBjbGljayBvZiBhbnkgZWxlbWVudCB0aGF0IGhhcyB0aGUgJ3NiYi1wb3BvdmVyLWNsb3NlJyBhdHRyaWJ1dGUuXG4gIHByaXZhdGUgX2Nsb3NlT25TYmJQb3BvdmVyQ2xvc2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZUVsZW1lbnQgPSBjb21wb3NlZFBhdGhIYXNBdHRyaWJ1dGUoZXZlbnQsICdzYmItcG9wb3Zlci1jbG9zZScsIHRoaXMpO1xuXG4gICAgaWYgKGNsb3NlRWxlbWVudCAmJiAhY2xvc2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKGNsb3NlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIHBvcG92ZXIuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciA9IGlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIENsb3NlIHBvcG92ZXIgb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciAmJiAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCkpIHtcbiAgICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IGV2ZW50XG4gICAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgICAuZmlsdGVyKChlbCkgPT4gZWwgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAgIC5maW5kKChlbCkgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKElTX0ZPQ1VTQUJMRV9RVUVSWSkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uVHJpZ2dlck1vdXNlRW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5fb3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbigpLCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vblRyaWdnZXJNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUVudGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgcG9wb3ZlciBwb3NpdGlvbiAoeCwgeSkgdG8gJzAnIG9uY2UgdGhlIHBvcG92ZXIgaXMgY2xvc2VkIGFuZCB0aGUgdHJhbnNpdGlvbiBlbmRlZCB0byBwcmV2ZW50IHRoZVxuICAvLyB2aWV3cG9ydCBmcm9tIG92ZXJmbG93aW5nLiBBbmQgc2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgb25jZSB0aGUgcG9wb3ZlciBpcyBvcGVuLlxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uUG9wb3ZlckFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgICAgIHRoaXMuaW5lcnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2F0dGFjaFdpbmRvd0V2ZW50cygpO1xuICAgICAgdGhpcy5fc2V0UG9wb3ZlckZvY3VzKCk7XG4gICAgICB0aGlzLl9mb2N1c0hhbmRsZXIudHJhcCh0aGlzLCB7XG4gICAgICAgIHBvc3RGaWx0ZXI6IChlbCkgPT4gZWwgIT09IHRoaXMuX292ZXJsYXksXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICB0aGlzLl9vdmVybGF5Py5maXJzdEVsZW1lbnRDaGlsZD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cbiAgICAgIGlmICghdGhpcy5fc2tpcENsb3NlRm9jdXMpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSB0aGlzLl9uZXh0Rm9jdXNlZEVsZW1lbnQgfHwgdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG5cbiAgICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIC8vIFRvIGVuYWJsZSBmb2N1c2luZyBvdGhlciBlbGVtZW50IHRoYW4gdGhlIHRyaWdnZXIsIHdlIG5lZWQgdG8gY2FsbCBmb2N1cygpIGEgc2Vjb25kIHRpbWUuXG4gICAgICAgIGVsZW1lbnRUb0ZvY3VzPy5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpZENsb3NlLmVtaXQoeyBjbG9zZVRhcmdldDogdGhpcy5fcG9wb3ZlckNsb3NlRWxlbWVudCB9KTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQuXG4gIHByaXZhdGUgX3NldFBvcG92ZXJGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdbc2JiLXBvcG92ZXItY2xvc2VdJykgfHxcbiAgICAgIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudChcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpLFxuICAgICAgKTtcbiAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgICAgZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5fb3ZlcmxheSk7XG4gICAgICB0aGlzLl9vdmVybGF5LmZvY3VzKCk7XG5cbiAgICAgIC8vIFdoZW4gYSBibHVyIG9jY3Vycywgd2Uga25vdyB0aGF0IHRoZSBwb3BvdmVyIGhhcyB0byBiZSBjbG9zZWQsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHBvcG92ZXIuXG4gICAgICAvLyBXaGVuIGEgd2luZG93L3RhYiBjaGFuZ2Ugb2NjdXJzLCBhIGJsdXIgZXZlbnQgaXMgYWxzbyBmaXJlZC4gSG93ZXZlciwgd2hlbiB0aGUgY3VycmVudCB3aW5kb3cvdGFiXG4gICAgICAvLyBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgaXQgZm9jdXNlcyBvbmNlIGFnYWluIHRoZSBwb3BvdmVyLlxuICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBjYW5ub3QgbGlzdGVuIHRvIHRoZSBibHVyIGV2ZW50IG9ubHkgb25jZS5cbiAgICAgIC8vIFRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IGNsb3NpbmcgdGhlIHBvcG92ZXIsIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSB3aW5kb3cvdGFiIHN0YXRlLlxuICAgICAgLy8gV2UgY2FuIGFjaGlldmUgdGhpcyBieSB1c2luZyB2aXNpYmlsaXR5U3RhdGUsIHdoaWNoIG9ubHkgd29ya3Mgd2l0aCBzZXRUaW1lb3V0KCkuXG4gICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdibHVyJyxcbiAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheT8ucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpcENsb3NlRm9jdXMgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFBvcG92ZXJQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX292ZXJsYXkgfHwgIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9wb3ZlclBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uKFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXBvcG92ZXJfX2NvbnRhaW5lcicpISxcbiAgICAgIHtcbiAgICAgICAgdmVydGljYWxPZmZzZXQ6IFZFUlRJQ0FMX09GRlNFVCxcbiAgICAgICAgaG9yaXpvbnRhbE9mZnNldDogSE9SSVpPTlRBTF9PRkZTRVQsXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICByZXNwb25zaXZlSGVpZ2h0OiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXBvc2l0aW9uJywgcG9wb3ZlclBvc2l0aW9uLmFsaWdubWVudC52ZXJ0aWNhbCk7XG5cbiAgICBjb25zdCBhcnJvd1hQb3NpdGlvbiA9XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBvcG92ZXJQb3NpdGlvbi5sZWZ0ICtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtXG4gICAgICA4OyAvLyBoYWxmIHRoZSBzaXplIG9mIHRoZSBwb3BvdmVyIGFycm93XG5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1wb3BvdmVyLXBvc2l0aW9uLXgnLCBgJHtwb3BvdmVyUG9zaXRpb24ubGVmdH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItcG9zaXRpb24teScsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1wb3BvdmVyLWFycm93LXBvc2l0aW9uLXgnLCBgJHthcnJvd1hQb3NpdGlvbn1weGApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcG9wb3Zlcl9fY2xvc2VcIj5cbiAgICAgICAgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWwgfHwgaTE4bkNsb3NlUG9wb3Zlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbi1uYW1lPVwiY3Jvc3Mtc21hbGxcIlxuICAgICAgICAgIHNiYi1wb3BvdmVyLWNsb3NlXG4gICAgICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIGA7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItcG9wb3Zlcl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGV2ZW50OiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fb25Qb3BvdmVyQW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1wb3BvdmVyXCJcbiAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCkgPT4gKHRoaXMuX292ZXJsYXkgPSBlbCBhcyBIVE1MRGl2RWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5fY2xvc2VPblNiYlBvcG92ZXJDbG9zZUNsaWNrKGV2ZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXBvcG92ZXJfX2NvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7IXRoaXMuaGlkZUNsb3NlQnV0dG9uICYmICF0aGlzLl9ob3ZlclRyaWdnZXIgPyBjbG9zZUJ1dHRvbiA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHNsb3Q+Tm8gY29udGVudDwvc2xvdD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItcG9wb3Zlcic6IFNiYlBvcG92ZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -2,7 +2,6 @@ import { LitElement } from 'lit';
2
2
  import { SbbCheckedStateChange, SbbDisabledStateChange, SbbStateChange } from '../../core/interfaces.js';
3
3
  import { AbstractConstructor } from '../../core/mixins.js';
4
4
  import { SbbRadioButtonGroupElement } from '../radio-button-group.js';
5
-
6
5
  export type SbbRadioButtonSize = 'xs' | 's' | 'm';
7
6
  export type SbbRadioButtonStateChange = Extract<SbbStateChange, SbbDisabledStateChange | SbbCheckedStateChange>;
8
7
  export declare class SbbRadioButtonCommonElementMixinType {
@@ -234,18 +234,18 @@ const radioButtonCommon = css`/**
234
234
  }
235
235
 
236
236
  .sbb-radio-button {
237
- --sbb-text-font-size: var(--sbb-font-size-text-m);
238
- font-family: var(--sbb-typo-font-family);
239
- font-weight: normal;
240
- line-height: var(--sbb-typo-line-height-body-text);
241
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
242
- font-size: var(--sbb-text-font-size);
243
237
  display: block;
244
238
  cursor: var(--sbb-radio-button-cursor);
245
239
  user-select: none;
246
240
  position: relative;
247
241
  color: var(--sbb-radio-button-label-color);
248
242
  -webkit-tap-highlight-color: transparent;
243
+ --sbb-text-font-size: var(--sbb-font-size-text-m);
244
+ font-family: var(--sbb-typo-font-family);
245
+ font-weight: normal;
246
+ line-height: var(--sbb-typo-line-height-body-text);
247
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
248
+ font-size: var(--sbb-text-font-size);
249
249
  }
250
250
  :host([size=s]) .sbb-radio-button {
251
251
  --sbb-text-font-size: var(--sbb-font-size-text-s);
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
2
  import { SbbRadioButtonSize } from '../common.js';
3
-
4
3
  declare const SbbRadioButtonElement_base: import('../../core/mixins.js').AbstractConstructor<import('../common.js').SbbRadioButtonCommonElementMixinType> & typeof LitElement;
5
4
  /**
6
5
  * It displays a radio button enhanced with the SBB Design.
@@ -3,7 +3,6 @@ import { SbbHorizontalFrom, SbbOrientation } from '../../core/interfaces.js';
3
3
  import { SbbRadioButtonSize } from '../common.js';
4
4
  import { SbbRadioButtonPanelElement } from '../radio-button-panel.js';
5
5
  import { SbbRadioButtonElement } from '../radio-button.js';
6
-
7
6
  export type SbbRadioButtonGroupEventDetail = {
8
7
  value: any | null;
9
8
  radioButton: SbbRadioButtonElement | SbbRadioButtonPanelElement;
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
2
  import { SbbPanelSize } from '../../core/mixins.js';
3
-
4
3
  declare const SbbRadioButtonPanelElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbPanelMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../common.js').SbbRadioButtonCommonElementMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbUpdateSchedulerMixinType> & typeof LitElement;
5
4
  /**
6
5
  /**
@@ -1,5 +1,4 @@
1
1
  import { CSSResultGroup, TemplateResult, LitElement } from 'lit';
2
-
3
2
  /**
4
3
  * This component can be used to visually hide content but present it to screen readers.
5
4
  *
@@ -1,6 +1,5 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
2
2
  import { SbbOpenCloseBaseElement } from '../core/base-elements.js';
3
-
4
3
  export interface SelectChange {
5
4
  type: 'value';
6
5
  value: string | string[];
@@ -247,9 +247,6 @@ const style = css`/**
247
247
  }
248
248
 
249
249
  .sbb-select__options {
250
- --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
251
- /* Scrollbar itself */
252
- /* Hide button (top and bottom of the scrollbar) */
253
250
  background-color: var(--sbb-options-panel-background-color);
254
251
  padding-block: var(--sbb-spacing-fixed-3x);
255
252
  padding-inline: 0;
@@ -261,7 +258,9 @@ const style = css`/**
261
258
  animation-name: var(--sbb-options-panel-animation-name);
262
259
  animation-duration: var(--sbb-options-panel-animation-duration);
263
260
  animation-timing-function: var(--sbb-options-panel-animation-timing-function);
264
- padding-block: var(--sbb-spacing-fixed-2x);
261
+ --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
262
+ /* Scrollbar itself */
263
+ /* Hide button (top and bottom of the scrollbar) */
265
264
  }
266
265
  .sbb-select__options::-webkit-scrollbar {
267
266
  width: var(--sbb-scrollbar-width);
@@ -290,6 +289,9 @@ const style = css`/**
290
289
  scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
291
290
  }
292
291
  }
292
+ .sbb-select__options {
293
+ padding-block: var(--sbb-spacing-fixed-2x);
294
+ }
293
295
  @media (forced-colors: active) {
294
296
  .sbb-select__options {
295
297
  border: var(--sbb-border-width-1x) solid CanvasText;
@@ -894,4 +896,4 @@ SbbSelectElement = __decorateClass([
894
896
  export {
895
897
  SbbSelectElement
896
898
  };
897
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXcml0aW5nTW9kZSwgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJOZWdhdGl2ZU1peGluLCBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gaW5wdXQgLSBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIGNsb3NlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1zZWxlY3Qtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICBkaXI6IGdldERvY3VtZW50V3JpdGluZ01vZGUoKSxcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3RFbGVtZW50IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIEZJWE1FIHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGlkQ2hhbmdlOiAnZGlkQ2hhbmdlJyxcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgaXQncyBhbiBhcnJheS4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIHJlcXVpcmVkLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9vdmVybGF5IHx8IHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuX2Rpc3BsYXlWYWx1ZSA/ICcnIDogdGhpcy5fZGlzcGxheVZhbHVlO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uT3B0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiU2VsZWN0RWxlbWVudCB8IFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItb3B0aW9uJyB8fCB0YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgX2Rpc3BsYXlWYWx1ZSBieSBjaGVja2luZyB0aGUgaW50ZXJuYWwgc2JiLW9wdGlvbnMgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgYHNlbGVjdGVkYCB2YWx1ZSBvbiB0aGVtLiAqL1xuICBwcml2YXRlIF9vblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBvcHRpb25zLmZpbmQoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSA9PT0gbmV3VmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSAhPT0gbmV3VmFsdWUpXG4gICAgICAgIC5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBvcHRpb25FbGVtZW50Py50ZXh0Q29udGVudCB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+ICFuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSlcbiAgICAgICAgLmZvckVhY2goKGUpID0+IChlLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMgPSBvcHRpb25zLmZpbHRlcigobykgPT5cbiAgICAgICAgbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSksXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMubWFwKChvKSA9PiBvLnRleHRDb250ZW50KS5qb2luKCcsICcpIHx8IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLmVtaXQoeyB0eXBlOiAndmFsdWUnLCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvclxuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuYmx1ciA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmJsdXIoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzLmNsb3Nlc3Q/LignW2RhdGEtZm9ybS1maWVsZF0nKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSBmb3JtRmllbGQuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdvcHRpb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSksXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX29uT3B0aW9uQ2xpY2soZSk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlJykpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUhKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB0aGlzLl9kaWRMb2FkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgb3JpZ2luRWxlbWVudDsgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgc2JiLWZvcm0tZmllbGQgdXNlcyBpdCwgb3RoZXJ3aXNlIHVzZXMgdGhlIHBhcmVudEVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldHVwT3JpZ2luKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuX29yaWdpbkVsZW1lbnQgPVxuICAgICAgZm9ybUZpZWxkPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/IHRoaXMucGFyZW50RWxlbWVudCE7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1vcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLFxuICAgICAgICAhIWZvcm1GaWVsZD8uaGFzQXR0cmlidXRlPy4oJ2JvcmRlcmxlc3MnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvIGFzc2VzcyBzY3JlZW4tcmVhZGVycyBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYXJpYSBwYXR0ZXJucyBhbmQgc2hhZG93IERPTSxcbiAgICogd2UgYXJlIGZvcmNlZCB0byBtb3ZlIHRoZSAnY29tYm9ib3gnIHRyaWdnZXIgZWxlbWVudCB0byB0aGUgbGlnaHQgRE9NXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFRyaWdnZXIoKTogdm9pZCB7XG4gICAgLy8gTW92ZSB0aGUgdHJpZ2dlciBiZWZvcmUgdGhlIHNiYi1zZWxlY3RcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQhLmluc2VydEJlZm9yZT8uKHRoaXMuX3RyaWdnZXJFbGVtZW50LCB0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgaW52aXNpYmxlIHRyaWdnZXIgZWxlbWVudCBkaW1lbnNpb24gdG8gbWF0Y2ggdGhlIHBhcmVudCAobmVlZGVkIGZvciBzY3JlZW4gcmVhZGVycylcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGA7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX29uT3BlbkFuaW1hdGlvbkVuZCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX29uQ2xvc2VBbmltYXRpb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk9wZW5BbmltYXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG5cbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DbG9zZUFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5pZCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLmlkKVxuICAgICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW29wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgdW5zZWxlY3RlZCBpbiBgbXVsdGlwbGVgLCByZW1vdmVzIGl0IGZyb20gdmFsdWUgYW5kIHVwZGF0ZXMgZGlzcGxheVZhbHVlLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkRlc2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgICAgICAoZWw6IHN0cmluZykgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25CeVRleHQoZXZlbnQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0QnlLZXlib2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhd2FpdCBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIGF3YWl0IG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICBpZiAoc2V0QWN0aXZlRGVzY2VuZGFudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBuZXh0QWN0aXZlT3B0aW9uLmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXNcbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5leHRBY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBhd2FpdCBsYXN0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZSA/IGh0bWxgJHt0aGlzLl9kaXNwbGF5VmFsdWV9YCA6IGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlzdWFsbHkgZGlzcGxheSB0aGUgdmFsdWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZVxuICAgICAgICAgID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gXG4gICAgICAgICAgOiBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKGRpYWxvZ1JlZikgPT4gKHRoaXMuX292ZXJsYXkgPSBkaWFsb2dSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5fb3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgID9hcmlhLW11bHRpc2VsZWN0YWJsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbn0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdCc6IFNiYlNlbGVjdEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
899
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXcml0aW5nTW9kZSwgaXNOZXh0anMsIGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJOZWdhdGl2ZU1peGluLCBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDaGFuZ2Uge1xuICB0eXBlOiAndmFsdWUnO1xuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvcHRpb25zLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGNoYW5nZSAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gaW5wdXQgLSBOb3RpZmllcyB0aGF0IGFuIG9wdGlvbiB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXNlbGVjdGAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItc2VsZWN0YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1zZWxlY3RgIGlzIGNsb3NlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1zZWxlY3Qtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICBkaXI6IGdldERvY3VtZW50V3JpdGluZ01vZGUoKSxcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmV4cG9ydCBjbGFzcyBTYmJTZWxlY3RFbGVtZW50IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8vIEZJWE1FIHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGlkQ2hhbmdlOiAnZGlkQ2hhbmdlJyxcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHN0YXRlQ2hhbmdlOiAnc3RhdGVDaGFuZ2UnLFxuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgaXQncyBhbiBhcnJheS4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIHJlcXVpcmVkLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgcmVhZG9ubHkuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB2YWx1ZSBkaXNwbGF5ZWQgYnkgdGhlIGNvbXBvbmVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgb25seSB1c2VkIGZvciBSZWFjdC4gV2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIG9uY2UgUmVhY3QgMTkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmRpZENoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9jaGFuZ2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiU2VsZWN0RWxlbWVudC5ldmVudHMuY2hhbmdlKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCBhbiBvcHRpb24gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgX2lucHV0OiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYlNlbGVjdEVsZW1lbnQuZXZlbnRzLmlucHV0KTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJTZWxlY3RFbGVtZW50LmV2ZW50cy5zdGF0ZUNoYW5nZSxcbiAgICB7XG4gICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wdGlvbkNvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcmlnaW5FbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgdGhlIFNiYk9wdGlvbkVsZW1lbnQgcHJvamVjdGVkIGluIHRoZSBzZWxlY3QuICovXG4gIHByaXZhdGUgZ2V0IF9vcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZmlsdGVyZWRPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdDogU2JiT3B0aW9uRWxlbWVudCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9vdmVybGF5IHx8IHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuX2Rpc3BsYXlWYWx1ZSA/ICcnIDogdGhpcy5fZGlzcGxheVZhbHVlO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uT3B0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiU2VsZWN0RWxlbWVudCB8IFNiYk9wdGlvbkVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItb3B0aW9uJyB8fCB0YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgX2Rpc3BsYXlWYWx1ZSBieSBjaGVja2luZyB0aGUgaW50ZXJuYWwgc2JiLW9wdGlvbnMgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgYHNlbGVjdGVkYCB2YWx1ZSBvbiB0aGVtLiAqL1xuICBwcml2YXRlIF9vblZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBvcHRpb25zLmZpbmQoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSA9PT0gbmV3VmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+IChvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSAhPT0gbmV3VmFsdWUpXG4gICAgICAgIC5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBvcHRpb25FbGVtZW50Py50ZXh0Q29udGVudCB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKG8pID0+ICFuZXdWYWx1ZS5pbmNsdWRlcyhvLnZhbHVlID8/IG8uZ2V0QXR0cmlidXRlKCd2YWx1ZScpKSlcbiAgICAgICAgLmZvckVhY2goKGUpID0+IChlLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMgPSBvcHRpb25zLmZpbHRlcigobykgPT5cbiAgICAgICAgbmV3VmFsdWUuaW5jbHVkZXMoby52YWx1ZSA/PyBvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSksXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWRPcHRpb25FbGVtZW50cy5mb3JFYWNoKChvKSA9PiAoby5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uRWxlbWVudHMubWFwKChvKSA9PiBvLnRleHRDb250ZW50KS5qb2luKCcsICcpIHx8IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLmVtaXQoeyB0eXBlOiAndmFsdWUnLCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvclxuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuYmx1ciA9ICgpID0+IHRoaXMuX3RyaWdnZXJFbGVtZW50LmJsdXIoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKSA/PyB0aGlzLmNsb3Nlc3Q/LignW2RhdGEtZm9ybS1maWVsZF0nKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSBmb3JtRmllbGQuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHRoaXMuX2RpZExvYWQpIHtcbiAgICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdvcHRpb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSksXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX29uT3B0aW9uQ2xpY2soZSk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbCB9LFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlJykpIHtcbiAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUhKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQ6IFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICB0aGlzLl9zZXR1cFRyaWdnZXIoKTtcbiAgICB0aGlzLl9kaWRMb2FkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgb3JpZ2luRWxlbWVudDsgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgc2JiLWZvcm0tZmllbGQgdXNlcyBpdCwgb3RoZXJ3aXNlIHVzZXMgdGhlIHBhcmVudEVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldHVwT3JpZ2luKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuX29yaWdpbkVsZW1lbnQgPVxuICAgICAgZm9ybUZpZWxkPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/IHRoaXMucGFyZW50RWxlbWVudCE7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1vcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLFxuICAgICAgICAhIWZvcm1GaWVsZD8uaGFzQXR0cmlidXRlPy4oJ2JvcmRlcmxlc3MnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvIGFzc2VzcyBzY3JlZW4tcmVhZGVycyBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYXJpYSBwYXR0ZXJucyBhbmQgc2hhZG93IERPTSxcbiAgICogd2UgYXJlIGZvcmNlZCB0byBtb3ZlIHRoZSAnY29tYm9ib3gnIHRyaWdnZXIgZWxlbWVudCB0byB0aGUgbGlnaHQgRE9NXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFRyaWdnZXIoKTogdm9pZCB7XG4gICAgLy8gTW92ZSB0aGUgdHJpZ2dlciBiZWZvcmUgdGhlIHNiYi1zZWxlY3RcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQhLmluc2VydEJlZm9yZT8uKHRoaXMuX3RyaWdnZXJFbGVtZW50LCB0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgaW52aXNpYmxlIHRyaWdnZXIgZWxlbWVudCBkaW1lbnNpb24gdG8gbWF0Y2ggdGhlIHBhcmVudCAobmVlZGVkIGZvciBzY3JlZW4gcmVhZGVycylcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGA7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX29uT3BlbkFuaW1hdGlvbkVuZCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX29uQ2xvc2VBbmltYXRpb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbk9wZW5BbmltYXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG5cbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DbG9zZUFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5pZCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLmlkKVxuICAgICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW29wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb25TZWxlY3Rpb25DaGFuZ2UudmFsdWUhKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2RpZENoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgdW5zZWxlY3RlZCBpbiBgbXVsdGlwbGVgLCByZW1vdmVzIGl0IGZyb20gdmFsdWUgYW5kIHVwZGF0ZXMgZGlzcGxheVZhbHVlLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkRlc2VsZWN0ZWQob3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBTYmJPcHRpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgICAgICAoZWw6IHN0cmluZykgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gICAgICB0aGlzLl9kaWRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25CeVRleHQoZXZlbnQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX29wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2VsZWN0QnlLZXlib2FyZCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQ6IFNiYk9wdGlvbkVsZW1lbnRbXSA9IFtcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQpID0+XG4gICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgYXdhaXQgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fZmlsdGVyZWRPcHRpb25zLmluZGV4T2YobWF0Y2gpKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDEgJiZcbiAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMuX3NlYXJjaFN0cmluZy5jaGFyQXQoMCl9KiRgKS50ZXN0KHRoaXMuX3NlYXJjaFN0cmluZylcbiAgICApIHtcbiAgICAgIC8vIElmIG5vIGV4YWN0IG1hdGNoIGhhcyBiZWVuIGZvdW5kIGJ1dCB0aGUgc3RyaW5nIHRvIHNlYXJjaCBpcyBtYWRlIGJ5IHRoZSBzYW1lIHJlcGVhdGVkIGxldHRlcixcbiAgICAgIC8vIGdvIHRvIHRoZSBmaXJzdCBlbGVtZW50LCBpZiBleGlzdHMsIHRoYXQgbWF0Y2hlcyB0aGUgbGV0dGVyLlxuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgICAob3B0aW9uOiBTYmJPcHRpb25FbGVtZW50KSA9PlxuICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZ1swXS50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICAgICk7XG4gICAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0QnlLZXlib2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQgPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBhd2FpdCBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIGF3YWl0IG5leHRPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICBpZiAoc2V0QWN0aXZlRGVzY2VuZGFudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBuZXh0QWN0aXZlT3B0aW9uLmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXNcbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5leHRBY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbiAmJiBsYXN0QWN0aXZlT3B0aW9uICE9PSBuZXh0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBhd2FpdCBsYXN0QWN0aXZlT3B0aW9uLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fZmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9maWx0ZXJlZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZE9wdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZSA/IGh0bWxgJHt0aGlzLl9kaXNwbGF5VmFsdWV9YCA6IGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlzdWFsbHkgZGlzcGxheSB0aGUgdmFsdWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3RoaXMuX2Rpc3BsYXlWYWx1ZVxuICAgICAgICAgID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gXG4gICAgICAgICAgOiBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKGRpYWxvZ1JlZikgPT4gKHRoaXMuX292ZXJsYXkgPSBkaWFsb2dSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5fb3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgID9hcmlhLW11bHRpc2VsZWN0YWJsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXRWYWx1ZUZyb21TZWxlY3RlZE9wdGlvbn0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdCc6IFNiYlNlbGVjdEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1,5 +1,4 @@
1
1
  import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
2
-
3
2
  declare const SbbSelectionExpansionPanelElement_base: import('../core/mixins.js').AbstractConstructor<import('../core/mixins.js').SbbHydrationMixinType> & typeof LitElement;
4
3
  /**
5
4
  * It displays an expandable panel connected to a `sbb-checkbox` or to a `sbb-radio-button`.
@@ -1 +1 @@
1
- {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAcvC,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAEa,iCAAkC,SAAQ,sCAA6B;IAElF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACtB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAErD,qDAAqD;IACQ,SAAS,UAAS;IAE/E,iDAAiD;IACE,UAAU,UAAS;IAEtE,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAGf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAGd;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAGhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAkB;IAEtC;;OAEG;IACH,OAAO,KAAK,WAAW,GAGtB;IAEe,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAUT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}
1
+ {"version":3,"file":"selection-expansion-panel.d.ts","sourceRoot":"","sources":["../../../../src/elements/selection-expansion-panel/selection-expansion-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAcvC,OAAO,eAAe,CAAC;;AAEvB;;;;;;;;;GASG;AACH,qBAEa,iCAAkC,SAAQ,sCAA6B;IAElF,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1C;IAEX,yCAAyC;IACtB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAW;IAErD,qDAAqD;IACQ,SAAS,UAAS;IAE/E,iDAAiD;IACE,UAAU,UAAS;IAEtE,wCAAwC;IAExC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,8CAA8C;IAC9C,OAAO,KAAK,QAAQ,QAEnB;IACD,OAAO,KAAK,QAAQ,GAEnB;IAED,+CAA+C;IAC/C,OAAO,KAAK,SAAS,QAEpB;IAED,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAGf;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAGd;IAEF,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAGhB;IAEF,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAkB;IAEtC;;OAEG;IACH,OAAO,KAAK,WAAW,GAGtB;IAEe,iBAAiB,IAAI,IAAI;cAUtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9E,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;YAUT,oBAAoB;cAoBf,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,+BAA+B,EAAE,iCAAiC,CAAC;KACpE;CACF"}