cax-design-system 2.8.2 → 2.8.3

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 (1726) hide show
  1. package/accordion/accordion.d.ts +224 -0
  2. package/accordion/accordion.interface.d.ts +49 -0
  3. package/accordion/accordion.module.d.ts +13 -0
  4. package/accordion/index.d.ts +3 -286
  5. package/accordion/public_api.d.ts +3 -0
  6. package/animate/animate.d.ts +40 -0
  7. package/animate/index.d.ts +3 -41
  8. package/animate/public_api.d.ts +1 -0
  9. package/animateonscroll/animateonscroll.d.ts +75 -0
  10. package/animateonscroll/index.d.ts +3 -75
  11. package/animateonscroll/public_api.d.ts +1 -0
  12. package/api/blockableui.d.ts +10 -0
  13. package/api/caxconfig.d.ts +24 -0
  14. package/api/confirmaeventtype.d.ts +8 -0
  15. package/api/confirmation.d.ts +96 -0
  16. package/api/confirmationservice.d.ts +30 -0
  17. package/api/contextmenuservice.d.ts +11 -0
  18. package/api/filtermatchmode.d.ts +22 -0
  19. package/api/filtermetadata.d.ts +18 -0
  20. package/api/filteroperator.d.ts +4 -0
  21. package/api/filterservice.d.ts +10 -0
  22. package/api/index.d.ts +3 -1856
  23. package/api/lazyloadevent.d.ts +47 -0
  24. package/api/lazyloadmeta.d.ts +19 -0
  25. package/api/megamenuitem.d.ts +130 -0
  26. package/api/menuitem.d.ts +176 -0
  27. package/api/message.d.ts +30 -0
  28. package/api/messageservice.d.ts +32 -0
  29. package/api/overlayoptions.d.ts +188 -0
  30. package/api/overlayservice.d.ts +9 -0
  31. package/api/primeicons.d.ts +313 -0
  32. package/api/public_api.d.ts +34 -0
  33. package/api/scrolleroptions.d.ts +116 -0
  34. package/api/selectitem.d.ts +12 -0
  35. package/api/selectitemgroup.d.ts +10 -0
  36. package/api/shared.d.ts +24 -0
  37. package/api/sortevent.d.ts +12 -0
  38. package/api/sortmeta.d.ts +8 -0
  39. package/api/tablestate.d.ts +60 -0
  40. package/api/themegeneratorservice.d.ts +12 -0
  41. package/api/tooltipoptions.d.ts +69 -0
  42. package/api/translation.d.ts +135 -0
  43. package/api/translationkeys.d.ts +50 -0
  44. package/api/treedragdropservice.d.ts +12 -0
  45. package/api/treenode.d.ts +91 -0
  46. package/api/treenodedragevent.d.ts +27 -0
  47. package/api/treetablenode.d.ts +36 -0
  48. package/autocomplete/autocomplete.d.ts +616 -0
  49. package/autocomplete/autocomplete.interface.d.ts +164 -0
  50. package/autocomplete/autocomplete.module.d.ts +20 -0
  51. package/autocomplete/index.d.ts +3 -799
  52. package/autocomplete/public_api.d.ts +3 -0
  53. package/autofocus/autofocus.d.ts +28 -0
  54. package/autofocus/index.d.ts +3 -29
  55. package/autofocus/public_api.d.ts +1 -0
  56. package/avatar/avatar.d.ts +73 -0
  57. package/avatar/avatar.module.d.ts +7 -0
  58. package/avatar/index.d.ts +3 -80
  59. package/avatar/public_api.d.ts +2 -0
  60. package/avatargroup/avatargroup.d.ts +21 -0
  61. package/avatargroup/avatargroup.module.d.ts +9 -0
  62. package/avatargroup/index.d.ts +3 -30
  63. package/avatargroup/public_api.d.ts +2 -0
  64. package/badge/badge.d.ts +21 -0
  65. package/badge/badge.directive.d.ts +35 -0
  66. package/badge/badge.module.d.ts +10 -0
  67. package/badge/index.d.ts +5 -67
  68. package/badge/public_api.d.ts +3 -0
  69. package/baseicon/baseicon.d.ts +15 -0
  70. package/baseicon/index.d.ts +5 -18
  71. package/baseicon/public_api.d.ts +1 -0
  72. package/blockui/blockui.d.ts +64 -0
  73. package/blockui/blockui.interface.d.ts +11 -0
  74. package/blockui/index.d.ts +3 -77
  75. package/blockui/public_api.d.ts +2 -0
  76. package/breadcrumb/breadcrumb.d.ts +55 -0
  77. package/breadcrumb/breadcrumb.interface.d.ts +38 -0
  78. package/breadcrumb/breadcrumb.module.d.ts +13 -0
  79. package/breadcrumb/index.d.ts +3 -105
  80. package/breadcrumb/public_api.d.ts +3 -0
  81. package/button/button.d.ts +85 -0
  82. package/button/button.directive.d.ts +49 -0
  83. package/button/button.interface.d.ts +30 -0
  84. package/button/button.module.d.ts +9 -0
  85. package/button/index.d.ts +3 -170
  86. package/button/public_api.d.ts +4 -0
  87. package/buttongroup/buttongroup.d.ts +11 -0
  88. package/buttongroup/index.d.ts +5 -14
  89. package/buttongroup/public_api.d.ts +1 -0
  90. package/calendar/calendar.d.ts +722 -0
  91. package/calendar/calendar.interface.d.ts +204 -0
  92. package/calendar/calendar.module.d.ts +9 -0
  93. package/calendar/index.d.ts +3 -935
  94. package/calendar/public_api.d.ts +3 -0
  95. package/card/card.d.ts +53 -0
  96. package/card/card.interface.d.ts +27 -0
  97. package/card/card.module.d.ts +11 -0
  98. package/card/index.d.ts +3 -92
  99. package/card/public_api.d.ts +3 -0
  100. package/carousel/carousel.d.ts +227 -0
  101. package/carousel/carousel.interface.d.ts +63 -0
  102. package/carousel/index.d.ts +3 -290
  103. package/carousel/public_api.d.ts +2 -0
  104. package/cascadeselect/cascadeselect.d.ts +435 -0
  105. package/cascadeselect/cascadeselect.interface.d.ts +115 -0
  106. package/cascadeselect/cascadeselect.module.d.ts +15 -0
  107. package/cascadeselect/index.d.ts +3 -564
  108. package/cascadeselect/public_api.d.ts +3 -0
  109. package/chart/chart.d.ts +87 -0
  110. package/chart/index.d.ts +3 -88
  111. package/chart/public_api.d.ts +1 -0
  112. package/checkbox/checkbox.d.ts +168 -0
  113. package/checkbox/checkbox.interface.d.ts +26 -0
  114. package/checkbox/checkbox.module.d.ts +10 -0
  115. package/checkbox/index.d.ts +3 -204
  116. package/checkbox/public_api.d.ts +3 -0
  117. package/chip/chip.d.ts +38 -0
  118. package/chip/chip.interface.d.ts +15 -0
  119. package/chip/chip.module.d.ts +10 -0
  120. package/chip/index.d.ts +3 -63
  121. package/chip/public_api.d.ts +3 -0
  122. package/chips/chips.d.ts +233 -0
  123. package/chips/chips.interface.d.ts +58 -0
  124. package/chips/chips.module.d.ts +14 -0
  125. package/chips/index.d.ts +3 -305
  126. package/chips/public_api.d.ts +3 -0
  127. package/colorpicker/colorpicker.d.ts +240 -0
  128. package/colorpicker/colorpicker.interface.d.ts +15 -0
  129. package/colorpicker/colorpicker.module.d.ts +9 -0
  130. package/colorpicker/index.d.ts +3 -265
  131. package/colorpicker/public_api.d.ts +3 -0
  132. package/commentbox/commentbox.d.ts +120 -0
  133. package/commentbox/commentbox.module.d.ts +17 -0
  134. package/commentbox/index.d.ts +5 -138
  135. package/commentbox/public_api.d.ts +2 -0
  136. package/confirmdialog/confirmdialog.d.ts +281 -0
  137. package/confirmdialog/confirmdialog.interface.d.ts +39 -0
  138. package/confirmdialog/confirmdialog.module.d.ts +15 -0
  139. package/confirmdialog/index.d.ts +3 -336
  140. package/confirmdialog/public_api.d.ts +3 -0
  141. package/confirmpopup/confirmpopup.d.ts +119 -0
  142. package/confirmpopup/confirmpopup.interface.d.ts +27 -0
  143. package/confirmpopup/index.d.ts +3 -148
  144. package/confirmpopup/public_api.d.ts +2 -0
  145. package/contextmenu/contextmenu.d.ts +260 -0
  146. package/contextmenu/index.d.ts +3 -261
  147. package/contextmenu/public_api.d.ts +1 -0
  148. package/dataview/dataview.d.ts +274 -0
  149. package/dataview/dataview.interface.d.ts +183 -0
  150. package/dataview/index.d.ts +3 -457
  151. package/dataview/public_api.d.ts +2 -0
  152. package/defer/defer.d.ts +39 -0
  153. package/defer/index.d.ts +3 -40
  154. package/defer/public_api.d.ts +1 -0
  155. package/dialog/dialog.d.ts +364 -0
  156. package/dialog/dialog.interface.d.ts +31 -0
  157. package/dialog/dialog.module.d.ts +15 -0
  158. package/dialog/index.d.ts +3 -411
  159. package/dialog/public_api.d.ts +3 -0
  160. package/divider/divider.d.ts +49 -0
  161. package/divider/divider.module.d.ts +7 -0
  162. package/divider/index.d.ts +3 -56
  163. package/divider/public_api.d.ts +2 -0
  164. package/dock/dock.d.ts +115 -0
  165. package/dock/dock.interface.d.ts +19 -0
  166. package/dock/index.d.ts +3 -136
  167. package/dock/public_api.d.ts +2 -0
  168. package/dom/connectedoverlayscrollhandler.d.ts +9 -0
  169. package/dom/domhandler.d.ts +95 -0
  170. package/dom/index.d.ts +3 -105
  171. package/dom/public_api.d.ts +2 -0
  172. package/dragdrop/dragdrop.d.ts +112 -0
  173. package/dragdrop/dragdrop.module.d.ts +8 -0
  174. package/dragdrop/index.d.ts +3 -120
  175. package/dragdrop/public_api.d.ts +2 -0
  176. package/dropdown/dropdown-item.d.ts +30 -0
  177. package/dropdown/dropdown.d.ts +628 -0
  178. package/dropdown/dropdown.interface.d.ts +154 -0
  179. package/dropdown/dropdown.module.d.ts +11 -0
  180. package/dropdown/index.d.ts +3 -818
  181. package/dropdown/public_api.d.ts +4 -0
  182. package/dynamicdialog/dialogservice.d.ts +35 -0
  183. package/dynamicdialog/dynamicdialog-config.d.ts +221 -0
  184. package/dynamicdialog/dynamicdialog-injector.d.ts +7 -0
  185. package/dynamicdialog/dynamicdialog-ref.d.ts +101 -0
  186. package/dynamicdialog/dynamicdialog.d.ts +124 -0
  187. package/dynamicdialog/dynamicdialogcontent.d.ts +8 -0
  188. package/dynamicdialog/index.d.ts +3 -490
  189. package/dynamicdialog/public_api.d.ts +6 -0
  190. package/editor/editor.d.ts +104 -0
  191. package/editor/editor.interface.d.ts +64 -0
  192. package/editor/editor.module.d.ts +9 -0
  193. package/editor/index.d.ts +3 -177
  194. package/editor/public_api.d.ts +3 -0
  195. package/esm2022/accordion/accordion.interface.mjs +2 -0
  196. package/esm2022/accordion/accordion.mjs +598 -0
  197. package/esm2022/accordion/accordion.module.mjs +23 -0
  198. package/esm2022/accordion/cax-design-system-accordion.mjs +5 -0
  199. package/esm2022/accordion/public_api.mjs +4 -0
  200. package/esm2022/animate/animate.mjs +101 -0
  201. package/esm2022/animate/cax-design-system-animate.mjs +5 -0
  202. package/esm2022/animate/public_api.mjs +2 -0
  203. package/esm2022/animateonscroll/animateonscroll.mjs +185 -0
  204. package/esm2022/animateonscroll/cax-design-system-animateonscroll.mjs +5 -0
  205. package/esm2022/animateonscroll/public_api.mjs +2 -0
  206. package/esm2022/api/blockableui.mjs +2 -0
  207. package/esm2022/api/cax-design-system-api.mjs +5 -0
  208. package/esm2022/api/caxconfig.mjs +163 -0
  209. package/esm2022/api/confirmaeventtype.mjs +10 -0
  210. package/esm2022/api/confirmation.mjs +2 -0
  211. package/esm2022/api/confirmationservice.mjs +43 -0
  212. package/esm2022/api/contextmenuservice.mjs +22 -0
  213. package/esm2022/api/filtermatchmode.mjs +23 -0
  214. package/esm2022/api/filtermetadata.mjs +2 -0
  215. package/esm2022/api/filteroperator.mjs +5 -0
  216. package/esm2022/api/filterservice.mjs +225 -0
  217. package/esm2022/api/lazyloadevent.mjs +2 -0
  218. package/esm2022/api/lazyloadmeta.mjs +2 -0
  219. package/esm2022/api/megamenuitem.mjs +2 -0
  220. package/esm2022/api/menuitem.mjs +2 -0
  221. package/esm2022/api/message.mjs +2 -0
  222. package/esm2022/api/messageservice.mjs +47 -0
  223. package/esm2022/api/overlayoptions.mjs +2 -0
  224. package/esm2022/api/overlayservice.mjs +19 -0
  225. package/esm2022/api/primeicons.mjs +314 -0
  226. package/esm2022/api/public_api.mjs +35 -0
  227. package/esm2022/api/scrolleroptions.mjs +2 -0
  228. package/esm2022/api/selectitem.mjs +2 -0
  229. package/esm2022/api/selectitemgroup.mjs +2 -0
  230. package/esm2022/api/shared.mjs +65 -0
  231. package/esm2022/api/sortevent.mjs +2 -0
  232. package/esm2022/api/sortmeta.mjs +2 -0
  233. package/esm2022/api/tablestate.mjs +2 -0
  234. package/esm2022/api/themegeneratorservice.mjs +109 -0
  235. package/esm2022/api/tooltipoptions.mjs +2 -0
  236. package/esm2022/api/translation.mjs +2 -0
  237. package/esm2022/api/translationkeys.mjs +51 -0
  238. package/esm2022/api/treedragdropservice.mjs +21 -0
  239. package/esm2022/api/treenode.mjs +2 -0
  240. package/esm2022/api/treenodedragevent.mjs +2 -0
  241. package/esm2022/api/treetablenode.mjs +2 -0
  242. package/esm2022/autocomplete/autocomplete.interface.mjs +2 -0
  243. package/esm2022/autocomplete/autocomplete.mjs +1462 -0
  244. package/esm2022/autocomplete/autocomplete.module.mjs +30 -0
  245. package/esm2022/autocomplete/cax-design-system-autocomplete.mjs +5 -0
  246. package/esm2022/autocomplete/public_api.mjs +4 -0
  247. package/esm2022/autofocus/autofocus.mjs +78 -0
  248. package/esm2022/autofocus/cax-design-system-autofocus.mjs +5 -0
  249. package/esm2022/autofocus/public_api.mjs +2 -0
  250. package/esm2022/avatar/avatar.mjs +104 -0
  251. package/esm2022/avatar/avatar.module.mjs +16 -0
  252. package/esm2022/avatar/cax-design-system-avatar.mjs +5 -0
  253. package/esm2022/avatar/public_api.mjs +3 -0
  254. package/esm2022/avatargroup/avatargroup.mjs +32 -0
  255. package/esm2022/avatargroup/avatargroup.module.mjs +19 -0
  256. package/esm2022/avatargroup/cax-design-system-avatargroup.mjs +5 -0
  257. package/esm2022/avatargroup/public_api.mjs +3 -0
  258. package/esm2022/badge/badge.directive.mjs +193 -0
  259. package/esm2022/badge/badge.mjs +50 -0
  260. package/esm2022/badge/badge.module.mjs +20 -0
  261. package/esm2022/badge/cax-design-system-badge.mjs +5 -0
  262. package/esm2022/badge/public_api.mjs +4 -0
  263. package/esm2022/baseicon/baseicon.mjs +45 -0
  264. package/esm2022/baseicon/cax-design-system-baseicon.mjs +5 -0
  265. package/esm2022/baseicon/public_api.mjs +2 -0
  266. package/esm2022/blockui/blockui.interface.mjs +2 -0
  267. package/esm2022/blockui/blockui.mjs +206 -0
  268. package/esm2022/blockui/cax-design-system-blockui.mjs +5 -0
  269. package/esm2022/blockui/public_api.mjs +3 -0
  270. package/esm2022/breadcrumb/breadcrumb.interface.mjs +2 -0
  271. package/esm2022/breadcrumb/breadcrumb.mjs +120 -0
  272. package/esm2022/breadcrumb/breadcrumb.module.mjs +23 -0
  273. package/esm2022/breadcrumb/cax-design-system-breadcrumb.mjs +5 -0
  274. package/esm2022/breadcrumb/public_api.mjs +4 -0
  275. package/esm2022/button/button.directive.mjs +259 -0
  276. package/esm2022/button/button.interface.mjs +2 -0
  277. package/esm2022/button/button.mjs +190 -0
  278. package/esm2022/button/button.module.mjs +18 -0
  279. package/esm2022/button/cax-design-system-button.mjs +5 -0
  280. package/esm2022/button/public_api.mjs +5 -0
  281. package/esm2022/buttongroup/buttongroup.mjs +38 -0
  282. package/esm2022/buttongroup/cax-design-system-buttongroup.mjs +5 -0
  283. package/esm2022/buttongroup/public_api.mjs +2 -0
  284. package/esm2022/calendar/calendar.interface.mjs +2 -0
  285. package/esm2022/calendar/calendar.mjs +3242 -0
  286. package/esm2022/calendar/calendar.module.mjs +18 -0
  287. package/esm2022/calendar/cax-design-system-calendar.mjs +5 -0
  288. package/esm2022/calendar/public_api.mjs +4 -0
  289. package/esm2022/card/card.interface.mjs +2 -0
  290. package/esm2022/card/card.mjs +117 -0
  291. package/esm2022/card/card.module.mjs +21 -0
  292. package/esm2022/card/cax-design-system-card.mjs +5 -0
  293. package/esm2022/card/public_api.mjs +4 -0
  294. package/esm2022/carousel/carousel.interface.mjs +2 -0
  295. package/esm2022/carousel/carousel.mjs +968 -0
  296. package/esm2022/carousel/cax-design-system-carousel.mjs +5 -0
  297. package/esm2022/carousel/public_api.mjs +3 -0
  298. package/esm2022/cascadeselect/cascadeselect.interface.mjs +2 -0
  299. package/esm2022/cascadeselect/cascadeselect.mjs +1135 -0
  300. package/esm2022/cascadeselect/cascadeselect.module.mjs +25 -0
  301. package/esm2022/cascadeselect/cax-design-system-cascadeselect.mjs +5 -0
  302. package/esm2022/cascadeselect/public_api.mjs +4 -0
  303. package/esm2022/cax-design-system.mjs +5 -0
  304. package/esm2022/chart/cax-design-system-chart.mjs +5 -0
  305. package/esm2022/chart/chart.mjs +236 -0
  306. package/esm2022/chart/public_api.mjs +2 -0
  307. package/esm2022/checkbox/cax-design-system-checkbox.mjs +5 -0
  308. package/esm2022/checkbox/checkbox.interface.mjs +2 -0
  309. package/esm2022/checkbox/checkbox.mjs +318 -0
  310. package/esm2022/checkbox/checkbox.module.mjs +20 -0
  311. package/esm2022/checkbox/public_api.mjs +4 -0
  312. package/esm2022/chip/cax-design-system-chip.mjs +5 -0
  313. package/esm2022/chip/chip.interface.mjs +2 -0
  314. package/esm2022/chip/chip.mjs +90 -0
  315. package/esm2022/chip/chip.module.mjs +20 -0
  316. package/esm2022/chip/public_api.mjs +4 -0
  317. package/esm2022/chips/cax-design-system-chips.mjs +5 -0
  318. package/esm2022/chips/chips.interface.mjs +2 -0
  319. package/esm2022/chips/chips.mjs +610 -0
  320. package/esm2022/chips/chips.module.mjs +23 -0
  321. package/esm2022/chips/public_api.mjs +4 -0
  322. package/esm2022/colorpicker/cax-design-system-colorpicker.mjs +5 -0
  323. package/esm2022/colorpicker/colorpicker.interface.mjs +2 -0
  324. package/esm2022/colorpicker/colorpicker.mjs +715 -0
  325. package/esm2022/colorpicker/colorpicker.module.mjs +19 -0
  326. package/esm2022/colorpicker/public_api.mjs +4 -0
  327. package/esm2022/commentbox/cax-design-system-commentbox.mjs +5 -0
  328. package/esm2022/commentbox/commentbox.mjs +575 -0
  329. package/esm2022/commentbox/commentbox.module.mjs +27 -0
  330. package/esm2022/commentbox/public_api.mjs +3 -0
  331. package/esm2022/confirmdialog/cax-design-system-confirmdialog.mjs +5 -0
  332. package/esm2022/confirmdialog/confirmdialog.interface.mjs +2 -0
  333. package/esm2022/confirmdialog/confirmdialog.mjs +720 -0
  334. package/esm2022/confirmdialog/confirmdialog.module.mjs +25 -0
  335. package/esm2022/confirmdialog/public_api.mjs +4 -0
  336. package/esm2022/confirmpopup/cax-design-system-confirmpopup.mjs +5 -0
  337. package/esm2022/confirmpopup/confirmpopup.interface.mjs +2 -0
  338. package/esm2022/confirmpopup/confirmpopup.mjs +499 -0
  339. package/esm2022/confirmpopup/public_api.mjs +3 -0
  340. package/esm2022/contextmenu/cax-design-system-contextmenu.mjs +5 -0
  341. package/esm2022/contextmenu/contextmenu.mjs +1304 -0
  342. package/esm2022/contextmenu/public_api.mjs +2 -0
  343. package/esm2022/dataview/cax-design-system-dataview.mjs +5 -0
  344. package/esm2022/dataview/dataview.interface.mjs +2 -0
  345. package/esm2022/dataview/dataview.mjs +723 -0
  346. package/esm2022/dataview/public_api.mjs +3 -0
  347. package/esm2022/defer/cax-design-system-defer.mjs +5 -0
  348. package/esm2022/defer/defer.mjs +111 -0
  349. package/esm2022/defer/public_api.mjs +2 -0
  350. package/esm2022/dialog/cax-design-system-dialog.mjs +5 -0
  351. package/esm2022/dialog/dialog.interface.mjs +2 -0
  352. package/esm2022/dialog/dialog.mjs +959 -0
  353. package/esm2022/dialog/dialog.module.mjs +25 -0
  354. package/esm2022/dialog/public_api.mjs +4 -0
  355. package/esm2022/divider/cax-design-system-divider.mjs +5 -0
  356. package/esm2022/divider/divider.mjs +69 -0
  357. package/esm2022/divider/divider.module.mjs +16 -0
  358. package/esm2022/divider/public_api.mjs +3 -0
  359. package/esm2022/dock/cax-design-system-dock.mjs +5 -0
  360. package/esm2022/dock/dock.interface.mjs +2 -0
  361. package/esm2022/dock/dock.mjs +431 -0
  362. package/esm2022/dock/public_api.mjs +3 -0
  363. package/esm2022/dom/cax-design-system-dom.mjs +5 -0
  364. package/esm2022/dom/connectedoverlayscrollhandler.mjs +30 -0
  365. package/esm2022/dom/domhandler.mjs +722 -0
  366. package/esm2022/dom/public_api.mjs +3 -0
  367. package/esm2022/dragdrop/cax-design-system-dragdrop.mjs +5 -0
  368. package/esm2022/dragdrop/dragdrop.mjs +309 -0
  369. package/esm2022/dragdrop/dragdrop.module.mjs +18 -0
  370. package/esm2022/dragdrop/public_api.mjs +3 -0
  371. package/esm2022/dropdown/cax-design-system-dropdown.mjs +5 -0
  372. package/esm2022/dropdown/dropdown-item.mjs +72 -0
  373. package/esm2022/dropdown/dropdown.interface.mjs +2 -0
  374. package/esm2022/dropdown/dropdown.mjs +1599 -0
  375. package/esm2022/dropdown/dropdown.module.mjs +20 -0
  376. package/esm2022/dropdown/public_api.mjs +5 -0
  377. package/esm2022/dynamicdialog/cax-design-system-dynamicdialog.mjs +5 -0
  378. package/esm2022/dynamicdialog/dialogservice.mjs +102 -0
  379. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +187 -0
  380. package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +15 -0
  381. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +119 -0
  382. package/esm2022/dynamicdialog/dynamicdialog.mjs +696 -0
  383. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +20 -0
  384. package/esm2022/dynamicdialog/public_api.mjs +7 -0
  385. package/esm2022/editor/cax-design-system-editor.mjs +5 -0
  386. package/esm2022/editor/editor.interface.mjs +2 -0
  387. package/esm2022/editor/editor.mjs +281 -0
  388. package/esm2022/editor/editor.module.mjs +19 -0
  389. package/esm2022/editor/public_api.mjs +4 -0
  390. package/esm2022/fieldset/cax-design-system-fieldset.mjs +5 -0
  391. package/esm2022/fieldset/fieldset.interface.mjs +2 -0
  392. package/esm2022/fieldset/fieldset.mjs +297 -0
  393. package/esm2022/fieldset/public_api.mjs +3 -0
  394. package/esm2022/fileupload/cax-design-system-fileupload.mjs +5 -0
  395. package/esm2022/fileupload/fileupload.interface.mjs +2 -0
  396. package/esm2022/fileupload/fileupload.mjs +1188 -0
  397. package/esm2022/fileupload/public_api.mjs +3 -0
  398. package/esm2022/floatlabel/cax-design-system-floatlabel.mjs +5 -0
  399. package/esm2022/floatlabel/floatlabel.mjs +28 -0
  400. package/esm2022/floatlabel/floatlabel.module.mjs +20 -0
  401. package/esm2022/floatlabel/public_api.mjs +3 -0
  402. package/esm2022/focustrap/cax-design-system-focustrap.mjs +5 -0
  403. package/esm2022/focustrap/focustrap.mjs +103 -0
  404. package/esm2022/focustrap/public_api.mjs +2 -0
  405. package/esm2022/galleria/cax-design-system-galleria.mjs +5 -0
  406. package/esm2022/galleria/galleria.interface.mjs +2 -0
  407. package/esm2022/galleria/galleria.mjs +1668 -0
  408. package/esm2022/galleria/public_api.mjs +3 -0
  409. package/esm2022/iconfield/cax-design-system-iconfield.mjs +5 -0
  410. package/esm2022/iconfield/iconfield.mjs +44 -0
  411. package/esm2022/iconfield/public_api.mjs +2 -0
  412. package/esm2022/icons/angledoubledown/angledoubledown.mjs +35 -0
  413. package/esm2022/icons/angledoubledown/cax-design-system-icons-angledoubledown.mjs +5 -0
  414. package/esm2022/icons/angledoubledown/public_api.mjs +2 -0
  415. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +35 -0
  416. package/esm2022/icons/angledoubleleft/cax-design-system-icons-angledoubleleft.mjs +5 -0
  417. package/esm2022/icons/angledoubleleft/public_api.mjs +2 -0
  418. package/esm2022/icons/angledoubleright/angledoubleright.mjs +35 -0
  419. package/esm2022/icons/angledoubleright/cax-design-system-icons-angledoubleright.mjs +5 -0
  420. package/esm2022/icons/angledoubleright/public_api.mjs +2 -0
  421. package/esm2022/icons/angledoubleup/angledoubleup.mjs +35 -0
  422. package/esm2022/icons/angledoubleup/cax-design-system-icons-angledoubleup.mjs +5 -0
  423. package/esm2022/icons/angledoubleup/public_api.mjs +2 -0
  424. package/esm2022/icons/angledown/angledown.mjs +31 -0
  425. package/esm2022/icons/angledown/cax-design-system-icons-angledown.mjs +5 -0
  426. package/esm2022/icons/angledown/public_api.mjs +2 -0
  427. package/esm2022/icons/angleleft/angleleft.mjs +31 -0
  428. package/esm2022/icons/angleleft/cax-design-system-icons-angleleft.mjs +5 -0
  429. package/esm2022/icons/angleleft/public_api.mjs +2 -0
  430. package/esm2022/icons/angleright/angleright.mjs +31 -0
  431. package/esm2022/icons/angleright/cax-design-system-icons-angleright.mjs +5 -0
  432. package/esm2022/icons/angleright/public_api.mjs +2 -0
  433. package/esm2022/icons/angleup/angleup.mjs +31 -0
  434. package/esm2022/icons/angleup/cax-design-system-icons-angleup.mjs +5 -0
  435. package/esm2022/icons/angleup/public_api.mjs +2 -0
  436. package/esm2022/icons/arrowdown/arrowdown.mjs +54 -0
  437. package/esm2022/icons/arrowdown/cax-design-system-icons-arrowdown.mjs +5 -0
  438. package/esm2022/icons/arrowdown/public_api.mjs +2 -0
  439. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +31 -0
  440. package/esm2022/icons/arrowdownleft/cax-design-system-icons-arrowdownleft.mjs +5 -0
  441. package/esm2022/icons/arrowdownleft/public_api.mjs +2 -0
  442. package/esm2022/icons/arrowdownright/arrowdownright.mjs +31 -0
  443. package/esm2022/icons/arrowdownright/cax-design-system-icons-arrowdownright.mjs +5 -0
  444. package/esm2022/icons/arrowdownright/public_api.mjs +2 -0
  445. package/esm2022/icons/arrowleft/arrowleft.mjs +54 -0
  446. package/esm2022/icons/arrowleft/cax-design-system-icons-arrowleft.mjs +5 -0
  447. package/esm2022/icons/arrowleft/public_api.mjs +2 -0
  448. package/esm2022/icons/arrowright/arrowright.mjs +35 -0
  449. package/esm2022/icons/arrowright/cax-design-system-icons-arrowright.mjs +5 -0
  450. package/esm2022/icons/arrowright/public_api.mjs +2 -0
  451. package/esm2022/icons/arrowup/arrowup.mjs +54 -0
  452. package/esm2022/icons/arrowup/cax-design-system-icons-arrowup.mjs +5 -0
  453. package/esm2022/icons/arrowup/public_api.mjs +2 -0
  454. package/esm2022/icons/ban/ban.mjs +50 -0
  455. package/esm2022/icons/ban/cax-design-system-icons-ban.mjs +5 -0
  456. package/esm2022/icons/ban/public_api.mjs +2 -0
  457. package/esm2022/icons/bars/bars.mjs +35 -0
  458. package/esm2022/icons/bars/cax-design-system-icons-bars.mjs +5 -0
  459. package/esm2022/icons/bars/public_api.mjs +2 -0
  460. package/esm2022/icons/blank/blank.mjs +25 -0
  461. package/esm2022/icons/blank/cax-design-system-icons-blank.mjs +5 -0
  462. package/esm2022/icons/blank/public_api.mjs +2 -0
  463. package/esm2022/icons/calendar/calendar.mjs +31 -0
  464. package/esm2022/icons/calendar/cax-design-system-icons-calendar.mjs +5 -0
  465. package/esm2022/icons/calendar/public_api.mjs +2 -0
  466. package/esm2022/icons/caretleft/caretleft.mjs +31 -0
  467. package/esm2022/icons/caretleft/cax-design-system-icons-caretleft.mjs +5 -0
  468. package/esm2022/icons/caretleft/public_api.mjs +2 -0
  469. package/esm2022/icons/caretright/caretright.mjs +31 -0
  470. package/esm2022/icons/caretright/cax-design-system-icons-caretright.mjs +5 -0
  471. package/esm2022/icons/caretright/public_api.mjs +2 -0
  472. package/esm2022/icons/check/cax-design-system-icons-check.mjs +5 -0
  473. package/esm2022/icons/check/check.mjs +31 -0
  474. package/esm2022/icons/check/public_api.mjs +2 -0
  475. package/esm2022/icons/chevrondown/cax-design-system-icons-chevrondown.mjs +5 -0
  476. package/esm2022/icons/chevrondown/chevrondown.mjs +31 -0
  477. package/esm2022/icons/chevrondown/public_api.mjs +2 -0
  478. package/esm2022/icons/chevronleft/cax-design-system-icons-chevronleft.mjs +5 -0
  479. package/esm2022/icons/chevronleft/chevronleft.mjs +31 -0
  480. package/esm2022/icons/chevronleft/public_api.mjs +2 -0
  481. package/esm2022/icons/chevronright/cax-design-system-icons-chevronright.mjs +5 -0
  482. package/esm2022/icons/chevronright/chevronright.mjs +31 -0
  483. package/esm2022/icons/chevronright/public_api.mjs +2 -0
  484. package/esm2022/icons/chevronup/cax-design-system-icons-chevronup.mjs +5 -0
  485. package/esm2022/icons/chevronup/chevronup.mjs +31 -0
  486. package/esm2022/icons/chevronup/public_api.mjs +2 -0
  487. package/esm2022/icons/exclamationtriangle/cax-design-system-icons-exclamationtriangle.mjs +5 -0
  488. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +66 -0
  489. package/esm2022/icons/exclamationtriangle/public_api.mjs +2 -0
  490. package/esm2022/icons/eye/cax-design-system-icons-eye.mjs +5 -0
  491. package/esm2022/icons/eye/eye.mjs +35 -0
  492. package/esm2022/icons/eye/public_api.mjs +2 -0
  493. package/esm2022/icons/eyeslash/cax-design-system-icons-eyeslash.mjs +5 -0
  494. package/esm2022/icons/eyeslash/eyeslash.mjs +54 -0
  495. package/esm2022/icons/eyeslash/public_api.mjs +2 -0
  496. package/esm2022/icons/filter/cax-design-system-icons-filter.mjs +5 -0
  497. package/esm2022/icons/filter/filter.mjs +50 -0
  498. package/esm2022/icons/filter/public_api.mjs +2 -0
  499. package/esm2022/icons/filterslash/cax-design-system-icons-filterslash.mjs +5 -0
  500. package/esm2022/icons/filterslash/filterslash.mjs +54 -0
  501. package/esm2022/icons/filterslash/public_api.mjs +2 -0
  502. package/esm2022/icons/home/cax-design-system-icons-home.mjs +5 -0
  503. package/esm2022/icons/home/home.mjs +54 -0
  504. package/esm2022/icons/home/public_api.mjs +2 -0
  505. package/esm2022/icons/infocircle/cax-design-system-icons-infocircle.mjs +5 -0
  506. package/esm2022/icons/infocircle/infocircle.mjs +54 -0
  507. package/esm2022/icons/infocircle/public_api.mjs +2 -0
  508. package/esm2022/icons/minus/cax-design-system-icons-minus.mjs +5 -0
  509. package/esm2022/icons/minus/minus.mjs +32 -0
  510. package/esm2022/icons/minus/public_api.mjs +2 -0
  511. package/esm2022/icons/pencil/cax-design-system-icons-pencil.mjs +5 -0
  512. package/esm2022/icons/pencil/pencil.mjs +50 -0
  513. package/esm2022/icons/pencil/public_api.mjs +2 -0
  514. package/esm2022/icons/plus/cax-design-system-icons-plus.mjs +5 -0
  515. package/esm2022/icons/plus/plus.mjs +50 -0
  516. package/esm2022/icons/plus/public_api.mjs +2 -0
  517. package/esm2022/icons/refresh/cax-design-system-icons-refresh.mjs +5 -0
  518. package/esm2022/icons/refresh/public_api.mjs +2 -0
  519. package/esm2022/icons/refresh/refresh.mjs +54 -0
  520. package/esm2022/icons/search/cax-design-system-icons-search.mjs +5 -0
  521. package/esm2022/icons/search/public_api.mjs +2 -0
  522. package/esm2022/icons/search/search.mjs +54 -0
  523. package/esm2022/icons/searchminus/cax-design-system-icons-searchminus.mjs +5 -0
  524. package/esm2022/icons/searchminus/public_api.mjs +2 -0
  525. package/esm2022/icons/searchminus/searchminus.mjs +54 -0
  526. package/esm2022/icons/searchplus/cax-design-system-icons-searchplus.mjs +5 -0
  527. package/esm2022/icons/searchplus/public_api.mjs +2 -0
  528. package/esm2022/icons/searchplus/searchplus.mjs +54 -0
  529. package/esm2022/icons/sortalt/cax-design-system-icons-sortalt.mjs +5 -0
  530. package/esm2022/icons/sortalt/public_api.mjs +2 -0
  531. package/esm2022/icons/sortalt/sortalt.mjs +62 -0
  532. package/esm2022/icons/sortamountdown/cax-design-system-icons-sortamountdown.mjs +5 -0
  533. package/esm2022/icons/sortamountdown/public_api.mjs +2 -0
  534. package/esm2022/icons/sortamountdown/sortamountdown.mjs +50 -0
  535. package/esm2022/icons/sortamountupalt/cax-design-system-icons-sortamountupalt.mjs +5 -0
  536. package/esm2022/icons/sortamountupalt/public_api.mjs +2 -0
  537. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +50 -0
  538. package/esm2022/icons/spinner/cax-design-system-icons-spinner.mjs +5 -0
  539. package/esm2022/icons/spinner/public_api.mjs +2 -0
  540. package/esm2022/icons/spinner/spinner.mjs +50 -0
  541. package/esm2022/icons/star/cax-design-system-icons-star.mjs +5 -0
  542. package/esm2022/icons/star/public_api.mjs +2 -0
  543. package/esm2022/icons/star/star.mjs +50 -0
  544. package/esm2022/icons/starfill/cax-design-system-icons-starfill.mjs +5 -0
  545. package/esm2022/icons/starfill/public_api.mjs +2 -0
  546. package/esm2022/icons/starfill/starfill.mjs +50 -0
  547. package/esm2022/icons/thlarge/cax-design-system-icons-thlarge.mjs +5 -0
  548. package/esm2022/icons/thlarge/public_api.mjs +2 -0
  549. package/esm2022/icons/thlarge/thlarge.mjs +54 -0
  550. package/esm2022/icons/times/cax-design-system-icons-times.mjs +5 -0
  551. package/esm2022/icons/times/public_api.mjs +2 -0
  552. package/esm2022/icons/times/times.mjs +31 -0
  553. package/esm2022/icons/timescircle/cax-design-system-icons-timescircle.mjs +5 -0
  554. package/esm2022/icons/timescircle/public_api.mjs +2 -0
  555. package/esm2022/icons/timescircle/timescircle.mjs +54 -0
  556. package/esm2022/icons/trash/cax-design-system-icons-trash.mjs +5 -0
  557. package/esm2022/icons/trash/public_api.mjs +2 -0
  558. package/esm2022/icons/trash/trash.mjs +54 -0
  559. package/esm2022/icons/undo/cax-design-system-icons-undo.mjs +5 -0
  560. package/esm2022/icons/undo/public_api.mjs +2 -0
  561. package/esm2022/icons/undo/undo.mjs +54 -0
  562. package/esm2022/icons/upload/cax-design-system-icons-upload.mjs +5 -0
  563. package/esm2022/icons/upload/public_api.mjs +2 -0
  564. package/esm2022/icons/upload/upload.mjs +54 -0
  565. package/esm2022/icons/windowmaximize/cax-design-system-icons-windowmaximize.mjs +5 -0
  566. package/esm2022/icons/windowmaximize/public_api.mjs +2 -0
  567. package/esm2022/icons/windowmaximize/windowmaximize.mjs +54 -0
  568. package/esm2022/icons/windowminimize/cax-design-system-icons-windowminimize.mjs +5 -0
  569. package/esm2022/icons/windowminimize/public_api.mjs +2 -0
  570. package/esm2022/icons/windowminimize/windowminimize.mjs +54 -0
  571. package/esm2022/image/cax-design-system-image.mjs +5 -0
  572. package/esm2022/image/image.interface.mjs +2 -0
  573. package/esm2022/image/image.mjs +418 -0
  574. package/esm2022/image/image.module.mjs +17 -0
  575. package/esm2022/image/public_api.mjs +4 -0
  576. package/esm2022/inplace/cax-design-system-inplace.mjs +5 -0
  577. package/esm2022/inplace/inplace.interface.mjs +2 -0
  578. package/esm2022/inplace/inplace.mjs +243 -0
  579. package/esm2022/inplace/public_api.mjs +3 -0
  580. package/esm2022/inputgroup/cax-design-system-inputgroup.mjs +5 -0
  581. package/esm2022/inputgroup/inputgroup.mjs +55 -0
  582. package/esm2022/inputgroup/inputgroup.module.mjs +25 -0
  583. package/esm2022/inputgroup/public_api.mjs +3 -0
  584. package/esm2022/inputgroupaddon/cax-design-system-inputgroupaddon.mjs +5 -0
  585. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +32 -0
  586. package/esm2022/inputgroupaddon/inputgroupaddon.module.mjs +24 -0
  587. package/esm2022/inputgroupaddon/public_api.mjs +3 -0
  588. package/esm2022/inputicon/cax-design-system-inputicon.mjs +5 -0
  589. package/esm2022/inputicon/inputicon.mjs +38 -0
  590. package/esm2022/inputicon/public_api.mjs +2 -0
  591. package/esm2022/inputmask/cax-design-system-inputmask.mjs +5 -0
  592. package/esm2022/inputmask/inputmask.interface.mjs +2 -0
  593. package/esm2022/inputmask/inputmask.mjs +848 -0
  594. package/esm2022/inputmask/inputmask.module.mjs +22 -0
  595. package/esm2022/inputmask/public_api.mjs +4 -0
  596. package/esm2022/inputnumber/cax-design-system-inputnumber.mjs +5 -0
  597. package/esm2022/inputnumber/inputnumber.interface.mjs +2 -0
  598. package/esm2022/inputnumber/inputnumber.mjs +1296 -0
  599. package/esm2022/inputnumber/inputnumber.module.mjs +17 -0
  600. package/esm2022/inputnumber/public_api.mjs +4 -0
  601. package/esm2022/inputotp/cax-design-system-inputotp.mjs +5 -0
  602. package/esm2022/inputotp/inputotp.interface.mjs +2 -0
  603. package/esm2022/inputotp/inputotp.mjs +381 -0
  604. package/esm2022/inputotp/public_api.mjs +3 -0
  605. package/esm2022/inputswitch/cax-design-system-inputswitch.mjs +5 -0
  606. package/esm2022/inputswitch/inputswitch.interface.mjs +2 -0
  607. package/esm2022/inputswitch/inputswitch.mjs +244 -0
  608. package/esm2022/inputswitch/public_api.mjs +3 -0
  609. package/esm2022/inputtext/cax-design-system-inputtext.mjs +5 -0
  610. package/esm2022/inputtext/inputtext.component.mjs +132 -0
  611. package/esm2022/inputtext/inputtext.directive.mjs +76 -0
  612. package/esm2022/inputtext/inputtext.module.mjs +20 -0
  613. package/esm2022/inputtext/public_api.mjs +4 -0
  614. package/esm2022/inputtextarea/cax-design-system-inputtextarea.mjs +5 -0
  615. package/esm2022/inputtextarea/inputtextarea.component.mjs +155 -0
  616. package/esm2022/inputtextarea/inputtextarea.directive.mjs +121 -0
  617. package/esm2022/inputtextarea/inputtextarea.module.mjs +20 -0
  618. package/esm2022/inputtextarea/public_api.mjs +4 -0
  619. package/esm2022/keyfilter/cax-design-system-keyfilter.mjs +5 -0
  620. package/esm2022/keyfilter/keyfilter.interface.mjs +2 -0
  621. package/esm2022/keyfilter/keyfilter.mjs +265 -0
  622. package/esm2022/keyfilter/public_api.mjs +3 -0
  623. package/esm2022/knob/cax-design-system-knob.mjs +5 -0
  624. package/esm2022/knob/knob.mjs +464 -0
  625. package/esm2022/knob/public_api.mjs +2 -0
  626. package/esm2022/listbox/cax-design-system-listbox.mjs +5 -0
  627. package/esm2022/listbox/listbox.interface.mjs +2 -0
  628. package/esm2022/listbox/listbox.mjs +1555 -0
  629. package/esm2022/listbox/public_api.mjs +3 -0
  630. package/esm2022/logo/cax-design-system-logo.mjs +5 -0
  631. package/esm2022/logo/logo.mjs +45 -0
  632. package/esm2022/logo/logo.module.mjs +16 -0
  633. package/esm2022/logo/public_api.mjs +3 -0
  634. package/esm2022/megamenu/cax-design-system-megamenu.mjs +5 -0
  635. package/esm2022/megamenu/megamenu.interface.mjs +2 -0
  636. package/esm2022/megamenu/megamenu.mjs +1190 -0
  637. package/esm2022/megamenu/public_api.mjs +3 -0
  638. package/esm2022/menu/cax-design-system-menu.mjs +5 -0
  639. package/esm2022/menu/menu.mjs +626 -0
  640. package/esm2022/menu/menu.module.mjs +22 -0
  641. package/esm2022/menu/public_api.mjs +3 -0
  642. package/esm2022/menubar/cax-design-system-menubar.mjs +5 -0
  643. package/esm2022/menubar/menubar.interface.mjs +2 -0
  644. package/esm2022/menubar/menubar.mjs +1249 -0
  645. package/esm2022/menubar/public_api.mjs +3 -0
  646. package/esm2022/message/cax-design-system-message.mjs +5 -0
  647. package/esm2022/message/message.mjs +112 -0
  648. package/esm2022/message/public_api.mjs +2 -0
  649. package/esm2022/messages/cax-design-system-messages.mjs +5 -0
  650. package/esm2022/messages/messages.interface.mjs +2 -0
  651. package/esm2022/messages/messages.mjs +283 -0
  652. package/esm2022/messages/messages.module.mjs +17 -0
  653. package/esm2022/messages/public_api.mjs +4 -0
  654. package/esm2022/metergroup/cax-design-system-metergroup.mjs +5 -0
  655. package/esm2022/metergroup/metergroup.interface.mjs +2 -0
  656. package/esm2022/metergroup/metergroup.mjs +280 -0
  657. package/esm2022/metergroup/public_api.mjs +3 -0
  658. package/esm2022/multiselect/cax-design-system-multiselect.mjs +5 -0
  659. package/esm2022/multiselect/multiselect.interface.mjs +2 -0
  660. package/esm2022/multiselect/multiselect.mjs +1875 -0
  661. package/esm2022/multiselect/multiselect.module.mjs +30 -0
  662. package/esm2022/multiselect/public_api.mjs +4 -0
  663. package/esm2022/navigation/cax-design-system-navigation.mjs +5 -0
  664. package/esm2022/navigation/navigation.interface.mjs +2 -0
  665. package/esm2022/navigation/navigation.mjs +399 -0
  666. package/esm2022/navigation/navigation.module.mjs +16 -0
  667. package/esm2022/navigation/public_api.mjs +3 -0
  668. package/esm2022/orderlist/cax-design-system-orderlist.mjs +5 -0
  669. package/esm2022/orderlist/orderlist.interface.mjs +2 -0
  670. package/esm2022/orderlist/orderlist.mjs +993 -0
  671. package/esm2022/orderlist/public_api.mjs +3 -0
  672. package/esm2022/organizationchart/cax-design-system-organizationchart.mjs +5 -0
  673. package/esm2022/organizationchart/organizationchart.interface.mjs +2 -0
  674. package/esm2022/organizationchart/organizationchart.mjs +416 -0
  675. package/esm2022/organizationchart/public_api.mjs +3 -0
  676. package/esm2022/overlay/cax-design-system-overlay.mjs +5 -0
  677. package/esm2022/overlay/overlay.mjs +579 -0
  678. package/esm2022/overlay/overlay.module.mjs +17 -0
  679. package/esm2022/overlay/public_api.mjs +3 -0
  680. package/esm2022/overlaypanel/cax-design-system-overlaypanel.mjs +5 -0
  681. package/esm2022/overlaypanel/overlaypanel.mjs +470 -0
  682. package/esm2022/overlaypanel/overlaypanel.module.mjs +17 -0
  683. package/esm2022/overlaypanel/public_api.mjs +3 -0
  684. package/esm2022/paginator/cax-design-system-paginator.mjs +5 -0
  685. package/esm2022/paginator/paginator.interface.mjs +2 -0
  686. package/esm2022/paginator/paginator.mjs +437 -0
  687. package/esm2022/paginator/paginator.module.mjs +27 -0
  688. package/esm2022/paginator/public_api.mjs +4 -0
  689. package/esm2022/panel/cax-design-system-panel.mjs +5 -0
  690. package/esm2022/panel/panel.interface.mjs +2 -0
  691. package/esm2022/panel/panel.mjs +393 -0
  692. package/esm2022/panel/public_api.mjs +3 -0
  693. package/esm2022/panelmenu/cax-design-system-panelmenu.mjs +5 -0
  694. package/esm2022/panelmenu/panelmenu.interface.mjs +2 -0
  695. package/esm2022/panelmenu/panelmenu.mjs +1276 -0
  696. package/esm2022/panelmenu/public_api.mjs +3 -0
  697. package/esm2022/password/cax-design-system-password.mjs +5 -0
  698. package/esm2022/password/password.mjs +1017 -0
  699. package/esm2022/password/public_api.mjs +2 -0
  700. package/esm2022/picklist/cax-design-system-picklist.mjs +5 -0
  701. package/esm2022/picklist/picklist.interface.mjs +2 -0
  702. package/esm2022/picklist/picklist.mjs +1909 -0
  703. package/esm2022/picklist/public_api.mjs +3 -0
  704. package/esm2022/progressbar/cax-design-system-progressbar.mjs +5 -0
  705. package/esm2022/progressbar/progressbar.mjs +86 -0
  706. package/esm2022/progressbar/progressbar.module.mjs +18 -0
  707. package/esm2022/progressbar/public_api.mjs +3 -0
  708. package/esm2022/progressspinner/cax-design-system-progressspinner.mjs +5 -0
  709. package/esm2022/progressspinner/progressspinner.mjs +112 -0
  710. package/esm2022/progressspinner/progressspinner.module.mjs +18 -0
  711. package/esm2022/progressspinner/public_api.mjs +3 -0
  712. package/esm2022/public_api.mjs +2 -0
  713. package/esm2022/radiobutton/cax-design-system-radiobutton.mjs +5 -0
  714. package/esm2022/radiobutton/public_api.mjs +4 -0
  715. package/esm2022/radiobutton/radiobutton.interface.mjs +2 -0
  716. package/esm2022/radiobutton/radiobutton.mjs +284 -0
  717. package/esm2022/radiobutton/radiobutton.module.mjs +16 -0
  718. package/esm2022/rating/cax-design-system-rating.mjs +5 -0
  719. package/esm2022/rating/public_api.mjs +3 -0
  720. package/esm2022/rating/rating.interface.mjs +2 -0
  721. package/esm2022/rating/rating.mjs +388 -0
  722. package/esm2022/ripple/cax-design-system-ripple.mjs +5 -0
  723. package/esm2022/ripple/public_api.mjs +3 -0
  724. package/esm2022/ripple/ripple.mjs +129 -0
  725. package/esm2022/ripple/ripple.module.mjs +16 -0
  726. package/esm2022/scroller/cax-design-system-scroller.mjs +5 -0
  727. package/esm2022/scroller/public_api.mjs +4 -0
  728. package/esm2022/scroller/scroller.interface.mjs +2 -0
  729. package/esm2022/scroller/scroller.mjs +981 -0
  730. package/esm2022/scroller/scroller.module.mjs +17 -0
  731. package/esm2022/scrollpanel/cax-design-system-scrollpanel.mjs +5 -0
  732. package/esm2022/scrollpanel/public_api.mjs +3 -0
  733. package/esm2022/scrollpanel/scrollpanel.interface.mjs +2 -0
  734. package/esm2022/scrollpanel/scrollpanel.mjs +501 -0
  735. package/esm2022/scrolltop/cax-design-system-scrolltop.mjs +5 -0
  736. package/esm2022/scrolltop/public_api.mjs +3 -0
  737. package/esm2022/scrolltop/scrolltop.interface.mjs +2 -0
  738. package/esm2022/scrolltop/scrolltop.mjs +282 -0
  739. package/esm2022/selectbutton/cax-design-system-selectbutton.mjs +5 -0
  740. package/esm2022/selectbutton/public_api.mjs +4 -0
  741. package/esm2022/selectbutton/selectbutton.interface.mjs +2 -0
  742. package/esm2022/selectbutton/selectbutton.mjs +303 -0
  743. package/esm2022/selectbutton/selectbutton.module.mjs +21 -0
  744. package/esm2022/sidebar/cax-design-system-sidebar.mjs +5 -0
  745. package/esm2022/sidebar/public_api.mjs +4 -0
  746. package/esm2022/sidebar/sidebar.interface.mjs +2 -0
  747. package/esm2022/sidebar/sidebar.mjs +488 -0
  748. package/esm2022/sidebar/sidebar.module.mjs +21 -0
  749. package/esm2022/skeleton/cax-design-system-skeleton.mjs +5 -0
  750. package/esm2022/skeleton/public_api.mjs +3 -0
  751. package/esm2022/skeleton/skeleton.mjs +87 -0
  752. package/esm2022/skeleton/skeleton.module.mjs +18 -0
  753. package/esm2022/slidemenu/cax-design-system-slidemenu.mjs +5 -0
  754. package/esm2022/slidemenu/public_api.mjs +3 -0
  755. package/esm2022/slidemenu/slidemenu.interface.mjs +2 -0
  756. package/esm2022/slidemenu/slidemenu.mjs +1501 -0
  757. package/esm2022/slider/cax-design-system-slider.mjs +5 -0
  758. package/esm2022/slider/public_api.mjs +3 -0
  759. package/esm2022/slider/slider.interface.mjs +2 -0
  760. package/esm2022/slider/slider.mjs +796 -0
  761. package/esm2022/speeddial/cax-design-system-speeddial.mjs +5 -0
  762. package/esm2022/speeddial/public_api.mjs +4 -0
  763. package/esm2022/speeddial/speeddial.interface.mjs +2 -0
  764. package/esm2022/speeddial/speeddial.mjs +611 -0
  765. package/esm2022/speeddial/speeddial.module.mjs +24 -0
  766. package/esm2022/spinner/cax-design-system-spinner.mjs +5 -0
  767. package/esm2022/spinner/public_api.mjs +2 -0
  768. package/esm2022/spinner/spinner.mjs +447 -0
  769. package/esm2022/splitbutton/cax-design-system-splitbutton.mjs +5 -0
  770. package/esm2022/splitbutton/public_api.mjs +4 -0
  771. package/esm2022/splitbutton/splitbutton.interface.mjs +2 -0
  772. package/esm2022/splitbutton/splitbutton.mjs +369 -0
  773. package/esm2022/splitbutton/splitbutton.module.mjs +23 -0
  774. package/esm2022/splitter/cax-design-system-splitter.mjs +5 -0
  775. package/esm2022/splitter/public_api.mjs +4 -0
  776. package/esm2022/splitter/splitter.interface.mjs +2 -0
  777. package/esm2022/splitter/splitter.mjs +490 -0
  778. package/esm2022/splitter/splitter.module.mjs +19 -0
  779. package/esm2022/stepper/cax-design-system-stepper.mjs +5 -0
  780. package/esm2022/stepper/public_api.mjs +3 -0
  781. package/esm2022/stepper/stepper.interface.mjs +2 -0
  782. package/esm2022/stepper/stepper.mjs +677 -0
  783. package/esm2022/steps/cax-design-system-steps.mjs +5 -0
  784. package/esm2022/steps/public_api.mjs +3 -0
  785. package/esm2022/steps/steps.mjs +207 -0
  786. package/esm2022/steps/steps.module.mjs +20 -0
  787. package/esm2022/styleclass/cax-design-system-styleclass.mjs +5 -0
  788. package/esm2022/styleclass/public_api.mjs +2 -0
  789. package/esm2022/styleclass/styleclass.mjs +316 -0
  790. package/esm2022/table/cax-design-system-table.mjs +5 -0
  791. package/esm2022/table/columnfilter.interface.mjs +2 -0
  792. package/esm2022/table/components/cell-editor/cell-editor.mjs +52 -0
  793. package/esm2022/table/components/column-filter/column-filter.mjs +865 -0
  794. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +107 -0
  795. package/esm2022/table/components/sort-icon/sort-icon.mjs +78 -0
  796. package/esm2022/table/components/table-body/table-body.mjs +152 -0
  797. package/esm2022/table/components/table-checkbox/table-checkbox.mjs +83 -0
  798. package/esm2022/table/components/table-header-checkbox/table-header-checkbox.mjs +92 -0
  799. package/esm2022/table/components/table-radio-button/table-radio-button.mjs +79 -0
  800. package/esm2022/table/directives/cancel-editable-row.directive.mjs +32 -0
  801. package/esm2022/table/directives/cell-highlight.directive.mjs +42 -0
  802. package/esm2022/table/directives/content-menu-row.directive.mjs +70 -0
  803. package/esm2022/table/directives/dynamic-column-width.directive.mjs +34 -0
  804. package/esm2022/table/directives/editable-column.directive.mjs +344 -0
  805. package/esm2022/table/directives/editable-row.directive.mjs +32 -0
  806. package/esm2022/table/directives/frozen-column.directive.mjs +77 -0
  807. package/esm2022/table/directives/init-editable-row.directive.mjs +32 -0
  808. package/esm2022/table/directives/reorderable-column.directive.mjs +115 -0
  809. package/esm2022/table/directives/reorderable-row-handle.directive.mjs +25 -0
  810. package/esm2022/table/directives/reorderable-row.directive.mjs +122 -0
  811. package/esm2022/table/directives/resizable-column.directive.mjs +123 -0
  812. package/esm2022/table/directives/row-group-header.directive.mjs +26 -0
  813. package/esm2022/table/directives/row-toggler.directive.mjs +42 -0
  814. package/esm2022/table/directives/save-editable-row.directive.mjs +32 -0
  815. package/esm2022/table/directives/selectable-row-double-click.directive.mjs +71 -0
  816. package/esm2022/table/directives/selectable-row.directive.mjs +243 -0
  817. package/esm2022/table/directives/sortable-column.directive.mjs +90 -0
  818. package/esm2022/table/public_api.mjs +31 -0
  819. package/esm2022/table/table.interface.mjs +2 -0
  820. package/esm2022/table/table.mjs +2799 -0
  821. package/esm2022/table/table.module.mjs +157 -0
  822. package/esm2022/table/table.service.mjs +42 -0
  823. package/esm2022/tableconfiguration/cax-design-system-tableconfiguration.mjs +5 -0
  824. package/esm2022/tableconfiguration/public_api.mjs +3 -0
  825. package/esm2022/tableconfiguration/tableconfiguration.mjs +68 -0
  826. package/esm2022/tableconfiguration/tableconfiguration.module.mjs +16 -0
  827. package/esm2022/tabmenu/cax-design-system-tabmenu.mjs +5 -0
  828. package/esm2022/tabmenu/public_api.mjs +3 -0
  829. package/esm2022/tabmenu/tabmenu.interface.mjs +2 -0
  830. package/esm2022/tabmenu/tabmenu.mjs +576 -0
  831. package/esm2022/tabview/cax-design-system-tabview.mjs +5 -0
  832. package/esm2022/tabview/public_api.mjs +4 -0
  833. package/esm2022/tabview/tabview.interface.mjs +2 -0
  834. package/esm2022/tabview/tabview.mjs +913 -0
  835. package/esm2022/tabview/tabview.module.mjs +25 -0
  836. package/esm2022/tag/cax-design-system-tag.mjs +5 -0
  837. package/esm2022/tag/public_api.mjs +4 -0
  838. package/esm2022/tag/tag.interface.mjs +2 -0
  839. package/esm2022/tag/tag.mjs +95 -0
  840. package/esm2022/tag/tag.module.mjs +19 -0
  841. package/esm2022/terminal/cax-design-system-terminal.mjs +5 -0
  842. package/esm2022/terminal/public_api.mjs +3 -0
  843. package/esm2022/terminal/terminal.mjs +143 -0
  844. package/esm2022/terminal/terminalservice.mjs +25 -0
  845. package/esm2022/tieredmenu/cax-design-system-tieredmenu.mjs +5 -0
  846. package/esm2022/tieredmenu/public_api.mjs +4 -0
  847. package/esm2022/tieredmenu/tieredmenu.interface.mjs +2 -0
  848. package/esm2022/tieredmenu/tieredmenu.mjs +1289 -0
  849. package/esm2022/tieredmenu/tiredmenu.module.mjs +23 -0
  850. package/esm2022/timeline/cax-design-system-timeline.mjs +5 -0
  851. package/esm2022/timeline/public_api.mjs +4 -0
  852. package/esm2022/timeline/timeline.interface.mjs +2 -0
  853. package/esm2022/timeline/timeline.mjs +83 -0
  854. package/esm2022/timeline/timeline.module.mjs +19 -0
  855. package/esm2022/toast/cax-design-system-toast.mjs +5 -0
  856. package/esm2022/toast/public_api.mjs +4 -0
  857. package/esm2022/toast/toast.interface.mjs +2 -0
  858. package/esm2022/toast/toast.mjs +324 -0
  859. package/esm2022/toast/toast.module.mjs +18 -0
  860. package/esm2022/toast/toastitem.mjs +170 -0
  861. package/esm2022/togglebutton/cax-design-system-togglebutton.mjs +5 -0
  862. package/esm2022/togglebutton/public_api.mjs +3 -0
  863. package/esm2022/togglebutton/togglebutton.interface.mjs +2 -0
  864. package/esm2022/togglebutton/togglebutton.mjs +274 -0
  865. package/esm2022/toggleswitch/cax-design-system-toggleswitch.mjs +5 -0
  866. package/esm2022/toggleswitch/public_api.mjs +3 -0
  867. package/esm2022/toggleswitch/toggleswitch.mjs +37 -0
  868. package/esm2022/toggleswitch/toggleswitch.module.mjs +19 -0
  869. package/esm2022/toolbar/cax-design-system-toolbar.mjs +5 -0
  870. package/esm2022/toolbar/public_api.mjs +3 -0
  871. package/esm2022/toolbar/toolbar.interface.mjs +2 -0
  872. package/esm2022/toolbar/toolbar.mjs +111 -0
  873. package/esm2022/tooltip/cax-design-system-tooltip.mjs +5 -0
  874. package/esm2022/tooltip/public_api.mjs +3 -0
  875. package/esm2022/tooltip/tooltip.mjs +889 -0
  876. package/esm2022/tooltip/tooltip.module.mjs +20 -0
  877. package/esm2022/tree/cax-design-system-tree.mjs +5 -0
  878. package/esm2022/tree/public_api.mjs +4 -0
  879. package/esm2022/tree/tree.interface.mjs +2 -0
  880. package/esm2022/tree/tree.mjs +1544 -0
  881. package/esm2022/tree/tree.module.mjs +31 -0
  882. package/esm2022/treeselect/cax-design-system-treeselect.mjs +5 -0
  883. package/esm2022/treeselect/public_api.mjs +4 -0
  884. package/esm2022/treeselect/treeselect.interface.mjs +2 -0
  885. package/esm2022/treeselect/treeselect.mjs +865 -0
  886. package/esm2022/treeselect/treeselect.module.mjs +26 -0
  887. package/esm2022/treetable/cax-design-system-treetable.mjs +5 -0
  888. package/esm2022/treetable/public_api.mjs +3 -0
  889. package/esm2022/treetable/treetable.interface.mjs +2 -0
  890. package/esm2022/treetable/treetable.mjs +4111 -0
  891. package/esm2022/tristatecheckbox/cax-design-system-tristatecheckbox.mjs +5 -0
  892. package/esm2022/tristatecheckbox/public_api.mjs +4 -0
  893. package/esm2022/tristatecheckbox/tristatecheckbox.interface.mjs +2 -0
  894. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +215 -0
  895. package/esm2022/tristatecheckbox/tristatecheckbox.module.mjs +17 -0
  896. package/esm2022/ts-helpers/cax-design-system-ts-helpers.mjs +5 -0
  897. package/esm2022/ts-helpers/public_api.mjs +2 -0
  898. package/esm2022/ts-helpers/ts-helpers.mjs +2 -0
  899. package/esm2022/upload/cax-design-system-upload.mjs +5 -0
  900. package/esm2022/upload/public_api.mjs +3 -0
  901. package/esm2022/upload/upload.component.mjs +372 -0
  902. package/esm2022/upload/upload.component.module.mjs +21 -0
  903. package/esm2022/utils/cax-design-system-utils.mjs +5 -0
  904. package/esm2022/utils/objectutils.mjs +258 -0
  905. package/esm2022/utils/public_api.mjs +5 -0
  906. package/esm2022/utils/uniquecomponentid.mjs +6 -0
  907. package/esm2022/utils/zindexutils.mjs +35 -0
  908. package/esm2022/virtualscroller/cax-design-system-virtualscroller.mjs +5 -0
  909. package/esm2022/virtualscroller/public_api.mjs +3 -0
  910. package/esm2022/virtualscroller/virtualscroller.interface.mjs +2 -0
  911. package/esm2022/virtualscroller/virtualscroller.mjs +215 -0
  912. package/fesm2022/cax-design-system-accordion.mjs +2 -2
  913. package/fesm2022/cax-design-system-accordion.mjs.map +1 -1
  914. package/fesm2022/cax-design-system-animate.mjs +1 -1
  915. package/fesm2022/cax-design-system-animate.mjs.map +1 -1
  916. package/fesm2022/cax-design-system-animateonscroll.mjs +1 -1
  917. package/fesm2022/cax-design-system-animateonscroll.mjs.map +1 -1
  918. package/fesm2022/cax-design-system-api.mjs +1 -1
  919. package/fesm2022/cax-design-system-api.mjs.map +1 -1
  920. package/fesm2022/cax-design-system-autocomplete.mjs +1 -1
  921. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -1
  922. package/fesm2022/cax-design-system-autofocus.mjs +1 -1
  923. package/fesm2022/cax-design-system-autofocus.mjs.map +1 -1
  924. package/fesm2022/cax-design-system-avatar.mjs +1 -1
  925. package/fesm2022/cax-design-system-avatar.mjs.map +1 -1
  926. package/fesm2022/cax-design-system-avatargroup.mjs +1 -1
  927. package/fesm2022/cax-design-system-avatargroup.mjs.map +1 -1
  928. package/fesm2022/cax-design-system-badge.mjs +1 -1
  929. package/fesm2022/cax-design-system-badge.mjs.map +1 -1
  930. package/fesm2022/cax-design-system-baseicon.mjs +1 -1
  931. package/fesm2022/cax-design-system-baseicon.mjs.map +1 -1
  932. package/fesm2022/cax-design-system-blockui.mjs +1 -1
  933. package/fesm2022/cax-design-system-blockui.mjs.map +1 -1
  934. package/fesm2022/cax-design-system-breadcrumb.mjs +1 -1
  935. package/fesm2022/cax-design-system-breadcrumb.mjs.map +1 -1
  936. package/fesm2022/cax-design-system-button.mjs +1 -1
  937. package/fesm2022/cax-design-system-button.mjs.map +1 -1
  938. package/fesm2022/cax-design-system-buttongroup.mjs +1 -1
  939. package/fesm2022/cax-design-system-buttongroup.mjs.map +1 -1
  940. package/fesm2022/cax-design-system-calendar.mjs +3 -3
  941. package/fesm2022/cax-design-system-calendar.mjs.map +1 -1
  942. package/fesm2022/cax-design-system-card.mjs +1 -1
  943. package/fesm2022/cax-design-system-card.mjs.map +1 -1
  944. package/fesm2022/cax-design-system-carousel.mjs +1 -1
  945. package/fesm2022/cax-design-system-carousel.mjs.map +1 -1
  946. package/fesm2022/cax-design-system-cascadeselect.mjs +1 -1
  947. package/fesm2022/cax-design-system-cascadeselect.mjs.map +1 -1
  948. package/fesm2022/cax-design-system-chart.mjs +1 -1
  949. package/fesm2022/cax-design-system-chart.mjs.map +1 -1
  950. package/fesm2022/cax-design-system-checkbox.mjs +1 -1
  951. package/fesm2022/cax-design-system-checkbox.mjs.map +1 -1
  952. package/fesm2022/cax-design-system-chip.mjs +1 -1
  953. package/fesm2022/cax-design-system-chip.mjs.map +1 -1
  954. package/fesm2022/cax-design-system-chips.mjs +2 -2
  955. package/fesm2022/cax-design-system-chips.mjs.map +1 -1
  956. package/fesm2022/cax-design-system-colorpicker.mjs +1 -1
  957. package/fesm2022/cax-design-system-colorpicker.mjs.map +1 -1
  958. package/fesm2022/cax-design-system-commentbox.mjs +3 -3
  959. package/fesm2022/cax-design-system-commentbox.mjs.map +1 -1
  960. package/fesm2022/cax-design-system-confirmdialog.mjs +1 -1
  961. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -1
  962. package/fesm2022/cax-design-system-confirmpopup.mjs +2 -2
  963. package/fesm2022/cax-design-system-confirmpopup.mjs.map +1 -1
  964. package/fesm2022/cax-design-system-contextmenu.mjs +1 -1
  965. package/fesm2022/cax-design-system-contextmenu.mjs.map +1 -1
  966. package/fesm2022/cax-design-system-dataview.mjs +1 -1
  967. package/fesm2022/cax-design-system-dataview.mjs.map +1 -1
  968. package/fesm2022/cax-design-system-defer.mjs +1 -1
  969. package/fesm2022/cax-design-system-defer.mjs.map +1 -1
  970. package/fesm2022/cax-design-system-dialog.mjs +1 -1
  971. package/fesm2022/cax-design-system-dialog.mjs.map +1 -1
  972. package/fesm2022/cax-design-system-divider.mjs +1 -1
  973. package/fesm2022/cax-design-system-divider.mjs.map +1 -1
  974. package/fesm2022/cax-design-system-dock.mjs +1 -1
  975. package/fesm2022/cax-design-system-dock.mjs.map +1 -1
  976. package/fesm2022/cax-design-system-dom.mjs.map +1 -1
  977. package/fesm2022/cax-design-system-dragdrop.mjs +1 -1
  978. package/fesm2022/cax-design-system-dragdrop.mjs.map +1 -1
  979. package/fesm2022/cax-design-system-dropdown.mjs +2 -2
  980. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
  981. package/fesm2022/cax-design-system-dynamicdialog.mjs +1 -1
  982. package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -1
  983. package/fesm2022/cax-design-system-editor.mjs +1 -1
  984. package/fesm2022/cax-design-system-editor.mjs.map +1 -1
  985. package/fesm2022/cax-design-system-fieldset.mjs +2 -2
  986. package/fesm2022/cax-design-system-fieldset.mjs.map +1 -1
  987. package/fesm2022/cax-design-system-fileupload.mjs +1 -1
  988. package/fesm2022/cax-design-system-fileupload.mjs.map +1 -1
  989. package/fesm2022/cax-design-system-floatlabel.mjs +1 -1
  990. package/fesm2022/cax-design-system-floatlabel.mjs.map +1 -1
  991. package/fesm2022/cax-design-system-focustrap.mjs +1 -1
  992. package/fesm2022/cax-design-system-focustrap.mjs.map +1 -1
  993. package/fesm2022/cax-design-system-galleria.mjs +1 -1
  994. package/fesm2022/cax-design-system-galleria.mjs.map +1 -1
  995. package/fesm2022/cax-design-system-iconfield.mjs +1 -1
  996. package/fesm2022/cax-design-system-iconfield.mjs.map +1 -1
  997. package/fesm2022/cax-design-system-icons-angledoubledown.mjs.map +1 -1
  998. package/fesm2022/cax-design-system-icons-angledoubleleft.mjs.map +1 -1
  999. package/fesm2022/cax-design-system-icons-angledoubleright.mjs.map +1 -1
  1000. package/fesm2022/cax-design-system-icons-angledoubleup.mjs.map +1 -1
  1001. package/fesm2022/cax-design-system-icons-angledown.mjs.map +1 -1
  1002. package/fesm2022/cax-design-system-icons-angleleft.mjs.map +1 -1
  1003. package/fesm2022/cax-design-system-icons-angleright.mjs.map +1 -1
  1004. package/fesm2022/cax-design-system-icons-angleup.mjs.map +1 -1
  1005. package/fesm2022/cax-design-system-icons-arrowdown.mjs.map +1 -1
  1006. package/fesm2022/cax-design-system-icons-arrowdownleft.mjs.map +1 -1
  1007. package/fesm2022/cax-design-system-icons-arrowdownright.mjs.map +1 -1
  1008. package/fesm2022/cax-design-system-icons-arrowleft.mjs.map +1 -1
  1009. package/fesm2022/cax-design-system-icons-arrowright.mjs.map +1 -1
  1010. package/fesm2022/cax-design-system-icons-arrowup.mjs.map +1 -1
  1011. package/fesm2022/cax-design-system-icons-ban.mjs.map +1 -1
  1012. package/fesm2022/cax-design-system-icons-bars.mjs.map +1 -1
  1013. package/fesm2022/cax-design-system-icons-blank.mjs.map +1 -1
  1014. package/fesm2022/cax-design-system-icons-calendar.mjs.map +1 -1
  1015. package/fesm2022/cax-design-system-icons-caretleft.mjs.map +1 -1
  1016. package/fesm2022/cax-design-system-icons-caretright.mjs.map +1 -1
  1017. package/fesm2022/cax-design-system-icons-check.mjs.map +1 -1
  1018. package/fesm2022/cax-design-system-icons-chevrondown.mjs.map +1 -1
  1019. package/fesm2022/cax-design-system-icons-chevronleft.mjs.map +1 -1
  1020. package/fesm2022/cax-design-system-icons-chevronright.mjs.map +1 -1
  1021. package/fesm2022/cax-design-system-icons-chevronup.mjs.map +1 -1
  1022. package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs.map +1 -1
  1023. package/fesm2022/cax-design-system-icons-eye.mjs.map +1 -1
  1024. package/fesm2022/cax-design-system-icons-eyeslash.mjs.map +1 -1
  1025. package/fesm2022/cax-design-system-icons-filter.mjs.map +1 -1
  1026. package/fesm2022/cax-design-system-icons-filterslash.mjs.map +1 -1
  1027. package/fesm2022/cax-design-system-icons-home.mjs.map +1 -1
  1028. package/fesm2022/cax-design-system-icons-infocircle.mjs.map +1 -1
  1029. package/fesm2022/cax-design-system-icons-minus.mjs.map +1 -1
  1030. package/fesm2022/cax-design-system-icons-pencil.mjs.map +1 -1
  1031. package/fesm2022/cax-design-system-icons-plus.mjs.map +1 -1
  1032. package/fesm2022/cax-design-system-icons-refresh.mjs.map +1 -1
  1033. package/fesm2022/cax-design-system-icons-search.mjs.map +1 -1
  1034. package/fesm2022/cax-design-system-icons-searchminus.mjs.map +1 -1
  1035. package/fesm2022/cax-design-system-icons-searchplus.mjs.map +1 -1
  1036. package/fesm2022/cax-design-system-icons-sortalt.mjs.map +1 -1
  1037. package/fesm2022/cax-design-system-icons-sortamountdown.mjs.map +1 -1
  1038. package/fesm2022/cax-design-system-icons-sortamountupalt.mjs.map +1 -1
  1039. package/fesm2022/cax-design-system-icons-spinner.mjs.map +1 -1
  1040. package/fesm2022/cax-design-system-icons-star.mjs.map +1 -1
  1041. package/fesm2022/cax-design-system-icons-starfill.mjs.map +1 -1
  1042. package/fesm2022/cax-design-system-icons-thlarge.mjs.map +1 -1
  1043. package/fesm2022/cax-design-system-icons-times.mjs.map +1 -1
  1044. package/fesm2022/cax-design-system-icons-timescircle.mjs.map +1 -1
  1045. package/fesm2022/cax-design-system-icons-trash.mjs.map +1 -1
  1046. package/fesm2022/cax-design-system-icons-undo.mjs.map +1 -1
  1047. package/fesm2022/cax-design-system-icons-upload.mjs.map +1 -1
  1048. package/fesm2022/cax-design-system-icons-windowmaximize.mjs.map +1 -1
  1049. package/fesm2022/cax-design-system-icons-windowminimize.mjs.map +1 -1
  1050. package/fesm2022/cax-design-system-image.mjs +2 -2
  1051. package/fesm2022/cax-design-system-image.mjs.map +1 -1
  1052. package/fesm2022/cax-design-system-inplace.mjs +1 -1
  1053. package/fesm2022/cax-design-system-inplace.mjs.map +1 -1
  1054. package/fesm2022/cax-design-system-inputgroup.mjs +1 -1
  1055. package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -1
  1056. package/fesm2022/cax-design-system-inputgroupaddon.mjs +1 -1
  1057. package/fesm2022/cax-design-system-inputgroupaddon.mjs.map +1 -1
  1058. package/fesm2022/cax-design-system-inputicon.mjs +1 -1
  1059. package/fesm2022/cax-design-system-inputicon.mjs.map +1 -1
  1060. package/fesm2022/cax-design-system-inputmask.mjs +1 -1
  1061. package/fesm2022/cax-design-system-inputmask.mjs.map +1 -1
  1062. package/fesm2022/cax-design-system-inputnumber.mjs +1 -1
  1063. package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -1
  1064. package/fesm2022/cax-design-system-inputotp.mjs +1 -1
  1065. package/fesm2022/cax-design-system-inputotp.mjs.map +1 -1
  1066. package/fesm2022/cax-design-system-inputswitch.mjs +1 -1
  1067. package/fesm2022/cax-design-system-inputswitch.mjs.map +1 -1
  1068. package/fesm2022/cax-design-system-inputtext.mjs +1 -1
  1069. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
  1070. package/fesm2022/cax-design-system-inputtextarea.mjs +1 -1
  1071. package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -1
  1072. package/fesm2022/cax-design-system-keyfilter.mjs +1 -1
  1073. package/fesm2022/cax-design-system-keyfilter.mjs.map +1 -1
  1074. package/fesm2022/cax-design-system-knob.mjs +1 -1
  1075. package/fesm2022/cax-design-system-knob.mjs.map +1 -1
  1076. package/fesm2022/cax-design-system-listbox.mjs +1 -1
  1077. package/fesm2022/cax-design-system-listbox.mjs.map +1 -1
  1078. package/fesm2022/cax-design-system-logo.mjs +1 -1
  1079. package/fesm2022/cax-design-system-logo.mjs.map +1 -1
  1080. package/fesm2022/cax-design-system-megamenu.mjs +1 -1
  1081. package/fesm2022/cax-design-system-megamenu.mjs.map +1 -1
  1082. package/fesm2022/cax-design-system-menu.mjs +1 -1
  1083. package/fesm2022/cax-design-system-menu.mjs.map +1 -1
  1084. package/fesm2022/cax-design-system-menubar.mjs +1 -1
  1085. package/fesm2022/cax-design-system-menubar.mjs.map +1 -1
  1086. package/fesm2022/cax-design-system-message.mjs +1 -1
  1087. package/fesm2022/cax-design-system-message.mjs.map +1 -1
  1088. package/fesm2022/cax-design-system-messages.mjs +2 -2
  1089. package/fesm2022/cax-design-system-messages.mjs.map +1 -1
  1090. package/fesm2022/cax-design-system-metergroup.mjs +1 -1
  1091. package/fesm2022/cax-design-system-metergroup.mjs.map +1 -1
  1092. package/fesm2022/cax-design-system-multiselect.mjs +1 -1
  1093. package/fesm2022/cax-design-system-multiselect.mjs.map +1 -1
  1094. package/fesm2022/cax-design-system-navigation.mjs +1 -1
  1095. package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
  1096. package/fesm2022/cax-design-system-orderlist.mjs +1 -1
  1097. package/fesm2022/cax-design-system-orderlist.mjs.map +1 -1
  1098. package/fesm2022/cax-design-system-organizationchart.mjs +2 -2
  1099. package/fesm2022/cax-design-system-organizationchart.mjs.map +1 -1
  1100. package/fesm2022/cax-design-system-overlay.mjs +2 -2
  1101. package/fesm2022/cax-design-system-overlay.mjs.map +1 -1
  1102. package/fesm2022/cax-design-system-overlaypanel.mjs +3 -3
  1103. package/fesm2022/cax-design-system-overlaypanel.mjs.map +1 -1
  1104. package/fesm2022/cax-design-system-paginator.mjs +1 -1
  1105. package/fesm2022/cax-design-system-paginator.mjs.map +1 -1
  1106. package/fesm2022/cax-design-system-panel.mjs +2 -2
  1107. package/fesm2022/cax-design-system-panel.mjs.map +1 -1
  1108. package/fesm2022/cax-design-system-panelmenu.mjs +2 -2
  1109. package/fesm2022/cax-design-system-panelmenu.mjs.map +1 -1
  1110. package/fesm2022/cax-design-system-password.mjs +1 -1
  1111. package/fesm2022/cax-design-system-password.mjs.map +1 -1
  1112. package/fesm2022/cax-design-system-picklist.mjs +1 -1
  1113. package/fesm2022/cax-design-system-picklist.mjs.map +1 -1
  1114. package/fesm2022/cax-design-system-progressbar.mjs +1 -1
  1115. package/fesm2022/cax-design-system-progressbar.mjs.map +1 -1
  1116. package/fesm2022/cax-design-system-progressspinner.mjs +1 -1
  1117. package/fesm2022/cax-design-system-progressspinner.mjs.map +1 -1
  1118. package/fesm2022/cax-design-system-radiobutton.mjs +1 -1
  1119. package/fesm2022/cax-design-system-radiobutton.mjs.map +1 -1
  1120. package/fesm2022/cax-design-system-rating.mjs +1 -1
  1121. package/fesm2022/cax-design-system-rating.mjs.map +1 -1
  1122. package/fesm2022/cax-design-system-ripple.mjs +1 -1
  1123. package/fesm2022/cax-design-system-ripple.mjs.map +1 -1
  1124. package/fesm2022/cax-design-system-scroller.mjs +2 -2
  1125. package/fesm2022/cax-design-system-scroller.mjs.map +1 -1
  1126. package/fesm2022/cax-design-system-scrollpanel.mjs +1 -1
  1127. package/fesm2022/cax-design-system-scrollpanel.mjs.map +1 -1
  1128. package/fesm2022/cax-design-system-scrolltop.mjs +2 -2
  1129. package/fesm2022/cax-design-system-scrolltop.mjs.map +1 -1
  1130. package/fesm2022/cax-design-system-selectbutton.mjs +1 -1
  1131. package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -1
  1132. package/fesm2022/cax-design-system-sidebar.mjs +4 -4
  1133. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -1
  1134. package/fesm2022/cax-design-system-skeleton.mjs +1 -1
  1135. package/fesm2022/cax-design-system-skeleton.mjs.map +1 -1
  1136. package/fesm2022/cax-design-system-slidemenu.mjs +1 -1
  1137. package/fesm2022/cax-design-system-slidemenu.mjs.map +1 -1
  1138. package/fesm2022/cax-design-system-slider.mjs +1 -1
  1139. package/fesm2022/cax-design-system-slider.mjs.map +1 -1
  1140. package/fesm2022/cax-design-system-speeddial.mjs +1 -1
  1141. package/fesm2022/cax-design-system-speeddial.mjs.map +1 -1
  1142. package/fesm2022/cax-design-system-spinner.mjs +1 -1
  1143. package/fesm2022/cax-design-system-spinner.mjs.map +1 -1
  1144. package/fesm2022/cax-design-system-splitbutton.mjs +1 -1
  1145. package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -1
  1146. package/fesm2022/cax-design-system-splitter.mjs +1 -1
  1147. package/fesm2022/cax-design-system-splitter.mjs.map +1 -1
  1148. package/fesm2022/cax-design-system-stepper.mjs +2 -2
  1149. package/fesm2022/cax-design-system-stepper.mjs.map +1 -1
  1150. package/fesm2022/cax-design-system-steps.mjs +1 -1
  1151. package/fesm2022/cax-design-system-steps.mjs.map +1 -1
  1152. package/fesm2022/cax-design-system-styleclass.mjs +1 -1
  1153. package/fesm2022/cax-design-system-styleclass.mjs.map +1 -1
  1154. package/fesm2022/cax-design-system-table.mjs +1 -1
  1155. package/fesm2022/cax-design-system-table.mjs.map +1 -1
  1156. package/fesm2022/cax-design-system-tableconfiguration.mjs +1 -1
  1157. package/fesm2022/cax-design-system-tableconfiguration.mjs.map +1 -1
  1158. package/fesm2022/cax-design-system-tabmenu.mjs +1 -1
  1159. package/fesm2022/cax-design-system-tabmenu.mjs.map +1 -1
  1160. package/fesm2022/cax-design-system-tabview.mjs +1 -1
  1161. package/fesm2022/cax-design-system-tabview.mjs.map +1 -1
  1162. package/fesm2022/cax-design-system-tag.mjs +1 -1
  1163. package/fesm2022/cax-design-system-tag.mjs.map +1 -1
  1164. package/fesm2022/cax-design-system-terminal.mjs +1 -1
  1165. package/fesm2022/cax-design-system-terminal.mjs.map +1 -1
  1166. package/fesm2022/cax-design-system-tieredmenu.mjs +1 -1
  1167. package/fesm2022/cax-design-system-tieredmenu.mjs.map +1 -1
  1168. package/fesm2022/cax-design-system-timeline.mjs +1 -1
  1169. package/fesm2022/cax-design-system-timeline.mjs.map +1 -1
  1170. package/fesm2022/cax-design-system-toast.mjs +2 -2
  1171. package/fesm2022/cax-design-system-toast.mjs.map +1 -1
  1172. package/fesm2022/cax-design-system-togglebutton.mjs +1 -1
  1173. package/fesm2022/cax-design-system-togglebutton.mjs.map +1 -1
  1174. package/fesm2022/cax-design-system-toggleswitch.mjs +3 -3
  1175. package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -1
  1176. package/fesm2022/cax-design-system-toolbar.mjs +1 -1
  1177. package/fesm2022/cax-design-system-toolbar.mjs.map +1 -1
  1178. package/fesm2022/cax-design-system-tooltip.mjs +1 -1
  1179. package/fesm2022/cax-design-system-tooltip.mjs.map +1 -1
  1180. package/fesm2022/cax-design-system-tree.mjs +1 -1
  1181. package/fesm2022/cax-design-system-tree.mjs.map +1 -1
  1182. package/fesm2022/cax-design-system-treeselect.mjs +1 -1
  1183. package/fesm2022/cax-design-system-treeselect.mjs.map +1 -1
  1184. package/fesm2022/cax-design-system-treetable.mjs +1 -1
  1185. package/fesm2022/cax-design-system-treetable.mjs.map +1 -1
  1186. package/fesm2022/cax-design-system-tristatecheckbox.mjs +2 -2
  1187. package/fesm2022/cax-design-system-tristatecheckbox.mjs.map +1 -1
  1188. package/fesm2022/cax-design-system-upload.mjs +12 -7
  1189. package/fesm2022/cax-design-system-upload.mjs.map +1 -1
  1190. package/fesm2022/cax-design-system-utils.mjs.map +1 -1
  1191. package/fesm2022/cax-design-system-virtualscroller.mjs +1 -1
  1192. package/fesm2022/cax-design-system-virtualscroller.mjs.map +1 -1
  1193. package/fieldset/fieldset.d.ts +93 -0
  1194. package/fieldset/fieldset.interface.d.ts +46 -0
  1195. package/fieldset/index.d.ts +3 -140
  1196. package/fieldset/public_api.d.ts +2 -0
  1197. package/fileupload/fileupload.d.ts +380 -0
  1198. package/fileupload/fileupload.interface.d.ts +226 -0
  1199. package/fileupload/index.d.ts +3 -606
  1200. package/fileupload/public_api.d.ts +2 -0
  1201. package/floatlabel/floatlabel.d.ts +9 -0
  1202. package/floatlabel/floatlabel.module.d.ts +10 -0
  1203. package/floatlabel/index.d.ts +3 -19
  1204. package/floatlabel/public_api.d.ts +2 -0
  1205. package/focustrap/focustrap.d.ts +34 -0
  1206. package/focustrap/index.d.ts +3 -35
  1207. package/focustrap/public_api.d.ts +1 -0
  1208. package/galleria/galleria.d.ts +404 -0
  1209. package/galleria/galleria.interface.d.ts +97 -0
  1210. package/galleria/index.d.ts +3 -502
  1211. package/galleria/public_api.d.ts +2 -0
  1212. package/iconfield/iconfield.d.ts +25 -0
  1213. package/iconfield/index.d.ts +3 -26
  1214. package/iconfield/public_api.d.ts +1 -0
  1215. package/icons/angledoubledown/angledoubledown.d.ts +6 -0
  1216. package/icons/angledoubledown/index.d.ts +5 -9
  1217. package/icons/angledoubledown/public_api.d.ts +1 -0
  1218. package/icons/angledoubleleft/angledoubleleft.d.ts +6 -0
  1219. package/icons/angledoubleleft/index.d.ts +5 -9
  1220. package/icons/angledoubleleft/public_api.d.ts +1 -0
  1221. package/icons/angledoubleright/angledoubleright.d.ts +6 -0
  1222. package/icons/angledoubleright/index.d.ts +5 -9
  1223. package/icons/angledoubleright/public_api.d.ts +1 -0
  1224. package/icons/angledoubleup/angledoubleup.d.ts +6 -0
  1225. package/icons/angledoubleup/index.d.ts +5 -9
  1226. package/icons/angledoubleup/public_api.d.ts +1 -0
  1227. package/icons/angledown/angledown.d.ts +6 -0
  1228. package/icons/angledown/index.d.ts +5 -9
  1229. package/icons/angledown/public_api.d.ts +1 -0
  1230. package/icons/angleleft/angleleft.d.ts +6 -0
  1231. package/icons/angleleft/index.d.ts +5 -9
  1232. package/icons/angleleft/public_api.d.ts +1 -0
  1233. package/icons/angleright/angleright.d.ts +6 -0
  1234. package/icons/angleright/index.d.ts +5 -9
  1235. package/icons/angleright/public_api.d.ts +1 -0
  1236. package/icons/angleup/angleup.d.ts +6 -0
  1237. package/icons/angleup/index.d.ts +5 -9
  1238. package/icons/angleup/public_api.d.ts +1 -0
  1239. package/icons/arrowdown/arrowdown.d.ts +9 -0
  1240. package/icons/arrowdown/index.d.ts +5 -12
  1241. package/icons/arrowdown/public_api.d.ts +1 -0
  1242. package/icons/arrowdownleft/arrowdownleft.d.ts +6 -0
  1243. package/icons/arrowdownleft/index.d.ts +5 -9
  1244. package/icons/arrowdownleft/public_api.d.ts +1 -0
  1245. package/icons/arrowdownright/arrowdownright.d.ts +6 -0
  1246. package/icons/arrowdownright/index.d.ts +5 -9
  1247. package/icons/arrowdownright/public_api.d.ts +1 -0
  1248. package/icons/arrowleft/arrowleft.d.ts +8 -0
  1249. package/icons/arrowleft/index.d.ts +5 -11
  1250. package/icons/arrowleft/public_api.d.ts +1 -0
  1251. package/icons/arrowright/arrowright.d.ts +6 -0
  1252. package/icons/arrowright/index.d.ts +5 -9
  1253. package/icons/arrowright/public_api.d.ts +1 -0
  1254. package/icons/arrowup/arrowup.d.ts +8 -0
  1255. package/icons/arrowup/index.d.ts +5 -11
  1256. package/icons/arrowup/public_api.d.ts +1 -0
  1257. package/icons/ban/ban.d.ts +8 -0
  1258. package/icons/ban/index.d.ts +5 -11
  1259. package/icons/ban/public_api.d.ts +1 -0
  1260. package/icons/bars/bars.d.ts +6 -0
  1261. package/icons/bars/index.d.ts +5 -9
  1262. package/icons/bars/public_api.d.ts +1 -0
  1263. package/icons/blank/blank.d.ts +6 -0
  1264. package/icons/blank/index.d.ts +5 -9
  1265. package/icons/blank/public_api.d.ts +1 -0
  1266. package/icons/calendar/calendar.d.ts +6 -0
  1267. package/icons/calendar/index.d.ts +5 -9
  1268. package/icons/calendar/public_api.d.ts +1 -0
  1269. package/icons/caretleft/caretleft.d.ts +6 -0
  1270. package/icons/caretleft/index.d.ts +5 -9
  1271. package/icons/caretleft/public_api.d.ts +1 -0
  1272. package/icons/caretright/caretright.d.ts +6 -0
  1273. package/icons/caretright/index.d.ts +5 -9
  1274. package/icons/caretright/public_api.d.ts +1 -0
  1275. package/icons/check/check.d.ts +6 -0
  1276. package/icons/check/index.d.ts +5 -9
  1277. package/icons/check/public_api.d.ts +1 -0
  1278. package/icons/chevrondown/chevrondown.d.ts +6 -0
  1279. package/icons/chevrondown/index.d.ts +5 -9
  1280. package/icons/chevrondown/public_api.d.ts +1 -0
  1281. package/icons/chevronleft/chevronleft.d.ts +6 -0
  1282. package/icons/chevronleft/index.d.ts +5 -9
  1283. package/icons/chevronleft/public_api.d.ts +1 -0
  1284. package/icons/chevronright/chevronright.d.ts +6 -0
  1285. package/icons/chevronright/index.d.ts +5 -9
  1286. package/icons/chevronright/public_api.d.ts +1 -0
  1287. package/icons/chevronup/chevronup.d.ts +6 -0
  1288. package/icons/chevronup/index.d.ts +5 -9
  1289. package/icons/chevronup/public_api.d.ts +1 -0
  1290. package/icons/exclamationtriangle/exclamationtriangle.d.ts +9 -0
  1291. package/icons/exclamationtriangle/index.d.ts +5 -12
  1292. package/icons/exclamationtriangle/public_api.d.ts +1 -0
  1293. package/icons/eye/eye.d.ts +6 -0
  1294. package/icons/eye/index.d.ts +5 -9
  1295. package/icons/eye/public_api.d.ts +1 -0
  1296. package/icons/eyeslash/eyeslash.d.ts +8 -0
  1297. package/icons/eyeslash/index.d.ts +5 -11
  1298. package/icons/eyeslash/public_api.d.ts +1 -0
  1299. package/icons/filter/filter.d.ts +8 -0
  1300. package/icons/filter/index.d.ts +5 -11
  1301. package/icons/filter/public_api.d.ts +1 -0
  1302. package/icons/filterslash/filterslash.d.ts +8 -0
  1303. package/icons/filterslash/index.d.ts +5 -11
  1304. package/icons/filterslash/public_api.d.ts +1 -0
  1305. package/icons/home/home.d.ts +8 -0
  1306. package/icons/home/index.d.ts +5 -11
  1307. package/icons/home/public_api.d.ts +1 -0
  1308. package/icons/infocircle/index.d.ts +5 -11
  1309. package/icons/infocircle/infocircle.d.ts +8 -0
  1310. package/icons/infocircle/public_api.d.ts +1 -0
  1311. package/icons/minus/index.d.ts +5 -9
  1312. package/icons/minus/minus.d.ts +6 -0
  1313. package/icons/minus/public_api.d.ts +1 -0
  1314. package/icons/pencil/index.d.ts +5 -11
  1315. package/icons/pencil/pencil.d.ts +8 -0
  1316. package/icons/pencil/public_api.d.ts +1 -0
  1317. package/icons/plus/index.d.ts +5 -11
  1318. package/icons/plus/plus.d.ts +8 -0
  1319. package/icons/plus/public_api.d.ts +1 -0
  1320. package/icons/refresh/index.d.ts +5 -11
  1321. package/icons/refresh/public_api.d.ts +1 -0
  1322. package/icons/refresh/refresh.d.ts +8 -0
  1323. package/icons/search/index.d.ts +5 -11
  1324. package/icons/search/public_api.d.ts +1 -0
  1325. package/icons/search/search.d.ts +8 -0
  1326. package/icons/searchminus/index.d.ts +5 -11
  1327. package/icons/searchminus/public_api.d.ts +1 -0
  1328. package/icons/searchminus/searchminus.d.ts +8 -0
  1329. package/icons/searchplus/index.d.ts +5 -11
  1330. package/icons/searchplus/public_api.d.ts +1 -0
  1331. package/icons/searchplus/searchplus.d.ts +8 -0
  1332. package/icons/sortalt/index.d.ts +5 -11
  1333. package/icons/sortalt/public_api.d.ts +1 -0
  1334. package/icons/sortalt/sortalt.d.ts +8 -0
  1335. package/icons/sortamountdown/index.d.ts +5 -11
  1336. package/icons/sortamountdown/public_api.d.ts +1 -0
  1337. package/icons/sortamountdown/sortamountdown.d.ts +8 -0
  1338. package/icons/sortamountupalt/index.d.ts +5 -11
  1339. package/icons/sortamountupalt/public_api.d.ts +1 -0
  1340. package/icons/sortamountupalt/sortamountupalt.d.ts +8 -0
  1341. package/icons/spinner/index.d.ts +5 -11
  1342. package/icons/spinner/public_api.d.ts +1 -0
  1343. package/icons/spinner/spinner.d.ts +8 -0
  1344. package/icons/star/index.d.ts +5 -11
  1345. package/icons/star/public_api.d.ts +1 -0
  1346. package/icons/star/star.d.ts +8 -0
  1347. package/icons/starfill/index.d.ts +5 -11
  1348. package/icons/starfill/public_api.d.ts +1 -0
  1349. package/icons/starfill/starfill.d.ts +8 -0
  1350. package/icons/thlarge/index.d.ts +5 -11
  1351. package/icons/thlarge/public_api.d.ts +1 -0
  1352. package/icons/thlarge/thlarge.d.ts +8 -0
  1353. package/icons/times/index.d.ts +5 -9
  1354. package/icons/times/public_api.d.ts +1 -0
  1355. package/icons/times/times.d.ts +6 -0
  1356. package/icons/timescircle/index.d.ts +5 -11
  1357. package/icons/timescircle/public_api.d.ts +1 -0
  1358. package/icons/timescircle/timescircle.d.ts +8 -0
  1359. package/icons/trash/index.d.ts +5 -11
  1360. package/icons/trash/public_api.d.ts +1 -0
  1361. package/icons/trash/trash.d.ts +8 -0
  1362. package/icons/undo/index.d.ts +5 -11
  1363. package/icons/undo/public_api.d.ts +1 -0
  1364. package/icons/undo/undo.d.ts +8 -0
  1365. package/icons/upload/index.d.ts +5 -11
  1366. package/icons/upload/public_api.d.ts +1 -0
  1367. package/icons/upload/upload.d.ts +8 -0
  1368. package/icons/windowmaximize/index.d.ts +5 -11
  1369. package/icons/windowmaximize/public_api.d.ts +1 -0
  1370. package/icons/windowmaximize/windowmaximize.d.ts +8 -0
  1371. package/icons/windowminimize/index.d.ts +5 -11
  1372. package/icons/windowminimize/public_api.d.ts +1 -0
  1373. package/icons/windowminimize/windowminimize.d.ts +8 -0
  1374. package/image/image.d.ts +188 -0
  1375. package/image/image.interface.d.ts +31 -0
  1376. package/image/image.module.d.ts +8 -0
  1377. package/image/index.d.ts +3 -228
  1378. package/image/public_api.d.ts +3 -0
  1379. package/index.d.ts +5 -2
  1380. package/inplace/index.d.ts +3 -130
  1381. package/inplace/inplace.d.ts +109 -0
  1382. package/inplace/inplace.interface.d.ts +19 -0
  1383. package/inplace/public_api.d.ts +2 -0
  1384. package/inputgroup/index.d.ts +3 -48
  1385. package/inputgroup/inputgroup.d.ts +33 -0
  1386. package/inputgroup/inputgroup.module.d.ts +15 -0
  1387. package/inputgroup/public_api.d.ts +2 -0
  1388. package/inputgroupaddon/index.d.ts +3 -35
  1389. package/inputgroupaddon/inputgroupaddon.d.ts +21 -0
  1390. package/inputgroupaddon/inputgroupaddon.module.d.ts +14 -0
  1391. package/inputgroupaddon/public_api.d.ts +2 -0
  1392. package/inputicon/index.d.ts +3 -22
  1393. package/inputicon/inputicon.d.ts +21 -0
  1394. package/inputicon/public_api.d.ts +1 -0
  1395. package/inputmask/index.d.ts +3 -304
  1396. package/inputmask/inputmask.d.ts +273 -0
  1397. package/inputmask/inputmask.interface.d.ts +19 -0
  1398. package/inputmask/inputmask.module.d.ts +12 -0
  1399. package/inputmask/public_api.d.ts +3 -0
  1400. package/inputnumber/index.d.ts +3 -443
  1401. package/inputnumber/inputnumber.d.ts +397 -0
  1402. package/inputnumber/inputnumber.interface.d.ts +38 -0
  1403. package/inputnumber/inputnumber.module.d.ts +8 -0
  1404. package/inputnumber/public_api.d.ts +3 -0
  1405. package/inputotp/index.d.ts +3 -189
  1406. package/inputotp/inputotp.d.ts +123 -0
  1407. package/inputotp/inputotp.interface.d.ts +65 -0
  1408. package/inputotp/public_api.d.ts +2 -0
  1409. package/inputswitch/index.d.ts +3 -123
  1410. package/inputswitch/inputswitch.d.ts +106 -0
  1411. package/inputswitch/inputswitch.interface.d.ts +15 -0
  1412. package/inputswitch/public_api.d.ts +2 -0
  1413. package/inputtext/index.d.ts +5 -76
  1414. package/inputtext/inputtext.component.d.ts +43 -0
  1415. package/inputtext/inputtext.directive.d.ts +25 -0
  1416. package/inputtext/inputtext.module.d.ts +10 -0
  1417. package/inputtext/public_api.d.ts +3 -0
  1418. package/inputtextarea/index.d.ts +3 -112
  1419. package/inputtextarea/inputtextarea.component.d.ts +57 -0
  1420. package/inputtextarea/inputtextarea.directive.d.ts +47 -0
  1421. package/inputtextarea/inputtextarea.module.d.ts +10 -0
  1422. package/inputtextarea/public_api.d.ts +3 -0
  1423. package/keyfilter/index.d.ts +3 -65
  1424. package/keyfilter/keyfilter.d.ts +58 -0
  1425. package/keyfilter/keyfilter.interface.d.ts +5 -0
  1426. package/keyfilter/public_api.d.ts +2 -0
  1427. package/knob/index.d.ts +3 -179
  1428. package/knob/knob.d.ts +178 -0
  1429. package/knob/public_api.d.ts +1 -0
  1430. package/listbox/index.d.ts +3 -620
  1431. package/listbox/listbox.d.ts +463 -0
  1432. package/listbox/listbox.interface.d.ts +156 -0
  1433. package/listbox/public_api.d.ts +2 -0
  1434. package/logo/index.d.ts +5 -20
  1435. package/logo/logo.d.ts +11 -0
  1436. package/logo/logo.module.d.ts +7 -0
  1437. package/logo/public_api.d.ts +2 -0
  1438. package/megamenu/index.d.ts +3 -230
  1439. package/megamenu/megamenu.d.ts +198 -0
  1440. package/megamenu/megamenu.interface.d.ts +31 -0
  1441. package/megamenu/public_api.d.ts +2 -0
  1442. package/menu/index.d.ts +3 -222
  1443. package/menu/menu.d.ts +210 -0
  1444. package/menu/menu.module.d.ts +12 -0
  1445. package/menu/public_api.d.ts +2 -0
  1446. package/menubar/index.d.ts +3 -290
  1447. package/menubar/menubar.d.ts +248 -0
  1448. package/menubar/menubar.interface.d.ts +40 -0
  1449. package/menubar/public_api.d.ts +2 -0
  1450. package/message/index.d.ts +3 -53
  1451. package/message/message.d.ts +52 -0
  1452. package/message/public_api.d.ts +1 -0
  1453. package/messages/index.d.ts +3 -140
  1454. package/messages/messages.d.ts +115 -0
  1455. package/messages/messages.interface.d.ts +18 -0
  1456. package/messages/messages.module.d.ts +8 -0
  1457. package/messages/public_api.d.ts +3 -0
  1458. package/metergroup/index.d.ts +3 -224
  1459. package/metergroup/metergroup.d.ts +101 -0
  1460. package/metergroup/metergroup.interface.d.ts +122 -0
  1461. package/metergroup/public_api.d.ts +2 -0
  1462. package/multiselect/index.d.ts +3 -974
  1463. package/multiselect/multiselect.d.ts +710 -0
  1464. package/multiselect/multiselect.interface.d.ts +247 -0
  1465. package/multiselect/multiselect.module.d.ts +20 -0
  1466. package/multiselect/public_api.d.ts +3 -0
  1467. package/navigation/index.d.ts +5 -105
  1468. package/navigation/navigation.d.ts +70 -0
  1469. package/navigation/navigation.interface.d.ts +26 -0
  1470. package/navigation/navigation.module.d.ts +7 -0
  1471. package/navigation/public_api.d.ts +2 -0
  1472. package/orderlist/index.d.ts +3 -381
  1473. package/orderlist/orderlist.d.ts +270 -0
  1474. package/orderlist/orderlist.interface.d.ts +110 -0
  1475. package/orderlist/public_api.d.ts +2 -0
  1476. package/organizationchart/index.d.ts +3 -192
  1477. package/organizationchart/organizationchart.d.ts +132 -0
  1478. package/organizationchart/organizationchart.interface.d.ts +59 -0
  1479. package/organizationchart/public_api.d.ts +2 -0
  1480. package/overlay/index.d.ts +3 -246
  1481. package/overlay/overlay.d.ts +238 -0
  1482. package/overlay/overlay.module.d.ts +8 -0
  1483. package/overlay/public_api.d.ts +2 -0
  1484. package/overlaypanel/index.d.ts +3 -170
  1485. package/overlaypanel/overlaypanel.d.ts +162 -0
  1486. package/overlaypanel/overlaypanel.module.d.ts +8 -0
  1487. package/overlaypanel/public_api.d.ts +2 -0
  1488. package/package.json +699 -359
  1489. package/paginator/index.d.ts +3 -249
  1490. package/paginator/paginator.d.ts +195 -0
  1491. package/paginator/paginator.interface.d.ts +37 -0
  1492. package/paginator/paginator.module.d.ts +17 -0
  1493. package/paginator/public_api.d.ts +3 -0
  1494. package/panel/index.d.ts +3 -185
  1495. package/panel/panel.d.ts +126 -0
  1496. package/panel/panel.interface.d.ts +58 -0
  1497. package/panel/public_api.d.ts +2 -0
  1498. package/panelmenu/index.d.ts +3 -249
  1499. package/panelmenu/panelmenu.d.ts +225 -0
  1500. package/panelmenu/panelmenu.interface.d.ts +23 -0
  1501. package/panelmenu/public_api.d.ts +2 -0
  1502. package/password/index.d.ts +3 -342
  1503. package/password/password.d.ts +342 -0
  1504. package/password/public_api.d.ts +1 -0
  1505. package/picklist/index.d.ts +3 -696
  1506. package/picklist/picklist.d.ts +453 -0
  1507. package/picklist/picklist.interface.d.ts +242 -0
  1508. package/picklist/public_api.d.ts +2 -0
  1509. package/progressbar/index.d.ts +3 -61
  1510. package/progressbar/progressbar.d.ts +54 -0
  1511. package/progressbar/progressbar.module.d.ts +8 -0
  1512. package/progressbar/public_api.d.ts +2 -0
  1513. package/progressspinner/index.d.ts +3 -58
  1514. package/progressspinner/progressspinner.d.ts +50 -0
  1515. package/progressspinner/progressspinner.module.d.ts +8 -0
  1516. package/progressspinner/public_api.d.ts +2 -0
  1517. package/public_api.d.ts +2 -0
  1518. package/radiobutton/index.d.ts +3 -173
  1519. package/radiobutton/public_api.d.ts +3 -0
  1520. package/radiobutton/radiobutton.d.ts +150 -0
  1521. package/radiobutton/radiobutton.interface.d.ts +15 -0
  1522. package/radiobutton/radiobutton.module.d.ts +7 -0
  1523. package/rating/index.d.ts +3 -181
  1524. package/rating/public_api.d.ts +2 -0
  1525. package/rating/rating.d.ts +146 -0
  1526. package/rating/rating.interface.d.ts +34 -0
  1527. package/resources/components/colorpicker/images/color.png +0 -0
  1528. package/resources/components/colorpicker/images/hue.png +0 -0
  1529. package/resources/components/password/images/password-meter.png +0 -0
  1530. package/resources/components/toggleswitch/toggleswitch.scss +1 -1
  1531. package/resources/components/tree/images/line.gif +0 -0
  1532. package/resources/images/color.png +0 -0
  1533. package/resources/images/hue.png +0 -0
  1534. package/resources/images/line.gif +0 -0
  1535. package/resources/images/password-meter.png +0 -0
  1536. package/ripple/index.d.ts +3 -37
  1537. package/ripple/public_api.d.ts +2 -0
  1538. package/ripple/ripple.d.ts +30 -0
  1539. package/ripple/ripple.module.d.ts +7 -0
  1540. package/scroller/index.d.ts +3 -528
  1541. package/scroller/public_api.d.ts +3 -0
  1542. package/scroller/scroller.d.ts +343 -0
  1543. package/scroller/scroller.interface.d.ts +177 -0
  1544. package/scroller/scroller.module.d.ts +8 -0
  1545. package/scrollpanel/index.d.ts +3 -116
  1546. package/scrollpanel/public_api.d.ts +2 -0
  1547. package/scrollpanel/scrollpanel.d.ts +103 -0
  1548. package/scrollpanel/scrollpanel.interface.d.ts +11 -0
  1549. package/scrolltop/index.d.ts +3 -117
  1550. package/scrolltop/public_api.d.ts +2 -0
  1551. package/scrolltop/scrolltop.d.ts +97 -0
  1552. package/scrolltop/scrolltop.interface.d.ts +18 -0
  1553. package/selectbutton/index.d.ts +3 -184
  1554. package/selectbutton/public_api.d.ts +3 -0
  1555. package/selectbutton/selectbutton.d.ts +128 -0
  1556. package/selectbutton/selectbutton.interface.d.ts +45 -0
  1557. package/selectbutton/selectbutton.module.d.ts +11 -0
  1558. package/sidebar/index.d.ts +3 -213
  1559. package/sidebar/public_api.d.ts +3 -0
  1560. package/sidebar/sidebar.d.ts +173 -0
  1561. package/sidebar/sidebar.interface.d.ts +27 -0
  1562. package/sidebar/sidebar.module.d.ts +12 -0
  1563. package/skeleton/index.d.ts +3 -69
  1564. package/skeleton/public_api.d.ts +2 -0
  1565. package/skeleton/skeleton.d.ts +61 -0
  1566. package/skeleton/skeleton.module.d.ts +8 -0
  1567. package/slidemenu/index.d.ts +3 -339
  1568. package/slidemenu/public_api.d.ts +2 -0
  1569. package/slidemenu/slidemenu.d.ts +322 -0
  1570. package/slidemenu/slidemenu.interface.d.ts +15 -0
  1571. package/slider/index.d.ts +3 -214
  1572. package/slider/public_api.d.ts +2 -0
  1573. package/slider/slider.d.ts +174 -0
  1574. package/slider/slider.interface.d.ts +38 -0
  1575. package/speeddial/index.d.ts +3 -319
  1576. package/speeddial/public_api.d.ts +3 -0
  1577. package/speeddial/speeddial.d.ts +277 -0
  1578. package/speeddial/speeddial.interface.d.ts +28 -0
  1579. package/speeddial/speeddial.module.d.ts +14 -0
  1580. package/spinner/index.d.ts +5 -93
  1581. package/spinner/public_api.d.ts +1 -0
  1582. package/spinner/spinner.d.ts +90 -0
  1583. package/splitbutton/index.d.ts +3 -264
  1584. package/splitbutton/public_api.d.ts +3 -0
  1585. package/splitbutton/splitbutton.d.ts +222 -0
  1586. package/splitbutton/splitbutton.interface.d.ts +30 -0
  1587. package/splitbutton/splitbutton.module.d.ts +13 -0
  1588. package/splitter/index.d.ts +3 -201
  1589. package/splitter/public_api.d.ts +3 -0
  1590. package/splitter/splitter.d.ts +158 -0
  1591. package/splitter/splitter.interface.d.ts +34 -0
  1592. package/splitter/splitter.module.d.ts +9 -0
  1593. package/stepper/index.d.ts +3 -145
  1594. package/stepper/public_api.d.ts +2 -0
  1595. package/stepper/stepper.d.ts +117 -0
  1596. package/stepper/stepper.interface.d.ts +26 -0
  1597. package/steps/index.d.ts +3 -87
  1598. package/steps/public_api.d.ts +2 -0
  1599. package/steps/steps.d.ts +77 -0
  1600. package/steps/steps.module.d.ts +10 -0
  1601. package/styleclass/index.d.ts +3 -109
  1602. package/styleclass/public_api.d.ts +1 -0
  1603. package/styleclass/styleclass.d.ts +108 -0
  1604. package/table/columnfilter.interface.d.ts +247 -0
  1605. package/table/components/cell-editor/cell-editor.d.ts +20 -0
  1606. package/table/components/column-filter/column-filter.d.ts +291 -0
  1607. package/table/components/column-filter-form-element/column-filter-form-element.d.ts +37 -0
  1608. package/table/components/sort-icon/sort-icon.d.ts +22 -0
  1609. package/table/components/table-body/table-body.d.ts +36 -0
  1610. package/table/components/table-checkbox/table-checkbox.d.ts +32 -0
  1611. package/table/components/table-header-checkbox/table-header-checkbox.d.ts +29 -0
  1612. package/table/components/table-radio-button/table-radio-button.d.ts +29 -0
  1613. package/table/directives/cancel-editable-row.directive.d.ts +11 -0
  1614. package/table/directives/cell-highlight.directive.d.ts +14 -0
  1615. package/table/directives/content-menu-row.directive.d.ts +22 -0
  1616. package/table/directives/dynamic-column-width.directive.d.ts +12 -0
  1617. package/table/directives/editable-column.directive.d.ts +40 -0
  1618. package/table/directives/editable-row.directive.d.ts +12 -0
  1619. package/table/directives/frozen-column.directive.d.ts +16 -0
  1620. package/table/directives/init-editable-row.directive.d.ts +11 -0
  1621. package/table/directives/reorderable-column.directive.d.ts +32 -0
  1622. package/table/directives/reorderable-row-handle.directive.d.ts +9 -0
  1623. package/table/directives/reorderable-row.directive.d.ts +34 -0
  1624. package/table/directives/resizable-column.directive.d.ts +35 -0
  1625. package/table/directives/row-group-header.directive.d.ts +9 -0
  1626. package/table/directives/row-toggler.directive.d.ts +13 -0
  1627. package/table/directives/save-editable-row.directive.d.ts +11 -0
  1628. package/table/directives/selectable-row-double-click.directive.d.ts +22 -0
  1629. package/table/directives/selectable-row.directive.d.ts +37 -0
  1630. package/table/directives/sortable-column.directive.d.ts +24 -0
  1631. package/table/index.d.ts +3 -2556
  1632. package/table/public_api.d.ts +30 -0
  1633. package/table/table.d.ts +871 -0
  1634. package/table/table.interface.d.ts +623 -0
  1635. package/table/table.module.d.ts +34 -0
  1636. package/table/table.service.d.ts +24 -0
  1637. package/tableconfiguration/index.d.ts +5 -25
  1638. package/tableconfiguration/public_api.d.ts +2 -0
  1639. package/tableconfiguration/tableconfiguration.d.ts +16 -0
  1640. package/tableconfiguration/tableconfiguration.module.d.ts +7 -0
  1641. package/tabmenu/index.d.ts +3 -160
  1642. package/tabmenu/public_api.d.ts +2 -0
  1643. package/tabmenu/tabmenu.d.ts +126 -0
  1644. package/tabmenu/tabmenu.interface.d.ts +32 -0
  1645. package/tabview/index.d.ts +3 -357
  1646. package/tabview/public_api.d.ts +3 -0
  1647. package/tabview/tabview.d.ts +293 -0
  1648. package/tabview/tabview.interface.d.ts +49 -0
  1649. package/tabview/tabview.module.d.ts +15 -0
  1650. package/tag/index.d.ts +3 -82
  1651. package/tag/public_api.d.ts +3 -0
  1652. package/tag/tag.d.ts +61 -0
  1653. package/tag/tag.interface.d.ts +11 -0
  1654. package/tag/tag.module.d.ts +9 -0
  1655. package/terminal/index.d.ts +3 -68
  1656. package/terminal/public_api.d.ts +2 -0
  1657. package/terminal/terminal.d.ts +56 -0
  1658. package/terminal/terminalservice.d.ts +11 -0
  1659. package/tieredmenu/index.d.ts +3 -307
  1660. package/tieredmenu/public_api.d.ts +3 -0
  1661. package/tieredmenu/tieredmenu.d.ts +266 -0
  1662. package/tieredmenu/tieredmenu.interface.d.ts +27 -0
  1663. package/tieredmenu/tiredmenu.module.d.ts +13 -0
  1664. package/timeline/index.d.ts +3 -100
  1665. package/timeline/public_api.d.ts +3 -0
  1666. package/timeline/timeline.d.ts +47 -0
  1667. package/timeline/timeline.interface.d.ts +43 -0
  1668. package/timeline/timeline.module.d.ts +9 -0
  1669. package/toast/index.d.ts +3 -202
  1670. package/toast/public_api.d.ts +3 -0
  1671. package/toast/toast.d.ts +142 -0
  1672. package/toast/toast.interface.d.ts +52 -0
  1673. package/toast/toast.module.d.ts +9 -0
  1674. package/toast/toastitem.d.ts +37 -0
  1675. package/togglebutton/index.d.ts +3 -150
  1676. package/togglebutton/public_api.d.ts +2 -0
  1677. package/togglebutton/togglebutton.d.ts +115 -0
  1678. package/togglebutton/togglebutton.interface.d.ts +34 -0
  1679. package/toggleswitch/index.d.ts +5 -25
  1680. package/toggleswitch/public_api.d.ts +2 -0
  1681. package/toggleswitch/toggleswitch.d.ts +14 -0
  1682. package/toggleswitch/toggleswitch.module.d.ts +9 -0
  1683. package/toolbar/index.d.ts +3 -64
  1684. package/toolbar/public_api.d.ts +2 -0
  1685. package/toolbar/toolbar.d.ts +43 -0
  1686. package/toolbar/toolbar.interface.d.ts +19 -0
  1687. package/tooltip/index.d.ts +3 -218
  1688. package/tooltip/public_api.d.ts +2 -0
  1689. package/tooltip/tooltip.d.ts +208 -0
  1690. package/tooltip/tooltip.module.d.ts +10 -0
  1691. package/tree/index.d.ts +3 -673
  1692. package/tree/public_api.d.ts +3 -0
  1693. package/tree/tree.d.ts +461 -0
  1694. package/tree/tree.interface.d.ts +193 -0
  1695. package/tree/tree.module.d.ts +21 -0
  1696. package/treeselect/index.d.ts +3 -517
  1697. package/treeselect/public_api.d.ts +3 -0
  1698. package/treeselect/treeselect.d.ts +394 -0
  1699. package/treeselect/treeselect.interface.d.ts +108 -0
  1700. package/treeselect/treeselect.module.d.ts +16 -0
  1701. package/treetable/index.d.ts +3 -1461
  1702. package/treetable/public_api.d.ts +2 -0
  1703. package/treetable/treetable.d.ts +988 -0
  1704. package/treetable/treetable.interface.d.ts +472 -0
  1705. package/tristatecheckbox/index.d.ts +3 -155
  1706. package/tristatecheckbox/public_api.d.ts +3 -0
  1707. package/tristatecheckbox/tristatecheckbox.d.ts +117 -0
  1708. package/tristatecheckbox/tristatecheckbox.interface.d.ts +30 -0
  1709. package/tristatecheckbox/tristatecheckbox.module.d.ts +8 -0
  1710. package/ts-helpers/index.d.ts +5 -6
  1711. package/ts-helpers/public_api.d.ts +1 -0
  1712. package/ts-helpers/ts-helpers.d.ts +4 -0
  1713. package/upload/index.d.ts +5 -81
  1714. package/upload/public_api.d.ts +2 -0
  1715. package/upload/upload.component.d.ts +67 -0
  1716. package/upload/upload.component.module.d.ts +11 -0
  1717. package/utils/index.d.ts +5 -35
  1718. package/utils/objectutils.d.ts +24 -0
  1719. package/utils/public_api.d.ts +4 -0
  1720. package/utils/uniquecomponentid.d.ts +2 -0
  1721. package/utils/zindexutils.d.ts +7 -0
  1722. package/virtualscroller/index.d.ts +3 -161
  1723. package/virtualscroller/public_api.d.ts +2 -0
  1724. package/virtualscroller/virtualscroller.d.ts +89 -0
  1725. package/virtualscroller/virtualscroller.interface.d.ts +72 -0
  1726. package/cax-design-system-2.8.2.tgz +0 -0
@@ -0,0 +1,1599 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChildren, effect, EventEmitter, forwardRef, Input, numberAttribute, Output, signal, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { CaxTemplate, SharedModule, TranslationKeys } from 'cax-design-system/api';
5
+ import { AutoFocusModule } from 'cax-design-system/autofocus';
6
+ import { DomHandler } from 'cax-design-system/dom';
7
+ import { OverlayModule } from 'cax-design-system/overlay';
8
+ import { RippleModule } from 'cax-design-system/ripple';
9
+ import { ScrollerModule } from 'cax-design-system/scroller';
10
+ import { TooltipModule } from 'cax-design-system/tooltip';
11
+ import { ObjectUtils, UniqueComponentId } from 'cax-design-system/utils';
12
+ import { TimesIcon } from 'cax-design-system/icons/times';
13
+ import { ChevronDownIcon } from 'cax-design-system/icons/chevrondown';
14
+ import { SearchIcon } from 'cax-design-system/icons/search';
15
+ import { DropdownItem } from './dropdown-item';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "cax-design-system/api";
18
+ import * as i2 from "@angular/common";
19
+ import * as i3 from "cax-design-system/overlay";
20
+ import * as i4 from "cax-design-system/tooltip";
21
+ import * as i5 from "cax-design-system/scroller";
22
+ import * as i6 from "cax-design-system/autofocus";
23
+ export const DROPDOWN_VALUE_ACCESSOR = {
24
+ provide: NG_VALUE_ACCESSOR,
25
+ useExisting: forwardRef(() => Dropdown),
26
+ multi: true
27
+ };
28
+ /**
29
+ * Dropdown also known as Select, is used to choose an item from a collection of options.
30
+ * @group Components
31
+ */
32
+ export class Dropdown {
33
+ el;
34
+ renderer;
35
+ cd;
36
+ zone;
37
+ filterService;
38
+ config;
39
+ /**
40
+ * Unique identifier of the component
41
+ * @group Props
42
+ */
43
+ id;
44
+ /**
45
+ * Height of the viewport in pixels, a scrollbar is defined if height of list exceeds this value.
46
+ * @group Props
47
+ */
48
+ scrollHeight = '200px';
49
+ /**
50
+ * When specified, displays an input field to filter the items on keyup.
51
+ * @group Props
52
+ */
53
+ filter;
54
+ /**
55
+ * Name of the input element.
56
+ * @group Props
57
+ */
58
+ name;
59
+ /**
60
+ * Inline style of the element.
61
+ * @group Props
62
+ */
63
+ style;
64
+ /**
65
+ * Inline style of the overlay panel element.
66
+ * @group Props
67
+ */
68
+ panelStyle;
69
+ /**
70
+ * Style class of the element.
71
+ * @group Props
72
+ */
73
+ styleClass;
74
+ /**
75
+ * Style class of the overlay panel element.
76
+ * @group Props
77
+ */
78
+ panelStyleClass;
79
+ /**
80
+ * When present, it specifies that the component cannot be edited.
81
+ * @group Props
82
+ */
83
+ readonly;
84
+ /**
85
+ * When present, it specifies that an input field must be filled out before submitting the form.
86
+ * @group Props
87
+ */
88
+ required;
89
+ /**
90
+ * When present, custom value instead of predefined options can be entered using the editable input field.
91
+ * @group Props
92
+ */
93
+ editable;
94
+ /**
95
+ * Target element to attach the overlay, valid values are "body" or a local ng-template variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]="mydiv" for a div element having #mydiv as variable name).
96
+ * @group Props
97
+ */
98
+ appendTo;
99
+ /**
100
+ * Index of the element in tabbing order.
101
+ * @group Props
102
+ */
103
+ tabindex = 0;
104
+ /**
105
+ * Default text to display when no option is selected.
106
+ * @group Props
107
+ */
108
+ set placeholder(val) {
109
+ this._placeholder.set(val);
110
+ }
111
+ get placeholder() {
112
+ return this._placeholder.asReadonly();
113
+ }
114
+ /**
115
+ * Icon to display in loading state.
116
+ * @group Props
117
+ */
118
+ loadingIcon;
119
+ /**
120
+ * Placeholder text to show when filter input is empty.
121
+ * @group Props
122
+ */
123
+ filterPlaceholder;
124
+ /**
125
+ * Locale to use in filtering. The default locale is the host environment's current locale.
126
+ * @group Props
127
+ */
128
+ filterLocale;
129
+ /**
130
+ * Specifies the input variant of the component.
131
+ * @group Props
132
+ */
133
+ variant = 'outlined';
134
+ /**
135
+ * Identifier of the accessible input element.
136
+ * @group Props
137
+ */
138
+ inputId;
139
+ /**
140
+ * A property to uniquely identify a value in options.
141
+ * @group Props
142
+ */
143
+ dataKey;
144
+ /**
145
+ * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
146
+ * @group Props
147
+ */
148
+ filterBy;
149
+ /**
150
+ * Fields used when filtering the options, defaults to optionLabel.
151
+ * @group Props
152
+ */
153
+ filterFields;
154
+ /**
155
+ * When present, it specifies that the component should automatically get focus on load.
156
+ * @group Props
157
+ */
158
+ autofocus;
159
+ /**
160
+ * Clears the filter value when hiding the dropdown.
161
+ * @group Props
162
+ */
163
+ resetFilterOnHide = false;
164
+ /**
165
+ * Whether the selected option will be shown with a check mark.
166
+ * @group Props
167
+ */
168
+ checkmark = false;
169
+ /**
170
+ * Icon class of the dropdown icon.
171
+ * @group Props
172
+ */
173
+ dropdownIcon;
174
+ /**
175
+ * Whether the dropdown is in loading state.
176
+ * @group Props
177
+ */
178
+ loading = false;
179
+ /**
180
+ * Name of the label field of an option.
181
+ * @group Props
182
+ */
183
+ optionLabel;
184
+ /**
185
+ * Name of the value field of an option.
186
+ * @group Props
187
+ */
188
+ optionValue;
189
+ /**
190
+ * Name of the disabled field of an option.
191
+ * @group Props
192
+ */
193
+ optionDisabled;
194
+ /**
195
+ * Name of the label field of an option group.
196
+ * @group Props
197
+ */
198
+ optionGroupLabel = 'label';
199
+ /**
200
+ * Name of the options field of an option group.
201
+ * @group Props
202
+ */
203
+ optionGroupChildren = 'items';
204
+ /**
205
+ * Whether to display the first item as the label if no placeholder is defined and value is null.
206
+ * @deprecated since v17.3.0, set initial value by model instead.
207
+ * @group Props
208
+ */
209
+ autoDisplayFirst = true;
210
+ /**
211
+ * Whether to display options as grouped when nested options are provided.
212
+ * @group Props
213
+ */
214
+ group;
215
+ /**
216
+ * When enabled, a clear icon is displayed to clear the value.
217
+ * @group Props
218
+ */
219
+ showClear;
220
+ /**
221
+ * Text to display when filtering does not return any results. Defaults to global value in i18n translation configuration.
222
+ * @group Props
223
+ */
224
+ emptyFilterMessage = '';
225
+ /**
226
+ * Text to display when there is no data. Defaults to global value in i18n translation configuration.
227
+ * @group Props
228
+ */
229
+ emptyMessage = '';
230
+ /**
231
+ * Defines if data is loaded and interacted with in lazy manner.
232
+ * @group Props
233
+ */
234
+ lazy = false;
235
+ /**
236
+ * Whether the data should be loaded on demand during scroll.
237
+ * @group Props
238
+ */
239
+ virtualScroll;
240
+ /**
241
+ * Height of an item in the list for VirtualScrolling.
242
+ * @group Props
243
+ */
244
+ virtualScrollItemSize;
245
+ /**
246
+ * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
247
+ * @group Props
248
+ */
249
+ virtualScrollOptions;
250
+ /**
251
+ * Whether to use overlay API feature. The properties of overlay API can be used like an object in it.
252
+ * @group Props
253
+ */
254
+ overlayOptions;
255
+ /**
256
+ * Defines a string that labels the filter input.
257
+ * @group Props
258
+ */
259
+ ariaFilterLabel;
260
+ /**
261
+ * Used to define a aria label attribute the current element.
262
+ * @group Props
263
+ */
264
+ ariaLabel;
265
+ /**
266
+ * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
267
+ * @group Props
268
+ */
269
+ ariaLabelledBy;
270
+ /**
271
+ * Defines how the items are filtered.
272
+ * @group Props
273
+ */
274
+ filterMatchMode = 'contains';
275
+ /**
276
+ * Maximum number of character allows in the editable input field.
277
+ * @group Props
278
+ */
279
+ maxlength;
280
+ /**
281
+ * Advisory information to display in a tooltip on hover.
282
+ * @group Props
283
+ */
284
+ tooltip = '';
285
+ /**
286
+ * Position of the tooltip.
287
+ * @group Props
288
+ */
289
+ tooltipPosition = 'right';
290
+ /**
291
+ * Type of CSS position.
292
+ * @group Props
293
+ */
294
+ tooltipPositionStyle = 'absolute';
295
+ /**
296
+ * Style class of the tooltip.
297
+ * @group Props
298
+ */
299
+ tooltipStyleClass;
300
+ /**
301
+ * Fields used when filtering the options, defaults to optionLabel.
302
+ * @group Props
303
+ */
304
+ focusOnHover = false;
305
+ /**
306
+ * Determines if the option will be selected on focus.
307
+ * @group Props
308
+ */
309
+ selectOnFocus = false;
310
+ /**
311
+ * Whether to focus on the first visible or selected element when the overlay panel is shown.
312
+ * @group Props
313
+ */
314
+ autoOptionFocus = true;
315
+ /**
316
+ * Applies focus to the filter element when the overlay is shown.
317
+ * @group Props
318
+ */
319
+ autofocusFilter = true;
320
+ /**
321
+ * Determines if the panel will be shown when the input is focused and receives a character key down event.
322
+ * @group Props
323
+ */
324
+ autoShowPanelOnPrintableCharacterKeyDown = true;
325
+ /**
326
+ * When present, it specifies that the component should be disabled.
327
+ * @group Props
328
+ */
329
+ labelText;
330
+ get disabled() {
331
+ return this._disabled;
332
+ }
333
+ set disabled(_disabled) {
334
+ if (_disabled) {
335
+ this.focused = false;
336
+ if (this.overlayVisible)
337
+ this.hide();
338
+ }
339
+ this._disabled = _disabled;
340
+ if (!this.cd.destroyed) {
341
+ this.cd.detectChanges();
342
+ }
343
+ }
344
+ /**
345
+ * Item size of item to be virtual scrolled.
346
+ * @group Props
347
+ * @deprecated use virtualScrollItemSize property instead.
348
+ */
349
+ get itemSize() {
350
+ return this._itemSize;
351
+ }
352
+ set itemSize(val) {
353
+ this._itemSize = val;
354
+ console.warn('The itemSize property is deprecated, use virtualScrollItemSize property instead.');
355
+ }
356
+ _itemSize;
357
+ /**
358
+ * Whether to automatically manage layering.
359
+ * @group Props
360
+ * @deprecated since v14.2.0, use overlayOptions property instead.
361
+ */
362
+ get autoZIndex() {
363
+ return this._autoZIndex;
364
+ }
365
+ set autoZIndex(val) {
366
+ this._autoZIndex = val;
367
+ console.warn('The autoZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');
368
+ }
369
+ _autoZIndex;
370
+ /**
371
+ * Base zIndex value to use in layering.
372
+ * @group Props
373
+ * @deprecated since v14.2.0, use overlayOptions property instead.
374
+ */
375
+ get baseZIndex() {
376
+ return this._baseZIndex;
377
+ }
378
+ set baseZIndex(val) {
379
+ this._baseZIndex = val;
380
+ console.warn('The baseZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');
381
+ }
382
+ _baseZIndex;
383
+ /**
384
+ * Transition options of the show animation.
385
+ * @group Props
386
+ * @deprecated since v14.2.0, use overlayOptions property instead.
387
+ */
388
+ get showTransitionOptions() {
389
+ return this._showTransitionOptions;
390
+ }
391
+ set showTransitionOptions(val) {
392
+ this._showTransitionOptions = val;
393
+ console.warn('The showTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');
394
+ }
395
+ _showTransitionOptions;
396
+ /**
397
+ * Transition options of the hide animation.
398
+ * @group Props
399
+ * @deprecated since v14.2.0, use overlayOptions property instead.
400
+ */
401
+ get hideTransitionOptions() {
402
+ return this._hideTransitionOptions;
403
+ }
404
+ set hideTransitionOptions(val) {
405
+ this._hideTransitionOptions = val;
406
+ console.warn('The hideTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');
407
+ }
408
+ _hideTransitionOptions;
409
+ /**
410
+ * When specified, filter displays with this value.
411
+ * @group Props
412
+ */
413
+ get filterValue() {
414
+ return this._filterValue();
415
+ }
416
+ set filterValue(val) {
417
+ setTimeout(() => {
418
+ this._filterValue.set(val);
419
+ });
420
+ }
421
+ /**
422
+ * An array of objects to display as the available options.
423
+ * @group Props
424
+ */
425
+ get options() {
426
+ const options = this._options();
427
+ return options;
428
+ }
429
+ set options(val) {
430
+ if (!ObjectUtils.deepEquals(val, this._options())) {
431
+ this._options.set(val);
432
+ }
433
+ }
434
+ /**
435
+ * Callback to invoke when value of dropdown changes.
436
+ * @param {DropdownChangeEvent} event - custom change event.
437
+ * @group Emits
438
+ */
439
+ onChange = new EventEmitter();
440
+ /**
441
+ * Callback to invoke when data is filtered.
442
+ * @param {DropdownFilterEvent} event - custom filter event.
443
+ * @group Emits
444
+ */
445
+ onFilter = new EventEmitter();
446
+ /**
447
+ * Callback to invoke when dropdown gets focus.
448
+ * @param {Event} event - Browser event.
449
+ * @group Emits
450
+ */
451
+ onFocus = new EventEmitter();
452
+ /**
453
+ * Callback to invoke when dropdown loses focus.
454
+ * @param {Event} event - Browser event.
455
+ * @group Emits
456
+ */
457
+ onBlur = new EventEmitter();
458
+ /**
459
+ * Callback to invoke when component is clicked.
460
+ * @param {MouseEvent} event - Mouse event.
461
+ * @group Emits
462
+ */
463
+ onClick = new EventEmitter();
464
+ /**
465
+ * Callback to invoke when dropdown overlay gets visible.
466
+ * @param {AnimationEvent} event - Animation event.
467
+ * @group Emits
468
+ */
469
+ onShow = new EventEmitter();
470
+ /**
471
+ * Callback to invoke when dropdown overlay gets hidden.
472
+ * @param {AnimationEvent} event - Animation event.
473
+ * @group Emits
474
+ */
475
+ onHide = new EventEmitter();
476
+ /**
477
+ * Callback to invoke when dropdown clears the value.
478
+ * @param {Event} event - Browser event.
479
+ * @group Emits
480
+ */
481
+ onClear = new EventEmitter();
482
+ /**
483
+ * Callback to invoke in lazy mode to load new data.
484
+ * @param {DropdownLazyLoadEvent} event - Lazy load event.
485
+ * @group Emits
486
+ */
487
+ onLazyLoad = new EventEmitter();
488
+ containerViewChild;
489
+ filterViewChild;
490
+ focusInputViewChild;
491
+ editableInputViewChild;
492
+ itemsViewChild;
493
+ scroller;
494
+ overlayViewChild;
495
+ firstHiddenFocusableElementOnOverlay;
496
+ lastHiddenFocusableElementOnOverlay;
497
+ templates;
498
+ _disabled;
499
+ itemsWrapper;
500
+ itemTemplate;
501
+ groupTemplate;
502
+ loaderTemplate;
503
+ selectedItemTemplate;
504
+ headerTemplate;
505
+ filterTemplate;
506
+ footerTemplate;
507
+ emptyFilterTemplate;
508
+ emptyTemplate;
509
+ dropdownIconTemplate;
510
+ loadingIconTemplate;
511
+ clearIconTemplate;
512
+ filterIconTemplate;
513
+ filterOptions;
514
+ _options = signal(null);
515
+ _placeholder = signal(undefined);
516
+ modelValue = signal(null);
517
+ value;
518
+ onModelChange = () => { };
519
+ onModelTouched = () => { };
520
+ hover;
521
+ focused;
522
+ overlayVisible;
523
+ optionsChanged;
524
+ panel;
525
+ dimensionsUpdated;
526
+ hoveredItem;
527
+ selectedOptionUpdated;
528
+ _filterValue = signal(null);
529
+ searchValue;
530
+ searchIndex;
531
+ searchTimeout;
532
+ previousSearchChar;
533
+ currentSearchChar;
534
+ preventModelTouched;
535
+ focusedOptionIndex = signal(-1);
536
+ labelId;
537
+ listId;
538
+ clicked = signal(false);
539
+ get emptyMessageLabel() {
540
+ return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
541
+ }
542
+ get emptyFilterMessageLabel() {
543
+ return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);
544
+ }
545
+ get isVisibleClearIcon() {
546
+ return this.modelValue() != null && this.hasSelectedOption() && this.showClear && !this.disabled;
547
+ }
548
+ get listLabel() {
549
+ return this.config.getTranslation(TranslationKeys.ARIA)['listLabel'];
550
+ }
551
+ get containerClass() {
552
+ return {
553
+ 'cax-dropdown cax-component cax-inputwrapper': true,
554
+ 'cax-disabled': this.disabled,
555
+ 'cax-dropdown-clearable': this.showClear && !this.disabled,
556
+ 'cax-focus': this.focused,
557
+ 'cax-inputwrapper-filled': this.modelValue() !== undefined && this.modelValue() !== null && !this.modelValue().length,
558
+ 'cax-inputwrapper-focus': this.focused || this.overlayVisible,
559
+ 'cax-variant-filled': this.variant === 'filled' || this.config.inputStyle() === 'filled',
560
+ 'cax-dropdown-open': this.overlayVisible
561
+ };
562
+ }
563
+ get inputClass() {
564
+ const label = this.label();
565
+ return {
566
+ 'cax-dropdown-label cax-inputtext': true,
567
+ 'cax-placeholder': this.placeholder() && label === this.placeholder(),
568
+ 'cax-dropdown-label-empty': !this.editable && !this.selectedItemTemplate && (label === undefined || label === null || label === 'cax-emptylabel' || label.length === 0)
569
+ };
570
+ }
571
+ get panelClass() {
572
+ return {
573
+ 'cax-dropdown-panel cax-component': true,
574
+ 'cax-input-filled': this.config.inputStyle() === 'filled',
575
+ 'cax-ripple-disabled': this.config.ripple === false
576
+ };
577
+ }
578
+ get focusedOptionId() {
579
+ return this.focusedOptionIndex() !== -1 ? `${this.id}_${this.focusedOptionIndex()}` : null;
580
+ }
581
+ visibleOptions = computed(() => {
582
+ const options = this.getAllVisibleAndNonVisibleOptions();
583
+ if (this._filterValue()) {
584
+ const _filterBy = this.filterBy || this.optionLabel;
585
+ const filteredOptions = !_filterBy && !this.filterFields && !this.optionValue
586
+ ? this.options.filter((option) => {
587
+ if (option.label) {
588
+ return option.label.toString().toLowerCase().indexOf(this._filterValue().toLowerCase().trim()) !== -1;
589
+ }
590
+ return option.toString().toLowerCase().indexOf(this._filterValue().toLowerCase().trim()) !== -1;
591
+ })
592
+ : this.filterService.filter(options, this.searchFields(), this._filterValue().trim(), this.filterMatchMode, this.filterLocale);
593
+ if (this.group) {
594
+ const optionGroups = this.options || [];
595
+ const filtered = [];
596
+ optionGroups.forEach((group) => {
597
+ const groupChildren = this.getOptionGroupChildren(group);
598
+ const filteredItems = groupChildren.filter((item) => filteredOptions.includes(item));
599
+ if (filteredItems.length > 0)
600
+ filtered.push({ ...group, [typeof this.optionGroupChildren === 'string' ? this.optionGroupChildren : 'items']: [...filteredItems] });
601
+ });
602
+ return this.flatOptions(filtered);
603
+ }
604
+ return filteredOptions;
605
+ }
606
+ return options;
607
+ });
608
+ label = computed(() => {
609
+ // use getAllVisibleAndNonVisibleOptions verses just visible options
610
+ // this will find the selected option whether or not the user is currently filtering because the filtered (i.e. visible) options, are a subset of all the options
611
+ const options = this.getAllVisibleAndNonVisibleOptions();
612
+ // use isOptionEqualsModelValue for the use case where the dropdown is initalized with a disabled option
613
+ const selectedOptionIndex = options.findIndex((option) => this.isOptionValueEqualsModelValue(option));
614
+ return selectedOptionIndex !== -1 ? this.getOptionLabel(options[selectedOptionIndex]) : this.placeholder() || 'cax-emptylabel';
615
+ });
616
+ filled = computed(() => {
617
+ if (typeof this.modelValue() === 'string')
618
+ return !!this.modelValue();
619
+ return this.label() !== 'cax-emptylabel' && this.modelValue() !== undefined && this.modelValue() !== null;
620
+ });
621
+ selectedOption;
622
+ editableInputValue = computed(() => this.getOptionLabel(this.selectedOption) || this.modelValue() || '');
623
+ constructor(el, renderer, cd, zone, filterService, config) {
624
+ this.el = el;
625
+ this.renderer = renderer;
626
+ this.cd = cd;
627
+ this.zone = zone;
628
+ this.filterService = filterService;
629
+ this.config = config;
630
+ effect(() => {
631
+ const modelValue = this.modelValue();
632
+ const visibleOptions = this.visibleOptions();
633
+ if (visibleOptions && ObjectUtils.isNotEmpty(visibleOptions)) {
634
+ const selectedOptionIndex = this.findSelectedOptionIndex();
635
+ if (selectedOptionIndex !== -1 || modelValue === undefined || (typeof modelValue === 'string' && modelValue.length === 0) || this.isModelValueNotSet() || this.editable) {
636
+ this.selectedOption = visibleOptions[selectedOptionIndex];
637
+ }
638
+ }
639
+ if (ObjectUtils.isEmpty(visibleOptions) && (modelValue === undefined || this.isModelValueNotSet()) && ObjectUtils.isNotEmpty(this.selectedOption)) {
640
+ this.selectedOption = null;
641
+ }
642
+ if (modelValue !== undefined && this.editable) {
643
+ this.updateEditableLabel();
644
+ }
645
+ this.cd.markForCheck();
646
+ });
647
+ }
648
+ isModelValueNotSet() {
649
+ return this.modelValue() === null && !this.isOptionValueEqualsModelValue(this.selectedOption);
650
+ }
651
+ getAllVisibleAndNonVisibleOptions() {
652
+ return this.group ? this.flatOptions(this.options) : this.options || [];
653
+ }
654
+ ngOnInit() {
655
+ this.id = this.id || UniqueComponentId();
656
+ this.autoUpdateModel();
657
+ if (this.filterBy) {
658
+ this.filterOptions = {
659
+ filter: (value) => this.onFilterInputChange(value),
660
+ reset: () => this.resetFilter()
661
+ };
662
+ }
663
+ }
664
+ ngAfterViewChecked() {
665
+ if (this.optionsChanged && this.overlayVisible) {
666
+ this.optionsChanged = false;
667
+ this.zone.runOutsideAngular(() => {
668
+ setTimeout(() => {
669
+ if (this.overlayViewChild) {
670
+ this.overlayViewChild.alignOverlay();
671
+ }
672
+ }, 1);
673
+ });
674
+ }
675
+ if (this.selectedOptionUpdated && this.itemsWrapper) {
676
+ let selectedItem = DomHandler.findSingle(this.overlayViewChild?.overlayViewChild?.nativeElement, 'li.cax-highlight');
677
+ if (selectedItem) {
678
+ DomHandler.scrollInView(this.itemsWrapper, selectedItem);
679
+ }
680
+ this.selectedOptionUpdated = false;
681
+ }
682
+ }
683
+ ngAfterContentInit() {
684
+ this.templates.forEach((item) => {
685
+ switch (item.getType()) {
686
+ case 'item':
687
+ this.itemTemplate = item.template;
688
+ break;
689
+ case 'selectedItem':
690
+ this.selectedItemTemplate = item.template;
691
+ break;
692
+ case 'header':
693
+ this.headerTemplate = item.template;
694
+ break;
695
+ case 'filter':
696
+ this.filterTemplate = item.template;
697
+ break;
698
+ case 'footer':
699
+ this.footerTemplate = item.template;
700
+ break;
701
+ case 'emptyfilter':
702
+ this.emptyFilterTemplate = item.template;
703
+ break;
704
+ case 'empty':
705
+ this.emptyTemplate = item.template;
706
+ break;
707
+ case 'group':
708
+ this.groupTemplate = item.template;
709
+ break;
710
+ case 'loader':
711
+ this.loaderTemplate = item.template;
712
+ break;
713
+ case 'dropdownicon':
714
+ this.dropdownIconTemplate = item.template;
715
+ break;
716
+ case 'loadingicon':
717
+ this.loadingIconTemplate = item.template;
718
+ break;
719
+ case 'clearicon':
720
+ this.clearIconTemplate = item.template;
721
+ break;
722
+ case 'filtericon':
723
+ this.filterIconTemplate = item.template;
724
+ break;
725
+ default:
726
+ this.itemTemplate = item.template;
727
+ break;
728
+ }
729
+ });
730
+ }
731
+ flatOptions(options) {
732
+ return (options || []).reduce((result, option, index) => {
733
+ result.push({ optionGroup: option, group: true, index });
734
+ const optionGroupChildren = this.getOptionGroupChildren(option);
735
+ optionGroupChildren && optionGroupChildren.forEach((o) => result.push(o));
736
+ return result;
737
+ }, []);
738
+ }
739
+ autoUpdateModel() {
740
+ if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption()) {
741
+ this.focusedOptionIndex.set(this.findFirstFocusedOptionIndex());
742
+ this.onOptionSelect(null, this.visibleOptions()[this.focusedOptionIndex()], false);
743
+ }
744
+ if (this.autoDisplayFirst && (this.modelValue() === null || this.modelValue() === undefined)) {
745
+ if (!this.placeholder()) {
746
+ const ind = this.findFirstOptionIndex();
747
+ this.onOptionSelect(null, this.visibleOptions()[ind], false, true);
748
+ }
749
+ }
750
+ }
751
+ onOptionSelect(event, option, isHide = true, preventChange = false) {
752
+ if (!this.isSelected(option)) {
753
+ const value = this.getOptionValue(option);
754
+ this.updateModel(value, event);
755
+ this.focusedOptionIndex.set(this.findSelectedOptionIndex());
756
+ preventChange === false && this.onChange.emit({ originalEvent: event, value: value });
757
+ }
758
+ if (isHide) {
759
+ this.hide(true);
760
+ }
761
+ }
762
+ onOptionMouseEnter(event, index) {
763
+ if (this.focusOnHover) {
764
+ this.changeFocusedOptionIndex(event, index);
765
+ }
766
+ }
767
+ updateModel(value, event) {
768
+ this.value = value;
769
+ this.onModelChange(value);
770
+ this.modelValue.set(value);
771
+ this.selectedOptionUpdated = true;
772
+ }
773
+ writeValue(value) {
774
+ if (this.filter) {
775
+ this.resetFilter();
776
+ }
777
+ this.value = value;
778
+ this.allowModelChange() && this.onModelChange(value);
779
+ this.modelValue.set(this.value);
780
+ this.updateEditableLabel();
781
+ this.cd.markForCheck();
782
+ }
783
+ allowModelChange() {
784
+ return this.autoDisplayFirst && !this.placeholder() && (this.modelValue() === undefined || this.modelValue() === null) && !this.editable && this.options && this.options.length;
785
+ }
786
+ isSelectedOptionEmpty() {
787
+ return ObjectUtils.isEmpty(this.selectedOption);
788
+ }
789
+ isSelected(option) {
790
+ return this.isValidOption(option) && this.isOptionValueEqualsModelValue(option);
791
+ }
792
+ isOptionValueEqualsModelValue(option) {
793
+ return ObjectUtils.equals(this.modelValue(), this.getOptionValue(option), this.equalityKey());
794
+ }
795
+ ngAfterViewInit() {
796
+ if (this.editable) {
797
+ this.updateEditableLabel();
798
+ }
799
+ this.updatePlaceHolderForFloatingLabel();
800
+ }
801
+ updatePlaceHolderForFloatingLabel() {
802
+ if (this._placeholder() !== null && this._placeholder() !== undefined) {
803
+ // We don't want to overwrite the placeholder if it's already set
804
+ return;
805
+ }
806
+ const parentElement = this.el.nativeElement.parentElement;
807
+ const isInFloatingLabel = parentElement?.classList.contains('cax-float-label');
808
+ if (parentElement && isInFloatingLabel && !this.selectedOption) {
809
+ const label = parentElement.querySelector('label');
810
+ if (label) {
811
+ this._placeholder.set(label.textContent);
812
+ }
813
+ }
814
+ }
815
+ updateEditableLabel() {
816
+ if (this.editableInputViewChild) {
817
+ this.editableInputViewChild.nativeElement.value = this.getOptionLabel(this.selectedOption) || this.modelValue() || '';
818
+ }
819
+ }
820
+ clearEditableLabel() {
821
+ if (this.editableInputViewChild) {
822
+ this.editableInputViewChild.nativeElement.value = '';
823
+ }
824
+ }
825
+ getOptionIndex(index, scrollerOptions) {
826
+ return this.virtualScrollerDisabled ? index : scrollerOptions && scrollerOptions.getItemOptions(index)['index'];
827
+ }
828
+ getOptionLabel(option) {
829
+ return this.optionLabel !== undefined && this.optionLabel !== null ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option && option.label !== undefined ? option.label : option;
830
+ }
831
+ getOptionValue(option) {
832
+ return this.optionValue && this.optionValue !== null ? ObjectUtils.resolveFieldData(option, this.optionValue) : !this.optionLabel && option && option.value !== undefined ? option.value : option;
833
+ }
834
+ isOptionDisabled(option) {
835
+ if (this.getOptionValue(this.modelValue()) === this.getOptionValue(option) || (this.getOptionLabel(this.modelValue() === this.getOptionLabel(option)) && option.disabled === false)) {
836
+ return false;
837
+ }
838
+ else {
839
+ return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : option && option.disabled !== undefined ? option.disabled : false;
840
+ }
841
+ }
842
+ getOptionGroupLabel(optionGroup) {
843
+ return this.optionGroupLabel !== undefined && this.optionGroupLabel !== null ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : optionGroup && optionGroup.label !== undefined ? optionGroup.label : optionGroup;
844
+ }
845
+ getOptionGroupChildren(optionGroup) {
846
+ return this.optionGroupChildren !== undefined && this.optionGroupChildren !== null ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
847
+ }
848
+ getAriaPosInset(index) {
849
+ return ((this.optionGroupLabel
850
+ ? index -
851
+ this.visibleOptions()
852
+ .slice(0, index)
853
+ .filter((option) => this.isOptionGroup(option)).length
854
+ : index) + 1);
855
+ }
856
+ get ariaSetSize() {
857
+ return this.visibleOptions().filter((option) => !this.isOptionGroup(option)).length;
858
+ }
859
+ /**
860
+ * Callback to invoke on filter reset.
861
+ * @group Method
862
+ */
863
+ resetFilter() {
864
+ this._filterValue.set(null);
865
+ if (this.filterViewChild && this.filterViewChild.nativeElement) {
866
+ this.filterViewChild.nativeElement.value = '';
867
+ }
868
+ }
869
+ registerOnChange(fn) {
870
+ this.onModelChange = fn;
871
+ }
872
+ registerOnTouched(fn) {
873
+ this.onModelTouched = fn;
874
+ }
875
+ setDisabledState(val) {
876
+ this.disabled = val;
877
+ this.cd.markForCheck();
878
+ }
879
+ onContainerClick(event) {
880
+ if (this.disabled || this.readonly || this.loading) {
881
+ return;
882
+ }
883
+ this.focusInputViewChild?.nativeElement.focus({ preventScroll: true });
884
+ if (event.target.tagName === 'INPUT' || event.target.getAttribute('data-pc-section') === 'clearicon' || event.target.closest('[data-pc-section="clearicon"]')) {
885
+ return;
886
+ }
887
+ else if (!this.overlayViewChild || !this.overlayViewChild.el.nativeElement.contains(event.target)) {
888
+ this.overlayVisible ? this.hide(true) : this.show(true);
889
+ }
890
+ this.onClick.emit(event);
891
+ this.clicked.set(true);
892
+ this.cd.detectChanges();
893
+ }
894
+ isEmpty() {
895
+ return !this._options() || (this.visibleOptions() && this.visibleOptions().length === 0);
896
+ }
897
+ onEditableInput(event) {
898
+ const value = event.target.value;
899
+ this.searchValue = '';
900
+ const matched = this.searchOptions(event, value);
901
+ !matched && this.focusedOptionIndex.set(-1);
902
+ this.onModelChange(value);
903
+ this.updateModel(value, event);
904
+ setTimeout(() => {
905
+ this.onChange.emit({ originalEvent: event, value: value });
906
+ }, 1);
907
+ !this.overlayVisible && ObjectUtils.isNotEmpty(value) && this.show();
908
+ }
909
+ /**
910
+ * Displays the panel.
911
+ * @group Method
912
+ */
913
+ show(isFocus) {
914
+ this.overlayVisible = true;
915
+ const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.editable ? -1 : this.findSelectedOptionIndex();
916
+ this.focusedOptionIndex.set(focusedOptionIndex);
917
+ if (isFocus) {
918
+ DomHandler.focus(this.focusInputViewChild?.nativeElement);
919
+ }
920
+ this.cd.markForCheck();
921
+ }
922
+ onOverlayAnimationStart(event) {
923
+ if (event.toState === 'visible') {
924
+ this.itemsWrapper = DomHandler.findSingle(this.overlayViewChild?.overlayViewChild?.nativeElement, this.virtualScroll ? '.cax-scroller' : '.cax-dropdown-items-wrapper');
925
+ this.virtualScroll && this.scroller?.setContentEl(this.itemsViewChild?.nativeElement);
926
+ if (this.options && this.options.length) {
927
+ if (this.virtualScroll) {
928
+ const selectedIndex = this.modelValue() ? this.focusedOptionIndex() : -1;
929
+ if (selectedIndex !== -1) {
930
+ this.scroller?.scrollToIndex(selectedIndex);
931
+ }
932
+ }
933
+ else {
934
+ let selectedListItem = DomHandler.findSingle(this.itemsWrapper, '.cax-dropdown-item.cax-highlight');
935
+ if (selectedListItem) {
936
+ selectedListItem.scrollIntoView({ block: 'nearest', inline: 'nearest' });
937
+ }
938
+ }
939
+ }
940
+ // Remove auto-focus on filter
941
+ if (this.filterViewChild && this.filterViewChild.nativeElement) {
942
+ this.preventModelTouched = true;
943
+ }
944
+ this.onShow.emit(event);
945
+ }
946
+ if (event.toState === 'void') {
947
+ this.itemsWrapper = null;
948
+ this.onModelTouched();
949
+ this.onHide.emit(event);
950
+ }
951
+ }
952
+ /**
953
+ * Hides the panel.
954
+ * @group Method
955
+ */
956
+ hide(isFocus) {
957
+ this.overlayVisible = false;
958
+ this.focusedOptionIndex.set(-1);
959
+ this.clicked.set(false);
960
+ this.searchValue = '';
961
+ if (this.overlayOptions?.mode === 'modal') {
962
+ DomHandler.unblockBodyScroll();
963
+ }
964
+ if (this.filter && this.resetFilterOnHide) {
965
+ this.resetFilter();
966
+ }
967
+ if (isFocus) {
968
+ if (this.focusInputViewChild) {
969
+ setTimeout(() => {
970
+ DomHandler.focus(this.focusInputViewChild?.nativeElement);
971
+ });
972
+ }
973
+ if (this.editable && this.editableInputViewChild) {
974
+ setTimeout(() => {
975
+ DomHandler.focus(this.editableInputViewChild?.nativeElement);
976
+ });
977
+ }
978
+ }
979
+ this.cd.markForCheck();
980
+ }
981
+ onInputFocus(event) {
982
+ if (this.disabled) {
983
+ // For ScreenReaders
984
+ return;
985
+ }
986
+ this.focused = true;
987
+ const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;
988
+ this.focusedOptionIndex.set(focusedOptionIndex);
989
+ this.overlayVisible && this.scrollInView(this.focusedOptionIndex());
990
+ this.onFocus.emit(event);
991
+ }
992
+ onInputBlur(event) {
993
+ this.focused = false;
994
+ this.onBlur.emit(event);
995
+ if (!this.preventModelTouched) {
996
+ this.onModelTouched();
997
+ }
998
+ this.preventModelTouched = false;
999
+ }
1000
+ onMouseDown(event) {
1001
+ event.preventDefault();
1002
+ }
1003
+ onKeyDown(event, search) {
1004
+ if (this.disabled || this.readonly || this.loading) {
1005
+ return;
1006
+ }
1007
+ switch (event.code) {
1008
+ //down
1009
+ case 'ArrowDown':
1010
+ this.onArrowDownKey(event);
1011
+ break;
1012
+ //up
1013
+ case 'ArrowUp':
1014
+ this.onArrowUpKey(event, this.editable);
1015
+ break;
1016
+ case 'ArrowLeft':
1017
+ case 'ArrowRight':
1018
+ this.onArrowLeftKey(event, this.editable);
1019
+ break;
1020
+ case 'Delete':
1021
+ this.onDeleteKey(event);
1022
+ break;
1023
+ case 'Home':
1024
+ this.onHomeKey(event, this.editable);
1025
+ break;
1026
+ case 'End':
1027
+ this.onEndKey(event, this.editable);
1028
+ break;
1029
+ case 'PageDown':
1030
+ this.onPageDownKey(event);
1031
+ break;
1032
+ case 'PageUp':
1033
+ this.onPageUpKey(event);
1034
+ break;
1035
+ //space
1036
+ case 'Space':
1037
+ this.onSpaceKey(event, search);
1038
+ break;
1039
+ //enter
1040
+ case 'Enter':
1041
+ case 'NumpadEnter':
1042
+ this.onEnterKey(event);
1043
+ break;
1044
+ //escape and tab
1045
+ case 'Escape':
1046
+ this.onEscapeKey(event);
1047
+ break;
1048
+ case 'Tab':
1049
+ this.onTabKey(event);
1050
+ break;
1051
+ case 'Backspace':
1052
+ this.onBackspaceKey(event, this.editable);
1053
+ break;
1054
+ case 'ShiftLeft':
1055
+ case 'ShiftRight':
1056
+ //NOOP
1057
+ break;
1058
+ default:
1059
+ if (!event.metaKey && ObjectUtils.isPrintableCharacter(event.key)) {
1060
+ !this.overlayVisible && this.autoShowPanelOnPrintableCharacterKeyDown && this.show();
1061
+ !this.editable && this.searchOptions(event, event.key);
1062
+ }
1063
+ break;
1064
+ }
1065
+ this.clicked.set(false);
1066
+ }
1067
+ onFilterKeyDown(event) {
1068
+ switch (event.code) {
1069
+ case 'ArrowDown':
1070
+ this.onArrowDownKey(event);
1071
+ break;
1072
+ case 'ArrowUp':
1073
+ this.onArrowUpKey(event, true);
1074
+ break;
1075
+ case 'ArrowLeft':
1076
+ case 'ArrowRight':
1077
+ this.onArrowLeftKey(event, true);
1078
+ break;
1079
+ case 'Home':
1080
+ this.onHomeKey(event, true);
1081
+ break;
1082
+ case 'End':
1083
+ this.onEndKey(event, true);
1084
+ break;
1085
+ case 'Enter':
1086
+ case 'NumpadEnter':
1087
+ this.onEnterKey(event, true);
1088
+ break;
1089
+ case 'Escape':
1090
+ this.onEscapeKey(event);
1091
+ break;
1092
+ case 'Tab':
1093
+ this.onTabKey(event, true);
1094
+ break;
1095
+ default:
1096
+ break;
1097
+ }
1098
+ }
1099
+ onFilterBlur(event) {
1100
+ this.focusedOptionIndex.set(-1);
1101
+ }
1102
+ onArrowDownKey(event) {
1103
+ if (!this.overlayVisible) {
1104
+ this.show();
1105
+ this.editable && this.changeFocusedOptionIndex(event, this.findSelectedOptionIndex());
1106
+ }
1107
+ else {
1108
+ const optionIndex = this.focusedOptionIndex() !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex()) : this.clicked() ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex();
1109
+ this.changeFocusedOptionIndex(event, optionIndex);
1110
+ }
1111
+ // const optionIndex = this.focusedOptionIndex() !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex()) : this.findFirstFocusedOptionIndex();
1112
+ // this.changeFocusedOptionIndex(event, optionIndex);
1113
+ // !this.overlayVisible && this.show();
1114
+ event.preventDefault();
1115
+ event.stopPropagation();
1116
+ }
1117
+ changeFocusedOptionIndex(event, index) {
1118
+ if (this.focusedOptionIndex() !== index) {
1119
+ this.focusedOptionIndex.set(index);
1120
+ this.scrollInView();
1121
+ if (this.selectOnFocus) {
1122
+ const option = this.visibleOptions()[index];
1123
+ this.onOptionSelect(event, option, false);
1124
+ }
1125
+ }
1126
+ }
1127
+ get virtualScrollerDisabled() {
1128
+ return !this.virtualScroll;
1129
+ }
1130
+ scrollInView(index = -1) {
1131
+ const id = index !== -1 ? `${this.id}_${index}` : this.focusedOptionId;
1132
+ if (this.itemsViewChild && this.itemsViewChild.nativeElement) {
1133
+ const element = DomHandler.findSingle(this.itemsViewChild.nativeElement, `li[id="${id}"]`);
1134
+ if (element) {
1135
+ element.scrollIntoView && element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
1136
+ }
1137
+ else if (!this.virtualScrollerDisabled) {
1138
+ setTimeout(() => {
1139
+ this.virtualScroll && this.scroller?.scrollToIndex(index !== -1 ? index : this.focusedOptionIndex());
1140
+ }, 0);
1141
+ }
1142
+ }
1143
+ }
1144
+ hasSelectedOption() {
1145
+ return this.modelValue() !== undefined;
1146
+ }
1147
+ isValidSelectedOption(option) {
1148
+ return this.isValidOption(option) && this.isSelected(option);
1149
+ }
1150
+ equalityKey() {
1151
+ return this.optionValue ? null : this.dataKey;
1152
+ }
1153
+ findFirstFocusedOptionIndex() {
1154
+ const selectedIndex = this.findSelectedOptionIndex();
1155
+ return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex;
1156
+ }
1157
+ findFirstOptionIndex() {
1158
+ return this.visibleOptions().findIndex((option) => this.isValidOption(option));
1159
+ }
1160
+ findSelectedOptionIndex() {
1161
+ return this.hasSelectedOption() ? this.visibleOptions().findIndex((option) => this.isValidSelectedOption(option)) : -1;
1162
+ }
1163
+ findNextOptionIndex(index) {
1164
+ const matchedOptionIndex = index < this.visibleOptions().length - 1
1165
+ ? this.visibleOptions()
1166
+ .slice(index + 1)
1167
+ .findIndex((option) => this.isValidOption(option))
1168
+ : -1;
1169
+ return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
1170
+ }
1171
+ findPrevOptionIndex(index) {
1172
+ const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions().slice(0, index), (option) => this.isValidOption(option)) : -1;
1173
+ return matchedOptionIndex > -1 ? matchedOptionIndex : index;
1174
+ }
1175
+ findLastOptionIndex() {
1176
+ return ObjectUtils.findLastIndex(this.visibleOptions(), (option) => this.isValidOption(option));
1177
+ }
1178
+ findLastFocusedOptionIndex() {
1179
+ const selectedIndex = this.findSelectedOptionIndex();
1180
+ return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex;
1181
+ }
1182
+ isValidOption(option) {
1183
+ return option !== undefined && option !== null && !(this.isOptionDisabled(option) || this.isOptionGroup(option));
1184
+ }
1185
+ isOptionGroup(option) {
1186
+ return this.optionGroupLabel !== undefined && this.optionGroupLabel !== null && option.optionGroup !== undefined && option.optionGroup !== null && option.group;
1187
+ }
1188
+ onArrowUpKey(event, pressedInInputText = false) {
1189
+ if (event.altKey && !pressedInInputText) {
1190
+ if (this.focusedOptionIndex() !== -1) {
1191
+ const option = this.visibleOptions()[this.focusedOptionIndex()];
1192
+ this.onOptionSelect(event, option);
1193
+ }
1194
+ this.overlayVisible && this.hide();
1195
+ }
1196
+ else {
1197
+ const optionIndex = this.focusedOptionIndex() !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex()) : this.clicked() ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex();
1198
+ this.changeFocusedOptionIndex(event, optionIndex);
1199
+ !this.overlayVisible && this.show();
1200
+ }
1201
+ event.preventDefault();
1202
+ event.stopPropagation();
1203
+ }
1204
+ onArrowLeftKey(event, pressedInInputText = false) {
1205
+ pressedInInputText && this.focusedOptionIndex.set(-1);
1206
+ }
1207
+ onDeleteKey(event) {
1208
+ if (this.showClear) {
1209
+ this.clear(event);
1210
+ event.preventDefault();
1211
+ }
1212
+ }
1213
+ onHomeKey(event, pressedInInputText = false) {
1214
+ if (pressedInInputText) {
1215
+ const target = event.currentTarget;
1216
+ if (event.shiftKey) {
1217
+ target.setSelectionRange(0, target.value.length);
1218
+ }
1219
+ else {
1220
+ target.setSelectionRange(0, 0);
1221
+ this.focusedOptionIndex.set(-1);
1222
+ }
1223
+ }
1224
+ else {
1225
+ this.changeFocusedOptionIndex(event, this.findFirstOptionIndex());
1226
+ !this.overlayVisible && this.show();
1227
+ }
1228
+ event.preventDefault();
1229
+ }
1230
+ onEndKey(event, pressedInInputText = false) {
1231
+ if (pressedInInputText) {
1232
+ const target = event.currentTarget;
1233
+ if (event.shiftKey) {
1234
+ target.setSelectionRange(0, target.value.length);
1235
+ }
1236
+ else {
1237
+ const len = target.value.length;
1238
+ target.setSelectionRange(len, len);
1239
+ this.focusedOptionIndex.set(-1);
1240
+ }
1241
+ }
1242
+ else {
1243
+ this.changeFocusedOptionIndex(event, this.findLastOptionIndex());
1244
+ !this.overlayVisible && this.show();
1245
+ }
1246
+ event.preventDefault();
1247
+ }
1248
+ onPageDownKey(event) {
1249
+ this.scrollInView(this.visibleOptions().length - 1);
1250
+ event.preventDefault();
1251
+ }
1252
+ onPageUpKey(event) {
1253
+ this.scrollInView(0);
1254
+ event.preventDefault();
1255
+ }
1256
+ onSpaceKey(event, pressedInInputText = false) {
1257
+ !this.editable && !pressedInInputText && this.onEnterKey(event);
1258
+ }
1259
+ onEnterKey(event, pressedInInput = false) {
1260
+ if (!this.overlayVisible) {
1261
+ this.focusedOptionIndex.set(-1);
1262
+ this.onArrowDownKey(event);
1263
+ }
1264
+ else {
1265
+ if (this.focusedOptionIndex() !== -1) {
1266
+ const option = this.visibleOptions()[this.focusedOptionIndex()];
1267
+ this.onOptionSelect(event, option);
1268
+ }
1269
+ !pressedInInput && this.hide();
1270
+ }
1271
+ event.preventDefault();
1272
+ }
1273
+ onEscapeKey(event) {
1274
+ this.overlayVisible && this.hide(true);
1275
+ event.preventDefault();
1276
+ }
1277
+ onTabKey(event, pressedInInputText = false) {
1278
+ if (!pressedInInputText) {
1279
+ if (this.overlayVisible && this.hasFocusableElements()) {
1280
+ DomHandler.focus(event.shiftKey ? this.lastHiddenFocusableElementOnOverlay.nativeElement : this.firstHiddenFocusableElementOnOverlay.nativeElement);
1281
+ event.preventDefault();
1282
+ }
1283
+ else {
1284
+ if (this.focusedOptionIndex() !== -1 && this.overlayVisible) {
1285
+ const option = this.visibleOptions()[this.focusedOptionIndex()];
1286
+ this.onOptionSelect(event, option);
1287
+ }
1288
+ this.overlayVisible && this.hide(this.filter);
1289
+ }
1290
+ }
1291
+ event.stopPropagation();
1292
+ }
1293
+ onFirstHiddenFocus(event) {
1294
+ const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement ? DomHandler.getFirstFocusableElement(this.overlayViewChild.el?.nativeElement, ':not(.cax-hidden-focusable)') : this.focusInputViewChild?.nativeElement;
1295
+ DomHandler.focus(focusableEl);
1296
+ }
1297
+ onLastHiddenFocus(event) {
1298
+ const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement
1299
+ ? DomHandler.getLastFocusableElement(this.overlayViewChild?.overlayViewChild?.nativeElement, ':not([data-cax-hidden-focusable="true"])')
1300
+ : this.focusInputViewChild?.nativeElement;
1301
+ DomHandler.focus(focusableEl);
1302
+ }
1303
+ hasFocusableElements() {
1304
+ return DomHandler.getFocusableElements(this.overlayViewChild.overlayViewChild.nativeElement, ':not([data-cax-hidden-focusable="true"]):not([class="cax-dropdown-items-wrapper"])').length > 0;
1305
+ }
1306
+ onBackspaceKey(event, pressedInInputText = false) {
1307
+ if (pressedInInputText) {
1308
+ !this.overlayVisible && this.show();
1309
+ }
1310
+ }
1311
+ searchFields() {
1312
+ return this.filterBy?.split(',') || this.filterFields || [this.optionLabel];
1313
+ }
1314
+ searchOptions(event, char) {
1315
+ this.searchValue = (this.searchValue || '') + char;
1316
+ let optionIndex = -1;
1317
+ let matched = false;
1318
+ if (this.focusedOptionIndex() !== -1) {
1319
+ optionIndex = this.visibleOptions()
1320
+ .slice(this.focusedOptionIndex())
1321
+ .findIndex((option) => this.isOptionMatched(option));
1322
+ optionIndex =
1323
+ optionIndex === -1
1324
+ ? this.visibleOptions()
1325
+ .slice(0, this.focusedOptionIndex())
1326
+ .findIndex((option) => this.isOptionMatched(option))
1327
+ : optionIndex + this.focusedOptionIndex();
1328
+ }
1329
+ else {
1330
+ optionIndex = this.visibleOptions().findIndex((option) => this.isOptionMatched(option));
1331
+ }
1332
+ if (optionIndex !== -1) {
1333
+ matched = true;
1334
+ }
1335
+ if (optionIndex === -1 && this.focusedOptionIndex() === -1) {
1336
+ optionIndex = this.findFirstFocusedOptionIndex();
1337
+ }
1338
+ if (optionIndex !== -1) {
1339
+ this.changeFocusedOptionIndex(event, optionIndex);
1340
+ }
1341
+ if (this.searchTimeout) {
1342
+ clearTimeout(this.searchTimeout);
1343
+ }
1344
+ this.searchTimeout = setTimeout(() => {
1345
+ this.searchValue = '';
1346
+ this.searchTimeout = null;
1347
+ }, 500);
1348
+ return matched;
1349
+ }
1350
+ isOptionMatched(option) {
1351
+ return this.isValidOption(option) && this.getOptionLabel(option).toString().toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale));
1352
+ }
1353
+ onFilterInputChange(event) {
1354
+ let value = event.target.value;
1355
+ this._filterValue.set(value);
1356
+ this.focusedOptionIndex.set(-1);
1357
+ this.onFilter.emit({ originalEvent: event, filter: this._filterValue() });
1358
+ !this.virtualScrollerDisabled && this.scroller.scrollToIndex(0);
1359
+ setTimeout(() => {
1360
+ this.overlayViewChild.alignOverlay();
1361
+ });
1362
+ this.cd.markForCheck();
1363
+ }
1364
+ applyFocus() {
1365
+ if (this.editable)
1366
+ DomHandler.findSingle(this.el.nativeElement, '.cax-dropdown-label.cax-inputtext').focus();
1367
+ else
1368
+ DomHandler.focus(this.focusInputViewChild?.nativeElement);
1369
+ }
1370
+ /**
1371
+ * Applies focus.
1372
+ * @group Method
1373
+ */
1374
+ focus() {
1375
+ this.applyFocus();
1376
+ }
1377
+ /**
1378
+ * Clears the model.
1379
+ * @group Method
1380
+ */
1381
+ clear(event) {
1382
+ this.updateModel(null, event);
1383
+ this.clearEditableLabel();
1384
+ this.onModelTouched();
1385
+ this.onChange.emit({ originalEvent: event, value: this.value });
1386
+ this.onClear.emit(event);
1387
+ this.resetFilter();
1388
+ }
1389
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.FilterService }, { token: i1.caxConfig }], target: i0.ɵɵFactoryTarget.Component });
1390
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Dropdown, isStandalone: true, selector: "cax-dropdown", inputs: { id: "id", scrollHeight: "scrollHeight", filter: ["filter", "filter", booleanAttribute], name: "name", style: "style", panelStyle: "panelStyle", styleClass: "styleClass", panelStyleClass: "panelStyleClass", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], editable: ["editable", "editable", booleanAttribute], appendTo: "appendTo", tabindex: ["tabindex", "tabindex", numberAttribute], placeholder: "placeholder", loadingIcon: "loadingIcon", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", variant: "variant", inputId: "inputId", dataKey: "dataKey", filterBy: "filterBy", filterFields: "filterFields", autofocus: ["autofocus", "autofocus", booleanAttribute], resetFilterOnHide: ["resetFilterOnHide", "resetFilterOnHide", booleanAttribute], checkmark: ["checkmark", "checkmark", booleanAttribute], dropdownIcon: "dropdownIcon", loading: ["loading", "loading", booleanAttribute], optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", autoDisplayFirst: ["autoDisplayFirst", "autoDisplayFirst", booleanAttribute], group: ["group", "group", booleanAttribute], showClear: ["showClear", "showClear", booleanAttribute], emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", overlayOptions: "overlayOptions", ariaFilterLabel: "ariaFilterLabel", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", filterMatchMode: "filterMatchMode", maxlength: ["maxlength", "maxlength", numberAttribute], tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", focusOnHover: ["focusOnHover", "focusOnHover", booleanAttribute], selectOnFocus: ["selectOnFocus", "selectOnFocus", booleanAttribute], autoOptionFocus: ["autoOptionFocus", "autoOptionFocus", booleanAttribute], autofocusFilter: ["autofocusFilter", "autofocusFilter", booleanAttribute], autoShowPanelOnPrintableCharacterKeyDown: ["autoShowPanelOnPrintableCharacterKeyDown", "autoShowPanelOnPrintableCharacterKeyDown", booleanAttribute], labelText: "labelText", disabled: "disabled", itemSize: "itemSize", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", filterValue: "filterValue", options: "options" }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onShow: "onShow", onHide: "onHide", onClear: "onClear", onLazyLoad: "onLazyLoad" }, host: { properties: { "class.cax-inputwrapper-filled": "filled()", "class.cax-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "cax-element cax-inputwrapper" }, providers: [DROPDOWN_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "focusInputViewChild", first: true, predicate: ["focusInput"], descendants: true }, { propertyName: "editableInputViewChild", first: true, predicate: ["editableInput"], descendants: true }, { propertyName: "itemsViewChild", first: true, predicate: ["items"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "overlayViewChild", first: true, predicate: ["overlay"], descendants: true }, { propertyName: "firstHiddenFocusableElementOnOverlay", first: true, predicate: ["firstHiddenFocusableEl"], descendants: true }, { propertyName: "lastHiddenFocusableElementOnOverlay", first: true, predicate: ["lastHiddenFocusableEl"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? '&nbsp;' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? '&nbsp;' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon && !overlayVisible\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"!dropdownIcon && overlayVisible\" class=\"cax cax-alt-arrow-up\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "component", type: i3.Overlay, selector: "cax-overlay", inputs: ["visible", "mode", "style", "styleClass", "contentStyle", "contentStyleClass", "target", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "listener", "responsive", "options"], outputs: ["visibleChange", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "onAnimationStart", "onAnimationDone"] }, { kind: "directive", type: i1.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[caxTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "caxTooltip", "tooltipDisabled", "tooltipOptions", "linkUrl", "linkText"] }, { kind: "ngmodule", type: RippleModule }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: i5.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i6.AutoFocus, selector: "[caxAutoFocus]", inputs: ["autofocus"] }, { kind: "component", type: TimesIcon, selector: "TimesIcon" }, { kind: "component", type: SearchIcon, selector: "SearchIcon" }, { kind: "component", type: DropdownItem, selector: "cax-dropdownItem", inputs: ["id", "option", "selected", "focused", "label", "disabled", "visible", "itemSize", "ariaPosInset", "ariaSetSize", "template", "checkmark"], outputs: ["onClick", "onMouseEnter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1391
+ }
1392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Dropdown, decorators: [{
1393
+ type: Component,
1394
+ args: [{ selector: 'cax-dropdown', standalone: true, imports: [CommonModule, OverlayModule, SharedModule, TooltipModule, RippleModule, ScrollerModule, AutoFocusModule, TimesIcon, ChevronDownIcon, SearchIcon, DropdownItem], host: {
1395
+ class: 'cax-element cax-inputwrapper',
1396
+ '[class.cax-inputwrapper-filled]': 'filled()',
1397
+ '[class.cax-inputwrapper-focus]': 'focused || overlayVisible'
1398
+ }, providers: [DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? '&nbsp;' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? '&nbsp;' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon && !overlayVisible\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"!dropdownIcon && overlayVisible\" class=\"cax cax-alt-arrow-up\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\n"] }]
1399
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.FilterService }, { type: i1.caxConfig }], propDecorators: { id: [{
1400
+ type: Input
1401
+ }], scrollHeight: [{
1402
+ type: Input
1403
+ }], filter: [{
1404
+ type: Input,
1405
+ args: [{ transform: booleanAttribute }]
1406
+ }], name: [{
1407
+ type: Input
1408
+ }], style: [{
1409
+ type: Input
1410
+ }], panelStyle: [{
1411
+ type: Input
1412
+ }], styleClass: [{
1413
+ type: Input
1414
+ }], panelStyleClass: [{
1415
+ type: Input
1416
+ }], readonly: [{
1417
+ type: Input,
1418
+ args: [{ transform: booleanAttribute }]
1419
+ }], required: [{
1420
+ type: Input,
1421
+ args: [{ transform: booleanAttribute }]
1422
+ }], editable: [{
1423
+ type: Input,
1424
+ args: [{ transform: booleanAttribute }]
1425
+ }], appendTo: [{
1426
+ type: Input
1427
+ }], tabindex: [{
1428
+ type: Input,
1429
+ args: [{ transform: numberAttribute }]
1430
+ }], placeholder: [{
1431
+ type: Input
1432
+ }], loadingIcon: [{
1433
+ type: Input
1434
+ }], filterPlaceholder: [{
1435
+ type: Input
1436
+ }], filterLocale: [{
1437
+ type: Input
1438
+ }], variant: [{
1439
+ type: Input
1440
+ }], inputId: [{
1441
+ type: Input
1442
+ }], dataKey: [{
1443
+ type: Input
1444
+ }], filterBy: [{
1445
+ type: Input
1446
+ }], filterFields: [{
1447
+ type: Input
1448
+ }], autofocus: [{
1449
+ type: Input,
1450
+ args: [{ transform: booleanAttribute }]
1451
+ }], resetFilterOnHide: [{
1452
+ type: Input,
1453
+ args: [{ transform: booleanAttribute }]
1454
+ }], checkmark: [{
1455
+ type: Input,
1456
+ args: [{ transform: booleanAttribute }]
1457
+ }], dropdownIcon: [{
1458
+ type: Input
1459
+ }], loading: [{
1460
+ type: Input,
1461
+ args: [{ transform: booleanAttribute }]
1462
+ }], optionLabel: [{
1463
+ type: Input
1464
+ }], optionValue: [{
1465
+ type: Input
1466
+ }], optionDisabled: [{
1467
+ type: Input
1468
+ }], optionGroupLabel: [{
1469
+ type: Input
1470
+ }], optionGroupChildren: [{
1471
+ type: Input
1472
+ }], autoDisplayFirst: [{
1473
+ type: Input,
1474
+ args: [{ transform: booleanAttribute }]
1475
+ }], group: [{
1476
+ type: Input,
1477
+ args: [{ transform: booleanAttribute }]
1478
+ }], showClear: [{
1479
+ type: Input,
1480
+ args: [{ transform: booleanAttribute }]
1481
+ }], emptyFilterMessage: [{
1482
+ type: Input
1483
+ }], emptyMessage: [{
1484
+ type: Input
1485
+ }], lazy: [{
1486
+ type: Input,
1487
+ args: [{ transform: booleanAttribute }]
1488
+ }], virtualScroll: [{
1489
+ type: Input,
1490
+ args: [{ transform: booleanAttribute }]
1491
+ }], virtualScrollItemSize: [{
1492
+ type: Input,
1493
+ args: [{ transform: numberAttribute }]
1494
+ }], virtualScrollOptions: [{
1495
+ type: Input
1496
+ }], overlayOptions: [{
1497
+ type: Input
1498
+ }], ariaFilterLabel: [{
1499
+ type: Input
1500
+ }], ariaLabel: [{
1501
+ type: Input
1502
+ }], ariaLabelledBy: [{
1503
+ type: Input
1504
+ }], filterMatchMode: [{
1505
+ type: Input
1506
+ }], maxlength: [{
1507
+ type: Input,
1508
+ args: [{ transform: numberAttribute }]
1509
+ }], tooltip: [{
1510
+ type: Input
1511
+ }], tooltipPosition: [{
1512
+ type: Input
1513
+ }], tooltipPositionStyle: [{
1514
+ type: Input
1515
+ }], tooltipStyleClass: [{
1516
+ type: Input
1517
+ }], focusOnHover: [{
1518
+ type: Input,
1519
+ args: [{ transform: booleanAttribute }]
1520
+ }], selectOnFocus: [{
1521
+ type: Input,
1522
+ args: [{ transform: booleanAttribute }]
1523
+ }], autoOptionFocus: [{
1524
+ type: Input,
1525
+ args: [{ transform: booleanAttribute }]
1526
+ }], autofocusFilter: [{
1527
+ type: Input,
1528
+ args: [{ transform: booleanAttribute }]
1529
+ }], autoShowPanelOnPrintableCharacterKeyDown: [{
1530
+ type: Input,
1531
+ args: [{ transform: booleanAttribute }]
1532
+ }], labelText: [{
1533
+ type: Input
1534
+ }], disabled: [{
1535
+ type: Input
1536
+ }], itemSize: [{
1537
+ type: Input
1538
+ }], autoZIndex: [{
1539
+ type: Input
1540
+ }], baseZIndex: [{
1541
+ type: Input
1542
+ }], showTransitionOptions: [{
1543
+ type: Input
1544
+ }], hideTransitionOptions: [{
1545
+ type: Input
1546
+ }], filterValue: [{
1547
+ type: Input
1548
+ }], options: [{
1549
+ type: Input
1550
+ }], onChange: [{
1551
+ type: Output
1552
+ }], onFilter: [{
1553
+ type: Output
1554
+ }], onFocus: [{
1555
+ type: Output
1556
+ }], onBlur: [{
1557
+ type: Output
1558
+ }], onClick: [{
1559
+ type: Output
1560
+ }], onShow: [{
1561
+ type: Output
1562
+ }], onHide: [{
1563
+ type: Output
1564
+ }], onClear: [{
1565
+ type: Output
1566
+ }], onLazyLoad: [{
1567
+ type: Output
1568
+ }], containerViewChild: [{
1569
+ type: ViewChild,
1570
+ args: ['container']
1571
+ }], filterViewChild: [{
1572
+ type: ViewChild,
1573
+ args: ['filter']
1574
+ }], focusInputViewChild: [{
1575
+ type: ViewChild,
1576
+ args: ['focusInput']
1577
+ }], editableInputViewChild: [{
1578
+ type: ViewChild,
1579
+ args: ['editableInput']
1580
+ }], itemsViewChild: [{
1581
+ type: ViewChild,
1582
+ args: ['items']
1583
+ }], scroller: [{
1584
+ type: ViewChild,
1585
+ args: ['scroller']
1586
+ }], overlayViewChild: [{
1587
+ type: ViewChild,
1588
+ args: ['overlay']
1589
+ }], firstHiddenFocusableElementOnOverlay: [{
1590
+ type: ViewChild,
1591
+ args: ['firstHiddenFocusableEl']
1592
+ }], lastHiddenFocusableElementOnOverlay: [{
1593
+ type: ViewChild,
1594
+ args: ['lastHiddenFocusableEl']
1595
+ }], templates: [{
1596
+ type: ContentChildren,
1597
+ args: [CaxTemplate]
1598
+ }] } });
1599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUlILGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsTUFBTSxFQUVOLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLGVBQWUsRUFFZixNQUFNLEVBSU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFFcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBNEMsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBVyxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVB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O2dCQUVKLFNBQVM7c0JBQXRDLGVBQWU7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2lnbmFsLFxuICAgIHNpZ25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UsIE92ZXJsYXlPcHRpb25zLCBjYXhDb25maWcsIENheFRlbXBsYXRlLCBTaGFyZWRNb2R1bGUsIFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2FwaSc7XG5pbXBvcnQgeyBBdXRvRm9jdXNNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9hdXRvZm9jdXMnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2RvbSc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5TW9kdWxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vb3ZlcmxheSc7XG5pbXBvcnQgeyBSaXBwbGVNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9yaXBwbGUnO1xuaW1wb3J0IHsgU2Nyb2xsZXIsIFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vc2Nyb2xsZXInO1xuaW1wb3J0IHsgU2Nyb2xsZXJPcHRpb25zIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vYXBpJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS90b29sdGlwJztcbmltcG9ydCB7IE9iamVjdFV0aWxzLCBVbmlxdWVDb21wb25lbnRJZCB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3V0aWxzJztcbmltcG9ydCB7IFRpbWVzSWNvbiB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2ljb25zL3RpbWVzJztcbmltcG9ydCB7IENoZXZyb25Eb3duSWNvbiB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2ljb25zL2NoZXZyb25kb3duJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9pY29ucy9zZWFyY2gnO1xuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCwgRHJvcGRvd25GaWx0ZXJFdmVudCwgRHJvcGRvd25GaWx0ZXJPcHRpb25zLCBEcm9wZG93bkxhenlMb2FkRXZlbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSAnLi9kcm9wZG93bi1pdGVtJztcblxuZXhwb3J0IGNvbnN0IERST1BET1dOX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHJvcGRvd24pLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG4vKipcbiAqIERyb3Bkb3duIGFsc28ga25vd24gYXMgU2VsZWN0LCBpcyB1c2VkIHRvIGNob29zZSBhbiBpdGVtIGZyb20gYSBjb2xsZWN0aW9uIG9mIG9wdGlvbnMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheU1vZHVsZSwgU2hhcmVkTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBSaXBwbGVNb2R1bGUsIFNjcm9sbGVyTW9kdWxlLCBBdXRvRm9jdXNNb2R1bGUsIFRpbWVzSWNvbiwgQ2hldnJvbkRvd25JY29uLCBTZWFyY2hJY29uLCBEcm9wZG93bkl0ZW1dLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdjYXgtZWxlbWVudCBjYXgtaW5wdXR3cmFwcGVyJyxcbiAgICAgICAgJ1tjbGFzcy5jYXgtaW5wdXR3cmFwcGVyLWZpbGxlZF0nOiAnZmlsbGVkKCknLFxuICAgICAgICAnW2NsYXNzLmNheC1pbnB1dHdyYXBwZXItZm9jdXNdJzogJ2ZvY3VzZWQgfHwgb3ZlcmxheVZpc2libGUnXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtEUk9QRE9XTl9WQUxVRV9BQ0NFU1NPUl0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcG9uZW50XG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscywgYSBzY3JvbGxiYXIgaXMgZGVmaW5lZCBpZiBoZWlnaHQgb2YgbGlzdCBleGNlZWRzIHRoaXMgdmFsdWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnMjAwcHgnO1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkLCBkaXNwbGF5cyBhbiBpbnB1dCBmaWVsZCB0byBmaWx0ZXIgdGhlIGl0ZW1zIG9uIGtleXVwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmaWx0ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgb3ZlcmxheSBwYW5lbCBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhbmVsU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvdmVybGF5IHBhbmVsIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IGNhbm5vdCBiZSBlZGl0ZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlYWRvbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgYW4gaW5wdXQgZmllbGQgbXVzdCBiZSBmaWxsZWQgb3V0IGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBmb3JtLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGN1c3RvbSB2YWx1ZSBpbnN0ZWFkIG9mIHByZWRlZmluZWQgb3B0aW9ucyBjYW4gYmUgZW50ZXJlZCB1c2luZyB0aGUgZWRpdGFibGUgaW5wdXQgZmllbGQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGVkaXRhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRhcmdldCBlbGVtZW50IHRvIGF0dGFjaCB0aGUgb3ZlcmxheSwgdmFsaWQgdmFsdWVzIGFyZSBcImJvZHlcIiBvciBhIGxvY2FsIG5nLXRlbXBsYXRlIHZhcmlhYmxlIG9mIGFub3RoZXIgZWxlbWVudCAobm90ZTogdXNlIGJpbmRpbmcgd2l0aCBicmFja2V0cyBmb3IgdGVtcGxhdGUgdmFyaWFibGVzLCBlLmcuIFthcHBlbmRUb109XCJteWRpdlwiIGZvciBhIGRpdiBlbGVtZW50IGhhdmluZyAjbXlkaXYgYXMgdmFyaWFibGUgbmFtZSkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZiB8IFRlbXBsYXRlUmVmPGFueT4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgYW55O1xuICAgIC8qKlxuICAgICAqIEluZGV4IG9mIHRoZSBlbGVtZW50IGluIHRhYmJpbmcgb3JkZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnNldCh2YWwpO1xuICAgIH1cbiAgICBnZXQgcGxhY2Vob2xkZXIoKTogU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIuYXNSZWFkb25seSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJY29uIHRvIGRpc3BsYXkgaW4gbG9hZGluZyBzdGF0ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nSWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFBsYWNlaG9sZGVyIHRleHQgdG8gc2hvdyB3aGVuIGZpbHRlciBpbnB1dCBpcyBlbXB0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIExvY2FsZSB0byB1c2UgaW4gZmlsdGVyaW5nLiBUaGUgZGVmYXVsdCBsb2NhbGUgaXMgdGhlIGhvc3QgZW52aXJvbm1lbnQncyBjdXJyZW50IGxvY2FsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGlucHV0IHZhcmlhbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgPSAnb3V0bGluZWQnO1xuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgb2YgdGhlIGFjY2Vzc2libGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQSBwcm9wZXJ0eSB0byB1bmlxdWVseSBpZGVudGlmeSBhIHZhbHVlIGluIG9wdGlvbnMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIGZpbHRlckJ5IGRlY2lkZXMgd2hpY2ggZmllbGQgb3IgZmllbGRzIChjb21tYSBzZXBhcmF0ZWQpIHRvIHNlYXJjaCBhZ2FpbnN0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlckJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRmllbGRzIHVzZWQgd2hlbiBmaWx0ZXJpbmcgdGhlIG9wdGlvbnMsIGRlZmF1bHRzIHRvIG9wdGlvbkxhYmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlckZpZWxkczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IGdldCBmb2N1cyBvbiBsb2FkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBmaWx0ZXIgdmFsdWUgd2hlbiBoaWRpbmcgdGhlIGRyb3Bkb3duLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXNldEZpbHRlck9uSGlkZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHNlbGVjdGVkIG9wdGlvbiB3aWxsIGJlIHNob3duIHdpdGggYSBjaGVjayBtYXJrLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjaGVja21hcms6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJY29uIGNsYXNzIG9mIHRoZSBkcm9wZG93biBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duSWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIGlzIGluIGxvYWRpbmcgc3RhdGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBsYWJlbCBmaWVsZCBvZiBhbiBvcHRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSB2YWx1ZSBmaWVsZCBvZiBhbiBvcHRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBkaXNhYmxlZCBmaWVsZCBvZiBhbiBvcHRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uRGlzYWJsZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBsYWJlbCBmaWVsZCBvZiBhbiBvcHRpb24gZ3JvdXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uR3JvdXBMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ2xhYmVsJztcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBvcHRpb25zIGZpZWxkIG9mIGFuIG9wdGlvbiBncm91cC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25Hcm91cENoaWxkcmVuOiBzdHJpbmcgPSAnaXRlbXMnO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZmlyc3QgaXRlbSBhcyB0aGUgbGFiZWwgaWYgbm8gcGxhY2Vob2xkZXIgaXMgZGVmaW5lZCBhbmQgdmFsdWUgaXMgbnVsbC5cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MTcuMy4wLCBzZXQgaW5pdGlhbCB2YWx1ZSBieSBtb2RlbCBpbnN0ZWFkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvRGlzcGxheUZpcnN0OiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgb3B0aW9ucyBhcyBncm91cGVkIHdoZW4gbmVzdGVkIG9wdGlvbnMgYXJlIHByb3ZpZGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBncm91cDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xlYXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gZmlsdGVyaW5nIGRvZXMgbm90IHJldHVybiBhbnkgcmVzdWx0cy4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhbHVlIGluIGkxOG4gdHJhbnNsYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eUZpbHRlck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEuIERlZmF1bHRzIHRvIGdsb2JhbCB2YWx1ZSBpbiBpMThuIHRyYW5zbGF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZW1wdHlNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGlmIGRhdGEgaXMgbG9hZGVkIGFuZCBpbnRlcmFjdGVkIHdpdGggaW4gbGF6eSBtYW5uZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxhenk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBkYXRhIHNob3VsZCBiZSBsb2FkZWQgb24gZGVtYW5kIGR1cmluZyBzY3JvbGwuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3QgZm9yIFZpcnR1YWxTY3JvbGxpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdmlydHVhbFNjcm9sbEl0ZW1TaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2UgdGhlIHNjcm9sbGVyIGZlYXR1cmUuIFRoZSBwcm9wZXJ0aWVzIG9mIHNjcm9sbGVyIGNvbXBvbmVudCBjYW4gYmUgdXNlZCBsaWtlIGFuIG9iamVjdCBpbiBpdC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsT3B0aW9uczogU2Nyb2xsZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdXNlIG92ZXJsYXkgQVBJIGZlYXR1cmUuIFRoZSBwcm9wZXJ0aWVzIG9mIG92ZXJsYXkgQVBJIGNhbiBiZSB1c2VkIGxpa2UgYW4gb2JqZWN0IGluIGl0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG92ZXJsYXlPcHRpb25zOiBPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSBmaWx0ZXIgaW5wdXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUZpbHRlckxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZWZpbmUgYSBhcmlhIGxhYmVsIGF0dHJpYnV0ZSB0aGUgY3VycmVudCBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEVzdGFibGlzaGVzIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgY29tcG9uZW50IGFuZCBsYWJlbChzKSB3aGVyZSBpdHMgdmFsdWUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIGVsZW1lbnQgSURzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBob3cgdGhlIGl0ZW1zIGFyZSBmaWx0ZXJlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJNYXRjaE1vZGU6ICdjb250YWlucycgfCAnc3RhcnRzV2l0aCcgfCAnZW5kc1dpdGgnIHwgJ2VxdWFscycgfCAnbm90RXF1YWxzJyB8ICdpbicgfCAnbHQnIHwgJ2x0ZScgfCAnZ3QnIHwgJ2d0ZScgPSAnY29udGFpbnMnO1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlciBhbGxvd3MgaW4gdGhlIGVkaXRhYmxlIGlucHV0IGZpZWxkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG1heGxlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFkdmlzb3J5IGluZm9ybWF0aW9uIHRvIGRpc3BsYXkgaW4gYSB0b29sdGlwIG9uIGhvdmVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZyA9ICcnO1xuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvb2x0aXBQb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgPSAncmlnaHQnO1xuICAgIC8qKlxuICAgICAqIFR5cGUgb2YgQ1NTIHBvc2l0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvb2x0aXBQb3NpdGlvblN0eWxlOiBzdHJpbmcgPSAnYWJzb2x1dGUnO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSB0b29sdGlwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvb2x0aXBTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRmllbGRzIHVzZWQgd2hlbiBmaWx0ZXJpbmcgdGhlIG9wdGlvbnMsIGRlZmF1bHRzIHRvIG9wdGlvbkxhYmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c09uSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBvcHRpb24gd2lsbCBiZSBzZWxlY3RlZCBvbiBmb2N1cy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0T25Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZm9jdXMgb24gdGhlIGZpcnN0IHZpc2libGUgb3Igc2VsZWN0ZWQgZWxlbWVudCB3aGVuIHRoZSBvdmVybGF5IHBhbmVsIGlzIHNob3duLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvT3B0aW9uRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgZm9jdXMgdG8gdGhlIGZpbHRlciBlbGVtZW50IHdoZW4gdGhlIG92ZXJsYXkgaXMgc2hvd24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9mb2N1c0ZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcGFuZWwgd2lsbCBiZSBzaG93biB3aGVuIHRoZSBpbnB1dCBpcyBmb2N1c2VkIGFuZCByZWNlaXZlcyBhIGNoYXJhY3RlciBrZXkgZG93biBldmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b1Nob3dQYW5lbE9uUHJpbnRhYmxlQ2hhcmFjdGVyS2V5RG93bjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cblxuICAgIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZChfZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKF9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlKSB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gX2Rpc2FibGVkO1xuICAgICAgICBpZiAoISh0aGlzLmNkIGFzIFZpZXdSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlbSBzaXplIG9mIGl0ZW0gdG8gYmUgdmlydHVhbCBzY3JvbGxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgdmlydHVhbFNjcm9sbEl0ZW1TaXplIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGl0ZW1TaXplKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtU2l6ZTtcbiAgICB9XG4gICAgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1TaXplID0gdmFsO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLCB1c2UgdmlydHVhbFNjcm9sbEl0ZW1TaXplIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIF9pdGVtU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgbGF5ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGF1dG9aSW5kZXgoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvWkluZGV4O1xuICAgIH1cbiAgICBzZXQgYXV0b1pJbmRleCh2YWw6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1pJbmRleCA9IHZhbDtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYXV0b1pJbmRleCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICBfYXV0b1pJbmRleDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBCYXNlIHpJbmRleCB2YWx1ZSB0byB1c2UgaW4gbGF5ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGJhc2VaSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VaSW5kZXg7XG4gICAgfVxuICAgIHNldCBiYXNlWkluZGV4KHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VaSW5kZXggPSB2YWw7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGJhc2VaSW5kZXggcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgX2Jhc2VaSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9uIG9wdGlvbnMgb2YgdGhlIHNob3cgYW5pbWF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzaG93VHJhbnNpdGlvbk9wdGlvbnMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUcmFuc2l0aW9uT3B0aW9ucztcbiAgICB9XG4gICAgc2V0IHNob3dUcmFuc2l0aW9uT3B0aW9ucyh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSB2YWw7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIHNob3dUcmFuc2l0aW9uT3B0aW9ucyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICBfc2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBoaWRlIGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgaGlkZVRyYW5zaXRpb25PcHRpb25zKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlVHJhbnNpdGlvbk9wdGlvbnM7XG4gICAgfVxuICAgIHNldCBoaWRlVHJhbnNpdGlvbk9wdGlvbnModmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5faGlkZVRyYW5zaXRpb25PcHRpb25zID0gdmFsO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgX2hpZGVUcmFuc2l0aW9uT3B0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkLCBmaWx0ZXIgZGlzcGxheXMgd2l0aCB0aGlzIHZhbHVlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclZhbHVlKCk7XG4gICAgfVxuICAgIHNldCBmaWx0ZXJWYWx1ZSh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJWYWx1ZS5zZXQodmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheSBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IG9wdGlvbnMoKTogYW55W10gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucygpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgc2V0IG9wdGlvbnModmFsOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmRlZXBFcXVhbHModmFsLCB0aGlzLl9vcHRpb25zKCkpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLnNldCh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHZhbHVlIG9mIGRyb3Bkb3duIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtEcm9wZG93bkNoYW5nZUV2ZW50fSBldmVudCAtIGN1c3RvbSBjaGFuZ2UgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPERyb3Bkb3duQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAcGFyYW0ge0Ryb3Bkb3duRmlsdGVyRXZlbnR9IGV2ZW50IC0gY3VzdG9tIGZpbHRlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxEcm9wZG93bkZpbHRlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RHJvcGRvd25GaWx0ZXJFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBkcm9wZG93biBnZXRzIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZHJvcGRvd24gbG9zZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCBpcyBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgLSBNb3VzZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRyb3Bkb3duIG92ZXJsYXkgZ2V0cyB2aXNpYmxlLlxuICAgICAqIEBwYXJhbSB7QW5pbWF0aW9uRXZlbnR9IGV2ZW50IC0gQW5pbWF0aW9uIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRyb3Bkb3duIG92ZXJsYXkgZ2V0cyBoaWRkZW4uXG4gICAgICogQHBhcmFtIHtBbmltYXRpb25FdmVudH0gZXZlbnQgLSBBbmltYXRpb24gZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QW5pbWF0aW9uRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZHJvcGRvd24gY2xlYXJzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIEJyb3dzZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBpbiBsYXp5IG1vZGUgdG8gbG9hZCBuZXcgZGF0YS5cbiAgICAgKiBAcGFyYW0ge0Ryb3Bkb3duTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBMYXp5IGxvYWQgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTGF6eUxvYWQ6IEV2ZW50RW1pdHRlcjxEcm9wZG93bkxhenlMb2FkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkxhenlMb2FkRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXJWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyJykgZmlsdGVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZvY3VzSW5wdXQnKSBmb2N1c0lucHV0Vmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRhYmxlSW5wdXQnKSBlZGl0YWJsZUlucHV0Vmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2l0ZW1zJykgaXRlbXNWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsZXInKSBzY3JvbGxlcjogTnVsbGFibGU8U2Nyb2xsZXI+O1xuXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlWaWV3Q2hpbGQ6IE51bGxhYmxlPE92ZXJsYXk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZmlyc3RIaWRkZW5Gb2N1c2FibGVFbCcpIGZpcnN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudE9uT3ZlcmxheTogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdsYXN0SGlkZGVuRm9jdXNhYmxlRWwnKSBsYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudE9uT3ZlcmxheTogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKENheFRlbXBsYXRlKSB0ZW1wbGF0ZXM6IE51bGxhYmxlPFF1ZXJ5TGlzdDxDYXhUZW1wbGF0ZT4+O1xuXG4gICAgX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgaXRlbXNXcmFwcGVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBpdGVtVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZ3JvdXBUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBsb2FkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBzZWxlY3RlZEl0ZW1UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBoZWFkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBmaWx0ZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBmb290ZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBlbXB0eUZpbHRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGVtcHR5VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZHJvcGRvd25JY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgbG9hZGluZ0ljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBjbGVhckljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBmaWx0ZXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZmlsdGVyT3B0aW9uczogRHJvcGRvd25GaWx0ZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG4gICAgX29wdGlvbnMgPSBzaWduYWw8YW55W10gfCB1bmRlZmluZWQ+KG51bGwpO1xuXG4gICAgX3BsYWNlaG9sZGVyID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIG1vZGVsVmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAgIHZhbHVlOiBhbnk7XG5cbiAgICBvbk1vZGVsQ2hhbmdlOiBGdW5jdGlvbiA9ICgpID0+IHt9O1xuXG4gICAgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBob3ZlcjogTnVsbGFibGU8Ym9vbGVhbj47XG5cbiAgICBmb2N1c2VkOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIG92ZXJsYXlWaXNpYmxlOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIG9wdGlvbnNDaGFuZ2VkOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIHBhbmVsOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBkaW1lbnNpb25zVXBkYXRlZDogTnVsbGFibGU8Ym9vbGVhbj47XG5cbiAgICBob3ZlcmVkSXRlbTogYW55O1xuXG4gICAgc2VsZWN0ZWRPcHRpb25VcGRhdGVkOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIF9maWx0ZXJWYWx1ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gICAgc2VhcmNoVmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICBzZWFyY2hJbmRleDogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIHNlYXJjaFRpbWVvdXQ6IGFueTtcblxuICAgIHByZXZpb3VzU2VhcmNoQ2hhcjogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIGN1cnJlbnRTZWFyY2hDaGFyOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgcHJldmVudE1vZGVsVG91Y2hlZDogTnVsbGFibGU8Ym9vbGVhbj47XG5cbiAgICBmb2N1c2VkT3B0aW9uSW5kZXggPSBzaWduYWw8bnVtYmVyPigtMSk7XG5cbiAgICBsYWJlbElkOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgbGlzdElkOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgY2xpY2tlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBnZXQgZW1wdHlNZXNzYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNZXNzYWdlIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5FTVBUWV9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlGaWx0ZXJNZXNzYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlGaWx0ZXJNZXNzYWdlIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5FTVBUWV9GSUxURVJfTUVTU0FHRSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmlzaWJsZUNsZWFySWNvbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZSgpICE9IG51bGwgJiYgdGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpICYmIHRoaXMuc2hvd0NsZWFyICYmICF0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGdldCBsaXN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5BUklBKVsnbGlzdExhYmVsJ107XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NheC1kcm9wZG93biBjYXgtY29tcG9uZW50IGNheC1pbnB1dHdyYXBwZXInOiB0cnVlLFxuICAgICAgICAgICAgJ2NheC1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICAnY2F4LWRyb3Bkb3duLWNsZWFyYWJsZSc6IHRoaXMuc2hvd0NsZWFyICYmICF0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgJ2NheC1mb2N1cyc6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAgICdjYXgtaW5wdXR3cmFwcGVyLWZpbGxlZCc6IHRoaXMubW9kZWxWYWx1ZSgpICE9PSB1bmRlZmluZWQgJiYgdGhpcy5tb2RlbFZhbHVlKCkgIT09IG51bGwgJiYgIXRoaXMubW9kZWxWYWx1ZSgpLmxlbmd0aCxcbiAgICAgICAgICAgICdjYXgtaW5wdXR3cmFwcGVyLWZvY3VzJzogdGhpcy5mb2N1c2VkIHx8IHRoaXMub3ZlcmxheVZpc2libGUsXG4gICAgICAgICAgICAnY2F4LXZhcmlhbnQtZmlsbGVkJzogdGhpcy52YXJpYW50ID09PSAnZmlsbGVkJyB8fCB0aGlzLmNvbmZpZy5pbnB1dFN0eWxlKCkgPT09ICdmaWxsZWQnLFxuICAgICAgICAgICAgJ2NheC1kcm9wZG93bi1vcGVuJzogdGhpcy5vdmVybGF5VmlzaWJsZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBpbnB1dENsYXNzKCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjYXgtZHJvcGRvd24tbGFiZWwgY2F4LWlucHV0dGV4dCc6IHRydWUsXG4gICAgICAgICAgICAnY2F4LXBsYWNlaG9sZGVyJzogdGhpcy5wbGFjZWhvbGRlcigpICYmIGxhYmVsID09PSB0aGlzLnBsYWNlaG9sZGVyKCksXG4gICAgICAgICAgICAnY2F4LWRyb3Bkb3duLWxhYmVsLWVtcHR5JzogIXRoaXMuZWRpdGFibGUgJiYgIXRoaXMuc2VsZWN0ZWRJdGVtVGVtcGxhdGUgJiYgKGxhYmVsID09PSB1bmRlZmluZWQgfHwgbGFiZWwgPT09IG51bGwgfHwgbGFiZWwgPT09ICdjYXgtZW1wdHlsYWJlbCcgfHwgbGFiZWwubGVuZ3RoID09PSAwKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBwYW5lbENsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NheC1kcm9wZG93bi1wYW5lbCBjYXgtY29tcG9uZW50JzogdHJ1ZSxcbiAgICAgICAgICAgICdjYXgtaW5wdXQtZmlsbGVkJzogdGhpcy5jb25maWcuaW5wdXRTdHlsZSgpID09PSAnZmlsbGVkJyxcbiAgICAgICAgICAgICdjYXgtcmlwcGxlLWRpc2FibGVkJzogdGhpcy5jb25maWcucmlwcGxlID09PSBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBmb2N1c2VkT3B0aW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSA/IGAke3RoaXMuaWR9XyR7dGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKX1gIDogbnVsbDtcbiAgICB9XG5cbiAgICB2aXNpYmxlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0QWxsVmlzaWJsZUFuZE5vblZpc2libGVPcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZpbHRlclZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IF9maWx0ZXJCeSA9IHRoaXMuZmlsdGVyQnkgfHwgdGhpcy5vcHRpb25MYWJlbDtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID1cbiAgICAgICAgICAgICAgICAhX2ZpbHRlckJ5ICYmICF0aGlzLmZpbHRlckZpZWxkcyAmJiAhdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX2ZpbHRlclZhbHVlKCkudG9Mb3dlckNhc2UoKS50cmltKCkpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX2ZpbHRlclZhbHVlKCkudG9Mb3dlckNhc2UoKS50cmltKCkpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIob3B0aW9ucywgdGhpcy5zZWFyY2hGaWVsZHMoKSwgdGhpcy5fZmlsdGVyVmFsdWUoKS50cmltKCksIHRoaXMuZmlsdGVyTWF0Y2hNb2RlLCB0aGlzLmZpbHRlckxvY2FsZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5vcHRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG5cbiAgICAgICAgICAgICAgICBvcHRpb25Hcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBDaGlsZHJlbiA9IHRoaXMuZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBncm91cENoaWxkcmVuLmZpbHRlcigoaXRlbSkgPT4gZmlsdGVyZWRPcHRpb25zLmluY2x1ZGVzKGl0ZW0pKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwKSBmaWx0ZXJlZC5wdXNoKHsgLi4uZ3JvdXAsIFt0eXBlb2YgdGhpcy5vcHRpb25Hcm91cENoaWxkcmVuID09PSAnc3RyaW5nJyA/IHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbiA6ICdpdGVtcyddOiBbLi4uZmlsdGVyZWRJdGVtc10gfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGF0T3B0aW9ucyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSk7XG5cbiAgICBsYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgLy8gdXNlICBnZXRBbGxWaXNpYmxlQW5kTm9uVmlzaWJsZU9wdGlvbnMgdmVyc2VzIGp1c3QgdmlzaWJsZSBvcHRpb25zXG4gICAgICAgIC8vIHRoaXMgd2lsbCBmaW5kIHRoZSBzZWxlY3RlZCBvcHRpb24gd2hldGhlciBvciBub3QgdGhlIHVzZXIgaXMgY3VycmVudGx5IGZpbHRlcmluZyAgYmVjYXVzZSB0aGUgZmlsdGVyZWQgKGkuZS4gdmlzaWJsZSkgb3B0aW9ucywgYXJlIGEgc3Vic2V0IG9mIGFsbCB0aGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRBbGxWaXNpYmxlQW5kTm9uVmlzaWJsZU9wdGlvbnMoKTtcbiAgICAgICAgLy8gdXNlIGlzT3B0aW9uRXF1YWxzTW9kZWxWYWx1ZSBmb3IgdGhlIHVzZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbml0YWxpemVkIHdpdGggYSBkaXNhYmxlZCBvcHRpb25cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25JbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25WYWx1ZUVxdWFsc01vZGVsVmFsdWUob3B0aW9uKSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uSW5kZXggIT09IC0xID8gdGhpcy5nZXRPcHRpb25MYWJlbChvcHRpb25zW3NlbGVjdGVkT3B0aW9uSW5kZXhdKSA6IHRoaXMucGxhY2Vob2xkZXIoKSB8fCAnY2F4LWVtcHR5bGFiZWwnO1xuICAgIH0pO1xuXG4gICAgZmlsbGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9kZWxWYWx1ZSgpID09PSAnc3RyaW5nJykgcmV0dXJuICEhdGhpcy5tb2RlbFZhbHVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsKCkgIT09ICdjYXgtZW1wdHlsYWJlbCcgJiYgdGhpcy5tb2RlbFZhbHVlKCkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm1vZGVsVmFsdWUoKSAhPT0gbnVsbDtcbiAgICB9KTtcblxuICAgIHNlbGVjdGVkT3B0aW9uOiBhbnk7XG5cbiAgICBlZGl0YWJsZUlucHV0VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKHRoaXMuc2VsZWN0ZWRPcHRpb24pIHx8IHRoaXMubW9kZWxWYWx1ZSgpIHx8ICcnKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgem9uZTogTmdab25lLFxuICAgICAgICBwdWJsaWMgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbmZpZzogY2F4Q29uZmlnXG4gICAgKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy5tb2RlbFZhbHVlKCk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHZpc2libGVPcHRpb25zICYmIE9iamVjdFV0aWxzLmlzTm90RW1wdHkodmlzaWJsZU9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25JbmRleCA9IHRoaXMuZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkluZGV4ICE9PSAtMSB8fCBtb2RlbFZhbHVlID09PSB1bmRlZmluZWQgfHwgKHR5cGVvZiBtb2RlbFZhbHVlID09PSAnc3RyaW5nJyAmJiBtb2RlbFZhbHVlLmxlbmd0aCA9PT0gMCkgfHwgdGhpcy5pc01vZGVsVmFsdWVOb3RTZXQoKSB8fCB0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2aXNpYmxlT3B0aW9uc1tzZWxlY3RlZE9wdGlvbkluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0VtcHR5KHZpc2libGVPcHRpb25zKSAmJiAobW9kZWxWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNNb2RlbFZhbHVlTm90U2V0KCkpICYmIE9iamVjdFV0aWxzLmlzTm90RW1wdHkodGhpcy5zZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFZGl0YWJsZUxhYmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTW9kZWxWYWx1ZU5vdFNldCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZSgpID09PSBudWxsICYmICF0aGlzLmlzT3B0aW9uVmFsdWVFcXVhbHNNb2RlbFZhbHVlKHRoaXMuc2VsZWN0ZWRPcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsVmlzaWJsZUFuZE5vblZpc2libGVPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cCA/IHRoaXMuZmxhdE9wdGlvbnModGhpcy5vcHRpb25zKSA6IHRoaXMub3B0aW9ucyB8fCBbXTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgfHwgVW5pcXVlQ29tcG9uZW50SWQoKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlTW9kZWwoKTtcblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcjogKHZhbHVlKSA9PiB0aGlzLm9uRmlsdGVySW5wdXRDaGFuZ2UodmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlc2V0OiAoKSA9PiB0aGlzLnJlc2V0RmlsdGVyKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNDaGFuZ2VkICYmIHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0NoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpZXdDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5Vmlld0NoaWxkLmFsaWduT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uVXBkYXRlZCAmJiB0aGlzLml0ZW1zV3JhcHBlcikge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkSXRlbSA9IERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLm92ZXJsYXlWaWV3Q2hpbGQ/Lm92ZXJsYXlWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsICdsaS5jYXgtaGlnaGxpZ2h0Jyk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcodGhpcy5pdGVtc1dyYXBwZXIsIHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgYXMgUXVlcnlMaXN0PENheFRlbXBsYXRlPikuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZW1wdHlmaWx0ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5RmlsdGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9hZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZHJvcGRvd25pY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2ljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NsZWFyaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmxhdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgfHwgW10pLnJlZHVjZSgocmVzdWx0LCBvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IG9wdGlvbkdyb3VwOiBvcHRpb24sIGdyb3VwOiB0cnVlLCBpbmRleCB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBDaGlsZHJlbiA9IHRoaXMuZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihvcHRpb24pO1xuXG4gICAgICAgICAgICBvcHRpb25Hcm91cENoaWxkcmVuICYmIG9wdGlvbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaCgobykgPT4gcmVzdWx0LnB1c2gobykpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgYXV0b1VwZGF0ZU1vZGVsKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RPbkZvY3VzICYmIHRoaXMuYXV0b09wdGlvbkZvY3VzICYmICF0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCh0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpKTtcbiAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QobnVsbCwgdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCldLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXV0b0Rpc3BsYXlGaXJzdCAmJiAodGhpcy5tb2RlbFZhbHVlKCkgPT09IG51bGwgfHwgdGhpcy5tb2RlbFZhbHVlKCkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcigpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kID0gdGhpcy5maW5kRmlyc3RPcHRpb25JbmRleCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QobnVsbCwgdGhpcy52aXNpYmxlT3B0aW9ucygpW2luZF0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3B0aW9uU2VsZWN0KGV2ZW50LCBvcHRpb24sIGlzSGlkZSA9IHRydWUsIHByZXZlbnRDaGFuZ2UgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCh0aGlzLmZpbmRTZWxlY3RlZE9wdGlvbkluZGV4KCkpO1xuICAgICAgICAgICAgcHJldmVudENoYW5nZSA9PT0gZmFsc2UgJiYgdGhpcy5vbkNoYW5nZS5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIaWRlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk9wdGlvbk1vdXNlRW50ZXIoZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzT25Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZU1vZGVsKHZhbHVlLCBldmVudD8pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLm1vZGVsVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvblVwZGF0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5hbGxvd01vZGVsQ2hhbmdlKCkgJiYgdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlLnNldCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVFZGl0YWJsZUxhYmVsKCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgYWxsb3dNb2RlbENoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b0Rpc3BsYXlGaXJzdCAmJiAhdGhpcy5wbGFjZWhvbGRlcigpICYmICh0aGlzLm1vZGVsVmFsdWUoKSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubW9kZWxWYWx1ZSgpID09PSBudWxsKSAmJiAhdGhpcy5lZGl0YWJsZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkT3B0aW9uRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5pc0VtcHR5KHRoaXMuc2VsZWN0ZWRPcHRpb24pO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSAmJiB0aGlzLmlzT3B0aW9uVmFsdWVFcXVhbHNNb2RlbFZhbHVlKG9wdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc09wdGlvblZhbHVlRXF1YWxzTW9kZWxWYWx1ZShvcHRpb246IGFueSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuZXF1YWxzKHRoaXMubW9kZWxWYWx1ZSgpLCB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbiksIHRoaXMuZXF1YWxpdHlLZXkoKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFZGl0YWJsZUxhYmVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZUhvbGRlckZvckZsb2F0aW5nTGFiZWwoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQbGFjZUhvbGRlckZvckZsb2F0aW5nTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlcigpICE9PSBudWxsICYmIHRoaXMuX3BsYWNlaG9sZGVyKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlIHBsYWNlaG9sZGVyIGlmIGl0J3MgYWxyZWFkeSBzZXRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW5GbG9hdGluZ0xhYmVsID0gcGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjYXgtZmxvYXQtbGFiZWwnKTtcbiAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgJiYgaXNJbkZsb2F0aW5nTGFiZWwgJiYgIXRoaXMuc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIuc2V0KGxhYmVsLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUVkaXRhYmxlTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlSW5wdXRWaWV3Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGFibGVJbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5nZXRPcHRpb25MYWJlbCh0aGlzLnNlbGVjdGVkT3B0aW9uKSB8fCB0aGlzLm1vZGVsVmFsdWUoKSB8fCAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyRWRpdGFibGVMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGFibGVJbnB1dFZpZXdDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZUlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE9wdGlvbkluZGV4KGluZGV4LCBzY3JvbGxlck9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbGVyRGlzYWJsZWQgPyBpbmRleCA6IHNjcm9sbGVyT3B0aW9ucyAmJiBzY3JvbGxlck9wdGlvbnMuZ2V0SXRlbU9wdGlvbnMoaW5kZXgpWydpbmRleCddO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25MYWJlbCAhPT0gbnVsbCA/IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob3B0aW9uLCB0aGlzLm9wdGlvbkxhYmVsKSA6IG9wdGlvbiAmJiBvcHRpb24ubGFiZWwgIT09IHVuZGVmaW5lZCA/IG9wdGlvbi5sYWJlbCA6IG9wdGlvbjtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShvcHRpb246IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZSAmJiB0aGlzLm9wdGlvblZhbHVlICE9PSBudWxsID8gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShvcHRpb24sIHRoaXMub3B0aW9uVmFsdWUpIDogIXRoaXMub3B0aW9uTGFiZWwgJiYgb3B0aW9uICYmIG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uO1xuICAgIH1cblxuICAgIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uVmFsdWUodGhpcy5tb2RlbFZhbHVlKCkpID09PSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbikgfHwgKHRoaXMuZ2V0T3B0aW9uTGFiZWwodGhpcy5tb2RlbFZhbHVlKCkgPT09IHRoaXMuZ2V0T3B0aW9uTGFiZWwob3B0aW9uKSkgJiYgb3B0aW9uLmRpc2FibGVkID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkRpc2FibGVkID8gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShvcHRpb24sIHRoaXMub3B0aW9uRGlzYWJsZWQpIDogb3B0aW9uICYmIG9wdGlvbi5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9uLmRpc2FibGVkIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPcHRpb25Hcm91cExhYmVsKG9wdGlvbkdyb3VwOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9uR3JvdXBMYWJlbCAhPT0gbnVsbCA/IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob3B0aW9uR3JvdXAsIHRoaXMub3B0aW9uR3JvdXBMYWJlbCkgOiBvcHRpb25Hcm91cCAmJiBvcHRpb25Hcm91cC5sYWJlbCAhPT0gdW5kZWZpbmVkID8gb3B0aW9uR3JvdXAubGFiZWwgOiBvcHRpb25Hcm91cDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25Hcm91cENoaWxkcmVuKG9wdGlvbkdyb3VwOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbiAhPT0gbnVsbCA/IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob3B0aW9uR3JvdXAsIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbikgOiBvcHRpb25Hcm91cC5pdGVtcztcbiAgICB9XG5cbiAgICBnZXRBcmlhUG9zSW5zZXQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbkdyb3VwTGFiZWxcbiAgICAgICAgICAgICAgICA/IGluZGV4IC1cbiAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25Hcm91cChvcHRpb24pKS5sZW5ndGhcbiAgICAgICAgICAgICAgICA6IGluZGV4KSArIDFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgYXJpYVNldFNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmlsdGVyKChvcHRpb24pID0+ICF0aGlzLmlzT3B0aW9uR3JvdXAob3B0aW9uKSkubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBmaWx0ZXIgcmVzZXQuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEZpbHRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVmFsdWUuc2V0KG51bGwpO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZpZXdDaGlsZCAmJiB0aGlzLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB2YWw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuXG4gICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBjLXNlY3Rpb24nKSA9PT0gJ2NsZWFyaWNvbicgfHwgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXBjLXNlY3Rpb249XCJjbGVhcmljb25cIl0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm92ZXJsYXlWaWV3Q2hpbGQgfHwgIXRoaXMub3ZlcmxheVZpZXdDaGlsZC5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPyB0aGlzLmhpZGUodHJ1ZSkgOiB0aGlzLnNob3codHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmNsaWNrZWQuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX29wdGlvbnMoKSB8fCAodGhpcy52aXNpYmxlT3B0aW9ucygpICYmIHRoaXMudmlzaWJsZU9wdGlvbnMoKS5sZW5ndGggPT09IDApO1xuICAgIH1cblxuICAgIG9uRWRpdGFibGVJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuc2VhcmNoT3B0aW9ucyhldmVudCwgdmFsdWUpO1xuICAgICAgICAhbWF0Y2hlZCAmJiB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoLTEpO1xuXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUsIGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICB9LCAxKTtcblxuICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiBPYmplY3RVdGlscy5pc05vdEVtcHR5KHZhbHVlKSAmJiB0aGlzLnNob3coKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgdGhlIHBhbmVsLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhpc0ZvY3VzPykge1xuICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEgPyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5hdXRvT3B0aW9uRm9jdXMgPyB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5lZGl0YWJsZSA/IC0xIDogdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoZm9jdXNlZE9wdGlvbkluZGV4KTtcblxuICAgICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICAgICAgRG9tSGFuZGxlci5mb2N1cyh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBvbk92ZXJsYXlBbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICAgICAgdGhpcy5pdGVtc1dyYXBwZXIgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUodGhpcy5vdmVybGF5Vmlld0NoaWxkPy5vdmVybGF5Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LCB0aGlzLnZpcnR1YWxTY3JvbGwgPyAnLmNheC1zY3JvbGxlcicgOiAnLmNheC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5zY3JvbGxlcj8uc2V0Q29udGVudEVsKHRoaXMuaXRlbXNWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLm1vZGVsVmFsdWUoKSA/IHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGVyPy5zY3JvbGxUb0luZGV4KHNlbGVjdGVkSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdEl0ZW0gPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUodGhpcy5pdGVtc1dyYXBwZXIsICcuY2F4LWRyb3Bkb3duLWl0ZW0uY2F4LWhpZ2hsaWdodCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZExpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3RJdGVtLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JywgaW5saW5lOiAnbmVhcmVzdCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBhdXRvLWZvY3VzIG9uIGZpbHRlclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmlld0NoaWxkICYmIHRoaXMuZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRNb2RlbFRvdWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uU2hvdy5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zV3JhcHBlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgcGFuZWwuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKGlzRm9jdXM/KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICAgICAgdGhpcy5jbGlja2VkLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5vdmVybGF5T3B0aW9ucz8ubW9kZSA9PT0gJ21vZGFsJykge1xuICAgICAgICAgICAgRG9tSGFuZGxlci51bmJsb2NrQm9keVNjcm9sbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlciAmJiB0aGlzLnJlc2V0RmlsdGVyT25IaWRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRm9jdXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgRG9tSGFuZGxlci5mb2N1cyh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUgJiYgdGhpcy5lZGl0YWJsZUlucHV0Vmlld0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERvbUhhbmRsZXIuZm9jdXModGhpcy5lZGl0YWJsZUlucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIEZvciBTY3JlZW5SZWFkZXJzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb2N1c2VkT3B0aW9uSW5kZXggPSB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSA/IHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgOiB0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuYXV0b09wdGlvbkZvY3VzID8gdGhpcy5maW5kRmlyc3RGb2N1c2VkT3B0aW9uSW5kZXgoKSA6IC0xO1xuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoZm9jdXNlZE9wdGlvbkluZGV4KTtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNjcm9sbEluVmlldyh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKTtcblxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25JbnB1dEJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoIXRoaXMucHJldmVudE1vZGVsVG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldmVudE1vZGVsVG91Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZWFyY2g6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgLy9kb3duXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL3VwXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dVcEtleShldmVudCwgdGhpcy5lZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dMZWZ0S2V5KGV2ZW50LCB0aGlzLmVkaXRhYmxlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVLZXkoZXZlbnQsIHRoaXMuZWRpdGFibGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbmRLZXkoZXZlbnQsIHRoaXMuZWRpdGFibGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVVwS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy9zcGFjZVxuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMub25TcGFjZUtleShldmVudCwgc2VhcmNoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy9lbnRlclxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnTnVtcGFkRW50ZXInOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vZXNjYXBlIGFuZCB0YWJcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5vblRhYktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUtleShldmVudCwgdGhpcy5lZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1NoaWZ0TGVmdCc6XG4gICAgICAgICAgICBjYXNlICdTaGlmdFJpZ2h0JzpcbiAgICAgICAgICAgICAgICAvL05PT1BcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50Lm1ldGFLZXkgJiYgT2JqZWN0VXRpbHMuaXNQcmludGFibGVDaGFyYWN0ZXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmF1dG9TaG93UGFuZWxPblByaW50YWJsZUNoYXJhY3RlcktleURvd24gJiYgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmVkaXRhYmxlICYmIHRoaXMuc2VhcmNoT3B0aW9ucyhldmVudCwgZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2tlZC5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyS2V5RG93bihldmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1VwS2V5KGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0xlZnRLZXkoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleShldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleShldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ051bXBhZEVudGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXJLZXkoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIHRoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIHRoaXMub25UYWJLZXkoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25GaWx0ZXJCbHVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCgtMSk7XG4gICAgfVxuXG4gICAgb25BcnJvd0Rvd25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIHRoaXMuZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xID8gdGhpcy5maW5kTmV4dE9wdGlvbkluZGV4KHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkpIDogdGhpcy5jbGlja2VkKCkgPyB0aGlzLmZpbmRGaXJzdE9wdGlvbkluZGV4KCkgOiB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEgPyB0aGlzLmZpbmROZXh0T3B0aW9uSW5kZXgodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSkgOiB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuICAgICAgICAvLyB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuXG4gICAgICAgIC8vICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsSW5WaWV3KCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdE9uRm9jdXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnZpc2libGVPcHRpb25zKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIG9wdGlvbiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZpcnR1YWxTY3JvbGxlckRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBzY3JvbGxJblZpZXcoaW5kZXggPSAtMSkge1xuICAgICAgICBjb25zdCBpZCA9IGluZGV4ICE9PSAtMSA/IGAke3RoaXMuaWR9XyR7aW5kZXh9YCA6IHRoaXMuZm9jdXNlZE9wdGlvbklkO1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW1zVmlld0NoaWxkICYmIHRoaXMuaXRlbXNWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLml0ZW1zVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcgJiYgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXJEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5zY3JvbGxlcj8uc2Nyb2xsVG9JbmRleChpbmRleCAhPT0gLTEgPyBpbmRleCA6IHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWUoKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlzVmFsaWRTZWxlY3RlZE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pICYmIHRoaXMuaXNTZWxlY3RlZChvcHRpb24pO1xuICAgIH1cblxuICAgIGVxdWFsaXR5S2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZSA/IG51bGwgOiB0aGlzLmRhdGFLZXk7XG4gICAgfVxuXG4gICAgZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleCA8IDAgPyB0aGlzLmZpbmRGaXJzdE9wdGlvbkluZGV4KCkgOiBzZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIGZpbmRGaXJzdE9wdGlvbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlT3B0aW9ucygpLmZpbmRJbmRleCgob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSk7XG4gICAgfVxuXG4gICAgZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkgPyB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNWYWxpZFNlbGVjdGVkT3B0aW9uKG9wdGlvbikpIDogLTE7XG4gICAgfVxuXG4gICAgZmluZE5leHRPcHRpb25JbmRleChpbmRleCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uSW5kZXggPVxuICAgICAgICAgICAgaW5kZXggPCB0aGlzLnZpc2libGVPcHRpb25zKCkubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pKVxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uSW5kZXggPiAtMSA/IG1hdGNoZWRPcHRpb25JbmRleCArIGluZGV4ICsgMSA6IGluZGV4O1xuICAgIH1cblxuICAgIGZpbmRQcmV2T3B0aW9uSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbkluZGV4ID0gaW5kZXggPiAwID8gT2JqZWN0VXRpbHMuZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCkuc2xpY2UoMCwgaW5kZXgpLCAob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSkgOiAtMTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbkluZGV4ID4gLTEgPyBtYXRjaGVkT3B0aW9uSW5kZXggOiBpbmRleDtcbiAgICB9XG5cbiAgICBmaW5kTGFzdE9wdGlvbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCksIChvcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEZvY3VzZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleCA8IDAgPyB0aGlzLmZpbmRMYXN0T3B0aW9uSW5kZXgoKSA6IHNlbGVjdGVkSW5kZXg7XG4gICAgfVxuXG4gICAgaXNWYWxpZE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbiAhPT0gbnVsbCAmJiAhKHRoaXMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHx8IHRoaXMuaXNPcHRpb25Hcm91cChvcHRpb24pKTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkdyb3VwKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25Hcm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25Hcm91cExhYmVsICE9PSBudWxsICYmIG9wdGlvbi5vcHRpb25Hcm91cCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi5vcHRpb25Hcm91cCAhPT0gbnVsbCAmJiBvcHRpb24uZ3JvdXA7XG4gICAgfVxuXG4gICAgb25BcnJvd1VwS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcmVzc2VkSW5JbnB1dFRleHQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmICFwcmVzc2VkSW5JbnB1dFRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVt0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KGV2ZW50LCBvcHRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSA/IHRoaXMuZmluZFByZXZPcHRpb25JbmRleCh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKSA6IHRoaXMuY2xpY2tlZCgpID8gdGhpcy5maW5kTGFzdE9wdGlvbkluZGV4KCkgOiB0aGlzLmZpbmRMYXN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCBvcHRpb25JbmRleCk7XG5cbiAgICAgICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uQXJyb3dMZWZ0S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcmVzc2VkSW5JbnB1dFRleHQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBwcmVzc2VkSW5JbnB1dFRleHQgJiYgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZUtleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5zaG93Q2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSG9tZUtleShldmVudDogYW55LCBwcmVzc2VkSW5JbnB1dFRleHQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAocHJlc3NlZEluSW5wdXRUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIHRhcmdldC52YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCB0aGlzLmZpbmRGaXJzdE9wdGlvbkluZGV4KCkpO1xuXG4gICAgICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25FbmRLZXkoZXZlbnQ6IGFueSwgcHJlc3NlZEluSW5wdXRUZXh0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHByZXNzZWRJbklucHV0VGV4dCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIHRhcmdldC52YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSB0YXJnZXQudmFsdWUubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGxlbiwgbGVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIHRoaXMuZmluZExhc3RPcHRpb25JbmRleCgpKTtcblxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uUGFnZURvd25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJblZpZXcodGhpcy52aXNpYmxlT3B0aW9ucygpLmxlbmd0aCAtIDEpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uUGFnZVVwS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW5WaWV3KDApO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uU3BhY2VLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByZXNzZWRJbklucHV0VGV4dDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgICF0aGlzLmVkaXRhYmxlICYmICFwcmVzc2VkSW5JbnB1dFRleHQgJiYgdGhpcy5vbkVudGVyS2V5KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkVudGVyS2V5KGV2ZW50LCBwcmVzc2VkSW5JbnB1dCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCldO1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIG9wdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICFwcmVzc2VkSW5JbnB1dCAmJiB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmhpZGUodHJ1ZSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25UYWJLZXkoZXZlbnQsIHByZXNzZWRJbklucHV0VGV4dCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghcHJlc3NlZEluSW5wdXRUZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmhhc0ZvY3VzYWJsZUVsZW1lbnRzKCkpIHtcbiAgICAgICAgICAgICAgICBEb21IYW5kbGVyLmZvY3VzKGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5sYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudE9uT3ZlcmxheS5uYXRpdmVFbGVtZW50IDogdGhpcy5maXJzdEhpZGRlbkZvY3VzYWJsZUVsZW1lbnRPbk92ZXJsYXkubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xICYmIHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCldO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KGV2ZW50LCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuaGlkZSh0aGlzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25GaXJzdEhpZGRlbkZvY3VzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsID0gZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50ID8gRG9tSGFuZGxlci5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQodGhpcy5vdmVybGF5Vmlld0NoaWxkLmVsPy5uYXRpdmVFbGVtZW50LCAnOm5vdCguY2F4LWhpZGRlbi1mb2N1c2FibGUpJykgOiB0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIERvbUhhbmRsZXIuZm9jdXMoZm9jdXNhYmxlRWwpO1xuICAgIH1cblxuICAgIG9uTGFzdEhpZGRlbkZvY3VzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsID1cbiAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHRoaXMuZm9jdXNJbnB1dFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgID8gRG9tSGFuZGxlci5nZXRMYXN0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLm92ZXJsYXlWaWV3Q2hpbGQ/Lm92ZXJsYXlWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsICc6bm90KFtkYXRhLWNheC1oaWRkZW4tZm9jdXNhYmxlPVwidHJ1ZVwiXSknKVxuICAgICAgICAgICAgICAgIDogdGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIERvbUhhbmRsZXIuZm9jdXMoZm9jdXNhYmxlRWwpO1xuICAgIH1cblxuICAgIGhhc0ZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gRG9tSGFuZGxlci5nZXRGb2N1c2FibGVFbGVtZW50cyh0aGlzLm92ZXJsYXlWaWV3Q2hpbGQub3ZlcmxheVZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LCAnOm5vdChbZGF0YS1jYXgtaGlkZGVuLWZvY3VzYWJsZT1cInRydWVcIl0pOm5vdChbY2xhc3M9XCJjYXgtZHJvcGRvd24taXRlbXMtd3JhcHBlclwiXSknKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIG9uQmFja3NwYWNlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcmVzc2VkSW5JbnB1dFRleHQgPSBmYWxzZSkge1xuICAgICAgICBpZiAocHJlc3NlZEluSW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQnk/LnNwbGl0KCcsJykgfHwgdGhpcy5maWx0ZXJGaWVsZHMgfHwgW3RoaXMub3B0aW9uTGFiZWxdO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvbnMoZXZlbnQsIGNoYXIpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICh0aGlzLnNlYXJjaFZhbHVlIHx8ICcnKSArIGNoYXI7XG5cbiAgICAgICAgbGV0IG9wdGlvbkluZGV4ID0gLTE7XG4gICAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgIC5zbGljZSh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKVxuICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKG9wdGlvbikgPT4gdGhpcy5pc09wdGlvbk1hdGNoZWQob3B0aW9uKSk7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9XG4gICAgICAgICAgICAgICAgb3B0aW9uSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKG9wdGlvbikpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0aW9uSW5kZXggKyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKG9wdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xICYmIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgPT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIH0sIDUwMCk7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfVxuXG4gICAgaXNPcHRpb25NYXRjaGVkKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkT3B0aW9uKG9wdGlvbikgJiYgdGhpcy5nZXRPcHRpb25MYWJlbChvcHRpb24pLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5maWx0ZXJMb2NhbGUpLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmZpbHRlckxvY2FsZSkpO1xuICAgIH1cblxuICAgIG9uRmlsdGVySW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50IHwgYW55KTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICAgICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGZpbHRlcjogdGhpcy5fZmlsdGVyVmFsdWUoKSB9KTtcbiAgICAgICAgIXRoaXMudmlydHVhbFNjcm9sbGVyRGlzYWJsZWQgJiYgdGhpcy5zY3JvbGxlci5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpZXdDaGlsZC5hbGlnbk92ZXJsYXkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgYXBwbHlGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICcuY2F4LWRyb3Bkb3duLWxhYmVsLmNheC1pbnB1dHRleHQnKS5mb2N1cygpO1xuICAgICAgICBlbHNlIERvbUhhbmRsZXIuZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbGllcyBmb2N1cy5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgcHVibGljIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5Rm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBtb2RlbC5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbChudWxsLCBldmVudCk7XG4gICAgICAgIHRoaXMuY2xlYXJFZGl0YWJsZUxhYmVsKCk7XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIHZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgICB9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsnY2F4LWRyb3Bkb3duLW1haW4tbGFiZWwnOiBsYWJlbFRleHR9XCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFRleHRcIiBbbmdDbGFzc109XCJsYWJlbFRleHRDbGFzc1wiPnt7IGxhYmVsVGV4dCB9fTwvbGFiZWw+XHJcbjwvZGl2PlxyXG48ZGl2ICNjb250YWluZXIgW2F0dHIuaWRdPVwiaWRcIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc1wiIChjbGljayk9XCJvbkNvbnRhaW5lckNsaWNrKCRldmVudClcIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtjbGFzc109XCJzdHlsZUNsYXNzXCI+XHJcbiAgICA8c3BhblxyXG4gICAgICAgICNmb2N1c0lucHV0XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiaW5wdXRDbGFzc1wiXHJcbiAgICAgICAgKm5nSWY9XCIhZWRpdGFibGVcIlxyXG4gICAgICAgIFtjYXhUb29sdGlwXT1cInRvb2x0aXBcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgICBbcG9zaXRpb25TdHlsZV09XCJ0b29sdGlwUG9zaXRpb25TdHlsZVwiXHJcbiAgICAgICAgW3Rvb2x0aXBTdHlsZUNsYXNzXT1cInRvb2x0aXBTdHlsZUNsYXNzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcclxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IChsYWJlbCgpID09PSAnY2F4LWVtcHR5bGFiZWwnID8gdW5kZWZpbmVkIDogbGFiZWwoKSlcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCInbGlzdGJveCdcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3ZlcmxheVZpc2libGUgPz8gZmFsc2VcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwib3ZlcmxheVZpc2libGUgPyBpZCArICdfbGlzdCcgOiBudWxsXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIhZGlzYWJsZWQgPyB0YWJpbmRleCA6IC0xXCJcclxuICAgICAgICBjYXhBdXRvRm9jdXNcclxuICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImZvY3VzZWQgPyBmb2N1c2VkT3B0aW9uSWQgOiB1bmRlZmluZWRcIlxyXG4gICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkSXRlbVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRQbGFjZWhvbGRlclwiPnt7IGxhYmVsKCkgPT09ICdjYXgtZW1wdHlsYWJlbCcgPyAnJm5ic3A7JyA6IGxhYmVsKCkgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGUgJiYgIWlzU2VsZWN0ZWRPcHRpb25FbXB0eSgpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHNlbGVjdGVkT3B0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRQbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NlbGVjdGVkT3B0aW9uRW1wdHkoKVwiPnt7IGxhYmVsKCkgPT09ICdjYXgtZW1wdHlsYWJlbCcgPyAnJm5ic3A7JyA6IGxhYmVsKCkgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxpbnB1dFxyXG4gICAgICAgICpuZ0lmPVwiZWRpdGFibGVcIlxyXG4gICAgICAgICNlZGl0YWJsZUlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxyXG4gICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImlucHV0Q2xhc3NcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxyXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIm1vZGVsVmFsdWUoKSA9PT0gdW5kZWZpbmVkIHx8IG1vZGVsVmFsdWUoKSA9PT0gbnVsbCA/IHBsYWNlaG9sZGVyKCkgOiB1bmRlZmluZWRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IChsYWJlbCgpID09PSAnY2F4LWVtcHR5bGFiZWwnID8gdW5kZWZpbmVkIDogbGFiZWwoKSlcIlxyXG4gICAgICAgIChpbnB1dCk9XCJvbkVkaXRhYmxlSW5wdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgIGNheEF1dG9Gb2N1c1xyXG4gICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZCA/IGZvY3VzZWRPcHRpb25JZCA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcclxuICAgIC8+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNWaXNpYmxlQ2xlYXJJY29uXCI+XHJcbiAgICAgICAgPFRpbWVzSWNvbiBbc3R5bGVDbGFzc109XCInY2F4LWRyb3Bkb3duLWNsZWFyLWljb24nXCIgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiIC8+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtZHJvcGRvd24tY2xlYXItaWNvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNheC1kcm9wZG93bi10cmlnZ2VyXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJkcm9wZG93biB0cmlnZ2VyXCIgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCIgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm92ZXJsYXlWaXNpYmxlID8/IGZhbHNlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIid0cmlnZ2VyJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGVsc2VCbG9ja1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ0ljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nSWNvblwiIFtuZ0NsYXNzXT1cIidjYXgtZHJvcGRvd24tdHJpZ2dlci1pY29uIHBpLXNwaW4gJyArIGxvYWRpbmdJY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ0ljb25cIiBbY2xhc3NdPVwiJ2NheC1kcm9wZG93bi10cmlnZ2VyLWljb24gcGkgcGktc3Bpbm5lciBwaS1zcGluJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRyb3Bkb3duSWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNheC1kcm9wZG93bi10cmlnZ2VyLWljb25cIiAqbmdJZj1cImRyb3Bkb3duSWNvblwiIFtuZ0NsYXNzXT1cImRyb3Bkb3duSWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiFkcm9wZG93bkljb25cIiBbc3R5bGVDbGFzc109XCInY2F4LWRyb3Bkb3duLXRyaWdnZXItaWNvbidcIiAvPiAtLT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWRyb3Bkb3duSWNvbiAmJiAhb3ZlcmxheVZpc2libGVcIiBjbGFzcz1cImNheCBjYXgtYWx0LWFycm93LWRvd25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFkcm9wZG93bkljb24gJiYgb3ZlcmxheVZpc2libGVcIiBjbGFzcz1cImNheCBjYXgtYWx0LWFycm93LXVwXCI+PC9pPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkcm9wZG93bkljb25UZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LWRyb3Bkb3duLXRyaWdnZXItaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25JY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxjYXgtb3ZlcmxheVxyXG4gICAgICAgICNvdmVybGF5XHJcbiAgICAgICAgWyh2aXNpYmxlKV09XCJvdmVybGF5VmlzaWJsZVwiXHJcbiAgICAgICAgW29wdGlvbnNdPVwib3ZlcmxheU9wdGlvbnNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiJ0BwYXJlbnQnXCJcclxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxyXG4gICAgICAgIFthdXRvWkluZGV4XT1cImF1dG9aSW5kZXhcIlxyXG4gICAgICAgIFtiYXNlWkluZGV4XT1cImJhc2VaSW5kZXhcIlxyXG4gICAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwic2hvd1RyYW5zaXRpb25PcHRpb25zXCJcclxuICAgICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cImhpZGVUcmFuc2l0aW9uT3B0aW9uc1wiXHJcbiAgICAgICAgKG9uQW5pbWF0aW9uU3RhcnQpPVwib25PdmVybGF5QW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uSGlkZSk9XCJoaWRlKClcIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCInY2F4LWRyb3Bkb3duLXBhbmVsIGNheC1jb21wb25lbnQnXCIgW25nU3R5bGVdPVwicGFuZWxTdHlsZVwiIFtjbGFzc109XCJwYW5lbFN0eWxlQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgI2ZpcnN0SGlkZGVuRm9jdXNhYmxlRWxcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC1oaWRkZW4tYWNjZXNzaWJsZSBjYXgtaGlkZGVuLWZvY3VzYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRmlyc3RIaWRkZW5Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNheC1oaWRkZW4tYWNjZXNzaWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNheC1oaWRkZW4tZm9jdXNhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWRyb3Bkb3duLWhlYWRlclwiICpuZ0lmPVwiZmlsdGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJUZW1wbGF0ZTsgZWxzZSBidWlsdEluRmlsdGVyRWxlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogZmlsdGVyT3B0aW9ucyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNidWlsdEluRmlsdGVyRWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1kcm9wZG93bi1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJzZWFyY2hib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZmlsdGVyUGxhY2Vob2xkZXIgfHwgJ1NlYXJjaC4uLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJfZmlsdGVyVmFsdWUoKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXgtZHJvcGRvd24tZmlsdGVyIGNheC1pbnB1dHRleHQgY2F4LWNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY2F4LXZhcmlhbnQtZmlsbGVkJzogdmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgY29uZmlnLmlucHV0U3R5bGUoKSA9PT0gJ2ZpbGxlZCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZmlsdGVyUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJpZCArICdfbGlzdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkZpbHRlcklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUZpbHRlckxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZE9wdGlvbklkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkZpbHRlcktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25GaWx0ZXJCbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uICpuZ0lmPVwiIWZpbHRlckljb25UZW1wbGF0ZVwiIFtzdHlsZUNsYXNzXT1cIidjYXgtZHJvcGRvd24tZmlsdGVyLWljb24nXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVySWNvblRlbXBsYXRlXCIgY2xhc3M9XCJjYXgtZHJvcGRvd24tZmlsdGVyLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJfZmlsdGVyVmFsdWUoKVwiIGNsYXNzPVwiY2F4IGNheC1jbG9zZS1jaXJjbGUgY2F4LWRyb3Bkb3duLWZpbHRlci1jbGVhci1pY29uXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC1kcm9wZG93bi1pdGVtcy13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogdmlydHVhbFNjcm9sbCA/ICdhdXRvJyA6IHNjcm9sbEhlaWdodCB8fCAnYXV0bydcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjYXgtc2Nyb2xsZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aXJ0dWFsU2Nyb2xsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI3Njcm9sbGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJ2aXNpYmxlT3B0aW9ucygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiBzY3JvbGxIZWlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgfHwgX2l0ZW1TaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9TaXplXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGF6eV09XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2aXJ0dWFsU2Nyb2xsT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJjb250ZW50XCIgbGV0LWl0ZW1zIGxldC1zY3JvbGxlck9wdGlvbnM9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnVpbGRJbkl0ZW1zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbXMsIG9wdGlvbnM6IHNjcm9sbGVyT3B0aW9ucyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwibG9hZGVyXCIgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogc2Nyb2xsZXJPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2F4LXNjcm9sbGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnVpbGRJbkl0ZW1zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdmlzaWJsZU9wdGlvbnMoKSwgb3B0aW9uczoge30gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2J1aWxkSW5JdGVtcyBsZXQtaXRlbXMgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICNpdGVtcyBbYXR0ci5pZF09XCJpZCArICdfbGlzdCdcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxpc3RMYWJlbFwiIGNsYXNzPVwiY2F4LWRyb3Bkb3duLWl0ZW1zXCIgW25nQ2xhc3NdPVwic2Nyb2xsZXJPcHRpb25zLmNvbnRlbnRTdHlsZUNsYXNzXCIgW25nU3R5bGVdPVwic2Nyb2xsZXJPcHRpb25zLmNvbnRlbnRTdHlsZVwiIHJvbGU9XCJsaXN0Ym94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LW9wdGlvbiBbbmdGb3JPZl09XCJpdGVtc1wiIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPcHRpb25Hcm91cChvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImNheC1kcm9wZG93bi1pdGVtLWdyb3VwXCIgW2F0dHIuaWRdPVwiaWQgKyAnXycgKyBnZXRPcHRpb25JbmRleChpLCBzY3JvbGxlck9wdGlvbnMpXCIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IHNjcm9sbGVyT3B0aW9ucy5pdGVtU2l6ZSArICdweCcgfVwiIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWdyb3VwVGVtcGxhdGVcIj57eyBnZXRPcHRpb25Hcm91cExhYmVsKG9wdGlvbi5vcHRpb25Hcm91cCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG9wdGlvbi5vcHRpb25Hcm91cCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc09wdGlvbkdyb3VwKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNheC1kcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICdfJyArIGdldE9wdGlvbkluZGV4KGksIHNjcm9sbGVyT3B0aW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrbWFya109XCJjaGVja21hcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0T3B0aW9uTGFiZWwob3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNPcHRpb25EaXNhYmxlZChvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZE9wdGlvbkluZGV4KCkgPT09IGdldE9wdGlvbkluZGV4KGksIHNjcm9sbGVyT3B0aW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFQb3NJbnNldF09XCJnZXRBcmlhUG9zSW5zZXQoZ2V0T3B0aW9uSW5kZXgoaSwgc2Nyb2xsZXJPcHRpb25zKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFTZXRTaXplXT1cImFyaWFTZXRTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudCwgb3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Nb3VzZUVudGVyKT1cIm9uT3B0aW9uTW91c2VFbnRlcigkZXZlbnQsIGdldE9wdGlvbkluZGV4KGksIHNjcm9sbGVyT3B0aW9ucykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY2F4LWRyb3Bkb3duSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWx0ZXJWYWx1ZSAmJiBpc0VtcHR5KClcIiBjbGFzcz1cImNheC1kcm9wZG93bi1lbXB0eS1tZXNzYWdlXCIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IHNjcm9sbGVyT3B0aW9ucy5pdGVtU2l6ZSArICdweCcgfVwiIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVtcHR5RmlsdGVyVGVtcGxhdGUgJiYgIWVtcHR5VGVtcGxhdGU7IGVsc2UgZW1wdHlGaWx0ZXJcIj4ge3sgZW1wdHlGaWx0ZXJNZXNzYWdlTGFiZWwgfX0gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjZW1wdHlGaWx0ZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eUZpbHRlclRlbXBsYXRlIHx8IGVtcHR5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCIhZmlsdGVyVmFsdWUgJiYgaXNFbXB0eSgpXCIgY2xhc3M9XCJjYXgtZHJvcGRvd24tZW1wdHktbWVzc2FnZVwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBzY3JvbGxlck9wdGlvbnMuaXRlbVNpemUgKyAncHgnIH1cIiByb2xlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlbXB0eVRlbXBsYXRlOyBlbHNlIGVtcHR5XCI+IHt7IGVtcHR5TWVzc2FnZUxhYmVsIH19IDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI2VtcHR5ICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgI2xhc3RIaWRkZW5Gb2N1c2FibGVFbFxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LWhpZGRlbi1hY2Nlc3NpYmxlIGNheC1oaWRkZW4tZm9jdXNhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25MYXN0SGlkZGVuRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXgtaGlkZGVuLWFjY2Vzc2libGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXgtaGlkZGVuLWZvY3VzYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2NheC1vdmVybGF5PlxyXG48L2Rpdj5cclxuIl19