cax-design-system 2.8.0 → 2.8.2

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 (1820) hide show
  1. package/README.md +46 -46
  2. package/accordion/index.d.ts +286 -3
  3. package/animate/index.d.ts +41 -3
  4. package/animateonscroll/index.d.ts +75 -3
  5. package/api/index.d.ts +1856 -3
  6. package/autocomplete/index.d.ts +799 -3
  7. package/autofocus/index.d.ts +29 -3
  8. package/avatar/index.d.ts +80 -3
  9. package/avatargroup/index.d.ts +30 -3
  10. package/badge/index.d.ts +67 -5
  11. package/baseicon/index.d.ts +18 -5
  12. package/blockui/index.d.ts +77 -3
  13. package/breadcrumb/index.d.ts +105 -3
  14. package/button/index.d.ts +170 -3
  15. package/buttongroup/index.d.ts +14 -5
  16. package/calendar/index.d.ts +935 -3
  17. package/card/index.d.ts +92 -3
  18. package/carousel/index.d.ts +290 -3
  19. package/cascadeselect/index.d.ts +564 -3
  20. package/cax-design-system-2.8.2.tgz +0 -0
  21. package/chart/index.d.ts +88 -3
  22. package/checkbox/index.d.ts +204 -3
  23. package/chip/index.d.ts +63 -3
  24. package/chips/index.d.ts +305 -3
  25. package/colorpicker/index.d.ts +265 -3
  26. package/commentbox/index.d.ts +138 -5
  27. package/confirmdialog/index.d.ts +336 -3
  28. package/confirmpopup/index.d.ts +148 -3
  29. package/contextmenu/index.d.ts +261 -3
  30. package/dataview/index.d.ts +457 -3
  31. package/defer/index.d.ts +40 -3
  32. package/dialog/index.d.ts +411 -3
  33. package/divider/index.d.ts +56 -3
  34. package/dock/index.d.ts +136 -3
  35. package/dom/index.d.ts +105 -3
  36. package/dragdrop/index.d.ts +120 -3
  37. package/dropdown/index.d.ts +818 -3
  38. package/dynamicdialog/index.d.ts +490 -3
  39. package/editor/index.d.ts +177 -3
  40. package/fesm2022/cax-design-system-accordion.mjs +4 -4
  41. package/fesm2022/cax-design-system-accordion.mjs.map +1 -1
  42. package/fesm2022/cax-design-system-animate.mjs +1 -1
  43. package/fesm2022/cax-design-system-animate.mjs.map +1 -1
  44. package/fesm2022/cax-design-system-animateonscroll.mjs +1 -1
  45. package/fesm2022/cax-design-system-animateonscroll.mjs.map +1 -1
  46. package/fesm2022/cax-design-system-api.mjs +1 -1
  47. package/fesm2022/cax-design-system-api.mjs.map +1 -1
  48. package/fesm2022/cax-design-system-autocomplete.mjs +3 -3
  49. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -1
  50. package/fesm2022/cax-design-system-autofocus.mjs +1 -1
  51. package/fesm2022/cax-design-system-autofocus.mjs.map +1 -1
  52. package/fesm2022/cax-design-system-avatar.mjs +3 -3
  53. package/fesm2022/cax-design-system-avatar.mjs.map +1 -1
  54. package/fesm2022/cax-design-system-avatargroup.mjs +3 -3
  55. package/fesm2022/cax-design-system-avatargroup.mjs.map +1 -1
  56. package/fesm2022/cax-design-system-badge.mjs +3 -3
  57. package/fesm2022/cax-design-system-badge.mjs.map +1 -1
  58. package/fesm2022/cax-design-system-baseicon.mjs +1 -1
  59. package/fesm2022/cax-design-system-baseicon.mjs.map +1 -1
  60. package/fesm2022/cax-design-system-blockui.mjs +1 -1
  61. package/fesm2022/cax-design-system-blockui.mjs.map +1 -1
  62. package/fesm2022/cax-design-system-breadcrumb.mjs +3 -3
  63. package/fesm2022/cax-design-system-breadcrumb.mjs.map +1 -1
  64. package/fesm2022/cax-design-system-button.mjs +3 -3
  65. package/fesm2022/cax-design-system-button.mjs.map +1 -1
  66. package/fesm2022/cax-design-system-buttongroup.mjs +1 -1
  67. package/fesm2022/cax-design-system-buttongroup.mjs.map +1 -1
  68. package/fesm2022/cax-design-system-calendar.mjs +5 -5
  69. package/fesm2022/cax-design-system-calendar.mjs.map +1 -1
  70. package/fesm2022/cax-design-system-card.mjs +3 -3
  71. package/fesm2022/cax-design-system-card.mjs.map +1 -1
  72. package/fesm2022/cax-design-system-carousel.mjs +1 -1
  73. package/fesm2022/cax-design-system-carousel.mjs.map +1 -1
  74. package/fesm2022/cax-design-system-cascadeselect.mjs +5 -5
  75. package/fesm2022/cax-design-system-cascadeselect.mjs.map +1 -1
  76. package/fesm2022/cax-design-system-chart.mjs +1 -1
  77. package/fesm2022/cax-design-system-chart.mjs.map +1 -1
  78. package/fesm2022/cax-design-system-checkbox.mjs +3 -3
  79. package/fesm2022/cax-design-system-checkbox.mjs.map +1 -1
  80. package/fesm2022/cax-design-system-chip.mjs +3 -3
  81. package/fesm2022/cax-design-system-chip.mjs.map +1 -1
  82. package/fesm2022/cax-design-system-chips.mjs +4 -4
  83. package/fesm2022/cax-design-system-chips.mjs.map +1 -1
  84. package/fesm2022/cax-design-system-colorpicker.mjs +3 -3
  85. package/fesm2022/cax-design-system-colorpicker.mjs.map +1 -1
  86. package/fesm2022/cax-design-system-commentbox.mjs +3 -3
  87. package/fesm2022/cax-design-system-commentbox.mjs.map +1 -1
  88. package/fesm2022/cax-design-system-confirmdialog.mjs +3 -3
  89. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -1
  90. package/fesm2022/cax-design-system-confirmpopup.mjs +2 -2
  91. package/fesm2022/cax-design-system-confirmpopup.mjs.map +1 -1
  92. package/fesm2022/cax-design-system-contextmenu.mjs +1 -1
  93. package/fesm2022/cax-design-system-contextmenu.mjs.map +1 -1
  94. package/fesm2022/cax-design-system-dataview.mjs +1 -1
  95. package/fesm2022/cax-design-system-dataview.mjs.map +1 -1
  96. package/fesm2022/cax-design-system-defer.mjs +1 -1
  97. package/fesm2022/cax-design-system-defer.mjs.map +1 -1
  98. package/fesm2022/cax-design-system-dialog.mjs +3 -3
  99. package/fesm2022/cax-design-system-dialog.mjs.map +1 -1
  100. package/fesm2022/cax-design-system-divider.mjs +3 -3
  101. package/fesm2022/cax-design-system-divider.mjs.map +1 -1
  102. package/fesm2022/cax-design-system-dock.mjs +1 -1
  103. package/fesm2022/cax-design-system-dock.mjs.map +1 -1
  104. package/fesm2022/cax-design-system-dom.mjs.map +1 -1
  105. package/fesm2022/cax-design-system-dragdrop.mjs +1 -1
  106. package/fesm2022/cax-design-system-dragdrop.mjs.map +1 -1
  107. package/fesm2022/cax-design-system-dropdown.mjs +6 -6
  108. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
  109. package/fesm2022/cax-design-system-dynamicdialog.mjs +1 -1
  110. package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -1
  111. package/fesm2022/cax-design-system-editor.mjs +3 -3
  112. package/fesm2022/cax-design-system-editor.mjs.map +1 -1
  113. package/fesm2022/cax-design-system-fieldset.mjs +2 -2
  114. package/fesm2022/cax-design-system-fieldset.mjs.map +1 -1
  115. package/fesm2022/cax-design-system-fileupload.mjs +1 -1
  116. package/fesm2022/cax-design-system-fileupload.mjs.map +1 -1
  117. package/fesm2022/cax-design-system-floatlabel.mjs +1 -1
  118. package/fesm2022/cax-design-system-floatlabel.mjs.map +1 -1
  119. package/fesm2022/cax-design-system-focustrap.mjs +1 -1
  120. package/fesm2022/cax-design-system-focustrap.mjs.map +1 -1
  121. package/fesm2022/cax-design-system-galleria.mjs +1 -1
  122. package/fesm2022/cax-design-system-galleria.mjs.map +1 -1
  123. package/fesm2022/cax-design-system-iconfield.mjs +1 -1
  124. package/fesm2022/cax-design-system-iconfield.mjs.map +1 -1
  125. package/fesm2022/cax-design-system-icons-angledoubledown.mjs.map +1 -1
  126. package/fesm2022/cax-design-system-icons-angledoubleleft.mjs.map +1 -1
  127. package/fesm2022/cax-design-system-icons-angledoubleright.mjs.map +1 -1
  128. package/fesm2022/cax-design-system-icons-angledoubleup.mjs.map +1 -1
  129. package/fesm2022/cax-design-system-icons-angledown.mjs.map +1 -1
  130. package/fesm2022/cax-design-system-icons-angleleft.mjs.map +1 -1
  131. package/fesm2022/cax-design-system-icons-angleright.mjs.map +1 -1
  132. package/fesm2022/cax-design-system-icons-angleup.mjs.map +1 -1
  133. package/fesm2022/cax-design-system-icons-arrowdown.mjs.map +1 -1
  134. package/fesm2022/cax-design-system-icons-arrowdownleft.mjs.map +1 -1
  135. package/fesm2022/cax-design-system-icons-arrowdownright.mjs.map +1 -1
  136. package/fesm2022/cax-design-system-icons-arrowleft.mjs.map +1 -1
  137. package/fesm2022/cax-design-system-icons-arrowright.mjs.map +1 -1
  138. package/fesm2022/cax-design-system-icons-arrowup.mjs.map +1 -1
  139. package/fesm2022/cax-design-system-icons-ban.mjs.map +1 -1
  140. package/fesm2022/cax-design-system-icons-bars.mjs.map +1 -1
  141. package/fesm2022/cax-design-system-icons-blank.mjs.map +1 -1
  142. package/fesm2022/cax-design-system-icons-calendar.mjs.map +1 -1
  143. package/fesm2022/cax-design-system-icons-caretleft.mjs.map +1 -1
  144. package/fesm2022/cax-design-system-icons-caretright.mjs.map +1 -1
  145. package/fesm2022/cax-design-system-icons-check.mjs.map +1 -1
  146. package/fesm2022/cax-design-system-icons-chevrondown.mjs.map +1 -1
  147. package/fesm2022/cax-design-system-icons-chevronleft.mjs.map +1 -1
  148. package/fesm2022/cax-design-system-icons-chevronright.mjs.map +1 -1
  149. package/fesm2022/cax-design-system-icons-chevronup.mjs.map +1 -1
  150. package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs.map +1 -1
  151. package/fesm2022/cax-design-system-icons-eye.mjs.map +1 -1
  152. package/fesm2022/cax-design-system-icons-eyeslash.mjs.map +1 -1
  153. package/fesm2022/cax-design-system-icons-filter.mjs.map +1 -1
  154. package/fesm2022/cax-design-system-icons-filterslash.mjs.map +1 -1
  155. package/fesm2022/cax-design-system-icons-home.mjs.map +1 -1
  156. package/fesm2022/cax-design-system-icons-infocircle.mjs.map +1 -1
  157. package/fesm2022/cax-design-system-icons-minus.mjs.map +1 -1
  158. package/fesm2022/cax-design-system-icons-pencil.mjs.map +1 -1
  159. package/fesm2022/cax-design-system-icons-plus.mjs.map +1 -1
  160. package/fesm2022/cax-design-system-icons-refresh.mjs.map +1 -1
  161. package/fesm2022/cax-design-system-icons-search.mjs.map +1 -1
  162. package/fesm2022/cax-design-system-icons-searchminus.mjs.map +1 -1
  163. package/fesm2022/cax-design-system-icons-searchplus.mjs.map +1 -1
  164. package/fesm2022/cax-design-system-icons-sortalt.mjs.map +1 -1
  165. package/fesm2022/cax-design-system-icons-sortamountdown.mjs.map +1 -1
  166. package/fesm2022/cax-design-system-icons-sortamountupalt.mjs.map +1 -1
  167. package/fesm2022/cax-design-system-icons-spinner.mjs.map +1 -1
  168. package/fesm2022/cax-design-system-icons-star.mjs.map +1 -1
  169. package/fesm2022/cax-design-system-icons-starfill.mjs.map +1 -1
  170. package/fesm2022/cax-design-system-icons-thlarge.mjs.map +1 -1
  171. package/fesm2022/cax-design-system-icons-times.mjs.map +1 -1
  172. package/fesm2022/cax-design-system-icons-timescircle.mjs.map +1 -1
  173. package/fesm2022/cax-design-system-icons-trash.mjs.map +1 -1
  174. package/fesm2022/cax-design-system-icons-undo.mjs.map +1 -1
  175. package/fesm2022/cax-design-system-icons-upload.mjs.map +1 -1
  176. package/fesm2022/cax-design-system-icons-windowmaximize.mjs.map +1 -1
  177. package/fesm2022/cax-design-system-icons-windowminimize.mjs.map +1 -1
  178. package/fesm2022/cax-design-system-image.mjs +4 -4
  179. package/fesm2022/cax-design-system-image.mjs.map +1 -1
  180. package/fesm2022/cax-design-system-inplace.mjs +1 -1
  181. package/fesm2022/cax-design-system-inplace.mjs.map +1 -1
  182. package/fesm2022/cax-design-system-inputgroup.mjs +3 -3
  183. package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -1
  184. package/fesm2022/cax-design-system-inputgroupaddon.mjs +3 -3
  185. package/fesm2022/cax-design-system-inputgroupaddon.mjs.map +1 -1
  186. package/fesm2022/cax-design-system-inputicon.mjs +1 -1
  187. package/fesm2022/cax-design-system-inputicon.mjs.map +1 -1
  188. package/fesm2022/cax-design-system-inputmask.mjs +3 -3
  189. package/fesm2022/cax-design-system-inputmask.mjs.map +1 -1
  190. package/fesm2022/cax-design-system-inputnumber.mjs +3 -3
  191. package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -1
  192. package/fesm2022/cax-design-system-inputotp.mjs +1 -1
  193. package/fesm2022/cax-design-system-inputotp.mjs.map +1 -1
  194. package/fesm2022/cax-design-system-inputswitch.mjs +1 -1
  195. package/fesm2022/cax-design-system-inputswitch.mjs.map +1 -1
  196. package/fesm2022/cax-design-system-inputtext.mjs +3 -3
  197. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
  198. package/fesm2022/cax-design-system-inputtextarea.mjs +3 -3
  199. package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -1
  200. package/fesm2022/cax-design-system-keyfilter.mjs +1 -1
  201. package/fesm2022/cax-design-system-keyfilter.mjs.map +1 -1
  202. package/fesm2022/cax-design-system-knob.mjs +1 -1
  203. package/fesm2022/cax-design-system-knob.mjs.map +1 -1
  204. package/fesm2022/cax-design-system-listbox.mjs +1 -1
  205. package/fesm2022/cax-design-system-listbox.mjs.map +1 -1
  206. package/fesm2022/cax-design-system-logo.mjs +3 -3
  207. package/fesm2022/cax-design-system-logo.mjs.map +1 -1
  208. package/fesm2022/cax-design-system-megamenu.mjs +1 -1
  209. package/fesm2022/cax-design-system-megamenu.mjs.map +1 -1
  210. package/fesm2022/cax-design-system-menu.mjs +5 -5
  211. package/fesm2022/cax-design-system-menu.mjs.map +1 -1
  212. package/fesm2022/cax-design-system-menubar.mjs +1 -1
  213. package/fesm2022/cax-design-system-menubar.mjs.map +1 -1
  214. package/fesm2022/cax-design-system-message.mjs +1 -1
  215. package/fesm2022/cax-design-system-message.mjs.map +1 -1
  216. package/fesm2022/cax-design-system-messages.mjs +4 -4
  217. package/fesm2022/cax-design-system-messages.mjs.map +1 -1
  218. package/fesm2022/cax-design-system-metergroup.mjs +1 -1
  219. package/fesm2022/cax-design-system-metergroup.mjs.map +1 -1
  220. package/fesm2022/cax-design-system-multiselect.mjs +5 -5
  221. package/fesm2022/cax-design-system-multiselect.mjs.map +1 -1
  222. package/fesm2022/cax-design-system-navigation.mjs +3 -3
  223. package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
  224. package/fesm2022/cax-design-system-orderlist.mjs +1 -1
  225. package/fesm2022/cax-design-system-orderlist.mjs.map +1 -1
  226. package/fesm2022/cax-design-system-organizationchart.mjs +2 -2
  227. package/fesm2022/cax-design-system-organizationchart.mjs.map +1 -1
  228. package/fesm2022/cax-design-system-overlay.mjs +4 -4
  229. package/fesm2022/cax-design-system-overlay.mjs.map +1 -1
  230. package/fesm2022/cax-design-system-overlaypanel.mjs +5 -5
  231. package/fesm2022/cax-design-system-overlaypanel.mjs.map +1 -1
  232. package/fesm2022/cax-design-system-paginator.mjs +3 -3
  233. package/fesm2022/cax-design-system-paginator.mjs.map +1 -1
  234. package/fesm2022/cax-design-system-panel.mjs +2 -2
  235. package/fesm2022/cax-design-system-panel.mjs.map +1 -1
  236. package/fesm2022/cax-design-system-panelmenu.mjs +2 -2
  237. package/fesm2022/cax-design-system-panelmenu.mjs.map +1 -1
  238. package/fesm2022/cax-design-system-password.mjs +1 -1
  239. package/fesm2022/cax-design-system-password.mjs.map +1 -1
  240. package/fesm2022/cax-design-system-picklist.mjs +1 -1
  241. package/fesm2022/cax-design-system-picklist.mjs.map +1 -1
  242. package/fesm2022/cax-design-system-progressbar.mjs +3 -3
  243. package/fesm2022/cax-design-system-progressbar.mjs.map +1 -1
  244. package/fesm2022/cax-design-system-progressspinner.mjs +3 -3
  245. package/fesm2022/cax-design-system-progressspinner.mjs.map +1 -1
  246. package/fesm2022/cax-design-system-radiobutton.mjs +3 -3
  247. package/fesm2022/cax-design-system-radiobutton.mjs.map +1 -1
  248. package/fesm2022/cax-design-system-rating.mjs +1 -1
  249. package/fesm2022/cax-design-system-rating.mjs.map +1 -1
  250. package/fesm2022/cax-design-system-ripple.mjs +1 -1
  251. package/fesm2022/cax-design-system-ripple.mjs.map +1 -1
  252. package/fesm2022/cax-design-system-scroller.mjs +4 -4
  253. package/fesm2022/cax-design-system-scroller.mjs.map +1 -1
  254. package/fesm2022/cax-design-system-scrollpanel.mjs +1 -1
  255. package/fesm2022/cax-design-system-scrollpanel.mjs.map +1 -1
  256. package/fesm2022/cax-design-system-scrolltop.mjs +2 -2
  257. package/fesm2022/cax-design-system-scrolltop.mjs.map +1 -1
  258. package/fesm2022/cax-design-system-selectbutton.mjs +3 -3
  259. package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -1
  260. package/fesm2022/cax-design-system-sidebar.mjs +4 -4
  261. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -1
  262. package/fesm2022/cax-design-system-skeleton.mjs +3 -3
  263. package/fesm2022/cax-design-system-skeleton.mjs.map +1 -1
  264. package/fesm2022/cax-design-system-slidemenu.mjs +1 -1
  265. package/fesm2022/cax-design-system-slidemenu.mjs.map +1 -1
  266. package/fesm2022/cax-design-system-slider.mjs +1 -1
  267. package/fesm2022/cax-design-system-slider.mjs.map +1 -1
  268. package/fesm2022/cax-design-system-speeddial.mjs +3 -3
  269. package/fesm2022/cax-design-system-speeddial.mjs.map +1 -1
  270. package/fesm2022/cax-design-system-spinner.mjs +1 -1
  271. package/fesm2022/cax-design-system-spinner.mjs.map +1 -1
  272. package/fesm2022/cax-design-system-splitbutton.mjs +3 -3
  273. package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -1
  274. package/fesm2022/cax-design-system-splitter.mjs +3 -3
  275. package/fesm2022/cax-design-system-splitter.mjs.map +1 -1
  276. package/fesm2022/cax-design-system-stepper.mjs +2 -2
  277. package/fesm2022/cax-design-system-stepper.mjs.map +1 -1
  278. package/fesm2022/cax-design-system-steps.mjs +3 -3
  279. package/fesm2022/cax-design-system-steps.mjs.map +1 -1
  280. package/fesm2022/cax-design-system-styleclass.mjs +1 -1
  281. package/fesm2022/cax-design-system-styleclass.mjs.map +1 -1
  282. package/fesm2022/cax-design-system-table.mjs +19 -19
  283. package/fesm2022/cax-design-system-table.mjs.map +1 -1
  284. package/fesm2022/cax-design-system-tableconfiguration.mjs +19 -11
  285. package/fesm2022/cax-design-system-tableconfiguration.mjs.map +1 -1
  286. package/fesm2022/cax-design-system-tabmenu.mjs +1 -1
  287. package/fesm2022/cax-design-system-tabmenu.mjs.map +1 -1
  288. package/fesm2022/cax-design-system-tabview.mjs +5 -5
  289. package/fesm2022/cax-design-system-tabview.mjs.map +1 -1
  290. package/fesm2022/cax-design-system-tag.mjs +3 -3
  291. package/fesm2022/cax-design-system-tag.mjs.map +1 -1
  292. package/fesm2022/cax-design-system-terminal.mjs +1 -1
  293. package/fesm2022/cax-design-system-terminal.mjs.map +1 -1
  294. package/fesm2022/cax-design-system-tieredmenu.mjs +1 -1
  295. package/fesm2022/cax-design-system-tieredmenu.mjs.map +1 -1
  296. package/fesm2022/cax-design-system-timeline.mjs +3 -3
  297. package/fesm2022/cax-design-system-timeline.mjs.map +1 -1
  298. package/fesm2022/cax-design-system-toast.mjs +6 -6
  299. package/fesm2022/cax-design-system-toast.mjs.map +1 -1
  300. package/fesm2022/cax-design-system-togglebutton.mjs +1 -1
  301. package/fesm2022/cax-design-system-togglebutton.mjs.map +1 -1
  302. package/fesm2022/cax-design-system-toggleswitch.mjs +3 -3
  303. package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -1
  304. package/fesm2022/cax-design-system-toolbar.mjs +1 -1
  305. package/fesm2022/cax-design-system-toolbar.mjs.map +1 -1
  306. package/fesm2022/cax-design-system-tooltip.mjs +1 -1
  307. package/fesm2022/cax-design-system-tooltip.mjs.map +1 -1
  308. package/fesm2022/cax-design-system-tree.mjs +5 -5
  309. package/fesm2022/cax-design-system-tree.mjs.map +1 -1
  310. package/fesm2022/cax-design-system-treeselect.mjs +3 -3
  311. package/fesm2022/cax-design-system-treeselect.mjs.map +1 -1
  312. package/fesm2022/cax-design-system-treetable.mjs +1 -1
  313. package/fesm2022/cax-design-system-treetable.mjs.map +1 -1
  314. package/fesm2022/cax-design-system-tristatecheckbox.mjs +4 -4
  315. package/fesm2022/cax-design-system-tristatecheckbox.mjs.map +1 -1
  316. package/fesm2022/cax-design-system-upload.mjs +3 -3
  317. package/fesm2022/cax-design-system-upload.mjs.map +1 -1
  318. package/fesm2022/cax-design-system-utils.mjs.map +1 -1
  319. package/fesm2022/cax-design-system-virtualscroller.mjs +1 -1
  320. package/fesm2022/cax-design-system-virtualscroller.mjs.map +1 -1
  321. package/fieldset/index.d.ts +140 -3
  322. package/fileupload/index.d.ts +606 -3
  323. package/floatlabel/index.d.ts +19 -3
  324. package/focustrap/index.d.ts +35 -3
  325. package/galleria/index.d.ts +502 -3
  326. package/iconfield/index.d.ts +26 -3
  327. package/icons/angledoubledown/index.d.ts +9 -5
  328. package/icons/angledoubleleft/index.d.ts +9 -5
  329. package/icons/angledoubleright/index.d.ts +9 -5
  330. package/icons/angledoubleup/index.d.ts +9 -5
  331. package/icons/angledown/index.d.ts +9 -5
  332. package/icons/angleleft/index.d.ts +9 -5
  333. package/icons/angleright/index.d.ts +9 -5
  334. package/icons/angleup/index.d.ts +9 -5
  335. package/icons/arrowdown/index.d.ts +12 -5
  336. package/icons/arrowdownleft/index.d.ts +9 -5
  337. package/icons/arrowdownright/index.d.ts +9 -5
  338. package/icons/arrowleft/index.d.ts +11 -5
  339. package/icons/arrowright/index.d.ts +9 -5
  340. package/icons/arrowup/index.d.ts +11 -5
  341. package/icons/ban/index.d.ts +11 -5
  342. package/icons/bars/index.d.ts +9 -5
  343. package/icons/blank/index.d.ts +9 -5
  344. package/icons/calendar/index.d.ts +9 -5
  345. package/icons/caretleft/index.d.ts +9 -5
  346. package/icons/caretright/index.d.ts +9 -5
  347. package/icons/check/index.d.ts +9 -5
  348. package/icons/chevrondown/index.d.ts +9 -5
  349. package/icons/chevronleft/index.d.ts +9 -5
  350. package/icons/chevronright/index.d.ts +9 -5
  351. package/icons/chevronup/index.d.ts +9 -5
  352. package/icons/exclamationtriangle/index.d.ts +12 -5
  353. package/icons/eye/index.d.ts +9 -5
  354. package/icons/eyeslash/index.d.ts +11 -5
  355. package/icons/filter/index.d.ts +11 -5
  356. package/icons/filterslash/index.d.ts +11 -5
  357. package/icons/home/index.d.ts +11 -5
  358. package/icons/infocircle/index.d.ts +11 -5
  359. package/icons/minus/index.d.ts +9 -5
  360. package/icons/pencil/index.d.ts +11 -5
  361. package/icons/plus/index.d.ts +11 -5
  362. package/icons/refresh/index.d.ts +11 -5
  363. package/icons/search/index.d.ts +11 -5
  364. package/icons/searchminus/index.d.ts +11 -5
  365. package/icons/searchplus/index.d.ts +11 -5
  366. package/icons/sortalt/index.d.ts +11 -5
  367. package/icons/sortamountdown/index.d.ts +11 -5
  368. package/icons/sortamountupalt/index.d.ts +11 -5
  369. package/icons/spinner/index.d.ts +11 -5
  370. package/icons/star/index.d.ts +11 -5
  371. package/icons/starfill/index.d.ts +11 -5
  372. package/icons/thlarge/index.d.ts +11 -5
  373. package/icons/times/index.d.ts +9 -5
  374. package/icons/timescircle/index.d.ts +11 -5
  375. package/icons/trash/index.d.ts +11 -5
  376. package/icons/undo/index.d.ts +11 -5
  377. package/icons/upload/index.d.ts +11 -5
  378. package/icons/windowmaximize/index.d.ts +11 -5
  379. package/icons/windowminimize/index.d.ts +11 -5
  380. package/image/index.d.ts +228 -3
  381. package/index.d.ts +2 -5
  382. package/inplace/index.d.ts +130 -3
  383. package/inputgroup/index.d.ts +48 -3
  384. package/inputgroupaddon/index.d.ts +35 -3
  385. package/inputicon/index.d.ts +22 -3
  386. package/inputmask/index.d.ts +304 -3
  387. package/inputnumber/index.d.ts +443 -3
  388. package/inputotp/index.d.ts +189 -3
  389. package/inputswitch/index.d.ts +123 -3
  390. package/inputtext/index.d.ts +76 -5
  391. package/inputtextarea/index.d.ts +112 -3
  392. package/keyfilter/index.d.ts +65 -3
  393. package/knob/index.d.ts +179 -3
  394. package/listbox/index.d.ts +620 -3
  395. package/logo/index.d.ts +20 -5
  396. package/megamenu/index.d.ts +230 -3
  397. package/menu/index.d.ts +222 -3
  398. package/menubar/index.d.ts +290 -3
  399. package/message/index.d.ts +53 -3
  400. package/messages/index.d.ts +140 -3
  401. package/metergroup/index.d.ts +224 -3
  402. package/multiselect/index.d.ts +974 -3
  403. package/navigation/index.d.ts +105 -5
  404. package/orderlist/index.d.ts +381 -3
  405. package/organizationchart/index.d.ts +192 -3
  406. package/overlay/index.d.ts +246 -3
  407. package/overlaypanel/index.d.ts +170 -3
  408. package/package.json +270 -610
  409. package/paginator/index.d.ts +249 -3
  410. package/panel/index.d.ts +185 -3
  411. package/panelmenu/index.d.ts +249 -3
  412. package/password/index.d.ts +342 -3
  413. package/picklist/index.d.ts +696 -3
  414. package/progressbar/index.d.ts +61 -3
  415. package/progressspinner/index.d.ts +58 -3
  416. package/radiobutton/index.d.ts +173 -3
  417. package/rating/index.d.ts +181 -3
  418. package/resources/cax.min.scss +1 -1
  419. package/resources/cax.scss +12518 -12518
  420. package/resources/components/accordion/accordion.scss +46 -46
  421. package/resources/components/autocomplete/autocomplete.scss +183 -183
  422. package/resources/components/avatar/avatar.scss +34 -34
  423. package/resources/components/avatargroup/avatargroup.scss +10 -10
  424. package/resources/components/badge/badge.scss +67 -67
  425. package/resources/components/blockui/blockui.css +26 -26
  426. package/resources/components/breadcrumb/breadcrumb.scss +33 -33
  427. package/resources/components/button/button.scss +163 -163
  428. package/resources/components/calendar/calendar.scss +235 -235
  429. package/resources/components/card/card.scss +50 -50
  430. package/resources/components/carousel/carousel.css +71 -71
  431. package/resources/components/cascadeselect/cascadeselect.scss +105 -105
  432. package/resources/components/checkbox/checkbox.scss +30 -30
  433. package/resources/components/chip/chip.scss +6 -6
  434. package/resources/components/chips/chips.scss +205 -205
  435. package/resources/components/colorpicker/colorpicker-images.scss +6 -6
  436. package/resources/components/colorpicker/colorpicker.scss +82 -82
  437. package/resources/components/commentbox/commentbox.scss +611 -611
  438. package/resources/components/common/common.scss +183 -183
  439. package/resources/components/confirmpopup/confirmpopup.css +53 -53
  440. package/resources/components/contextmenu/contextmenu.css +42 -42
  441. package/resources/components/dataview/dataview.css +13 -13
  442. package/resources/components/dialog/dialog.scss +171 -171
  443. package/resources/components/divider/divider.scss +86 -86
  444. package/resources/components/dock/dock.css +107 -107
  445. package/resources/components/dropdown/dropdown.scss +94 -94
  446. package/resources/components/editor/editor.scss +3 -3
  447. package/resources/components/fieldset/fieldset.css +30 -30
  448. package/resources/components/fileupload/fileupload.css +47 -47
  449. package/resources/components/galleria/galleria.css +281 -281
  450. package/resources/components/iconfield/iconfield.css +5 -5
  451. package/resources/components/image/image.scss +92 -92
  452. package/resources/components/inplace/inplace.css +19 -19
  453. package/resources/components/inputicon/inputicon.css +6 -6
  454. package/resources/components/inputmask/inputmask.scss +12 -12
  455. package/resources/components/inputnumber/inputnumber.scss +109 -109
  456. package/resources/components/inputotp/inputotp.css +2 -2
  457. package/resources/components/inputswitch/inputswitch.css +23 -23
  458. package/resources/components/inputtext/inputtext.scss +145 -145
  459. package/resources/components/inputtextarea/inputtextarea.scss +10 -10
  460. package/resources/components/knob/knob.css +20 -20
  461. package/resources/components/listbox/listbox.css +40 -40
  462. package/resources/components/megamenu/megamenu.css +108 -108
  463. package/resources/components/menu/menu.scss +31 -30
  464. package/resources/components/menubar/menubar.css +81 -81
  465. package/resources/components/message/message.css +17 -17
  466. package/resources/components/messages/messages.scss +55 -55
  467. package/resources/components/multiselect/multiselect.scss +132 -132
  468. package/resources/components/navigation/navigation.scss +197 -196
  469. package/resources/components/orderlist/orderlist.css +78 -78
  470. package/resources/components/organizationchart/organizationchart.css +62 -62
  471. package/resources/components/overlay/overlay.scss +80 -80
  472. package/resources/components/overlaypanel/overlaypanel.scss +66 -66
  473. package/resources/components/paginator/paginator.scss +41 -41
  474. package/resources/components/panel/panel.css +29 -29
  475. package/resources/components/panelmenu/panelmenu.css +45 -45
  476. package/resources/components/password/password.css +54 -54
  477. package/resources/components/picklist/picklist.css +60 -60
  478. package/resources/components/progressbar/progressbar.scss +107 -107
  479. package/resources/components/progressspinner/progressspinner.scss +94 -94
  480. package/resources/components/radiobutton/radiobutton.scss +34 -34
  481. package/resources/components/rating/rating.css +15 -15
  482. package/resources/components/ripple/ripple.scss +29 -29
  483. package/resources/components/scroller/scroller.scss +58 -58
  484. package/resources/components/scrollpanel/scrollpanel.css +50 -50
  485. package/resources/components/scrolltop/scrolltop.css +18 -18
  486. package/resources/components/sidebar/sidebar.scss +117 -117
  487. package/resources/components/skeleton/skeleton.scss +24 -24
  488. package/resources/components/slidemenu/slidemenu.css +100 -100
  489. package/resources/components/slider/slider.css +41 -41
  490. package/resources/components/speeddial/speeddial.scss +122 -122
  491. package/resources/components/spinner/spinner.css +63 -63
  492. package/resources/components/splitbutton/splitbutton.scss +53 -53
  493. package/resources/components/splitter/splitter.scss +73 -73
  494. package/resources/components/stepper/stepper.css +9 -9
  495. package/resources/components/steps/steps.scss +50 -50
  496. package/resources/components/table/table.scss +451 -451
  497. package/resources/components/tableconfiguration/tableconfiguration.scss +125 -115
  498. package/resources/components/tabmenu/tabmenu.css +80 -80
  499. package/resources/components/tabview/tabview.scss +198 -198
  500. package/resources/components/tag/tag.scss +23 -23
  501. package/resources/components/terminal/terminal.css +24 -24
  502. package/resources/components/tieredmenu/tieredmenu.scss +55 -55
  503. package/resources/components/timeline/timeline.scss +128 -128
  504. package/resources/components/toast/toast.scss +87 -87
  505. package/resources/components/toggleswitch/toggleswitch.scss +36 -36
  506. package/resources/components/toolbar/toolbar.css +19 -19
  507. package/resources/components/tooltip/tooltip.scss +124 -124
  508. package/resources/components/tree/tree.scss +154 -154
  509. package/resources/components/treeselect/treeselect.scss +114 -114
  510. package/resources/components/treetable/treetable.css +205 -205
  511. package/resources/components/upload/upload.component.scss +145 -145
  512. package/resources/logo/dataX-dark.svg +12 -12
  513. package/resources/logo/dataX-icon-dark.svg +5 -5
  514. package/resources/logo/dataX-icon.svg +5 -5
  515. package/resources/logo/dataX.svg +12 -12
  516. package/resources/styles/colors.scss +397 -397
  517. package/resources/styles/shadow-blur.scss +21 -21
  518. package/resources/styles/space-radius-border.scss +49 -49
  519. package/resources/styles/typography.scss +116 -116
  520. package/ripple/index.d.ts +37 -3
  521. package/scroller/index.d.ts +528 -3
  522. package/scrollpanel/index.d.ts +116 -3
  523. package/scrolltop/index.d.ts +117 -3
  524. package/selectbutton/index.d.ts +184 -3
  525. package/sidebar/index.d.ts +213 -3
  526. package/skeleton/index.d.ts +69 -3
  527. package/slidemenu/index.d.ts +339 -3
  528. package/slider/index.d.ts +214 -3
  529. package/speeddial/index.d.ts +319 -3
  530. package/spinner/index.d.ts +93 -5
  531. package/splitbutton/index.d.ts +264 -3
  532. package/splitter/index.d.ts +201 -3
  533. package/stepper/index.d.ts +145 -3
  534. package/steps/index.d.ts +87 -3
  535. package/styleclass/index.d.ts +109 -3
  536. package/table/index.d.ts +2556 -3
  537. package/tableconfiguration/index.d.ts +25 -5
  538. package/tabmenu/index.d.ts +160 -3
  539. package/tabview/index.d.ts +357 -3
  540. package/tag/index.d.ts +82 -3
  541. package/terminal/index.d.ts +68 -3
  542. package/tieredmenu/index.d.ts +307 -3
  543. package/timeline/index.d.ts +100 -3
  544. package/toast/index.d.ts +202 -3
  545. package/togglebutton/index.d.ts +150 -3
  546. package/toggleswitch/index.d.ts +25 -5
  547. package/toolbar/index.d.ts +64 -3
  548. package/tooltip/index.d.ts +218 -3
  549. package/tree/index.d.ts +673 -3
  550. package/treeselect/index.d.ts +517 -3
  551. package/treetable/index.d.ts +1461 -3
  552. package/tristatecheckbox/index.d.ts +155 -3
  553. package/ts-helpers/index.d.ts +6 -5
  554. package/upload/index.d.ts +81 -5
  555. package/utils/index.d.ts +35 -5
  556. package/virtualscroller/index.d.ts +161 -3
  557. package/accordion/accordion.d.ts +0 -224
  558. package/accordion/accordion.interface.d.ts +0 -49
  559. package/accordion/accordion.module.d.ts +0 -13
  560. package/accordion/public_api.d.ts +0 -3
  561. package/animate/animate.d.ts +0 -40
  562. package/animate/public_api.d.ts +0 -1
  563. package/animateonscroll/animateonscroll.d.ts +0 -75
  564. package/animateonscroll/public_api.d.ts +0 -1
  565. package/api/blockableui.d.ts +0 -10
  566. package/api/caxconfig.d.ts +0 -24
  567. package/api/confirmaeventtype.d.ts +0 -8
  568. package/api/confirmation.d.ts +0 -96
  569. package/api/confirmationservice.d.ts +0 -30
  570. package/api/contextmenuservice.d.ts +0 -11
  571. package/api/filtermatchmode.d.ts +0 -22
  572. package/api/filtermetadata.d.ts +0 -18
  573. package/api/filteroperator.d.ts +0 -4
  574. package/api/filterservice.d.ts +0 -10
  575. package/api/lazyloadevent.d.ts +0 -47
  576. package/api/lazyloadmeta.d.ts +0 -19
  577. package/api/megamenuitem.d.ts +0 -130
  578. package/api/menuitem.d.ts +0 -176
  579. package/api/message.d.ts +0 -30
  580. package/api/messageservice.d.ts +0 -32
  581. package/api/overlayoptions.d.ts +0 -188
  582. package/api/overlayservice.d.ts +0 -9
  583. package/api/primeicons.d.ts +0 -313
  584. package/api/public_api.d.ts +0 -34
  585. package/api/scrolleroptions.d.ts +0 -116
  586. package/api/selectitem.d.ts +0 -12
  587. package/api/selectitemgroup.d.ts +0 -10
  588. package/api/shared.d.ts +0 -24
  589. package/api/sortevent.d.ts +0 -12
  590. package/api/sortmeta.d.ts +0 -8
  591. package/api/tablestate.d.ts +0 -60
  592. package/api/themegeneratorservice.d.ts +0 -12
  593. package/api/tooltipoptions.d.ts +0 -69
  594. package/api/translation.d.ts +0 -135
  595. package/api/translationkeys.d.ts +0 -50
  596. package/api/treedragdropservice.d.ts +0 -12
  597. package/api/treenode.d.ts +0 -91
  598. package/api/treenodedragevent.d.ts +0 -27
  599. package/api/treetablenode.d.ts +0 -36
  600. package/autocomplete/autocomplete.d.ts +0 -616
  601. package/autocomplete/autocomplete.interface.d.ts +0 -164
  602. package/autocomplete/autocomplete.module.d.ts +0 -20
  603. package/autocomplete/public_api.d.ts +0 -3
  604. package/autofocus/autofocus.d.ts +0 -28
  605. package/autofocus/public_api.d.ts +0 -1
  606. package/avatar/avatar.d.ts +0 -73
  607. package/avatar/avatar.module.d.ts +0 -7
  608. package/avatar/public_api.d.ts +0 -2
  609. package/avatargroup/avatargroup.d.ts +0 -21
  610. package/avatargroup/avatargroup.module.d.ts +0 -9
  611. package/avatargroup/public_api.d.ts +0 -2
  612. package/badge/badge.d.ts +0 -21
  613. package/badge/badge.directive.d.ts +0 -35
  614. package/badge/badge.module.d.ts +0 -10
  615. package/badge/public_api.d.ts +0 -3
  616. package/baseicon/baseicon.d.ts +0 -15
  617. package/baseicon/public_api.d.ts +0 -1
  618. package/blockui/blockui.d.ts +0 -64
  619. package/blockui/blockui.interface.d.ts +0 -11
  620. package/blockui/public_api.d.ts +0 -2
  621. package/breadcrumb/breadcrumb.d.ts +0 -55
  622. package/breadcrumb/breadcrumb.interface.d.ts +0 -38
  623. package/breadcrumb/breadcrumb.module.d.ts +0 -13
  624. package/breadcrumb/public_api.d.ts +0 -3
  625. package/button/button.d.ts +0 -85
  626. package/button/button.directive.d.ts +0 -49
  627. package/button/button.interface.d.ts +0 -30
  628. package/button/button.module.d.ts +0 -9
  629. package/button/public_api.d.ts +0 -4
  630. package/buttongroup/buttongroup.d.ts +0 -11
  631. package/buttongroup/public_api.d.ts +0 -1
  632. package/calendar/calendar.d.ts +0 -722
  633. package/calendar/calendar.interface.d.ts +0 -204
  634. package/calendar/calendar.module.d.ts +0 -9
  635. package/calendar/public_api.d.ts +0 -3
  636. package/card/card.d.ts +0 -53
  637. package/card/card.interface.d.ts +0 -27
  638. package/card/card.module.d.ts +0 -11
  639. package/card/public_api.d.ts +0 -3
  640. package/carousel/carousel.d.ts +0 -227
  641. package/carousel/carousel.interface.d.ts +0 -63
  642. package/carousel/public_api.d.ts +0 -2
  643. package/cascadeselect/cascadeselect.d.ts +0 -435
  644. package/cascadeselect/cascadeselect.interface.d.ts +0 -115
  645. package/cascadeselect/cascadeselect.module.d.ts +0 -15
  646. package/cascadeselect/public_api.d.ts +0 -3
  647. package/chart/chart.d.ts +0 -87
  648. package/chart/public_api.d.ts +0 -1
  649. package/checkbox/checkbox.d.ts +0 -168
  650. package/checkbox/checkbox.interface.d.ts +0 -26
  651. package/checkbox/checkbox.module.d.ts +0 -10
  652. package/checkbox/public_api.d.ts +0 -3
  653. package/chip/chip.d.ts +0 -38
  654. package/chip/chip.interface.d.ts +0 -15
  655. package/chip/chip.module.d.ts +0 -10
  656. package/chip/public_api.d.ts +0 -3
  657. package/chips/chips.d.ts +0 -233
  658. package/chips/chips.interface.d.ts +0 -58
  659. package/chips/chips.module.d.ts +0 -14
  660. package/chips/public_api.d.ts +0 -3
  661. package/colorpicker/colorpicker.d.ts +0 -240
  662. package/colorpicker/colorpicker.interface.d.ts +0 -15
  663. package/colorpicker/colorpicker.module.d.ts +0 -9
  664. package/colorpicker/public_api.d.ts +0 -3
  665. package/commentbox/commentbox.d.ts +0 -120
  666. package/commentbox/commentbox.module.d.ts +0 -17
  667. package/commentbox/public_api.d.ts +0 -2
  668. package/confirmdialog/confirmdialog.d.ts +0 -281
  669. package/confirmdialog/confirmdialog.interface.d.ts +0 -39
  670. package/confirmdialog/confirmdialog.module.d.ts +0 -15
  671. package/confirmdialog/public_api.d.ts +0 -3
  672. package/confirmpopup/confirmpopup.d.ts +0 -119
  673. package/confirmpopup/confirmpopup.interface.d.ts +0 -27
  674. package/confirmpopup/public_api.d.ts +0 -2
  675. package/contextmenu/contextmenu.d.ts +0 -260
  676. package/contextmenu/public_api.d.ts +0 -1
  677. package/dataview/dataview.d.ts +0 -274
  678. package/dataview/dataview.interface.d.ts +0 -183
  679. package/dataview/public_api.d.ts +0 -2
  680. package/defer/defer.d.ts +0 -39
  681. package/defer/public_api.d.ts +0 -1
  682. package/dialog/dialog.d.ts +0 -364
  683. package/dialog/dialog.interface.d.ts +0 -31
  684. package/dialog/dialog.module.d.ts +0 -15
  685. package/dialog/public_api.d.ts +0 -3
  686. package/divider/divider.d.ts +0 -49
  687. package/divider/divider.module.d.ts +0 -7
  688. package/divider/public_api.d.ts +0 -2
  689. package/dock/dock.d.ts +0 -115
  690. package/dock/dock.interface.d.ts +0 -19
  691. package/dock/public_api.d.ts +0 -2
  692. package/dom/connectedoverlayscrollhandler.d.ts +0 -9
  693. package/dom/domhandler.d.ts +0 -95
  694. package/dom/public_api.d.ts +0 -2
  695. package/dragdrop/dragdrop.d.ts +0 -112
  696. package/dragdrop/dragdrop.module.d.ts +0 -8
  697. package/dragdrop/public_api.d.ts +0 -2
  698. package/dropdown/dropdown-item.d.ts +0 -30
  699. package/dropdown/dropdown.d.ts +0 -628
  700. package/dropdown/dropdown.interface.d.ts +0 -154
  701. package/dropdown/dropdown.module.d.ts +0 -11
  702. package/dropdown/public_api.d.ts +0 -4
  703. package/dynamicdialog/dialogservice.d.ts +0 -35
  704. package/dynamicdialog/dynamicdialog-config.d.ts +0 -221
  705. package/dynamicdialog/dynamicdialog-injector.d.ts +0 -7
  706. package/dynamicdialog/dynamicdialog-ref.d.ts +0 -101
  707. package/dynamicdialog/dynamicdialog.d.ts +0 -124
  708. package/dynamicdialog/dynamicdialogcontent.d.ts +0 -8
  709. package/dynamicdialog/public_api.d.ts +0 -6
  710. package/editor/editor.d.ts +0 -104
  711. package/editor/editor.interface.d.ts +0 -64
  712. package/editor/editor.module.d.ts +0 -9
  713. package/editor/public_api.d.ts +0 -3
  714. package/esm2022/accordion/accordion.interface.mjs +0 -2
  715. package/esm2022/accordion/accordion.mjs +0 -598
  716. package/esm2022/accordion/accordion.module.mjs +0 -23
  717. package/esm2022/accordion/cax-design-system-accordion.mjs +0 -5
  718. package/esm2022/accordion/public_api.mjs +0 -4
  719. package/esm2022/animate/animate.mjs +0 -101
  720. package/esm2022/animate/cax-design-system-animate.mjs +0 -5
  721. package/esm2022/animate/public_api.mjs +0 -2
  722. package/esm2022/animateonscroll/animateonscroll.mjs +0 -185
  723. package/esm2022/animateonscroll/cax-design-system-animateonscroll.mjs +0 -5
  724. package/esm2022/animateonscroll/public_api.mjs +0 -2
  725. package/esm2022/api/blockableui.mjs +0 -2
  726. package/esm2022/api/cax-design-system-api.mjs +0 -5
  727. package/esm2022/api/caxconfig.mjs +0 -163
  728. package/esm2022/api/confirmaeventtype.mjs +0 -10
  729. package/esm2022/api/confirmation.mjs +0 -2
  730. package/esm2022/api/confirmationservice.mjs +0 -43
  731. package/esm2022/api/contextmenuservice.mjs +0 -22
  732. package/esm2022/api/filtermatchmode.mjs +0 -23
  733. package/esm2022/api/filtermetadata.mjs +0 -2
  734. package/esm2022/api/filteroperator.mjs +0 -5
  735. package/esm2022/api/filterservice.mjs +0 -225
  736. package/esm2022/api/lazyloadevent.mjs +0 -2
  737. package/esm2022/api/lazyloadmeta.mjs +0 -2
  738. package/esm2022/api/megamenuitem.mjs +0 -2
  739. package/esm2022/api/menuitem.mjs +0 -2
  740. package/esm2022/api/message.mjs +0 -2
  741. package/esm2022/api/messageservice.mjs +0 -47
  742. package/esm2022/api/overlayoptions.mjs +0 -2
  743. package/esm2022/api/overlayservice.mjs +0 -19
  744. package/esm2022/api/primeicons.mjs +0 -314
  745. package/esm2022/api/public_api.mjs +0 -35
  746. package/esm2022/api/scrolleroptions.mjs +0 -2
  747. package/esm2022/api/selectitem.mjs +0 -2
  748. package/esm2022/api/selectitemgroup.mjs +0 -2
  749. package/esm2022/api/shared.mjs +0 -65
  750. package/esm2022/api/sortevent.mjs +0 -2
  751. package/esm2022/api/sortmeta.mjs +0 -2
  752. package/esm2022/api/tablestate.mjs +0 -2
  753. package/esm2022/api/themegeneratorservice.mjs +0 -109
  754. package/esm2022/api/tooltipoptions.mjs +0 -2
  755. package/esm2022/api/translation.mjs +0 -2
  756. package/esm2022/api/translationkeys.mjs +0 -51
  757. package/esm2022/api/treedragdropservice.mjs +0 -21
  758. package/esm2022/api/treenode.mjs +0 -2
  759. package/esm2022/api/treenodedragevent.mjs +0 -2
  760. package/esm2022/api/treetablenode.mjs +0 -2
  761. package/esm2022/autocomplete/autocomplete.interface.mjs +0 -2
  762. package/esm2022/autocomplete/autocomplete.mjs +0 -1462
  763. package/esm2022/autocomplete/autocomplete.module.mjs +0 -30
  764. package/esm2022/autocomplete/cax-design-system-autocomplete.mjs +0 -5
  765. package/esm2022/autocomplete/public_api.mjs +0 -4
  766. package/esm2022/autofocus/autofocus.mjs +0 -78
  767. package/esm2022/autofocus/cax-design-system-autofocus.mjs +0 -5
  768. package/esm2022/autofocus/public_api.mjs +0 -2
  769. package/esm2022/avatar/avatar.mjs +0 -104
  770. package/esm2022/avatar/avatar.module.mjs +0 -16
  771. package/esm2022/avatar/cax-design-system-avatar.mjs +0 -5
  772. package/esm2022/avatar/public_api.mjs +0 -3
  773. package/esm2022/avatargroup/avatargroup.mjs +0 -32
  774. package/esm2022/avatargroup/avatargroup.module.mjs +0 -19
  775. package/esm2022/avatargroup/cax-design-system-avatargroup.mjs +0 -5
  776. package/esm2022/avatargroup/public_api.mjs +0 -3
  777. package/esm2022/badge/badge.directive.mjs +0 -193
  778. package/esm2022/badge/badge.mjs +0 -50
  779. package/esm2022/badge/badge.module.mjs +0 -20
  780. package/esm2022/badge/cax-design-system-badge.mjs +0 -5
  781. package/esm2022/badge/public_api.mjs +0 -4
  782. package/esm2022/baseicon/baseicon.mjs +0 -45
  783. package/esm2022/baseicon/cax-design-system-baseicon.mjs +0 -5
  784. package/esm2022/baseicon/public_api.mjs +0 -2
  785. package/esm2022/blockui/blockui.interface.mjs +0 -2
  786. package/esm2022/blockui/blockui.mjs +0 -206
  787. package/esm2022/blockui/cax-design-system-blockui.mjs +0 -5
  788. package/esm2022/blockui/public_api.mjs +0 -3
  789. package/esm2022/breadcrumb/breadcrumb.interface.mjs +0 -2
  790. package/esm2022/breadcrumb/breadcrumb.mjs +0 -120
  791. package/esm2022/breadcrumb/breadcrumb.module.mjs +0 -23
  792. package/esm2022/breadcrumb/cax-design-system-breadcrumb.mjs +0 -5
  793. package/esm2022/breadcrumb/public_api.mjs +0 -4
  794. package/esm2022/button/button.directive.mjs +0 -259
  795. package/esm2022/button/button.interface.mjs +0 -2
  796. package/esm2022/button/button.mjs +0 -190
  797. package/esm2022/button/button.module.mjs +0 -18
  798. package/esm2022/button/cax-design-system-button.mjs +0 -5
  799. package/esm2022/button/public_api.mjs +0 -5
  800. package/esm2022/buttongroup/buttongroup.mjs +0 -38
  801. package/esm2022/buttongroup/cax-design-system-buttongroup.mjs +0 -5
  802. package/esm2022/buttongroup/public_api.mjs +0 -2
  803. package/esm2022/calendar/calendar.interface.mjs +0 -2
  804. package/esm2022/calendar/calendar.mjs +0 -3242
  805. package/esm2022/calendar/calendar.module.mjs +0 -18
  806. package/esm2022/calendar/cax-design-system-calendar.mjs +0 -5
  807. package/esm2022/calendar/public_api.mjs +0 -4
  808. package/esm2022/card/card.interface.mjs +0 -2
  809. package/esm2022/card/card.mjs +0 -117
  810. package/esm2022/card/card.module.mjs +0 -21
  811. package/esm2022/card/cax-design-system-card.mjs +0 -5
  812. package/esm2022/card/public_api.mjs +0 -4
  813. package/esm2022/carousel/carousel.interface.mjs +0 -2
  814. package/esm2022/carousel/carousel.mjs +0 -968
  815. package/esm2022/carousel/cax-design-system-carousel.mjs +0 -5
  816. package/esm2022/carousel/public_api.mjs +0 -3
  817. package/esm2022/cascadeselect/cascadeselect.interface.mjs +0 -2
  818. package/esm2022/cascadeselect/cascadeselect.mjs +0 -1135
  819. package/esm2022/cascadeselect/cascadeselect.module.mjs +0 -25
  820. package/esm2022/cascadeselect/cax-design-system-cascadeselect.mjs +0 -5
  821. package/esm2022/cascadeselect/public_api.mjs +0 -4
  822. package/esm2022/cax-design-system.mjs +0 -5
  823. package/esm2022/chart/cax-design-system-chart.mjs +0 -5
  824. package/esm2022/chart/chart.mjs +0 -236
  825. package/esm2022/chart/public_api.mjs +0 -2
  826. package/esm2022/checkbox/cax-design-system-checkbox.mjs +0 -5
  827. package/esm2022/checkbox/checkbox.interface.mjs +0 -2
  828. package/esm2022/checkbox/checkbox.mjs +0 -318
  829. package/esm2022/checkbox/checkbox.module.mjs +0 -20
  830. package/esm2022/checkbox/public_api.mjs +0 -4
  831. package/esm2022/chip/cax-design-system-chip.mjs +0 -5
  832. package/esm2022/chip/chip.interface.mjs +0 -2
  833. package/esm2022/chip/chip.mjs +0 -90
  834. package/esm2022/chip/chip.module.mjs +0 -20
  835. package/esm2022/chip/public_api.mjs +0 -4
  836. package/esm2022/chips/cax-design-system-chips.mjs +0 -5
  837. package/esm2022/chips/chips.interface.mjs +0 -2
  838. package/esm2022/chips/chips.mjs +0 -610
  839. package/esm2022/chips/chips.module.mjs +0 -23
  840. package/esm2022/chips/public_api.mjs +0 -4
  841. package/esm2022/colorpicker/cax-design-system-colorpicker.mjs +0 -5
  842. package/esm2022/colorpicker/colorpicker.interface.mjs +0 -2
  843. package/esm2022/colorpicker/colorpicker.mjs +0 -715
  844. package/esm2022/colorpicker/colorpicker.module.mjs +0 -19
  845. package/esm2022/colorpicker/public_api.mjs +0 -4
  846. package/esm2022/commentbox/cax-design-system-commentbox.mjs +0 -5
  847. package/esm2022/commentbox/commentbox.mjs +0 -575
  848. package/esm2022/commentbox/commentbox.module.mjs +0 -27
  849. package/esm2022/commentbox/public_api.mjs +0 -3
  850. package/esm2022/confirmdialog/cax-design-system-confirmdialog.mjs +0 -5
  851. package/esm2022/confirmdialog/confirmdialog.interface.mjs +0 -2
  852. package/esm2022/confirmdialog/confirmdialog.mjs +0 -720
  853. package/esm2022/confirmdialog/confirmdialog.module.mjs +0 -25
  854. package/esm2022/confirmdialog/public_api.mjs +0 -4
  855. package/esm2022/confirmpopup/cax-design-system-confirmpopup.mjs +0 -5
  856. package/esm2022/confirmpopup/confirmpopup.interface.mjs +0 -2
  857. package/esm2022/confirmpopup/confirmpopup.mjs +0 -499
  858. package/esm2022/confirmpopup/public_api.mjs +0 -3
  859. package/esm2022/contextmenu/cax-design-system-contextmenu.mjs +0 -5
  860. package/esm2022/contextmenu/contextmenu.mjs +0 -1304
  861. package/esm2022/contextmenu/public_api.mjs +0 -2
  862. package/esm2022/dataview/cax-design-system-dataview.mjs +0 -5
  863. package/esm2022/dataview/dataview.interface.mjs +0 -2
  864. package/esm2022/dataview/dataview.mjs +0 -723
  865. package/esm2022/dataview/public_api.mjs +0 -3
  866. package/esm2022/defer/cax-design-system-defer.mjs +0 -5
  867. package/esm2022/defer/defer.mjs +0 -111
  868. package/esm2022/defer/public_api.mjs +0 -2
  869. package/esm2022/dialog/cax-design-system-dialog.mjs +0 -5
  870. package/esm2022/dialog/dialog.interface.mjs +0 -2
  871. package/esm2022/dialog/dialog.mjs +0 -959
  872. package/esm2022/dialog/dialog.module.mjs +0 -25
  873. package/esm2022/dialog/public_api.mjs +0 -4
  874. package/esm2022/divider/cax-design-system-divider.mjs +0 -5
  875. package/esm2022/divider/divider.mjs +0 -69
  876. package/esm2022/divider/divider.module.mjs +0 -16
  877. package/esm2022/divider/public_api.mjs +0 -3
  878. package/esm2022/dock/cax-design-system-dock.mjs +0 -5
  879. package/esm2022/dock/dock.interface.mjs +0 -2
  880. package/esm2022/dock/dock.mjs +0 -431
  881. package/esm2022/dock/public_api.mjs +0 -3
  882. package/esm2022/dom/cax-design-system-dom.mjs +0 -5
  883. package/esm2022/dom/connectedoverlayscrollhandler.mjs +0 -30
  884. package/esm2022/dom/domhandler.mjs +0 -722
  885. package/esm2022/dom/public_api.mjs +0 -3
  886. package/esm2022/dragdrop/cax-design-system-dragdrop.mjs +0 -5
  887. package/esm2022/dragdrop/dragdrop.mjs +0 -309
  888. package/esm2022/dragdrop/dragdrop.module.mjs +0 -18
  889. package/esm2022/dragdrop/public_api.mjs +0 -3
  890. package/esm2022/dropdown/cax-design-system-dropdown.mjs +0 -5
  891. package/esm2022/dropdown/dropdown-item.mjs +0 -72
  892. package/esm2022/dropdown/dropdown.interface.mjs +0 -2
  893. package/esm2022/dropdown/dropdown.mjs +0 -1599
  894. package/esm2022/dropdown/dropdown.module.mjs +0 -20
  895. package/esm2022/dropdown/public_api.mjs +0 -5
  896. package/esm2022/dynamicdialog/cax-design-system-dynamicdialog.mjs +0 -5
  897. package/esm2022/dynamicdialog/dialogservice.mjs +0 -102
  898. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +0 -187
  899. package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +0 -15
  900. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +0 -119
  901. package/esm2022/dynamicdialog/dynamicdialog.mjs +0 -696
  902. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +0 -20
  903. package/esm2022/dynamicdialog/public_api.mjs +0 -7
  904. package/esm2022/editor/cax-design-system-editor.mjs +0 -5
  905. package/esm2022/editor/editor.interface.mjs +0 -2
  906. package/esm2022/editor/editor.mjs +0 -281
  907. package/esm2022/editor/editor.module.mjs +0 -19
  908. package/esm2022/editor/public_api.mjs +0 -4
  909. package/esm2022/fieldset/cax-design-system-fieldset.mjs +0 -5
  910. package/esm2022/fieldset/fieldset.interface.mjs +0 -2
  911. package/esm2022/fieldset/fieldset.mjs +0 -297
  912. package/esm2022/fieldset/public_api.mjs +0 -3
  913. package/esm2022/fileupload/cax-design-system-fileupload.mjs +0 -5
  914. package/esm2022/fileupload/fileupload.interface.mjs +0 -2
  915. package/esm2022/fileupload/fileupload.mjs +0 -1188
  916. package/esm2022/fileupload/public_api.mjs +0 -3
  917. package/esm2022/floatlabel/cax-design-system-floatlabel.mjs +0 -5
  918. package/esm2022/floatlabel/floatlabel.mjs +0 -28
  919. package/esm2022/floatlabel/floatlabel.module.mjs +0 -20
  920. package/esm2022/floatlabel/public_api.mjs +0 -3
  921. package/esm2022/focustrap/cax-design-system-focustrap.mjs +0 -5
  922. package/esm2022/focustrap/focustrap.mjs +0 -103
  923. package/esm2022/focustrap/public_api.mjs +0 -2
  924. package/esm2022/galleria/cax-design-system-galleria.mjs +0 -5
  925. package/esm2022/galleria/galleria.interface.mjs +0 -2
  926. package/esm2022/galleria/galleria.mjs +0 -1668
  927. package/esm2022/galleria/public_api.mjs +0 -3
  928. package/esm2022/iconfield/cax-design-system-iconfield.mjs +0 -5
  929. package/esm2022/iconfield/iconfield.mjs +0 -44
  930. package/esm2022/iconfield/public_api.mjs +0 -2
  931. package/esm2022/icons/angledoubledown/angledoubledown.mjs +0 -35
  932. package/esm2022/icons/angledoubledown/cax-design-system-icons-angledoubledown.mjs +0 -5
  933. package/esm2022/icons/angledoubledown/public_api.mjs +0 -2
  934. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +0 -35
  935. package/esm2022/icons/angledoubleleft/cax-design-system-icons-angledoubleleft.mjs +0 -5
  936. package/esm2022/icons/angledoubleleft/public_api.mjs +0 -2
  937. package/esm2022/icons/angledoubleright/angledoubleright.mjs +0 -35
  938. package/esm2022/icons/angledoubleright/cax-design-system-icons-angledoubleright.mjs +0 -5
  939. package/esm2022/icons/angledoubleright/public_api.mjs +0 -2
  940. package/esm2022/icons/angledoubleup/angledoubleup.mjs +0 -35
  941. package/esm2022/icons/angledoubleup/cax-design-system-icons-angledoubleup.mjs +0 -5
  942. package/esm2022/icons/angledoubleup/public_api.mjs +0 -2
  943. package/esm2022/icons/angledown/angledown.mjs +0 -31
  944. package/esm2022/icons/angledown/cax-design-system-icons-angledown.mjs +0 -5
  945. package/esm2022/icons/angledown/public_api.mjs +0 -2
  946. package/esm2022/icons/angleleft/angleleft.mjs +0 -31
  947. package/esm2022/icons/angleleft/cax-design-system-icons-angleleft.mjs +0 -5
  948. package/esm2022/icons/angleleft/public_api.mjs +0 -2
  949. package/esm2022/icons/angleright/angleright.mjs +0 -31
  950. package/esm2022/icons/angleright/cax-design-system-icons-angleright.mjs +0 -5
  951. package/esm2022/icons/angleright/public_api.mjs +0 -2
  952. package/esm2022/icons/angleup/angleup.mjs +0 -31
  953. package/esm2022/icons/angleup/cax-design-system-icons-angleup.mjs +0 -5
  954. package/esm2022/icons/angleup/public_api.mjs +0 -2
  955. package/esm2022/icons/arrowdown/arrowdown.mjs +0 -54
  956. package/esm2022/icons/arrowdown/cax-design-system-icons-arrowdown.mjs +0 -5
  957. package/esm2022/icons/arrowdown/public_api.mjs +0 -2
  958. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +0 -31
  959. package/esm2022/icons/arrowdownleft/cax-design-system-icons-arrowdownleft.mjs +0 -5
  960. package/esm2022/icons/arrowdownleft/public_api.mjs +0 -2
  961. package/esm2022/icons/arrowdownright/arrowdownright.mjs +0 -31
  962. package/esm2022/icons/arrowdownright/cax-design-system-icons-arrowdownright.mjs +0 -5
  963. package/esm2022/icons/arrowdownright/public_api.mjs +0 -2
  964. package/esm2022/icons/arrowleft/arrowleft.mjs +0 -54
  965. package/esm2022/icons/arrowleft/cax-design-system-icons-arrowleft.mjs +0 -5
  966. package/esm2022/icons/arrowleft/public_api.mjs +0 -2
  967. package/esm2022/icons/arrowright/arrowright.mjs +0 -35
  968. package/esm2022/icons/arrowright/cax-design-system-icons-arrowright.mjs +0 -5
  969. package/esm2022/icons/arrowright/public_api.mjs +0 -2
  970. package/esm2022/icons/arrowup/arrowup.mjs +0 -54
  971. package/esm2022/icons/arrowup/cax-design-system-icons-arrowup.mjs +0 -5
  972. package/esm2022/icons/arrowup/public_api.mjs +0 -2
  973. package/esm2022/icons/ban/ban.mjs +0 -50
  974. package/esm2022/icons/ban/cax-design-system-icons-ban.mjs +0 -5
  975. package/esm2022/icons/ban/public_api.mjs +0 -2
  976. package/esm2022/icons/bars/bars.mjs +0 -35
  977. package/esm2022/icons/bars/cax-design-system-icons-bars.mjs +0 -5
  978. package/esm2022/icons/bars/public_api.mjs +0 -2
  979. package/esm2022/icons/blank/blank.mjs +0 -25
  980. package/esm2022/icons/blank/cax-design-system-icons-blank.mjs +0 -5
  981. package/esm2022/icons/blank/public_api.mjs +0 -2
  982. package/esm2022/icons/calendar/calendar.mjs +0 -31
  983. package/esm2022/icons/calendar/cax-design-system-icons-calendar.mjs +0 -5
  984. package/esm2022/icons/calendar/public_api.mjs +0 -2
  985. package/esm2022/icons/caretleft/caretleft.mjs +0 -31
  986. package/esm2022/icons/caretleft/cax-design-system-icons-caretleft.mjs +0 -5
  987. package/esm2022/icons/caretleft/public_api.mjs +0 -2
  988. package/esm2022/icons/caretright/caretright.mjs +0 -31
  989. package/esm2022/icons/caretright/cax-design-system-icons-caretright.mjs +0 -5
  990. package/esm2022/icons/caretright/public_api.mjs +0 -2
  991. package/esm2022/icons/check/cax-design-system-icons-check.mjs +0 -5
  992. package/esm2022/icons/check/check.mjs +0 -31
  993. package/esm2022/icons/check/public_api.mjs +0 -2
  994. package/esm2022/icons/chevrondown/cax-design-system-icons-chevrondown.mjs +0 -5
  995. package/esm2022/icons/chevrondown/chevrondown.mjs +0 -31
  996. package/esm2022/icons/chevrondown/public_api.mjs +0 -2
  997. package/esm2022/icons/chevronleft/cax-design-system-icons-chevronleft.mjs +0 -5
  998. package/esm2022/icons/chevronleft/chevronleft.mjs +0 -31
  999. package/esm2022/icons/chevronleft/public_api.mjs +0 -2
  1000. package/esm2022/icons/chevronright/cax-design-system-icons-chevronright.mjs +0 -5
  1001. package/esm2022/icons/chevronright/chevronright.mjs +0 -31
  1002. package/esm2022/icons/chevronright/public_api.mjs +0 -2
  1003. package/esm2022/icons/chevronup/cax-design-system-icons-chevronup.mjs +0 -5
  1004. package/esm2022/icons/chevronup/chevronup.mjs +0 -31
  1005. package/esm2022/icons/chevronup/public_api.mjs +0 -2
  1006. package/esm2022/icons/exclamationtriangle/cax-design-system-icons-exclamationtriangle.mjs +0 -5
  1007. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +0 -66
  1008. package/esm2022/icons/exclamationtriangle/public_api.mjs +0 -2
  1009. package/esm2022/icons/eye/cax-design-system-icons-eye.mjs +0 -5
  1010. package/esm2022/icons/eye/eye.mjs +0 -35
  1011. package/esm2022/icons/eye/public_api.mjs +0 -2
  1012. package/esm2022/icons/eyeslash/cax-design-system-icons-eyeslash.mjs +0 -5
  1013. package/esm2022/icons/eyeslash/eyeslash.mjs +0 -54
  1014. package/esm2022/icons/eyeslash/public_api.mjs +0 -2
  1015. package/esm2022/icons/filter/cax-design-system-icons-filter.mjs +0 -5
  1016. package/esm2022/icons/filter/filter.mjs +0 -50
  1017. package/esm2022/icons/filter/public_api.mjs +0 -2
  1018. package/esm2022/icons/filterslash/cax-design-system-icons-filterslash.mjs +0 -5
  1019. package/esm2022/icons/filterslash/filterslash.mjs +0 -54
  1020. package/esm2022/icons/filterslash/public_api.mjs +0 -2
  1021. package/esm2022/icons/home/cax-design-system-icons-home.mjs +0 -5
  1022. package/esm2022/icons/home/home.mjs +0 -54
  1023. package/esm2022/icons/home/public_api.mjs +0 -2
  1024. package/esm2022/icons/infocircle/cax-design-system-icons-infocircle.mjs +0 -5
  1025. package/esm2022/icons/infocircle/infocircle.mjs +0 -54
  1026. package/esm2022/icons/infocircle/public_api.mjs +0 -2
  1027. package/esm2022/icons/minus/cax-design-system-icons-minus.mjs +0 -5
  1028. package/esm2022/icons/minus/minus.mjs +0 -32
  1029. package/esm2022/icons/minus/public_api.mjs +0 -2
  1030. package/esm2022/icons/pencil/cax-design-system-icons-pencil.mjs +0 -5
  1031. package/esm2022/icons/pencil/pencil.mjs +0 -50
  1032. package/esm2022/icons/pencil/public_api.mjs +0 -2
  1033. package/esm2022/icons/plus/cax-design-system-icons-plus.mjs +0 -5
  1034. package/esm2022/icons/plus/plus.mjs +0 -50
  1035. package/esm2022/icons/plus/public_api.mjs +0 -2
  1036. package/esm2022/icons/refresh/cax-design-system-icons-refresh.mjs +0 -5
  1037. package/esm2022/icons/refresh/public_api.mjs +0 -2
  1038. package/esm2022/icons/refresh/refresh.mjs +0 -54
  1039. package/esm2022/icons/search/cax-design-system-icons-search.mjs +0 -5
  1040. package/esm2022/icons/search/public_api.mjs +0 -2
  1041. package/esm2022/icons/search/search.mjs +0 -54
  1042. package/esm2022/icons/searchminus/cax-design-system-icons-searchminus.mjs +0 -5
  1043. package/esm2022/icons/searchminus/public_api.mjs +0 -2
  1044. package/esm2022/icons/searchminus/searchminus.mjs +0 -54
  1045. package/esm2022/icons/searchplus/cax-design-system-icons-searchplus.mjs +0 -5
  1046. package/esm2022/icons/searchplus/public_api.mjs +0 -2
  1047. package/esm2022/icons/searchplus/searchplus.mjs +0 -54
  1048. package/esm2022/icons/sortalt/cax-design-system-icons-sortalt.mjs +0 -5
  1049. package/esm2022/icons/sortalt/public_api.mjs +0 -2
  1050. package/esm2022/icons/sortalt/sortalt.mjs +0 -62
  1051. package/esm2022/icons/sortamountdown/cax-design-system-icons-sortamountdown.mjs +0 -5
  1052. package/esm2022/icons/sortamountdown/public_api.mjs +0 -2
  1053. package/esm2022/icons/sortamountdown/sortamountdown.mjs +0 -50
  1054. package/esm2022/icons/sortamountupalt/cax-design-system-icons-sortamountupalt.mjs +0 -5
  1055. package/esm2022/icons/sortamountupalt/public_api.mjs +0 -2
  1056. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +0 -50
  1057. package/esm2022/icons/spinner/cax-design-system-icons-spinner.mjs +0 -5
  1058. package/esm2022/icons/spinner/public_api.mjs +0 -2
  1059. package/esm2022/icons/spinner/spinner.mjs +0 -50
  1060. package/esm2022/icons/star/cax-design-system-icons-star.mjs +0 -5
  1061. package/esm2022/icons/star/public_api.mjs +0 -2
  1062. package/esm2022/icons/star/star.mjs +0 -50
  1063. package/esm2022/icons/starfill/cax-design-system-icons-starfill.mjs +0 -5
  1064. package/esm2022/icons/starfill/public_api.mjs +0 -2
  1065. package/esm2022/icons/starfill/starfill.mjs +0 -50
  1066. package/esm2022/icons/thlarge/cax-design-system-icons-thlarge.mjs +0 -5
  1067. package/esm2022/icons/thlarge/public_api.mjs +0 -2
  1068. package/esm2022/icons/thlarge/thlarge.mjs +0 -54
  1069. package/esm2022/icons/times/cax-design-system-icons-times.mjs +0 -5
  1070. package/esm2022/icons/times/public_api.mjs +0 -2
  1071. package/esm2022/icons/times/times.mjs +0 -31
  1072. package/esm2022/icons/timescircle/cax-design-system-icons-timescircle.mjs +0 -5
  1073. package/esm2022/icons/timescircle/public_api.mjs +0 -2
  1074. package/esm2022/icons/timescircle/timescircle.mjs +0 -54
  1075. package/esm2022/icons/trash/cax-design-system-icons-trash.mjs +0 -5
  1076. package/esm2022/icons/trash/public_api.mjs +0 -2
  1077. package/esm2022/icons/trash/trash.mjs +0 -54
  1078. package/esm2022/icons/undo/cax-design-system-icons-undo.mjs +0 -5
  1079. package/esm2022/icons/undo/public_api.mjs +0 -2
  1080. package/esm2022/icons/undo/undo.mjs +0 -54
  1081. package/esm2022/icons/upload/cax-design-system-icons-upload.mjs +0 -5
  1082. package/esm2022/icons/upload/public_api.mjs +0 -2
  1083. package/esm2022/icons/upload/upload.mjs +0 -54
  1084. package/esm2022/icons/windowmaximize/cax-design-system-icons-windowmaximize.mjs +0 -5
  1085. package/esm2022/icons/windowmaximize/public_api.mjs +0 -2
  1086. package/esm2022/icons/windowmaximize/windowmaximize.mjs +0 -54
  1087. package/esm2022/icons/windowminimize/cax-design-system-icons-windowminimize.mjs +0 -5
  1088. package/esm2022/icons/windowminimize/public_api.mjs +0 -2
  1089. package/esm2022/icons/windowminimize/windowminimize.mjs +0 -54
  1090. package/esm2022/image/cax-design-system-image.mjs +0 -5
  1091. package/esm2022/image/image.interface.mjs +0 -2
  1092. package/esm2022/image/image.mjs +0 -418
  1093. package/esm2022/image/image.module.mjs +0 -17
  1094. package/esm2022/image/public_api.mjs +0 -4
  1095. package/esm2022/inplace/cax-design-system-inplace.mjs +0 -5
  1096. package/esm2022/inplace/inplace.interface.mjs +0 -2
  1097. package/esm2022/inplace/inplace.mjs +0 -243
  1098. package/esm2022/inplace/public_api.mjs +0 -3
  1099. package/esm2022/inputgroup/cax-design-system-inputgroup.mjs +0 -5
  1100. package/esm2022/inputgroup/inputgroup.mjs +0 -55
  1101. package/esm2022/inputgroup/inputgroup.module.mjs +0 -25
  1102. package/esm2022/inputgroup/public_api.mjs +0 -3
  1103. package/esm2022/inputgroupaddon/cax-design-system-inputgroupaddon.mjs +0 -5
  1104. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +0 -32
  1105. package/esm2022/inputgroupaddon/inputgroupaddon.module.mjs +0 -24
  1106. package/esm2022/inputgroupaddon/public_api.mjs +0 -3
  1107. package/esm2022/inputicon/cax-design-system-inputicon.mjs +0 -5
  1108. package/esm2022/inputicon/inputicon.mjs +0 -38
  1109. package/esm2022/inputicon/public_api.mjs +0 -2
  1110. package/esm2022/inputmask/cax-design-system-inputmask.mjs +0 -5
  1111. package/esm2022/inputmask/inputmask.interface.mjs +0 -2
  1112. package/esm2022/inputmask/inputmask.mjs +0 -848
  1113. package/esm2022/inputmask/inputmask.module.mjs +0 -22
  1114. package/esm2022/inputmask/public_api.mjs +0 -4
  1115. package/esm2022/inputnumber/cax-design-system-inputnumber.mjs +0 -5
  1116. package/esm2022/inputnumber/inputnumber.interface.mjs +0 -2
  1117. package/esm2022/inputnumber/inputnumber.mjs +0 -1296
  1118. package/esm2022/inputnumber/inputnumber.module.mjs +0 -17
  1119. package/esm2022/inputnumber/public_api.mjs +0 -4
  1120. package/esm2022/inputotp/cax-design-system-inputotp.mjs +0 -5
  1121. package/esm2022/inputotp/inputotp.interface.mjs +0 -2
  1122. package/esm2022/inputotp/inputotp.mjs +0 -381
  1123. package/esm2022/inputotp/public_api.mjs +0 -3
  1124. package/esm2022/inputswitch/cax-design-system-inputswitch.mjs +0 -5
  1125. package/esm2022/inputswitch/inputswitch.interface.mjs +0 -2
  1126. package/esm2022/inputswitch/inputswitch.mjs +0 -244
  1127. package/esm2022/inputswitch/public_api.mjs +0 -3
  1128. package/esm2022/inputtext/cax-design-system-inputtext.mjs +0 -5
  1129. package/esm2022/inputtext/inputtext.component.mjs +0 -132
  1130. package/esm2022/inputtext/inputtext.directive.mjs +0 -76
  1131. package/esm2022/inputtext/inputtext.module.mjs +0 -20
  1132. package/esm2022/inputtext/public_api.mjs +0 -4
  1133. package/esm2022/inputtextarea/cax-design-system-inputtextarea.mjs +0 -5
  1134. package/esm2022/inputtextarea/inputtextarea.component.mjs +0 -155
  1135. package/esm2022/inputtextarea/inputtextarea.directive.mjs +0 -121
  1136. package/esm2022/inputtextarea/inputtextarea.module.mjs +0 -20
  1137. package/esm2022/inputtextarea/public_api.mjs +0 -4
  1138. package/esm2022/keyfilter/cax-design-system-keyfilter.mjs +0 -5
  1139. package/esm2022/keyfilter/keyfilter.interface.mjs +0 -2
  1140. package/esm2022/keyfilter/keyfilter.mjs +0 -265
  1141. package/esm2022/keyfilter/public_api.mjs +0 -3
  1142. package/esm2022/knob/cax-design-system-knob.mjs +0 -5
  1143. package/esm2022/knob/knob.mjs +0 -464
  1144. package/esm2022/knob/public_api.mjs +0 -2
  1145. package/esm2022/listbox/cax-design-system-listbox.mjs +0 -5
  1146. package/esm2022/listbox/listbox.interface.mjs +0 -2
  1147. package/esm2022/listbox/listbox.mjs +0 -1555
  1148. package/esm2022/listbox/public_api.mjs +0 -3
  1149. package/esm2022/logo/cax-design-system-logo.mjs +0 -5
  1150. package/esm2022/logo/logo.mjs +0 -45
  1151. package/esm2022/logo/logo.module.mjs +0 -16
  1152. package/esm2022/logo/public_api.mjs +0 -3
  1153. package/esm2022/megamenu/cax-design-system-megamenu.mjs +0 -5
  1154. package/esm2022/megamenu/megamenu.interface.mjs +0 -2
  1155. package/esm2022/megamenu/megamenu.mjs +0 -1190
  1156. package/esm2022/megamenu/public_api.mjs +0 -3
  1157. package/esm2022/menu/cax-design-system-menu.mjs +0 -5
  1158. package/esm2022/menu/menu.mjs +0 -626
  1159. package/esm2022/menu/menu.module.mjs +0 -22
  1160. package/esm2022/menu/public_api.mjs +0 -3
  1161. package/esm2022/menubar/cax-design-system-menubar.mjs +0 -5
  1162. package/esm2022/menubar/menubar.interface.mjs +0 -2
  1163. package/esm2022/menubar/menubar.mjs +0 -1249
  1164. package/esm2022/menubar/public_api.mjs +0 -3
  1165. package/esm2022/message/cax-design-system-message.mjs +0 -5
  1166. package/esm2022/message/message.mjs +0 -112
  1167. package/esm2022/message/public_api.mjs +0 -2
  1168. package/esm2022/messages/cax-design-system-messages.mjs +0 -5
  1169. package/esm2022/messages/messages.interface.mjs +0 -2
  1170. package/esm2022/messages/messages.mjs +0 -283
  1171. package/esm2022/messages/messages.module.mjs +0 -17
  1172. package/esm2022/messages/public_api.mjs +0 -4
  1173. package/esm2022/metergroup/cax-design-system-metergroup.mjs +0 -5
  1174. package/esm2022/metergroup/metergroup.interface.mjs +0 -2
  1175. package/esm2022/metergroup/metergroup.mjs +0 -280
  1176. package/esm2022/metergroup/public_api.mjs +0 -3
  1177. package/esm2022/multiselect/cax-design-system-multiselect.mjs +0 -5
  1178. package/esm2022/multiselect/multiselect.interface.mjs +0 -2
  1179. package/esm2022/multiselect/multiselect.mjs +0 -1875
  1180. package/esm2022/multiselect/multiselect.module.mjs +0 -30
  1181. package/esm2022/multiselect/public_api.mjs +0 -4
  1182. package/esm2022/navigation/cax-design-system-navigation.mjs +0 -5
  1183. package/esm2022/navigation/navigation.interface.mjs +0 -2
  1184. package/esm2022/navigation/navigation.mjs +0 -399
  1185. package/esm2022/navigation/navigation.module.mjs +0 -16
  1186. package/esm2022/navigation/public_api.mjs +0 -3
  1187. package/esm2022/orderlist/cax-design-system-orderlist.mjs +0 -5
  1188. package/esm2022/orderlist/orderlist.interface.mjs +0 -2
  1189. package/esm2022/orderlist/orderlist.mjs +0 -993
  1190. package/esm2022/orderlist/public_api.mjs +0 -3
  1191. package/esm2022/organizationchart/cax-design-system-organizationchart.mjs +0 -5
  1192. package/esm2022/organizationchart/organizationchart.interface.mjs +0 -2
  1193. package/esm2022/organizationchart/organizationchart.mjs +0 -416
  1194. package/esm2022/organizationchart/public_api.mjs +0 -3
  1195. package/esm2022/overlay/cax-design-system-overlay.mjs +0 -5
  1196. package/esm2022/overlay/overlay.mjs +0 -579
  1197. package/esm2022/overlay/overlay.module.mjs +0 -17
  1198. package/esm2022/overlay/public_api.mjs +0 -3
  1199. package/esm2022/overlaypanel/cax-design-system-overlaypanel.mjs +0 -5
  1200. package/esm2022/overlaypanel/overlaypanel.mjs +0 -470
  1201. package/esm2022/overlaypanel/overlaypanel.module.mjs +0 -17
  1202. package/esm2022/overlaypanel/public_api.mjs +0 -3
  1203. package/esm2022/paginator/cax-design-system-paginator.mjs +0 -5
  1204. package/esm2022/paginator/paginator.interface.mjs +0 -2
  1205. package/esm2022/paginator/paginator.mjs +0 -437
  1206. package/esm2022/paginator/paginator.module.mjs +0 -27
  1207. package/esm2022/paginator/public_api.mjs +0 -4
  1208. package/esm2022/panel/cax-design-system-panel.mjs +0 -5
  1209. package/esm2022/panel/panel.interface.mjs +0 -2
  1210. package/esm2022/panel/panel.mjs +0 -393
  1211. package/esm2022/panel/public_api.mjs +0 -3
  1212. package/esm2022/panelmenu/cax-design-system-panelmenu.mjs +0 -5
  1213. package/esm2022/panelmenu/panelmenu.interface.mjs +0 -2
  1214. package/esm2022/panelmenu/panelmenu.mjs +0 -1276
  1215. package/esm2022/panelmenu/public_api.mjs +0 -3
  1216. package/esm2022/password/cax-design-system-password.mjs +0 -5
  1217. package/esm2022/password/password.mjs +0 -1017
  1218. package/esm2022/password/public_api.mjs +0 -2
  1219. package/esm2022/picklist/cax-design-system-picklist.mjs +0 -5
  1220. package/esm2022/picklist/picklist.interface.mjs +0 -2
  1221. package/esm2022/picklist/picklist.mjs +0 -1909
  1222. package/esm2022/picklist/public_api.mjs +0 -3
  1223. package/esm2022/progressbar/cax-design-system-progressbar.mjs +0 -5
  1224. package/esm2022/progressbar/progressbar.mjs +0 -86
  1225. package/esm2022/progressbar/progressbar.module.mjs +0 -18
  1226. package/esm2022/progressbar/public_api.mjs +0 -3
  1227. package/esm2022/progressspinner/cax-design-system-progressspinner.mjs +0 -5
  1228. package/esm2022/progressspinner/progressspinner.mjs +0 -112
  1229. package/esm2022/progressspinner/progressspinner.module.mjs +0 -18
  1230. package/esm2022/progressspinner/public_api.mjs +0 -3
  1231. package/esm2022/public_api.mjs +0 -2
  1232. package/esm2022/radiobutton/cax-design-system-radiobutton.mjs +0 -5
  1233. package/esm2022/radiobutton/public_api.mjs +0 -4
  1234. package/esm2022/radiobutton/radiobutton.interface.mjs +0 -2
  1235. package/esm2022/radiobutton/radiobutton.mjs +0 -284
  1236. package/esm2022/radiobutton/radiobutton.module.mjs +0 -16
  1237. package/esm2022/rating/cax-design-system-rating.mjs +0 -5
  1238. package/esm2022/rating/public_api.mjs +0 -3
  1239. package/esm2022/rating/rating.interface.mjs +0 -2
  1240. package/esm2022/rating/rating.mjs +0 -388
  1241. package/esm2022/ripple/cax-design-system-ripple.mjs +0 -5
  1242. package/esm2022/ripple/public_api.mjs +0 -3
  1243. package/esm2022/ripple/ripple.mjs +0 -129
  1244. package/esm2022/ripple/ripple.module.mjs +0 -16
  1245. package/esm2022/scroller/cax-design-system-scroller.mjs +0 -5
  1246. package/esm2022/scroller/public_api.mjs +0 -4
  1247. package/esm2022/scroller/scroller.interface.mjs +0 -2
  1248. package/esm2022/scroller/scroller.mjs +0 -981
  1249. package/esm2022/scroller/scroller.module.mjs +0 -17
  1250. package/esm2022/scrollpanel/cax-design-system-scrollpanel.mjs +0 -5
  1251. package/esm2022/scrollpanel/public_api.mjs +0 -3
  1252. package/esm2022/scrollpanel/scrollpanel.interface.mjs +0 -2
  1253. package/esm2022/scrollpanel/scrollpanel.mjs +0 -501
  1254. package/esm2022/scrolltop/cax-design-system-scrolltop.mjs +0 -5
  1255. package/esm2022/scrolltop/public_api.mjs +0 -3
  1256. package/esm2022/scrolltop/scrolltop.interface.mjs +0 -2
  1257. package/esm2022/scrolltop/scrolltop.mjs +0 -282
  1258. package/esm2022/selectbutton/cax-design-system-selectbutton.mjs +0 -5
  1259. package/esm2022/selectbutton/public_api.mjs +0 -4
  1260. package/esm2022/selectbutton/selectbutton.interface.mjs +0 -2
  1261. package/esm2022/selectbutton/selectbutton.mjs +0 -303
  1262. package/esm2022/selectbutton/selectbutton.module.mjs +0 -21
  1263. package/esm2022/sidebar/cax-design-system-sidebar.mjs +0 -5
  1264. package/esm2022/sidebar/public_api.mjs +0 -4
  1265. package/esm2022/sidebar/sidebar.interface.mjs +0 -2
  1266. package/esm2022/sidebar/sidebar.mjs +0 -488
  1267. package/esm2022/sidebar/sidebar.module.mjs +0 -21
  1268. package/esm2022/skeleton/cax-design-system-skeleton.mjs +0 -5
  1269. package/esm2022/skeleton/public_api.mjs +0 -3
  1270. package/esm2022/skeleton/skeleton.mjs +0 -87
  1271. package/esm2022/skeleton/skeleton.module.mjs +0 -18
  1272. package/esm2022/slidemenu/cax-design-system-slidemenu.mjs +0 -5
  1273. package/esm2022/slidemenu/public_api.mjs +0 -3
  1274. package/esm2022/slidemenu/slidemenu.interface.mjs +0 -2
  1275. package/esm2022/slidemenu/slidemenu.mjs +0 -1501
  1276. package/esm2022/slider/cax-design-system-slider.mjs +0 -5
  1277. package/esm2022/slider/public_api.mjs +0 -3
  1278. package/esm2022/slider/slider.interface.mjs +0 -2
  1279. package/esm2022/slider/slider.mjs +0 -796
  1280. package/esm2022/speeddial/cax-design-system-speeddial.mjs +0 -5
  1281. package/esm2022/speeddial/public_api.mjs +0 -4
  1282. package/esm2022/speeddial/speeddial.interface.mjs +0 -2
  1283. package/esm2022/speeddial/speeddial.mjs +0 -611
  1284. package/esm2022/speeddial/speeddial.module.mjs +0 -24
  1285. package/esm2022/spinner/cax-design-system-spinner.mjs +0 -5
  1286. package/esm2022/spinner/public_api.mjs +0 -2
  1287. package/esm2022/spinner/spinner.mjs +0 -447
  1288. package/esm2022/splitbutton/cax-design-system-splitbutton.mjs +0 -5
  1289. package/esm2022/splitbutton/public_api.mjs +0 -4
  1290. package/esm2022/splitbutton/splitbutton.interface.mjs +0 -2
  1291. package/esm2022/splitbutton/splitbutton.mjs +0 -369
  1292. package/esm2022/splitbutton/splitbutton.module.mjs +0 -23
  1293. package/esm2022/splitter/cax-design-system-splitter.mjs +0 -5
  1294. package/esm2022/splitter/public_api.mjs +0 -4
  1295. package/esm2022/splitter/splitter.interface.mjs +0 -2
  1296. package/esm2022/splitter/splitter.mjs +0 -490
  1297. package/esm2022/splitter/splitter.module.mjs +0 -19
  1298. package/esm2022/stepper/cax-design-system-stepper.mjs +0 -5
  1299. package/esm2022/stepper/public_api.mjs +0 -3
  1300. package/esm2022/stepper/stepper.interface.mjs +0 -2
  1301. package/esm2022/stepper/stepper.mjs +0 -677
  1302. package/esm2022/steps/cax-design-system-steps.mjs +0 -5
  1303. package/esm2022/steps/public_api.mjs +0 -3
  1304. package/esm2022/steps/steps.mjs +0 -207
  1305. package/esm2022/steps/steps.module.mjs +0 -20
  1306. package/esm2022/styleclass/cax-design-system-styleclass.mjs +0 -5
  1307. package/esm2022/styleclass/public_api.mjs +0 -2
  1308. package/esm2022/styleclass/styleclass.mjs +0 -316
  1309. package/esm2022/table/cax-design-system-table.mjs +0 -5
  1310. package/esm2022/table/columnfilter.interface.mjs +0 -2
  1311. package/esm2022/table/components/cell-editor/cell-editor.mjs +0 -52
  1312. package/esm2022/table/components/column-filter/column-filter.mjs +0 -865
  1313. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +0 -107
  1314. package/esm2022/table/components/sort-icon/sort-icon.mjs +0 -78
  1315. package/esm2022/table/components/table-body/table-body.mjs +0 -152
  1316. package/esm2022/table/components/table-checkbox/table-checkbox.mjs +0 -83
  1317. package/esm2022/table/components/table-header-checkbox/table-header-checkbox.mjs +0 -92
  1318. package/esm2022/table/components/table-radio-button/table-radio-button.mjs +0 -79
  1319. package/esm2022/table/directives/cancel-editable-row.directive.mjs +0 -32
  1320. package/esm2022/table/directives/cell-highlight.directive.mjs +0 -42
  1321. package/esm2022/table/directives/content-menu-row.directive.mjs +0 -70
  1322. package/esm2022/table/directives/dynamic-column-width.directive.mjs +0 -34
  1323. package/esm2022/table/directives/editable-column.directive.mjs +0 -344
  1324. package/esm2022/table/directives/editable-row.directive.mjs +0 -32
  1325. package/esm2022/table/directives/frozen-column.directive.mjs +0 -77
  1326. package/esm2022/table/directives/init-editable-row.directive.mjs +0 -32
  1327. package/esm2022/table/directives/reorderable-column.directive.mjs +0 -115
  1328. package/esm2022/table/directives/reorderable-row-handle.directive.mjs +0 -25
  1329. package/esm2022/table/directives/reorderable-row.directive.mjs +0 -122
  1330. package/esm2022/table/directives/resizable-column.directive.mjs +0 -123
  1331. package/esm2022/table/directives/row-group-header.directive.mjs +0 -26
  1332. package/esm2022/table/directives/row-toggler.directive.mjs +0 -42
  1333. package/esm2022/table/directives/save-editable-row.directive.mjs +0 -32
  1334. package/esm2022/table/directives/selectable-row-double-click.directive.mjs +0 -71
  1335. package/esm2022/table/directives/selectable-row.directive.mjs +0 -243
  1336. package/esm2022/table/directives/sortable-column.directive.mjs +0 -90
  1337. package/esm2022/table/public_api.mjs +0 -31
  1338. package/esm2022/table/table.interface.mjs +0 -2
  1339. package/esm2022/table/table.mjs +0 -2799
  1340. package/esm2022/table/table.module.mjs +0 -157
  1341. package/esm2022/table/table.service.mjs +0 -42
  1342. package/esm2022/tableconfiguration/cax-design-system-tableconfiguration.mjs +0 -5
  1343. package/esm2022/tableconfiguration/public_api.mjs +0 -3
  1344. package/esm2022/tableconfiguration/tableconfiguration.mjs +0 -60
  1345. package/esm2022/tableconfiguration/tableconfiguration.module.mjs +0 -16
  1346. package/esm2022/tabmenu/cax-design-system-tabmenu.mjs +0 -5
  1347. package/esm2022/tabmenu/public_api.mjs +0 -3
  1348. package/esm2022/tabmenu/tabmenu.interface.mjs +0 -2
  1349. package/esm2022/tabmenu/tabmenu.mjs +0 -576
  1350. package/esm2022/tabview/cax-design-system-tabview.mjs +0 -5
  1351. package/esm2022/tabview/public_api.mjs +0 -4
  1352. package/esm2022/tabview/tabview.interface.mjs +0 -2
  1353. package/esm2022/tabview/tabview.mjs +0 -913
  1354. package/esm2022/tabview/tabview.module.mjs +0 -25
  1355. package/esm2022/tag/cax-design-system-tag.mjs +0 -5
  1356. package/esm2022/tag/public_api.mjs +0 -4
  1357. package/esm2022/tag/tag.interface.mjs +0 -2
  1358. package/esm2022/tag/tag.mjs +0 -95
  1359. package/esm2022/tag/tag.module.mjs +0 -19
  1360. package/esm2022/terminal/cax-design-system-terminal.mjs +0 -5
  1361. package/esm2022/terminal/public_api.mjs +0 -3
  1362. package/esm2022/terminal/terminal.mjs +0 -143
  1363. package/esm2022/terminal/terminalservice.mjs +0 -25
  1364. package/esm2022/tieredmenu/cax-design-system-tieredmenu.mjs +0 -5
  1365. package/esm2022/tieredmenu/public_api.mjs +0 -4
  1366. package/esm2022/tieredmenu/tieredmenu.interface.mjs +0 -2
  1367. package/esm2022/tieredmenu/tieredmenu.mjs +0 -1289
  1368. package/esm2022/tieredmenu/tiredmenu.module.mjs +0 -23
  1369. package/esm2022/timeline/cax-design-system-timeline.mjs +0 -5
  1370. package/esm2022/timeline/public_api.mjs +0 -4
  1371. package/esm2022/timeline/timeline.interface.mjs +0 -2
  1372. package/esm2022/timeline/timeline.mjs +0 -83
  1373. package/esm2022/timeline/timeline.module.mjs +0 -19
  1374. package/esm2022/toast/cax-design-system-toast.mjs +0 -5
  1375. package/esm2022/toast/public_api.mjs +0 -4
  1376. package/esm2022/toast/toast.interface.mjs +0 -2
  1377. package/esm2022/toast/toast.mjs +0 -324
  1378. package/esm2022/toast/toast.module.mjs +0 -18
  1379. package/esm2022/toast/toastitem.mjs +0 -170
  1380. package/esm2022/togglebutton/cax-design-system-togglebutton.mjs +0 -5
  1381. package/esm2022/togglebutton/public_api.mjs +0 -3
  1382. package/esm2022/togglebutton/togglebutton.interface.mjs +0 -2
  1383. package/esm2022/togglebutton/togglebutton.mjs +0 -274
  1384. package/esm2022/toggleswitch/cax-design-system-toggleswitch.mjs +0 -5
  1385. package/esm2022/toggleswitch/public_api.mjs +0 -3
  1386. package/esm2022/toggleswitch/toggleswitch.mjs +0 -37
  1387. package/esm2022/toggleswitch/toggleswitch.module.mjs +0 -19
  1388. package/esm2022/toolbar/cax-design-system-toolbar.mjs +0 -5
  1389. package/esm2022/toolbar/public_api.mjs +0 -3
  1390. package/esm2022/toolbar/toolbar.interface.mjs +0 -2
  1391. package/esm2022/toolbar/toolbar.mjs +0 -111
  1392. package/esm2022/tooltip/cax-design-system-tooltip.mjs +0 -5
  1393. package/esm2022/tooltip/public_api.mjs +0 -3
  1394. package/esm2022/tooltip/tooltip.mjs +0 -889
  1395. package/esm2022/tooltip/tooltip.module.mjs +0 -20
  1396. package/esm2022/tree/cax-design-system-tree.mjs +0 -5
  1397. package/esm2022/tree/public_api.mjs +0 -4
  1398. package/esm2022/tree/tree.interface.mjs +0 -2
  1399. package/esm2022/tree/tree.mjs +0 -1544
  1400. package/esm2022/tree/tree.module.mjs +0 -31
  1401. package/esm2022/treeselect/cax-design-system-treeselect.mjs +0 -5
  1402. package/esm2022/treeselect/public_api.mjs +0 -4
  1403. package/esm2022/treeselect/treeselect.interface.mjs +0 -2
  1404. package/esm2022/treeselect/treeselect.mjs +0 -865
  1405. package/esm2022/treeselect/treeselect.module.mjs +0 -26
  1406. package/esm2022/treetable/cax-design-system-treetable.mjs +0 -5
  1407. package/esm2022/treetable/public_api.mjs +0 -3
  1408. package/esm2022/treetable/treetable.interface.mjs +0 -2
  1409. package/esm2022/treetable/treetable.mjs +0 -4111
  1410. package/esm2022/tristatecheckbox/cax-design-system-tristatecheckbox.mjs +0 -5
  1411. package/esm2022/tristatecheckbox/public_api.mjs +0 -4
  1412. package/esm2022/tristatecheckbox/tristatecheckbox.interface.mjs +0 -2
  1413. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +0 -215
  1414. package/esm2022/tristatecheckbox/tristatecheckbox.module.mjs +0 -17
  1415. package/esm2022/ts-helpers/cax-design-system-ts-helpers.mjs +0 -5
  1416. package/esm2022/ts-helpers/public_api.mjs +0 -2
  1417. package/esm2022/ts-helpers/ts-helpers.mjs +0 -2
  1418. package/esm2022/upload/cax-design-system-upload.mjs +0 -5
  1419. package/esm2022/upload/public_api.mjs +0 -3
  1420. package/esm2022/upload/upload.component.mjs +0 -367
  1421. package/esm2022/upload/upload.component.module.mjs +0 -21
  1422. package/esm2022/utils/cax-design-system-utils.mjs +0 -5
  1423. package/esm2022/utils/objectutils.mjs +0 -258
  1424. package/esm2022/utils/public_api.mjs +0 -5
  1425. package/esm2022/utils/uniquecomponentid.mjs +0 -6
  1426. package/esm2022/utils/zindexutils.mjs +0 -35
  1427. package/esm2022/virtualscroller/cax-design-system-virtualscroller.mjs +0 -5
  1428. package/esm2022/virtualscroller/public_api.mjs +0 -3
  1429. package/esm2022/virtualscroller/virtualscroller.interface.mjs +0 -2
  1430. package/esm2022/virtualscroller/virtualscroller.mjs +0 -215
  1431. package/fieldset/fieldset.d.ts +0 -93
  1432. package/fieldset/fieldset.interface.d.ts +0 -46
  1433. package/fieldset/public_api.d.ts +0 -2
  1434. package/fileupload/fileupload.d.ts +0 -380
  1435. package/fileupload/fileupload.interface.d.ts +0 -226
  1436. package/fileupload/public_api.d.ts +0 -2
  1437. package/floatlabel/floatlabel.d.ts +0 -9
  1438. package/floatlabel/floatlabel.module.d.ts +0 -10
  1439. package/floatlabel/public_api.d.ts +0 -2
  1440. package/focustrap/focustrap.d.ts +0 -34
  1441. package/focustrap/public_api.d.ts +0 -1
  1442. package/galleria/galleria.d.ts +0 -404
  1443. package/galleria/galleria.interface.d.ts +0 -97
  1444. package/galleria/public_api.d.ts +0 -2
  1445. package/iconfield/iconfield.d.ts +0 -25
  1446. package/iconfield/public_api.d.ts +0 -1
  1447. package/icons/angledoubledown/angledoubledown.d.ts +0 -6
  1448. package/icons/angledoubledown/public_api.d.ts +0 -1
  1449. package/icons/angledoubleleft/angledoubleleft.d.ts +0 -6
  1450. package/icons/angledoubleleft/public_api.d.ts +0 -1
  1451. package/icons/angledoubleright/angledoubleright.d.ts +0 -6
  1452. package/icons/angledoubleright/public_api.d.ts +0 -1
  1453. package/icons/angledoubleup/angledoubleup.d.ts +0 -6
  1454. package/icons/angledoubleup/public_api.d.ts +0 -1
  1455. package/icons/angledown/angledown.d.ts +0 -6
  1456. package/icons/angledown/public_api.d.ts +0 -1
  1457. package/icons/angleleft/angleleft.d.ts +0 -6
  1458. package/icons/angleleft/public_api.d.ts +0 -1
  1459. package/icons/angleright/angleright.d.ts +0 -6
  1460. package/icons/angleright/public_api.d.ts +0 -1
  1461. package/icons/angleup/angleup.d.ts +0 -6
  1462. package/icons/angleup/public_api.d.ts +0 -1
  1463. package/icons/arrowdown/arrowdown.d.ts +0 -9
  1464. package/icons/arrowdown/public_api.d.ts +0 -1
  1465. package/icons/arrowdownleft/arrowdownleft.d.ts +0 -6
  1466. package/icons/arrowdownleft/public_api.d.ts +0 -1
  1467. package/icons/arrowdownright/arrowdownright.d.ts +0 -6
  1468. package/icons/arrowdownright/public_api.d.ts +0 -1
  1469. package/icons/arrowleft/arrowleft.d.ts +0 -8
  1470. package/icons/arrowleft/public_api.d.ts +0 -1
  1471. package/icons/arrowright/arrowright.d.ts +0 -6
  1472. package/icons/arrowright/public_api.d.ts +0 -1
  1473. package/icons/arrowup/arrowup.d.ts +0 -8
  1474. package/icons/arrowup/public_api.d.ts +0 -1
  1475. package/icons/ban/ban.d.ts +0 -8
  1476. package/icons/ban/public_api.d.ts +0 -1
  1477. package/icons/bars/bars.d.ts +0 -6
  1478. package/icons/bars/public_api.d.ts +0 -1
  1479. package/icons/blank/blank.d.ts +0 -6
  1480. package/icons/blank/public_api.d.ts +0 -1
  1481. package/icons/calendar/calendar.d.ts +0 -6
  1482. package/icons/calendar/public_api.d.ts +0 -1
  1483. package/icons/caretleft/caretleft.d.ts +0 -6
  1484. package/icons/caretleft/public_api.d.ts +0 -1
  1485. package/icons/caretright/caretright.d.ts +0 -6
  1486. package/icons/caretright/public_api.d.ts +0 -1
  1487. package/icons/check/check.d.ts +0 -6
  1488. package/icons/check/public_api.d.ts +0 -1
  1489. package/icons/chevrondown/chevrondown.d.ts +0 -6
  1490. package/icons/chevrondown/public_api.d.ts +0 -1
  1491. package/icons/chevronleft/chevronleft.d.ts +0 -6
  1492. package/icons/chevronleft/public_api.d.ts +0 -1
  1493. package/icons/chevronright/chevronright.d.ts +0 -6
  1494. package/icons/chevronright/public_api.d.ts +0 -1
  1495. package/icons/chevronup/chevronup.d.ts +0 -6
  1496. package/icons/chevronup/public_api.d.ts +0 -1
  1497. package/icons/exclamationtriangle/exclamationtriangle.d.ts +0 -9
  1498. package/icons/exclamationtriangle/public_api.d.ts +0 -1
  1499. package/icons/eye/eye.d.ts +0 -6
  1500. package/icons/eye/public_api.d.ts +0 -1
  1501. package/icons/eyeslash/eyeslash.d.ts +0 -8
  1502. package/icons/eyeslash/public_api.d.ts +0 -1
  1503. package/icons/filter/filter.d.ts +0 -8
  1504. package/icons/filter/public_api.d.ts +0 -1
  1505. package/icons/filterslash/filterslash.d.ts +0 -8
  1506. package/icons/filterslash/public_api.d.ts +0 -1
  1507. package/icons/home/home.d.ts +0 -8
  1508. package/icons/home/public_api.d.ts +0 -1
  1509. package/icons/infocircle/infocircle.d.ts +0 -8
  1510. package/icons/infocircle/public_api.d.ts +0 -1
  1511. package/icons/minus/minus.d.ts +0 -6
  1512. package/icons/minus/public_api.d.ts +0 -1
  1513. package/icons/pencil/pencil.d.ts +0 -8
  1514. package/icons/pencil/public_api.d.ts +0 -1
  1515. package/icons/plus/plus.d.ts +0 -8
  1516. package/icons/plus/public_api.d.ts +0 -1
  1517. package/icons/refresh/public_api.d.ts +0 -1
  1518. package/icons/refresh/refresh.d.ts +0 -8
  1519. package/icons/search/public_api.d.ts +0 -1
  1520. package/icons/search/search.d.ts +0 -8
  1521. package/icons/searchminus/public_api.d.ts +0 -1
  1522. package/icons/searchminus/searchminus.d.ts +0 -8
  1523. package/icons/searchplus/public_api.d.ts +0 -1
  1524. package/icons/searchplus/searchplus.d.ts +0 -8
  1525. package/icons/sortalt/public_api.d.ts +0 -1
  1526. package/icons/sortalt/sortalt.d.ts +0 -8
  1527. package/icons/sortamountdown/public_api.d.ts +0 -1
  1528. package/icons/sortamountdown/sortamountdown.d.ts +0 -8
  1529. package/icons/sortamountupalt/public_api.d.ts +0 -1
  1530. package/icons/sortamountupalt/sortamountupalt.d.ts +0 -8
  1531. package/icons/spinner/public_api.d.ts +0 -1
  1532. package/icons/spinner/spinner.d.ts +0 -8
  1533. package/icons/star/public_api.d.ts +0 -1
  1534. package/icons/star/star.d.ts +0 -8
  1535. package/icons/starfill/public_api.d.ts +0 -1
  1536. package/icons/starfill/starfill.d.ts +0 -8
  1537. package/icons/thlarge/public_api.d.ts +0 -1
  1538. package/icons/thlarge/thlarge.d.ts +0 -8
  1539. package/icons/times/public_api.d.ts +0 -1
  1540. package/icons/times/times.d.ts +0 -6
  1541. package/icons/timescircle/public_api.d.ts +0 -1
  1542. package/icons/timescircle/timescircle.d.ts +0 -8
  1543. package/icons/trash/public_api.d.ts +0 -1
  1544. package/icons/trash/trash.d.ts +0 -8
  1545. package/icons/undo/public_api.d.ts +0 -1
  1546. package/icons/undo/undo.d.ts +0 -8
  1547. package/icons/upload/public_api.d.ts +0 -1
  1548. package/icons/upload/upload.d.ts +0 -8
  1549. package/icons/windowmaximize/public_api.d.ts +0 -1
  1550. package/icons/windowmaximize/windowmaximize.d.ts +0 -8
  1551. package/icons/windowminimize/public_api.d.ts +0 -1
  1552. package/icons/windowminimize/windowminimize.d.ts +0 -8
  1553. package/image/image.d.ts +0 -188
  1554. package/image/image.interface.d.ts +0 -31
  1555. package/image/image.module.d.ts +0 -8
  1556. package/image/public_api.d.ts +0 -3
  1557. package/inplace/inplace.d.ts +0 -109
  1558. package/inplace/inplace.interface.d.ts +0 -19
  1559. package/inplace/public_api.d.ts +0 -2
  1560. package/inputgroup/inputgroup.d.ts +0 -33
  1561. package/inputgroup/inputgroup.module.d.ts +0 -15
  1562. package/inputgroup/public_api.d.ts +0 -2
  1563. package/inputgroupaddon/inputgroupaddon.d.ts +0 -21
  1564. package/inputgroupaddon/inputgroupaddon.module.d.ts +0 -14
  1565. package/inputgroupaddon/public_api.d.ts +0 -2
  1566. package/inputicon/inputicon.d.ts +0 -21
  1567. package/inputicon/public_api.d.ts +0 -1
  1568. package/inputmask/inputmask.d.ts +0 -273
  1569. package/inputmask/inputmask.interface.d.ts +0 -19
  1570. package/inputmask/inputmask.module.d.ts +0 -12
  1571. package/inputmask/public_api.d.ts +0 -3
  1572. package/inputnumber/inputnumber.d.ts +0 -397
  1573. package/inputnumber/inputnumber.interface.d.ts +0 -38
  1574. package/inputnumber/inputnumber.module.d.ts +0 -8
  1575. package/inputnumber/public_api.d.ts +0 -3
  1576. package/inputotp/inputotp.d.ts +0 -123
  1577. package/inputotp/inputotp.interface.d.ts +0 -65
  1578. package/inputotp/public_api.d.ts +0 -2
  1579. package/inputswitch/inputswitch.d.ts +0 -106
  1580. package/inputswitch/inputswitch.interface.d.ts +0 -15
  1581. package/inputswitch/public_api.d.ts +0 -2
  1582. package/inputtext/inputtext.component.d.ts +0 -43
  1583. package/inputtext/inputtext.directive.d.ts +0 -25
  1584. package/inputtext/inputtext.module.d.ts +0 -10
  1585. package/inputtext/public_api.d.ts +0 -3
  1586. package/inputtextarea/inputtextarea.component.d.ts +0 -57
  1587. package/inputtextarea/inputtextarea.directive.d.ts +0 -47
  1588. package/inputtextarea/inputtextarea.module.d.ts +0 -10
  1589. package/inputtextarea/public_api.d.ts +0 -3
  1590. package/keyfilter/keyfilter.d.ts +0 -58
  1591. package/keyfilter/keyfilter.interface.d.ts +0 -5
  1592. package/keyfilter/public_api.d.ts +0 -2
  1593. package/knob/knob.d.ts +0 -178
  1594. package/knob/public_api.d.ts +0 -1
  1595. package/listbox/listbox.d.ts +0 -463
  1596. package/listbox/listbox.interface.d.ts +0 -156
  1597. package/listbox/public_api.d.ts +0 -2
  1598. package/logo/logo.d.ts +0 -11
  1599. package/logo/logo.module.d.ts +0 -7
  1600. package/logo/public_api.d.ts +0 -2
  1601. package/megamenu/megamenu.d.ts +0 -198
  1602. package/megamenu/megamenu.interface.d.ts +0 -31
  1603. package/megamenu/public_api.d.ts +0 -2
  1604. package/menu/menu.d.ts +0 -210
  1605. package/menu/menu.module.d.ts +0 -12
  1606. package/menu/public_api.d.ts +0 -2
  1607. package/menubar/menubar.d.ts +0 -248
  1608. package/menubar/menubar.interface.d.ts +0 -40
  1609. package/menubar/public_api.d.ts +0 -2
  1610. package/message/message.d.ts +0 -52
  1611. package/message/public_api.d.ts +0 -1
  1612. package/messages/messages.d.ts +0 -115
  1613. package/messages/messages.interface.d.ts +0 -18
  1614. package/messages/messages.module.d.ts +0 -8
  1615. package/messages/public_api.d.ts +0 -3
  1616. package/metergroup/metergroup.d.ts +0 -101
  1617. package/metergroup/metergroup.interface.d.ts +0 -122
  1618. package/metergroup/public_api.d.ts +0 -2
  1619. package/multiselect/multiselect.d.ts +0 -710
  1620. package/multiselect/multiselect.interface.d.ts +0 -247
  1621. package/multiselect/multiselect.module.d.ts +0 -20
  1622. package/multiselect/public_api.d.ts +0 -3
  1623. package/navigation/navigation.d.ts +0 -70
  1624. package/navigation/navigation.interface.d.ts +0 -26
  1625. package/navigation/navigation.module.d.ts +0 -7
  1626. package/navigation/public_api.d.ts +0 -2
  1627. package/orderlist/orderlist.d.ts +0 -270
  1628. package/orderlist/orderlist.interface.d.ts +0 -110
  1629. package/orderlist/public_api.d.ts +0 -2
  1630. package/organizationchart/organizationchart.d.ts +0 -132
  1631. package/organizationchart/organizationchart.interface.d.ts +0 -59
  1632. package/organizationchart/public_api.d.ts +0 -2
  1633. package/overlay/overlay.d.ts +0 -238
  1634. package/overlay/overlay.module.d.ts +0 -8
  1635. package/overlay/public_api.d.ts +0 -2
  1636. package/overlaypanel/overlaypanel.d.ts +0 -162
  1637. package/overlaypanel/overlaypanel.module.d.ts +0 -8
  1638. package/overlaypanel/public_api.d.ts +0 -2
  1639. package/paginator/paginator.d.ts +0 -195
  1640. package/paginator/paginator.interface.d.ts +0 -37
  1641. package/paginator/paginator.module.d.ts +0 -17
  1642. package/paginator/public_api.d.ts +0 -3
  1643. package/panel/panel.d.ts +0 -126
  1644. package/panel/panel.interface.d.ts +0 -58
  1645. package/panel/public_api.d.ts +0 -2
  1646. package/panelmenu/panelmenu.d.ts +0 -225
  1647. package/panelmenu/panelmenu.interface.d.ts +0 -23
  1648. package/panelmenu/public_api.d.ts +0 -2
  1649. package/password/password.d.ts +0 -342
  1650. package/password/public_api.d.ts +0 -1
  1651. package/picklist/picklist.d.ts +0 -453
  1652. package/picklist/picklist.interface.d.ts +0 -242
  1653. package/picklist/public_api.d.ts +0 -2
  1654. package/progressbar/progressbar.d.ts +0 -54
  1655. package/progressbar/progressbar.module.d.ts +0 -8
  1656. package/progressbar/public_api.d.ts +0 -2
  1657. package/progressspinner/progressspinner.d.ts +0 -50
  1658. package/progressspinner/progressspinner.module.d.ts +0 -8
  1659. package/progressspinner/public_api.d.ts +0 -2
  1660. package/public_api.d.ts +0 -2
  1661. package/radiobutton/public_api.d.ts +0 -3
  1662. package/radiobutton/radiobutton.d.ts +0 -150
  1663. package/radiobutton/radiobutton.interface.d.ts +0 -15
  1664. package/radiobutton/radiobutton.module.d.ts +0 -7
  1665. package/rating/public_api.d.ts +0 -2
  1666. package/rating/rating.d.ts +0 -146
  1667. package/rating/rating.interface.d.ts +0 -34
  1668. package/ripple/public_api.d.ts +0 -2
  1669. package/ripple/ripple.d.ts +0 -30
  1670. package/ripple/ripple.module.d.ts +0 -7
  1671. package/scroller/public_api.d.ts +0 -3
  1672. package/scroller/scroller.d.ts +0 -343
  1673. package/scroller/scroller.interface.d.ts +0 -177
  1674. package/scroller/scroller.module.d.ts +0 -8
  1675. package/scrollpanel/public_api.d.ts +0 -2
  1676. package/scrollpanel/scrollpanel.d.ts +0 -103
  1677. package/scrollpanel/scrollpanel.interface.d.ts +0 -11
  1678. package/scrolltop/public_api.d.ts +0 -2
  1679. package/scrolltop/scrolltop.d.ts +0 -97
  1680. package/scrolltop/scrolltop.interface.d.ts +0 -18
  1681. package/selectbutton/public_api.d.ts +0 -3
  1682. package/selectbutton/selectbutton.d.ts +0 -128
  1683. package/selectbutton/selectbutton.interface.d.ts +0 -45
  1684. package/selectbutton/selectbutton.module.d.ts +0 -11
  1685. package/sidebar/public_api.d.ts +0 -3
  1686. package/sidebar/sidebar.d.ts +0 -173
  1687. package/sidebar/sidebar.interface.d.ts +0 -27
  1688. package/sidebar/sidebar.module.d.ts +0 -12
  1689. package/skeleton/public_api.d.ts +0 -2
  1690. package/skeleton/skeleton.d.ts +0 -61
  1691. package/skeleton/skeleton.module.d.ts +0 -8
  1692. package/slidemenu/public_api.d.ts +0 -2
  1693. package/slidemenu/slidemenu.d.ts +0 -322
  1694. package/slidemenu/slidemenu.interface.d.ts +0 -15
  1695. package/slider/public_api.d.ts +0 -2
  1696. package/slider/slider.d.ts +0 -174
  1697. package/slider/slider.interface.d.ts +0 -38
  1698. package/speeddial/public_api.d.ts +0 -3
  1699. package/speeddial/speeddial.d.ts +0 -277
  1700. package/speeddial/speeddial.interface.d.ts +0 -28
  1701. package/speeddial/speeddial.module.d.ts +0 -14
  1702. package/spinner/public_api.d.ts +0 -1
  1703. package/spinner/spinner.d.ts +0 -90
  1704. package/splitbutton/public_api.d.ts +0 -3
  1705. package/splitbutton/splitbutton.d.ts +0 -222
  1706. package/splitbutton/splitbutton.interface.d.ts +0 -30
  1707. package/splitbutton/splitbutton.module.d.ts +0 -13
  1708. package/splitter/public_api.d.ts +0 -3
  1709. package/splitter/splitter.d.ts +0 -158
  1710. package/splitter/splitter.interface.d.ts +0 -34
  1711. package/splitter/splitter.module.d.ts +0 -9
  1712. package/stepper/public_api.d.ts +0 -2
  1713. package/stepper/stepper.d.ts +0 -117
  1714. package/stepper/stepper.interface.d.ts +0 -26
  1715. package/steps/public_api.d.ts +0 -2
  1716. package/steps/steps.d.ts +0 -77
  1717. package/steps/steps.module.d.ts +0 -10
  1718. package/styleclass/public_api.d.ts +0 -1
  1719. package/styleclass/styleclass.d.ts +0 -108
  1720. package/table/columnfilter.interface.d.ts +0 -247
  1721. package/table/components/cell-editor/cell-editor.d.ts +0 -20
  1722. package/table/components/column-filter/column-filter.d.ts +0 -291
  1723. package/table/components/column-filter-form-element/column-filter-form-element.d.ts +0 -37
  1724. package/table/components/sort-icon/sort-icon.d.ts +0 -22
  1725. package/table/components/table-body/table-body.d.ts +0 -36
  1726. package/table/components/table-checkbox/table-checkbox.d.ts +0 -32
  1727. package/table/components/table-header-checkbox/table-header-checkbox.d.ts +0 -29
  1728. package/table/components/table-radio-button/table-radio-button.d.ts +0 -29
  1729. package/table/directives/cancel-editable-row.directive.d.ts +0 -11
  1730. package/table/directives/cell-highlight.directive.d.ts +0 -14
  1731. package/table/directives/content-menu-row.directive.d.ts +0 -22
  1732. package/table/directives/dynamic-column-width.directive.d.ts +0 -12
  1733. package/table/directives/editable-column.directive.d.ts +0 -40
  1734. package/table/directives/editable-row.directive.d.ts +0 -12
  1735. package/table/directives/frozen-column.directive.d.ts +0 -16
  1736. package/table/directives/init-editable-row.directive.d.ts +0 -11
  1737. package/table/directives/reorderable-column.directive.d.ts +0 -32
  1738. package/table/directives/reorderable-row-handle.directive.d.ts +0 -9
  1739. package/table/directives/reorderable-row.directive.d.ts +0 -34
  1740. package/table/directives/resizable-column.directive.d.ts +0 -35
  1741. package/table/directives/row-group-header.directive.d.ts +0 -9
  1742. package/table/directives/row-toggler.directive.d.ts +0 -13
  1743. package/table/directives/save-editable-row.directive.d.ts +0 -11
  1744. package/table/directives/selectable-row-double-click.directive.d.ts +0 -22
  1745. package/table/directives/selectable-row.directive.d.ts +0 -37
  1746. package/table/directives/sortable-column.directive.d.ts +0 -24
  1747. package/table/public_api.d.ts +0 -30
  1748. package/table/table.d.ts +0 -871
  1749. package/table/table.interface.d.ts +0 -623
  1750. package/table/table.module.d.ts +0 -34
  1751. package/table/table.service.d.ts +0 -24
  1752. package/tableconfiguration/public_api.d.ts +0 -2
  1753. package/tableconfiguration/tableconfiguration.d.ts +0 -15
  1754. package/tableconfiguration/tableconfiguration.module.d.ts +0 -7
  1755. package/tabmenu/public_api.d.ts +0 -2
  1756. package/tabmenu/tabmenu.d.ts +0 -126
  1757. package/tabmenu/tabmenu.interface.d.ts +0 -32
  1758. package/tabview/public_api.d.ts +0 -3
  1759. package/tabview/tabview.d.ts +0 -293
  1760. package/tabview/tabview.interface.d.ts +0 -49
  1761. package/tabview/tabview.module.d.ts +0 -15
  1762. package/tag/public_api.d.ts +0 -3
  1763. package/tag/tag.d.ts +0 -61
  1764. package/tag/tag.interface.d.ts +0 -11
  1765. package/tag/tag.module.d.ts +0 -9
  1766. package/terminal/public_api.d.ts +0 -2
  1767. package/terminal/terminal.d.ts +0 -56
  1768. package/terminal/terminalservice.d.ts +0 -11
  1769. package/tieredmenu/public_api.d.ts +0 -3
  1770. package/tieredmenu/tieredmenu.d.ts +0 -266
  1771. package/tieredmenu/tieredmenu.interface.d.ts +0 -27
  1772. package/tieredmenu/tiredmenu.module.d.ts +0 -13
  1773. package/timeline/public_api.d.ts +0 -3
  1774. package/timeline/timeline.d.ts +0 -47
  1775. package/timeline/timeline.interface.d.ts +0 -43
  1776. package/timeline/timeline.module.d.ts +0 -9
  1777. package/toast/public_api.d.ts +0 -3
  1778. package/toast/toast.d.ts +0 -142
  1779. package/toast/toast.interface.d.ts +0 -52
  1780. package/toast/toast.module.d.ts +0 -9
  1781. package/toast/toastitem.d.ts +0 -37
  1782. package/togglebutton/public_api.d.ts +0 -2
  1783. package/togglebutton/togglebutton.d.ts +0 -115
  1784. package/togglebutton/togglebutton.interface.d.ts +0 -34
  1785. package/toggleswitch/public_api.d.ts +0 -2
  1786. package/toggleswitch/toggleswitch.d.ts +0 -14
  1787. package/toggleswitch/toggleswitch.module.d.ts +0 -9
  1788. package/toolbar/public_api.d.ts +0 -2
  1789. package/toolbar/toolbar.d.ts +0 -43
  1790. package/toolbar/toolbar.interface.d.ts +0 -19
  1791. package/tooltip/public_api.d.ts +0 -2
  1792. package/tooltip/tooltip.d.ts +0 -208
  1793. package/tooltip/tooltip.module.d.ts +0 -10
  1794. package/tree/public_api.d.ts +0 -3
  1795. package/tree/tree.d.ts +0 -461
  1796. package/tree/tree.interface.d.ts +0 -193
  1797. package/tree/tree.module.d.ts +0 -21
  1798. package/treeselect/public_api.d.ts +0 -3
  1799. package/treeselect/treeselect.d.ts +0 -394
  1800. package/treeselect/treeselect.interface.d.ts +0 -108
  1801. package/treeselect/treeselect.module.d.ts +0 -16
  1802. package/treetable/public_api.d.ts +0 -2
  1803. package/treetable/treetable.d.ts +0 -988
  1804. package/treetable/treetable.interface.d.ts +0 -472
  1805. package/tristatecheckbox/public_api.d.ts +0 -3
  1806. package/tristatecheckbox/tristatecheckbox.d.ts +0 -117
  1807. package/tristatecheckbox/tristatecheckbox.interface.d.ts +0 -30
  1808. package/tristatecheckbox/tristatecheckbox.module.d.ts +0 -8
  1809. package/ts-helpers/public_api.d.ts +0 -1
  1810. package/ts-helpers/ts-helpers.d.ts +0 -4
  1811. package/upload/public_api.d.ts +0 -2
  1812. package/upload/upload.component.d.ts +0 -67
  1813. package/upload/upload.component.module.d.ts +0 -11
  1814. package/utils/objectutils.d.ts +0 -24
  1815. package/utils/public_api.d.ts +0 -4
  1816. package/utils/uniquecomponentid.d.ts +0 -2
  1817. package/utils/zindexutils.d.ts +0 -7
  1818. package/virtualscroller/public_api.d.ts +0 -2
  1819. package/virtualscroller/virtualscroller.d.ts +0 -89
  1820. package/virtualscroller/virtualscroller.interface.d.ts +0 -72
@@ -1,1544 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Inject, Input, numberAttribute, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { CaxTemplate, TranslationKeys } from 'cax-design-system/api';
3
- import { DomHandler } from 'cax-design-system/dom';
4
- import { ObjectUtils } from 'cax-design-system/utils';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "cax-design-system/ripple";
8
- import * as i3 from "cax-design-system/icons/check";
9
- import * as i4 from "cax-design-system/icons/chevrondown";
10
- import * as i5 from "cax-design-system/icons/chevronright";
11
- import * as i6 from "cax-design-system/icons/minus";
12
- import * as i7 from "cax-design-system/icons/spinner";
13
- import * as i8 from "cax-design-system/icons/plus";
14
- import * as i9 from "cax-design-system/badge";
15
- import * as i10 from "cax-design-system/button";
16
- import * as i11 from "cax-design-system/skeleton";
17
- import * as i12 from "cax-design-system/api";
18
- import * as i13 from "cax-design-system/scroller";
19
- import * as i14 from "cax-design-system/icons/search";
20
- export class UITreeNode {
21
- static ICON_CLASS = 'cax-treenode-icon ';
22
- rightIcon = false;
23
- rowNode;
24
- node;
25
- parentNode;
26
- nodeActionButton;
27
- actionButtonMode = 'hover';
28
- root;
29
- index;
30
- firstChild;
31
- lastChild;
32
- level;
33
- indentation;
34
- itemSize;
35
- loadingMode;
36
- onNodeActionClick = new EventEmitter();
37
- tree;
38
- timeout;
39
- draghoverPrev;
40
- draghoverNext;
41
- draghoverNode;
42
- get ariaSelected() {
43
- return this.tree.selectionMode === 'single' || this.tree.selectionMode === 'multiple' ? this.isSelected() : undefined;
44
- }
45
- get ariaChecked() {
46
- return this.tree.selectionMode === 'checkbox' ? this.isSelected() : undefined;
47
- }
48
- constructor(tree) {
49
- this.tree = tree;
50
- }
51
- ngOnInit() {
52
- this.node.parent = this.parentNode;
53
- const nativeElement = this.tree.el.nativeElement;
54
- const pDialogWrapper = nativeElement.closest('cax-dialog');
55
- if (this.parentNode && !pDialogWrapper) {
56
- this.setAllNodesTabIndexes();
57
- this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
58
- }
59
- }
60
- getIcon() {
61
- let icon;
62
- if (this.node.icon)
63
- icon = this.node.icon;
64
- else
65
- icon = this.node.expanded && this.node.children && this.node.children?.length ? this.node.expandedIcon : this.node.collapsedIcon;
66
- return UITreeNode.ICON_CLASS + ' ' + icon;
67
- }
68
- getRightIcon() {
69
- let icon;
70
- if (this.node.rightIcon)
71
- icon = this.node.rightIcon;
72
- else
73
- icon = this.node.expanded && this.node.children && this.node.children?.length ? this.node.expandedIcon : this.node.collapsedIcon;
74
- return UITreeNode.ICON_CLASS + ' ' + icon;
75
- }
76
- onNodeAction(event, node) {
77
- this.onNodeActionClick.emit({ originalEvent: event, node: node });
78
- }
79
- isLeaf() {
80
- return this.tree.isNodeLeaf(this.node);
81
- }
82
- toggle(event) {
83
- if (this.node.expanded)
84
- this.collapse(event);
85
- else
86
- this.expand(event);
87
- event.stopPropagation();
88
- }
89
- expand(event) {
90
- this.node.expanded = true;
91
- if (this.tree.virtualScroll) {
92
- this.tree.updateSerializedValue();
93
- this.focusVirtualNode();
94
- }
95
- this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
96
- }
97
- collapse(event) {
98
- this.node.expanded = false;
99
- if (this.tree.virtualScroll) {
100
- this.tree.updateSerializedValue();
101
- this.focusVirtualNode();
102
- }
103
- this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
104
- }
105
- onNodeClick(event) {
106
- this.tree.onNodeClick(event, this.node);
107
- }
108
- onNodeKeydown(event) {
109
- if (event.key === 'Enter') {
110
- this.tree.onNodeClick(event, this.node);
111
- }
112
- }
113
- onNodeTouchEnd() {
114
- this.tree.onNodeTouchEnd();
115
- }
116
- onNodeRightClick(event) {
117
- this.tree.onNodeRightClick(event, this.node);
118
- }
119
- isSelected() {
120
- return this.tree.isSelected(this.node);
121
- }
122
- isSameNode(event) {
123
- return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role="treeitem"]')));
124
- }
125
- onDropPoint(event, position) {
126
- event.preventDefault();
127
- let dragNode = this.tree.dragNode;
128
- let dragNodeIndex = this.tree.dragNodeIndex;
129
- let dragNodeScope = this.tree.dragNodeScope;
130
- let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? position === 1 || dragNodeIndex !== this.index - 1 : true;
131
- if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
132
- let dropParams = { ...this.createDropPointEventMetadata(position) };
133
- if (this.tree.validateDrop) {
134
- this.tree.onNodeDrop.emit({
135
- originalEvent: event,
136
- dragNode: dragNode,
137
- dropNode: this.node,
138
- index: this.index,
139
- accept: () => {
140
- this.processPointDrop(dropParams);
141
- }
142
- });
143
- }
144
- else {
145
- this.processPointDrop(dropParams);
146
- this.tree.onNodeDrop.emit({
147
- originalEvent: event,
148
- dragNode: dragNode,
149
- dropNode: this.node,
150
- index: this.index
151
- });
152
- }
153
- }
154
- this.draghoverPrev = false;
155
- this.draghoverNext = false;
156
- }
157
- processPointDrop(event) {
158
- let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
159
- event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
160
- let dropIndex = this.index;
161
- if (event.position < 0) {
162
- dropIndex = event.dragNodeSubNodes === newNodeList ? (event.dragNodeIndex > event.index ? event.index : event.index - 1) : event.index;
163
- newNodeList.splice(dropIndex, 0, event.dragNode);
164
- }
165
- else {
166
- dropIndex = newNodeList.length;
167
- newNodeList.push(event.dragNode);
168
- }
169
- this.tree.dragDropService.stopDrag({
170
- node: event.dragNode,
171
- subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
172
- index: event.dragNodeIndex
173
- });
174
- }
175
- createDropPointEventMetadata(position) {
176
- return {
177
- dragNode: this.tree.dragNode,
178
- dragNodeIndex: this.tree.dragNodeIndex,
179
- dragNodeSubNodes: this.tree.dragNodeSubNodes,
180
- dropNode: this.node,
181
- index: this.index,
182
- position: position
183
- };
184
- }
185
- onDropPointDragOver(event) {
186
- event.dataTransfer.dropEffect = 'move';
187
- event.preventDefault();
188
- }
189
- onDropPointDragEnter(event, position) {
190
- if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
191
- if (position < 0)
192
- this.draghoverPrev = true;
193
- else
194
- this.draghoverNext = true;
195
- }
196
- }
197
- onDropPointDragLeave(event) {
198
- this.draghoverPrev = false;
199
- this.draghoverNext = false;
200
- }
201
- onDragStart(event) {
202
- if (this.tree.draggableNodes && this.node.draggable !== false) {
203
- event.dataTransfer.setData('text', 'data');
204
- this.tree.dragDropService.startDrag({
205
- tree: this,
206
- node: this.node,
207
- subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
208
- index: this.index,
209
- scope: this.tree.draggableScope
210
- });
211
- }
212
- else {
213
- event.preventDefault();
214
- }
215
- }
216
- onDragStop(event) {
217
- this.tree.dragDropService.stopDrag({
218
- node: this.node,
219
- subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
220
- index: this.index
221
- });
222
- }
223
- onDropNodeDragOver(event) {
224
- event.dataTransfer.dropEffect = 'move';
225
- if (this.tree.droppableNodes) {
226
- event.preventDefault();
227
- event.stopPropagation();
228
- }
229
- }
230
- onDropNode(event) {
231
- if (this.tree.droppableNodes && this.node?.droppable !== false) {
232
- let dragNode = this.tree.dragNode;
233
- if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
234
- let dropParams = { ...this.createDropNodeEventMetadata() };
235
- if (this.tree.validateDrop) {
236
- this.tree.onNodeDrop.emit({
237
- originalEvent: event,
238
- dragNode: dragNode,
239
- dropNode: this.node,
240
- index: this.index,
241
- accept: () => {
242
- this.processNodeDrop(dropParams);
243
- }
244
- });
245
- }
246
- else {
247
- this.processNodeDrop(dropParams);
248
- this.tree.onNodeDrop.emit({
249
- originalEvent: event,
250
- dragNode: dragNode,
251
- dropNode: this.node,
252
- index: this.index
253
- });
254
- }
255
- }
256
- }
257
- event.preventDefault();
258
- event.stopPropagation();
259
- this.draghoverNode = false;
260
- }
261
- createDropNodeEventMetadata() {
262
- return {
263
- dragNode: this.tree.dragNode,
264
- dragNodeIndex: this.tree.dragNodeIndex,
265
- dragNodeSubNodes: this.tree.dragNodeSubNodes,
266
- dropNode: this.node
267
- };
268
- }
269
- processNodeDrop(event) {
270
- let dragNodeIndex = event.dragNodeIndex;
271
- event.dragNodeSubNodes.splice(dragNodeIndex, 1);
272
- if (event.dropNode.children)
273
- event.dropNode.children.push(event.dragNode);
274
- else
275
- event.dropNode.children = [event.dragNode];
276
- this.tree.dragDropService.stopDrag({
277
- node: event.dragNode,
278
- subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
279
- index: dragNodeIndex
280
- });
281
- }
282
- onDropNodeDragEnter(event) {
283
- if (this.tree.droppableNodes && this.node?.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
284
- this.draghoverNode = true;
285
- }
286
- }
287
- onDropNodeDragLeave(event) {
288
- if (this.tree.droppableNodes) {
289
- let rect = event.currentTarget.getBoundingClientRect();
290
- if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
291
- this.draghoverNode = false;
292
- }
293
- }
294
- }
295
- onKeyDown(event) {
296
- if (!this.isSameNode(event) || (this.tree.contextMenu && this.tree.contextMenu.containerViewChild?.nativeElement.style.display === 'block')) {
297
- return;
298
- }
299
- switch (event.code) {
300
- //down arrow
301
- case 'ArrowDown':
302
- this.onArrowDown(event);
303
- break;
304
- //up arrow
305
- case 'ArrowUp':
306
- this.onArrowUp(event);
307
- break;
308
- //right arrow
309
- case 'ArrowRight':
310
- this.onArrowRight(event);
311
- break;
312
- //left arrow
313
- case 'ArrowLeft':
314
- this.onArrowLeft(event);
315
- break;
316
- //enter
317
- case 'Enter':
318
- case 'NumpadEnter':
319
- this.onEnter(event);
320
- break;
321
- //space
322
- case 'Space':
323
- const nodeName = event.target instanceof HTMLElement && event.target.nodeName;
324
- if (!['INPUT'].includes(nodeName)) {
325
- this.onEnter(event);
326
- }
327
- break;
328
- //tab
329
- case 'Tab':
330
- this.setAllNodesTabIndexes();
331
- break;
332
- default:
333
- //no op
334
- break;
335
- }
336
- }
337
- onArrowUp(event) {
338
- const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target.parentElement;
339
- if (nodeElement.previousElementSibling) {
340
- this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));
341
- }
342
- else {
343
- let parentNodeElement = this.getParentNodeElement(nodeElement);
344
- if (parentNodeElement) {
345
- this.focusRowChange(nodeElement, parentNodeElement);
346
- }
347
- }
348
- event.preventDefault();
349
- }
350
- onArrowDown(event) {
351
- const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
352
- const listElement = nodeElement.children[1];
353
- if (listElement && listElement.children.length > 0) {
354
- this.focusRowChange(nodeElement, listElement.children[0]);
355
- }
356
- else {
357
- if (nodeElement.parentElement.nextElementSibling) {
358
- this.focusRowChange(nodeElement, nodeElement.parentElement.nextElementSibling);
359
- }
360
- else {
361
- let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement.parentElement);
362
- if (nextSiblingAncestor) {
363
- this.focusRowChange(nodeElement, nextSiblingAncestor);
364
- }
365
- }
366
- }
367
- event.preventDefault();
368
- }
369
- onArrowRight(event) {
370
- if (!this.node?.expanded && !this.tree.isNodeLeaf(this.node)) {
371
- this.expand(event);
372
- event.currentTarget.tabIndex = -1;
373
- setTimeout(() => {
374
- this.onArrowDown(event);
375
- }, 1);
376
- }
377
- event.preventDefault();
378
- }
379
- onArrowLeft(event) {
380
- const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
381
- if (this.level === 0 && !this.node?.expanded) {
382
- return false;
383
- }
384
- if (this.node?.expanded) {
385
- this.collapse(event);
386
- return;
387
- }
388
- let parentNodeElement = this.getParentNodeElement(nodeElement.parentElement);
389
- if (parentNodeElement) {
390
- this.focusRowChange(event.currentTarget, parentNodeElement);
391
- }
392
- event.preventDefault();
393
- }
394
- isActionableElement(event) {
395
- const target = event.target;
396
- const isActionable = target instanceof HTMLElement && (target.nodeName == 'A' || target.nodeName == 'BUTTON');
397
- return isActionable;
398
- }
399
- onEnter(event) {
400
- this.tree.onNodeClick(event, this.node);
401
- this.setTabIndexForSelectionMode(event, this.tree.nodeTouched);
402
- if (!this.isActionableElement(event)) {
403
- event.preventDefault();
404
- }
405
- }
406
- setAllNodesTabIndexes() {
407
- const nodes = DomHandler.find(this.tree.el.nativeElement, '.cax-treenode');
408
- const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
409
- [...nodes].forEach((node) => {
410
- node.tabIndex = -1;
411
- });
412
- if (hasSelectedNode) {
413
- const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
414
- selectedNodes[0].tabIndex = 0;
415
- return;
416
- }
417
- [...nodes][0].tabIndex = 0;
418
- }
419
- setTabIndexForSelectionMode(event, nodeTouched) {
420
- if (this.tree.selectionMode !== null) {
421
- const elements = [...DomHandler.find(this.tree.el.nativeElement, '.cax-treenode')];
422
- event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;
423
- if (elements.every((element) => element.tabIndex === -1)) {
424
- elements[0].tabIndex = 0;
425
- }
426
- }
427
- }
428
- findNextSiblingOfAncestor(nodeElement) {
429
- let parentNodeElement = this.getParentNodeElement(nodeElement);
430
- if (parentNodeElement) {
431
- if (parentNodeElement.nextElementSibling)
432
- return parentNodeElement.nextElementSibling;
433
- else
434
- return this.findNextSiblingOfAncestor(parentNodeElement);
435
- }
436
- else {
437
- return null;
438
- }
439
- }
440
- findLastVisibleDescendant(nodeElement) {
441
- const listElement = Array.from(nodeElement.children).find((el) => DomHandler.hasClass(el, 'cax-treenode'));
442
- const childrenListElement = listElement.children[1];
443
- if (childrenListElement && childrenListElement.children.length > 0) {
444
- const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
445
- return this.findLastVisibleDescendant(lastChildElement);
446
- }
447
- else {
448
- return nodeElement;
449
- }
450
- }
451
- getParentNodeElement(nodeElement) {
452
- const parentNodeElement = nodeElement.parentElement?.parentElement?.parentElement;
453
- return parentNodeElement?.tagName === 'P-TREENODE' ? parentNodeElement : null;
454
- }
455
- focusNode(element) {
456
- if (this.tree.droppableNodes)
457
- element.children[1].focus();
458
- else
459
- element.children[0].focus();
460
- }
461
- focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {
462
- firstFocusableRow.tabIndex = '-1';
463
- currentFocusedRow.children[0].tabIndex = '0';
464
- this.focusNode(lastVisibleDescendant || currentFocusedRow);
465
- }
466
- focusVirtualNode() {
467
- this.timeout = setTimeout(() => {
468
- let node = DomHandler.findSingle(document.body, `[data-id="${this.node?.key ?? this.node?.data}"]`);
469
- DomHandler.focus(node);
470
- }, 1);
471
- }
472
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UITreeNode, deps: [{ token: forwardRef(() => Tree) }], target: i0.ɵɵFactoryTarget.Component });
473
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: UITreeNode, selector: "cax-treeNode", inputs: { rightIcon: "rightIcon", rowNode: "rowNode", node: "node", parentNode: "parentNode", nodeActionButton: "nodeActionButton", actionButtonMode: "actionButtonMode", root: ["root", "root", booleanAttribute], index: ["index", "index", numberAttribute], firstChild: ["firstChild", "firstChild", booleanAttribute], lastChild: ["lastChild", "lastChild", booleanAttribute], level: ["level", "level", numberAttribute], indentation: ["indentation", "indentation", numberAttribute], itemSize: ["itemSize", "itemSize", numberAttribute], loadingMode: "loadingMode" }, outputs: { onNodeActionClick: "onNodeActionClick" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-template [ngIf]=\"node\">\n <li\n *ngIf=\"tree.droppableNodes\"\n class=\"cax-treenode-droppoint\"\n [attr.aria-hidden]=\"true\"\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverPrev }\"\n (drop)=\"onDropPoint($event, -1)\"\n (dragover)=\"onDropPointDragOver($event)\"\n (dragenter)=\"onDropPointDragEnter($event, -1)\"\n (dragleave)=\"onDropPointDragLeave($event)\"\n ></li>\n <cax-skeleton *ngIf=\"node.loading\" width=\"100%\" height=\"48px\" borderRadius=\"12px\" />\n <li\n *ngIf=\"!tree.horizontal && !node.loading\"\n [ngClass]=\"['cax-treenode', node.styleClass || '', isLeaf() ? 'cax-treenode-leaf' : '']\"\n [ngStyle]=\"{ height: itemSize + 'px' }\"\n [style]=\"node.style\"\n [attr.aria-label]=\"node.label\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-setsize]=\"node.children ? node.children.length : 0\"\n [attr.aria-selected]=\"ariaSelected\"\n [attr.aria-expanded]=\"node.expanded\"\n [attr.aria-posinset]=\"index + 1\"\n [attr.aria-level]=\"level + 1\"\n [attr.tabindex]=\"index === 0 ? 0 : -1\"\n [attr.data-id]=\"node.key\"\n role=\"treeitem\"\n (keydown)=\"onKeyDown($event)\"\n >\n <div\n class=\"cax-treenode-content\"\n [ngStyle]=\"{\n 'padding-left': level * indentation + 'rem'\n }\"\n (click)=\"onNodeClick($event)\"\n (contextmenu)=\"onNodeRightClick($event)\"\n (touchend)=\"onNodeTouchEnd()\"\n (drop)=\"onDropNode($event)\"\n (dragover)=\"onDropNodeDragOver($event)\"\n (dragenter)=\"onDropNodeDragEnter($event)\"\n (dragleave)=\"onDropNodeDragLeave($event)\"\n [draggable]=\"tree.draggableNodes\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragStop($event)\"\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode && node.selectable !== false, 'cax-treenode-dragover': draghoverNode, 'cax-highlight': isSelected() }\"\n >\n <button *ngIf=\"!node.leaf\" [disabled]=\"isLeaf()\" type=\"button\" [attr.data-pc-section]=\"'toggler'\" class=\"cax-tree-toggler cax-link\" (click)=\"toggle($event)\" caxRipple tabindex=\"-1\">\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\n <ng-container *ngIf=\"!node.loading\">\n <ChevronRightIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\n <ChevronDownIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\n </ng-container>\n <ng-container *ngIf=\"loadingMode === 'icon' && node.loading\">\n <SpinnerIcon [spin]=\"true\" [styleClass]=\"'cax-tree-node-toggler-icon'\" />\n </ng-container>\n </ng-container>\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\n </span>\n </button>\n <div\n class=\"cax-checkbox cax-component\"\n [ngClass]=\"{ 'cax-checkbox-disabled cax-disabled': node.selectable === false, 'cax-variant-filled': tree?.config.inputStyle() === 'filled' }\"\n *ngIf=\"tree.selectionMode == 'checkbox'\"\n aria-hidden=\"true\"\n >\n <div class=\"cax-checkbox-box\" [ngClass]=\"{ 'cax-highlight': isSelected(), 'cax-indeterminate': node.partialSelected }\" role=\"checkbox\">\n <ng-container *ngIf=\"!tree.checkboxIconTemplate\">\n <CheckIcon *ngIf=\"!node.partialSelected && isSelected()\" [styleClass]=\"'cax-checkbox-icon'\" />\n <MinusIcon *ngIf=\"node.partialSelected\" [styleClass]=\"'cax-checkbox-icon'\" />\n </ng-container>\n <ng-template *ngTemplateOutlet=\"tree.checkboxIconTemplate; context: { $implicit: isSelected(), partialSelected: node.partialSelected }\"></ng-template>\n </div>\n </div>\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n <span class=\"cax-treenode-label\">\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n <span *ngIf=\"tree.getTemplateForNode(node)\">\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n </span>\n </span>\n <span style=\"margin-left: 0.5rem\" [class]=\"getRightIcon()\" *ngIf=\"(node.rightIcon || node.expandedIcon || node.collapsedIcon)\"></span>\n <div class=\"cax-tree-action-container\">\n <span class=\"cax-tree-badge\" *ngIf=\"node.badge > -1\">\n <cax-badge [severity]=\"'secondary'\" [value]=\"node.badge\"></cax-badge>\n </span>\n <cax-button\n *ngIf=\"!node.hideActionButton && nodeActionButton?.length\"\n class=\"cax-tree-button\"\n [ngClass]=\"{'cax-tree-button-hover': actionButtonMode === 'hover', 'cax-tree-button-select': actionButtonMode === 'select'}\"\n [label]=\"nodeActionButton\"\n [severity]=\"'primary'\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"onNodeAction($event, node)\"\n ></cax-button>\n </div>\n </div>\n <ul\n class=\"cax-treenode-children\"\n [ngStyle]=\"{\n display: node.expanded ? 'block' : 'none'\n }\"\n *ngIf=\"!tree.virtualScroll && node.children && node.expanded\"\n role=\"group\"\n >\n <cax-treeNode\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy\"\n [node]=\"childNode\"\n [parentNode]=\"node\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [index]=\"index\"\n [itemSize]=\"itemSize\"\n [level]=\"level + 1\"\n [loadingMode]=\"loadingMode\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n (onNodeActionClick)=\"onNodeAction($event, childNode)\"\n ></cax-treeNode>\n </ul>\n </li>\n\n <li\n *ngIf=\"tree.droppableNodes && lastChild\"\n class=\"cax-treenode-droppoint\"\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverNext }\"\n (drop)=\"onDropPoint($event, 1)\"\n [attr.aria-hidden]=\"true\"\n (dragover)=\"onDropPointDragOver($event)\"\n (dragenter)=\"onDropPointDragEnter($event, 1)\"\n (dragleave)=\"onDropPointDragLeave($event)\"\n ></li>\n\n <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\n <tbody>\n <tr>\n <td class=\"cax-treenode-connector\" *ngIf=\"!root\">\n <table class=\"cax-treenode-connector-table\">\n <tbody>\n <tr>\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !firstChild }\"></td>\n </tr>\n <tr>\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !lastChild }\"></td>\n </tr>\n </tbody>\n </table>\n </td>\n <td class=\"cax-treenode\" [ngClass]=\"{ 'cax-treenode-collapsed': !node.expanded }\">\n <div\n class=\"cax-treenode-content\"\n tabindex=\"0\"\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode, 'cax-highlight': isSelected() }\"\n (click)=\"onNodeClick($event)\"\n (contextmenu)=\"onNodeRightClick($event)\"\n (touchend)=\"onNodeTouchEnd()\"\n (keydown)=\"onNodeKeydown($event)\"\n >\n <span *ngIf=\"!isLeaf()\" [ngClass]=\"'cax-tree-toggler'\" (click)=\"toggle($event)\">\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\n <PlusIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\n <MinusIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\n </ng-container>\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\n </span>\n </span>\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n <span class=\"cax-treenode-label\">\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n <span *ngIf=\"tree.getTemplateForNode(node)\">\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n </span>\n </span>\n </div>\n </td>\n <td\n class=\"cax-treenode-children-container\"\n *ngIf=\"node.children && node.expanded\"\n [ngStyle]=\"{\n display: node.expanded ? 'table-cell' : 'none'\n }\"\n >\n <div class=\"cax-treenode-children\">\n <cax-treeNode\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; trackBy: tree.trackBy\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [node]=\"childNode\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n (onNodeActionClick)=\"onNodeAction($event, childNode)\"\n ></cax-treeNode>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.Ripple, selector: "[caxRipple]" }, { kind: "component", type: i3.CheckIcon, selector: "CheckIcon" }, { kind: "component", type: i4.ChevronDownIcon, selector: "ChevronDownIcon" }, { kind: "component", type: i5.ChevronRightIcon, selector: "ChevronRightIcon" }, { kind: "component", type: i6.MinusIcon, selector: "MinusIcon" }, { kind: "component", type: i7.SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: i8.PlusIcon, selector: "PlusIcon" }, { kind: "component", type: i9.Badge, selector: "cax-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "component", type: i10.Button, selector: "cax-button", inputs: ["type", "iconPos", "icon", "badge", "rightIcon", "leftIcon", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i11.Skeleton, selector: "cax-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: UITreeNode, selector: "cax-treeNode", inputs: ["rightIcon", "rowNode", "node", "parentNode", "nodeActionButton", "actionButtonMode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"], outputs: ["onNodeActionClick"] }], encapsulation: i0.ViewEncapsulation.None });
474
- }
475
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UITreeNode, decorators: [{
476
- type: Component,
477
- args: [{ selector: 'cax-treeNode', encapsulation: ViewEncapsulation.None, host: {
478
- class: 'cax-element'
479
- }, template: "<ng-template [ngIf]=\"node\">\n <li\n *ngIf=\"tree.droppableNodes\"\n class=\"cax-treenode-droppoint\"\n [attr.aria-hidden]=\"true\"\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverPrev }\"\n (drop)=\"onDropPoint($event, -1)\"\n (dragover)=\"onDropPointDragOver($event)\"\n (dragenter)=\"onDropPointDragEnter($event, -1)\"\n (dragleave)=\"onDropPointDragLeave($event)\"\n ></li>\n <cax-skeleton *ngIf=\"node.loading\" width=\"100%\" height=\"48px\" borderRadius=\"12px\" />\n <li\n *ngIf=\"!tree.horizontal && !node.loading\"\n [ngClass]=\"['cax-treenode', node.styleClass || '', isLeaf() ? 'cax-treenode-leaf' : '']\"\n [ngStyle]=\"{ height: itemSize + 'px' }\"\n [style]=\"node.style\"\n [attr.aria-label]=\"node.label\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-setsize]=\"node.children ? node.children.length : 0\"\n [attr.aria-selected]=\"ariaSelected\"\n [attr.aria-expanded]=\"node.expanded\"\n [attr.aria-posinset]=\"index + 1\"\n [attr.aria-level]=\"level + 1\"\n [attr.tabindex]=\"index === 0 ? 0 : -1\"\n [attr.data-id]=\"node.key\"\n role=\"treeitem\"\n (keydown)=\"onKeyDown($event)\"\n >\n <div\n class=\"cax-treenode-content\"\n [ngStyle]=\"{\n 'padding-left': level * indentation + 'rem'\n }\"\n (click)=\"onNodeClick($event)\"\n (contextmenu)=\"onNodeRightClick($event)\"\n (touchend)=\"onNodeTouchEnd()\"\n (drop)=\"onDropNode($event)\"\n (dragover)=\"onDropNodeDragOver($event)\"\n (dragenter)=\"onDropNodeDragEnter($event)\"\n (dragleave)=\"onDropNodeDragLeave($event)\"\n [draggable]=\"tree.draggableNodes\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragStop($event)\"\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode && node.selectable !== false, 'cax-treenode-dragover': draghoverNode, 'cax-highlight': isSelected() }\"\n >\n <button *ngIf=\"!node.leaf\" [disabled]=\"isLeaf()\" type=\"button\" [attr.data-pc-section]=\"'toggler'\" class=\"cax-tree-toggler cax-link\" (click)=\"toggle($event)\" caxRipple tabindex=\"-1\">\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\n <ng-container *ngIf=\"!node.loading\">\n <ChevronRightIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\n <ChevronDownIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\n </ng-container>\n <ng-container *ngIf=\"loadingMode === 'icon' && node.loading\">\n <SpinnerIcon [spin]=\"true\" [styleClass]=\"'cax-tree-node-toggler-icon'\" />\n </ng-container>\n </ng-container>\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\n </span>\n </button>\n <div\n class=\"cax-checkbox cax-component\"\n [ngClass]=\"{ 'cax-checkbox-disabled cax-disabled': node.selectable === false, 'cax-variant-filled': tree?.config.inputStyle() === 'filled' }\"\n *ngIf=\"tree.selectionMode == 'checkbox'\"\n aria-hidden=\"true\"\n >\n <div class=\"cax-checkbox-box\" [ngClass]=\"{ 'cax-highlight': isSelected(), 'cax-indeterminate': node.partialSelected }\" role=\"checkbox\">\n <ng-container *ngIf=\"!tree.checkboxIconTemplate\">\n <CheckIcon *ngIf=\"!node.partialSelected && isSelected()\" [styleClass]=\"'cax-checkbox-icon'\" />\n <MinusIcon *ngIf=\"node.partialSelected\" [styleClass]=\"'cax-checkbox-icon'\" />\n </ng-container>\n <ng-template *ngTemplateOutlet=\"tree.checkboxIconTemplate; context: { $implicit: isSelected(), partialSelected: node.partialSelected }\"></ng-template>\n </div>\n </div>\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n <span class=\"cax-treenode-label\">\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n <span *ngIf=\"tree.getTemplateForNode(node)\">\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n </span>\n </span>\n <span style=\"margin-left: 0.5rem\" [class]=\"getRightIcon()\" *ngIf=\"(node.rightIcon || node.expandedIcon || node.collapsedIcon)\"></span>\n <div class=\"cax-tree-action-container\">\n <span class=\"cax-tree-badge\" *ngIf=\"node.badge > -1\">\n <cax-badge [severity]=\"'secondary'\" [value]=\"node.badge\"></cax-badge>\n </span>\n <cax-button\n *ngIf=\"!node.hideActionButton && nodeActionButton?.length\"\n class=\"cax-tree-button\"\n [ngClass]=\"{'cax-tree-button-hover': actionButtonMode === 'hover', 'cax-tree-button-select': actionButtonMode === 'select'}\"\n [label]=\"nodeActionButton\"\n [severity]=\"'primary'\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"onNodeAction($event, node)\"\n ></cax-button>\n </div>\n </div>\n <ul\n class=\"cax-treenode-children\"\n [ngStyle]=\"{\n display: node.expanded ? 'block' : 'none'\n }\"\n *ngIf=\"!tree.virtualScroll && node.children && node.expanded\"\n role=\"group\"\n >\n <cax-treeNode\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy\"\n [node]=\"childNode\"\n [parentNode]=\"node\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [index]=\"index\"\n [itemSize]=\"itemSize\"\n [level]=\"level + 1\"\n [loadingMode]=\"loadingMode\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n (onNodeActionClick)=\"onNodeAction($event, childNode)\"\n ></cax-treeNode>\n </ul>\n </li>\n\n <li\n *ngIf=\"tree.droppableNodes && lastChild\"\n class=\"cax-treenode-droppoint\"\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverNext }\"\n (drop)=\"onDropPoint($event, 1)\"\n [attr.aria-hidden]=\"true\"\n (dragover)=\"onDropPointDragOver($event)\"\n (dragenter)=\"onDropPointDragEnter($event, 1)\"\n (dragleave)=\"onDropPointDragLeave($event)\"\n ></li>\n\n <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\n <tbody>\n <tr>\n <td class=\"cax-treenode-connector\" *ngIf=\"!root\">\n <table class=\"cax-treenode-connector-table\">\n <tbody>\n <tr>\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !firstChild }\"></td>\n </tr>\n <tr>\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !lastChild }\"></td>\n </tr>\n </tbody>\n </table>\n </td>\n <td class=\"cax-treenode\" [ngClass]=\"{ 'cax-treenode-collapsed': !node.expanded }\">\n <div\n class=\"cax-treenode-content\"\n tabindex=\"0\"\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode, 'cax-highlight': isSelected() }\"\n (click)=\"onNodeClick($event)\"\n (contextmenu)=\"onNodeRightClick($event)\"\n (touchend)=\"onNodeTouchEnd()\"\n (keydown)=\"onNodeKeydown($event)\"\n >\n <span *ngIf=\"!isLeaf()\" [ngClass]=\"'cax-tree-toggler'\" (click)=\"toggle($event)\">\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\n <PlusIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\n <MinusIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\n </ng-container>\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\n </span>\n </span>\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n <span class=\"cax-treenode-label\">\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n <span *ngIf=\"tree.getTemplateForNode(node)\">\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n </span>\n </span>\n </div>\n </td>\n <td\n class=\"cax-treenode-children-container\"\n *ngIf=\"node.children && node.expanded\"\n [ngStyle]=\"{\n display: node.expanded ? 'table-cell' : 'none'\n }\"\n >\n <div class=\"cax-treenode-children\">\n <cax-treeNode\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; trackBy: tree.trackBy\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [node]=\"childNode\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n (onNodeActionClick)=\"onNodeAction($event, childNode)\"\n ></cax-treeNode>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</ng-template>\n" }]
480
- }], ctorParameters: () => [{ type: Tree, decorators: [{
481
- type: Inject,
482
- args: [forwardRef(() => Tree)]
483
- }] }], propDecorators: { rightIcon: [{
484
- type: Input
485
- }], rowNode: [{
486
- type: Input
487
- }], node: [{
488
- type: Input
489
- }], parentNode: [{
490
- type: Input
491
- }], nodeActionButton: [{
492
- type: Input
493
- }], actionButtonMode: [{
494
- type: Input
495
- }], root: [{
496
- type: Input,
497
- args: [{ transform: booleanAttribute }]
498
- }], index: [{
499
- type: Input,
500
- args: [{ transform: numberAttribute }]
501
- }], firstChild: [{
502
- type: Input,
503
- args: [{ transform: booleanAttribute }]
504
- }], lastChild: [{
505
- type: Input,
506
- args: [{ transform: booleanAttribute }]
507
- }], level: [{
508
- type: Input,
509
- args: [{ transform: numberAttribute }]
510
- }], indentation: [{
511
- type: Input,
512
- args: [{ transform: numberAttribute }]
513
- }], itemSize: [{
514
- type: Input,
515
- args: [{ transform: numberAttribute }]
516
- }], loadingMode: [{
517
- type: Input
518
- }], onNodeActionClick: [{
519
- type: Output
520
- }] } });
521
- /**
522
- * Tree is used to display hierarchical data.
523
- * @group Components
524
- */
525
- export class Tree {
526
- el;
527
- dragDropService;
528
- config;
529
- cd;
530
- rightIcon = false;
531
- /**
532
- * An array of treenodes.
533
- * @group Props
534
- */
535
- value;
536
- /**
537
- * Defines the selection mode.
538
- * @group Props
539
- */
540
- selectionMode;
541
- allowUnselect = true;
542
- /**
543
- * Loading mode display.
544
- * @group Props
545
- */
546
- loadingMode = 'mask';
547
- /**
548
- * A single treenode instance or an array to refer to the selections.
549
- * @group Props
550
- */
551
- selection;
552
- /**
553
- * Inline style of the component.
554
- * @group Props
555
- */
556
- style;
557
- /**
558
- * Style class of the component.
559
- * @group Props
560
- */
561
- styleClass;
562
- /**
563
- * Context menu instance.
564
- * @group Props
565
- */
566
- contextMenu;
567
- /**
568
- * Defines the orientation of the tree, valid values are 'vertical' and 'horizontal'.
569
- * @group Props
570
- */
571
- layout = 'vertical';
572
- /**
573
- * Scope of the draggable nodes to match a droppableScope.
574
- * @group Props
575
- */
576
- draggableScope;
577
- /**
578
- * Scope of the droppable nodes to match a draggableScope.
579
- * @group Props
580
- */
581
- droppableScope;
582
- /**
583
- * Whether the nodes are draggable.
584
- * @group Props
585
- */
586
- draggableNodes;
587
- /**
588
- * Whether the nodes are droppable.
589
- * @group Props
590
- */
591
- droppableNodes;
592
- /**
593
- * Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
594
- * @group Props
595
- */
596
- metaKeySelection = false;
597
- /**
598
- * Whether checkbox selections propagate to ancestor nodes.
599
- * @group Props
600
- */
601
- propagateSelectionUp = true;
602
- /**
603
- * Whether checkbox selections propagate to descendant nodes.
604
- * @group Props
605
- */
606
- propagateSelectionDown = true;
607
- /**
608
- * Displays a loader to indicate data load is in progress.
609
- * @group Props
610
- */
611
- loading;
612
- /**
613
- * The icon to show while indicating data load is in progress.
614
- * @group Props
615
- */
616
- loadingIcon;
617
- /**
618
- * Text to display when there is no data.
619
- * @group Props
620
- */
621
- emptyMessage = '';
622
- /**
623
- * Used to define a string that labels the tree.
624
- * @group Props
625
- */
626
- ariaLabel;
627
- /**
628
- * Defines a string that labels the toggler icon for accessibility.
629
- * @group Props
630
- */
631
- togglerAriaLabel;
632
- /**
633
- * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
634
- * @group Props
635
- */
636
- ariaLabelledBy;
637
- /**
638
- * When enabled, drop can be accepted or rejected based on condition defined at onNodeDrop.
639
- * @group Props
640
- */
641
- validateDrop;
642
- /**
643
- * When specified, displays an input field to filter the items.
644
- * @group Props
645
- */
646
- filter;
647
- /**
648
- * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
649
- * @group Props
650
- */
651
- filterBy = 'label';
652
- /**
653
- * Mode for filtering valid values are "lenient" and "strict". Default is lenient.
654
- * @group Props
655
- */
656
- filterMode = 'lenient';
657
- /**
658
- * Placeholder text to show when filter input is empty.
659
- * @group Props
660
- */
661
- filterPlaceholder = 'Default Placeholder';
662
- /**
663
- * Values after the tree nodes are filtered.
664
- * @group Props
665
- */
666
- filteredNodes;
667
- /**
668
- * Locale to use in filtering. The default locale is the host environment's current locale.
669
- * @group Props
670
- */
671
- filterLocale;
672
- /**
673
- * Height of the scrollable viewport.
674
- * @group Props
675
- */
676
- scrollHeight;
677
- /**
678
- * Defines if data is loaded and interacted with in lazy manner.
679
- * @group Props
680
- */
681
- lazy = false;
682
- /**
683
- * Whether the data should be loaded on demand during scroll.
684
- * @group Props
685
- */
686
- virtualScroll;
687
- /**
688
- * Height of an item in the list for VirtualScrolling.
689
- * @group Props
690
- */
691
- virtualScrollItemSize;
692
- /**
693
- * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
694
- * @group Props
695
- */
696
- virtualScrollOptions;
697
- /**
698
- * Indentation factor for spacing of the nested node when virtual scrolling is enabled.
699
- * @group Props
700
- */
701
- indentation = 1.5;
702
- /**
703
- * Custom templates of the component.
704
- * @group Props
705
- */
706
- _templateMap;
707
- nodeActionButton;
708
- actionButtonMode = 'hover';
709
- /**
710
- * Function to optimize the node list rendering, default algorithm checks for object identity.
711
- * @group Props
712
- */
713
- trackBy = (index, item) => item;
714
- /**
715
- * Height of the node.
716
- * @group Props
717
- * @deprecated use virtualScrollItemSize property instead.
718
- */
719
- _virtualNodeHeight;
720
- get virtualNodeHeight() {
721
- return this._virtualNodeHeight;
722
- }
723
- set virtualNodeHeight(val) {
724
- this._virtualNodeHeight = val;
725
- console.warn('The virtualNodeHeight property is deprecated, use virtualScrollItemSize property instead.');
726
- }
727
- /**
728
- * Callback to invoke on selection change.
729
- * @param {(TreeNode<any> | TreeNode<any>[] | null)} event - Custom selection change event.
730
- * @group Emits
731
- */
732
- selectionChange = new EventEmitter();
733
- /**
734
- * Callback to invoke when a node is selected.
735
- * @param {TreeNodeSelectEvent} event - Node select event.
736
- * @group Emits
737
- */
738
- onNodeSelect = new EventEmitter();
739
- /**
740
- * Callback to invoke when a node is unselected.
741
- * @param {TreeNodeUnSelectEvent} event - Node unselect event.
742
- * @group Emits
743
- */
744
- onNodeUnselect = new EventEmitter();
745
- /**
746
- * Callback to invoke when a node is expanded.
747
- * @param {TreeNodeExpandEvent} event - Node expand event.
748
- * @group Emits
749
- */
750
- onNodeExpand = new EventEmitter();
751
- /**
752
- * Callback to invoke when a node is collapsed.
753
- * @param {TreeNodeCollapseEvent} event - Node collapse event.
754
- * @group Emits
755
- */
756
- onNodeCollapse = new EventEmitter();
757
- /**
758
- * Callback to invoke when a node is selected with right click.
759
- * @param {onNodeContextMenuSelect} event - Node context menu select event.
760
- * @group Emits
761
- */
762
- onNodeContextMenuSelect = new EventEmitter();
763
- /**
764
- * Callback to invoke when a node is dropped.
765
- * @param {TreeNodeDropEvent} event - Node drop event.
766
- * @group Emits
767
- */
768
- onNodeDrop = new EventEmitter();
769
- /**
770
- * Callback to invoke in lazy mode to load new data.
771
- * @param {TreeLazyLoadEvent} event - Custom lazy load event.
772
- * @group Emits
773
- */
774
- onLazyLoad = new EventEmitter();
775
- /**
776
- * Callback to invoke in virtual scroll mode when scroll position changes.
777
- * @param {TreeScrollEvent} event - Custom scroll event.
778
- * @group Emits
779
- */
780
- onScroll = new EventEmitter();
781
- /**
782
- * Callback to invoke in virtual scroll mode when scroll position and item's range in view changes.
783
- * @param {TreeScrollIndexChangeEvent} event - Scroll index change event.
784
- * @group Emits
785
- */
786
- onScrollIndexChange = new EventEmitter();
787
- /**
788
- * Callback to invoke when data is filtered.
789
- * @param {TreeFilterEvent} event - Custom filter event.
790
- * @group Emits
791
- */
792
- onFilter = new EventEmitter();
793
- onNodeActionClick = new EventEmitter();
794
- templates;
795
- filterViewChild;
796
- scroller;
797
- wrapperViewChild;
798
- serializedValue;
799
- headerTemplate;
800
- footerTemplate;
801
- loaderTemplate;
802
- emptyMessageTemplate;
803
- togglerIconTemplate;
804
- checkboxIconTemplate;
805
- loadingIconTemplate;
806
- filterIconTemplate;
807
- nodeTouched;
808
- dragNodeTree;
809
- dragNode;
810
- dragNodeSubNodes;
811
- dragNodeIndex;
812
- dragNodeScope;
813
- dragHover;
814
- dragStartSubscription;
815
- dragStopSubscription;
816
- constructor(el, dragDropService, config, cd) {
817
- this.el = el;
818
- this.dragDropService = dragDropService;
819
- this.config = config;
820
- this.cd = cd;
821
- }
822
- ngOnInit() {
823
- if (this.droppableNodes) {
824
- this.dragStartSubscription = this.dragDropService.dragStart$.subscribe((event) => {
825
- this.dragNodeTree = event.tree;
826
- this.dragNode = event.node;
827
- this.dragNodeSubNodes = event.subNodes;
828
- this.dragNodeIndex = event.index;
829
- this.dragNodeScope = event.scope;
830
- });
831
- this.dragStopSubscription = this.dragDropService.dragStop$.subscribe((event) => {
832
- this.dragNodeTree = null;
833
- this.dragNode = null;
834
- this.dragNodeSubNodes = null;
835
- this.dragNodeIndex = null;
836
- this.dragNodeScope = null;
837
- this.dragHover = false;
838
- });
839
- }
840
- }
841
- ngOnChanges(simpleChange) {
842
- if (simpleChange.value) {
843
- this.updateSerializedValue();
844
- if (this.hasFilterActive()) {
845
- this._filter(this.filterViewChild.nativeElement.value);
846
- }
847
- }
848
- }
849
- onNodeAction(event, node) {
850
- this.onNodeActionClick.emit({ originalEvent: event, node: node });
851
- }
852
- get horizontal() {
853
- return this.layout == 'horizontal';
854
- }
855
- get emptyMessageLabel() {
856
- return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
857
- }
858
- ngAfterContentInit() {
859
- if (this.templates.length) {
860
- this._templateMap = {};
861
- }
862
- this.templates.forEach((item) => {
863
- switch (item.getType()) {
864
- case 'header':
865
- this.headerTemplate = item.template;
866
- break;
867
- case 'empty':
868
- this.emptyMessageTemplate = item.template;
869
- break;
870
- case 'footer':
871
- this.footerTemplate = item.template;
872
- break;
873
- case 'loader':
874
- this.loaderTemplate = item.template;
875
- break;
876
- case 'togglericon':
877
- this.togglerIconTemplate = item.template;
878
- break;
879
- case 'checkboxicon':
880
- this.checkboxIconTemplate = item.template;
881
- break;
882
- case 'loadingicon':
883
- this.loadingIconTemplate = item.template;
884
- break;
885
- case 'filtericon':
886
- this.filterIconTemplate = item.template;
887
- break;
888
- default:
889
- this._templateMap[item.name] = item.template;
890
- break;
891
- }
892
- });
893
- }
894
- updateSerializedValue() {
895
- this.serializedValue = [];
896
- this.serializeNodes(null, this.getRootNode(), 0, true);
897
- }
898
- serializeNodes(parent, nodes, level, visible) {
899
- if (nodes && nodes.length) {
900
- for (let node of nodes) {
901
- node.parent = parent;
902
- const rowNode = {
903
- node: node,
904
- parent: parent,
905
- level: level,
906
- visible: visible && (parent ? parent.expanded : true)
907
- };
908
- this.serializedValue.push(rowNode);
909
- if (rowNode.visible && node.expanded) {
910
- this.serializeNodes(node, node.children, level + 1, rowNode.visible);
911
- }
912
- }
913
- }
914
- }
915
- onNodeClick(event, node) {
916
- let eventTarget = event.target;
917
- if (DomHandler.hasClass(eventTarget, 'cax-tree-toggler') || DomHandler.hasClass(eventTarget, 'cax-tree-toggler-icon')) {
918
- return;
919
- }
920
- else if (this.selectionMode) {
921
- if (node.selectable === false) {
922
- node.style = '--cax-focus-ring-color: none;';
923
- return;
924
- }
925
- else {
926
- node.style = '--cax-focus-ring-color: var(--primary-color)';
927
- }
928
- if (this.hasFilteredNodes()) {
929
- node = this.getNodeWithKey(node.key, this.filteredNodes);
930
- if (!node) {
931
- return;
932
- }
933
- }
934
- let index = this.findIndexInSelection(node);
935
- let selected = index >= 0;
936
- if (this.isCheckboxSelectionMode()) {
937
- if (selected) {
938
- if (this.propagateSelectionDown)
939
- this.propagateDown(node, false);
940
- else
941
- this.selection = this.selection.filter((val, i) => i != index);
942
- if (this.propagateSelectionUp && node.parent) {
943
- this.propagateUp(node.parent, false);
944
- }
945
- this.selectionChange.emit(this.selection);
946
- this.onNodeUnselect.emit({ originalEvent: event, node: node });
947
- }
948
- else {
949
- if (this.propagateSelectionDown)
950
- this.propagateDown(node, true);
951
- else
952
- this.selection = [...(this.selection || []), node];
953
- if (this.propagateSelectionUp && node.parent) {
954
- this.propagateUp(node.parent, true);
955
- }
956
- this.selectionChange.emit(this.selection);
957
- this.onNodeSelect.emit({ originalEvent: event, node: node });
958
- }
959
- }
960
- else {
961
- let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
962
- if (metaSelection) {
963
- let metaKey = event.metaKey || event.ctrlKey;
964
- if (selected && metaKey) {
965
- if (this.isSingleSelectionMode()) {
966
- this.selectionChange.emit(null);
967
- }
968
- else {
969
- this.selection = this.selection.filter((val, i) => i != index);
970
- this.selectionChange.emit(this.selection);
971
- }
972
- this.onNodeUnselect.emit({ originalEvent: event, node: node });
973
- }
974
- else {
975
- if (this.isSingleSelectionMode()) {
976
- this.selectionChange.emit(node);
977
- }
978
- else if (this.isMultipleSelectionMode()) {
979
- this.selection = !metaKey ? [] : this.selection || [];
980
- this.selection = [...this.selection, node];
981
- this.selectionChange.emit(this.selection);
982
- }
983
- this.onNodeSelect.emit({ originalEvent: event, node: node });
984
- }
985
- }
986
- else {
987
- if (this.isSingleSelectionMode()) {
988
- if (selected) {
989
- if (this.allowUnselect) {
990
- this.selection = null;
991
- this.onNodeUnselect.emit({ originalEvent: event, node: node });
992
- }
993
- else {
994
- this.selection = node;
995
- }
996
- }
997
- else {
998
- this.selection = node;
999
- setTimeout(() => {
1000
- this.onNodeSelect.emit({ originalEvent: event, node: node });
1001
- });
1002
- }
1003
- }
1004
- else {
1005
- if (selected) {
1006
- this.selection = this.selection.filter((val, i) => i != index);
1007
- this.onNodeUnselect.emit({ originalEvent: event, node: node });
1008
- }
1009
- else {
1010
- this.selection = [...(this.selection || []), node];
1011
- setTimeout(() => {
1012
- this.onNodeSelect.emit({ originalEvent: event, node: node });
1013
- });
1014
- }
1015
- }
1016
- this.selectionChange.emit(this.selection);
1017
- }
1018
- }
1019
- }
1020
- this.nodeTouched = false;
1021
- }
1022
- onNodeTouchEnd() {
1023
- this.nodeTouched = true;
1024
- }
1025
- onNodeRightClick(event, node) {
1026
- if (this.contextMenu) {
1027
- let eventTarget = event.target;
1028
- let className = eventTarget.getAttribute('class');
1029
- if (className && className.includes('cax-tree-toggler')) {
1030
- return;
1031
- }
1032
- else {
1033
- let index = this.findIndexInSelection(node);
1034
- let selected = index >= 0;
1035
- if (!selected) {
1036
- if (this.isSingleSelectionMode())
1037
- this.selectionChange.emit(node);
1038
- else
1039
- this.selectionChange.emit([node]);
1040
- }
1041
- this.contextMenu.show(event);
1042
- this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
1043
- }
1044
- }
1045
- }
1046
- findIndexInSelection(node) {
1047
- let index = -1;
1048
- if (this.selectionMode && this.selection) {
1049
- if (this.isSingleSelectionMode()) {
1050
- let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
1051
- index = areNodesEqual ? 0 : -1;
1052
- }
1053
- else {
1054
- for (let i = 0; i < this.selection.length; i++) {
1055
- let selectedNode = this.selection[i];
1056
- let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
1057
- if (areNodesEqual) {
1058
- index = i;
1059
- break;
1060
- }
1061
- }
1062
- }
1063
- }
1064
- return index;
1065
- }
1066
- syncNodeOption(node, parentNodes, option, value) {
1067
- // to synchronize the node option between the filtered nodes and the original nodes(this.value)
1068
- const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
1069
- if (_node) {
1070
- _node[option] = value || node[option];
1071
- }
1072
- }
1073
- hasFilteredNodes() {
1074
- return this.filter && this.filteredNodes && this.filteredNodes.length;
1075
- }
1076
- hasFilterActive() {
1077
- return this.filter && this.filterViewChild?.nativeElement?.value.length > 0;
1078
- }
1079
- getNodeWithKey(key, nodes) {
1080
- for (let node of nodes) {
1081
- if (node.key === key) {
1082
- return node;
1083
- }
1084
- if (node.children) {
1085
- let matchedNode = this.getNodeWithKey(key, node.children);
1086
- if (matchedNode) {
1087
- return matchedNode;
1088
- }
1089
- }
1090
- }
1091
- }
1092
- propagateUp(node, select) {
1093
- if (node.children && node.children.length) {
1094
- let selectedCount = 0;
1095
- let childPartialSelected = false;
1096
- for (let child of node.children) {
1097
- if (this.isSelected(child)) {
1098
- selectedCount++;
1099
- }
1100
- else if (child.partialSelected) {
1101
- childPartialSelected = true;
1102
- }
1103
- }
1104
- if (select && selectedCount == node.children.length) {
1105
- this.selection = [...(this.selection || []), node];
1106
- node.partialSelected = false;
1107
- }
1108
- else {
1109
- if (!select) {
1110
- let index = this.findIndexInSelection(node);
1111
- if (index >= 0) {
1112
- this.selection = this.selection.filter((val, i) => i != index);
1113
- }
1114
- }
1115
- if (childPartialSelected || (selectedCount > 0 && selectedCount != node.children.length))
1116
- node.partialSelected = true;
1117
- else
1118
- node.partialSelected = false;
1119
- }
1120
- this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1121
- }
1122
- let parent = node.parent;
1123
- if (parent) {
1124
- this.propagateUp(parent, select);
1125
- }
1126
- }
1127
- propagateDown(node, select) {
1128
- let index = this.findIndexInSelection(node);
1129
- if (select && index == -1 && node.selectable !== false) {
1130
- this.selection = [...(this.selection || []), this.filterUnselectableChildren(node)];
1131
- }
1132
- else if (!select && index > -1) {
1133
- this.selection = this.selection.filter((val, i) => i != index);
1134
- }
1135
- node.partialSelected = false;
1136
- this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1137
- if (node.children && node.children.length) {
1138
- for (let child of node.children) {
1139
- this.propagateDown(child, select);
1140
- }
1141
- }
1142
- }
1143
- filterUnselectableChildren(node) {
1144
- let clonedNode = Object.assign({}, node);
1145
- if (clonedNode.children && clonedNode.children.length) {
1146
- for (let child of clonedNode.children) {
1147
- if (child.selectable === false) {
1148
- clonedNode.children = clonedNode.children.filter((val) => val != child);
1149
- }
1150
- child = this.filterUnselectableChildren(child);
1151
- }
1152
- }
1153
- return clonedNode;
1154
- }
1155
- isSelected(node) {
1156
- return this.findIndexInSelection(node) != -1;
1157
- }
1158
- isSingleSelectionMode() {
1159
- return this.selectionMode && this.selectionMode == 'single';
1160
- }
1161
- isMultipleSelectionMode() {
1162
- return this.selectionMode && this.selectionMode == 'multiple';
1163
- }
1164
- isCheckboxSelectionMode() {
1165
- return this.selectionMode && this.selectionMode == 'checkbox';
1166
- }
1167
- isNodeLeaf(node) {
1168
- return node.leaf == false ? false : !(node.children && node.children.length);
1169
- }
1170
- getRootNode() {
1171
- return this.filteredNodes ? this.filteredNodes : this.value;
1172
- }
1173
- getTemplateForNode(node) {
1174
- if (this._templateMap)
1175
- return node.type ? this._templateMap[node.type] : this._templateMap['default'];
1176
- else
1177
- return null;
1178
- }
1179
- onDragOver(event) {
1180
- if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1181
- event.dataTransfer.dropEffect = 'move';
1182
- event.preventDefault();
1183
- }
1184
- }
1185
- onDrop(event) {
1186
- if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1187
- event.preventDefault();
1188
- let dragNode = this.dragNode;
1189
- if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
1190
- let dragNodeIndex = this.dragNodeIndex;
1191
- this.value = this.value || [];
1192
- if (this.validateDrop) {
1193
- this.onNodeDrop.emit({
1194
- originalEvent: event,
1195
- dragNode: dragNode,
1196
- dropNode: null,
1197
- index: dragNodeIndex,
1198
- accept: () => {
1199
- this.processTreeDrop(dragNode, dragNodeIndex);
1200
- }
1201
- });
1202
- }
1203
- else {
1204
- this.onNodeDrop.emit({
1205
- originalEvent: event,
1206
- dragNode: dragNode,
1207
- dropNode: null,
1208
- index: dragNodeIndex
1209
- });
1210
- this.processTreeDrop(dragNode, dragNodeIndex);
1211
- }
1212
- }
1213
- }
1214
- }
1215
- processTreeDrop(dragNode, dragNodeIndex) {
1216
- this.dragNodeSubNodes.splice(dragNodeIndex, 1);
1217
- this.value.push(dragNode);
1218
- this.dragDropService.stopDrag({
1219
- node: dragNode
1220
- });
1221
- }
1222
- onDragEnter() {
1223
- if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
1224
- this.dragHover = true;
1225
- }
1226
- }
1227
- onDragLeave(event) {
1228
- if (this.droppableNodes) {
1229
- let rect = event.currentTarget.getBoundingClientRect();
1230
- if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
1231
- this.dragHover = false;
1232
- }
1233
- }
1234
- }
1235
- allowDrop(dragNode, dropNode, dragNodeScope) {
1236
- if (!dragNode) {
1237
- //prevent random html elements to be dragged
1238
- return false;
1239
- }
1240
- else if (this.isValidDragScope(dragNodeScope)) {
1241
- let allow = true;
1242
- if (dropNode) {
1243
- if (dragNode === dropNode) {
1244
- allow = false;
1245
- }
1246
- else {
1247
- let parent = dropNode.parent;
1248
- while (parent != null) {
1249
- if (parent === dragNode) {
1250
- allow = false;
1251
- break;
1252
- }
1253
- parent = parent.parent;
1254
- }
1255
- }
1256
- }
1257
- return allow;
1258
- }
1259
- else {
1260
- return false;
1261
- }
1262
- }
1263
- isValidDragScope(dragScope) {
1264
- let dropScope = this.droppableScope;
1265
- if (dropScope) {
1266
- if (typeof dropScope === 'string') {
1267
- if (typeof dragScope === 'string')
1268
- return dropScope === dragScope;
1269
- else if (Array.isArray(dragScope))
1270
- return dragScope.indexOf(dropScope) != -1;
1271
- }
1272
- else if (Array.isArray(dropScope)) {
1273
- if (typeof dragScope === 'string') {
1274
- return dropScope.indexOf(dragScope) != -1;
1275
- }
1276
- else if (Array.isArray(dragScope)) {
1277
- for (let s of dropScope) {
1278
- for (let ds of dragScope) {
1279
- if (s === ds) {
1280
- return true;
1281
- }
1282
- }
1283
- }
1284
- }
1285
- }
1286
- return false;
1287
- }
1288
- else {
1289
- return true;
1290
- }
1291
- }
1292
- _filter(value) {
1293
- let filterValue = value;
1294
- if (filterValue === '') {
1295
- this.filteredNodes = null;
1296
- }
1297
- else {
1298
- this.filteredNodes = [];
1299
- const searchFields = this.filterBy.split(',');
1300
- const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
1301
- const isStrictMode = this.filterMode === 'strict';
1302
- for (let node of this.value) {
1303
- let copyNode = { ...node };
1304
- let paramsWithoutNode = { searchFields, filterText, isStrictMode };
1305
- if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
1306
- (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
1307
- this.filteredNodes.push(copyNode);
1308
- }
1309
- }
1310
- }
1311
- this.updateSerializedValue();
1312
- this.onFilter.emit({
1313
- filter: filterValue,
1314
- filteredValue: this.filteredNodes
1315
- });
1316
- }
1317
- /**
1318
- * Resets filter.
1319
- * @group Method
1320
- */
1321
- resetFilter() {
1322
- this.filteredNodes = null;
1323
- if (this.filterViewChild && this.filterViewChild.nativeElement) {
1324
- this.filterViewChild.nativeElement.value = '';
1325
- }
1326
- }
1327
- /**
1328
- * Scrolls to virtual index.
1329
- * @param {number} number - Index to be scrolled.
1330
- * @group Method
1331
- */
1332
- scrollToVirtualIndex(index) {
1333
- this.virtualScroll && this.scroller?.scrollToIndex(index);
1334
- }
1335
- /**
1336
- * Scrolls to virtual index.
1337
- * @param {ScrollToOptions} options - Scroll options.
1338
- * @group Method
1339
- */
1340
- scrollTo(options) {
1341
- if (this.virtualScroll) {
1342
- this.scroller?.scrollTo(options);
1343
- }
1344
- else if (this.wrapperViewChild && this.wrapperViewChild.nativeElement) {
1345
- if (this.wrapperViewChild.nativeElement.scrollTo) {
1346
- this.wrapperViewChild.nativeElement.scrollTo(options);
1347
- }
1348
- else {
1349
- this.wrapperViewChild.nativeElement.scrollLeft = options.left;
1350
- this.wrapperViewChild.nativeElement.scrollTop = options.top;
1351
- }
1352
- }
1353
- }
1354
- findFilteredNodes(node, paramsWithoutNode) {
1355
- if (node) {
1356
- let matched = false;
1357
- if (node.children) {
1358
- let childNodes = [...node.children];
1359
- node.children = [];
1360
- for (let childNode of childNodes) {
1361
- let copyChildNode = { ...childNode };
1362
- if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
1363
- matched = true;
1364
- node.children.push(copyChildNode);
1365
- }
1366
- }
1367
- }
1368
- if (matched) {
1369
- node.expanded = true;
1370
- return true;
1371
- }
1372
- }
1373
- }
1374
- isFilterMatched(node, params) {
1375
- let { searchFields, filterText, isStrictMode } = params;
1376
- let matched = false;
1377
- for (let field of searchFields) {
1378
- let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
1379
- if (fieldValue.indexOf(filterText) > -1) {
1380
- matched = true;
1381
- }
1382
- }
1383
- if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
1384
- matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
1385
- }
1386
- return matched;
1387
- }
1388
- getIndex(options, index) {
1389
- const getItemOptions = options['getItemOptions'];
1390
- return getItemOptions ? getItemOptions(index).index : index;
1391
- }
1392
- getBlockableElement() {
1393
- return this.el.nativeElement.children[0];
1394
- }
1395
- ngOnDestroy() {
1396
- if (this.dragStartSubscription) {
1397
- this.dragStartSubscription.unsubscribe();
1398
- }
1399
- if (this.dragStopSubscription) {
1400
- this.dragStopSubscription.unsubscribe();
1401
- }
1402
- }
1403
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Tree, deps: [{ token: i0.ElementRef }, { token: i12.TreeDragDropService, optional: true }, { token: i12.caxConfig }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1404
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Tree, selector: "cax-tree", inputs: { rightIcon: "rightIcon", value: "value", selectionMode: "selectionMode", allowUnselect: "allowUnselect", loadingMode: "loadingMode", selection: "selection", style: "style", styleClass: "styleClass", contextMenu: "contextMenu", layout: "layout", draggableScope: "draggableScope", droppableScope: "droppableScope", draggableNodes: ["draggableNodes", "draggableNodes", booleanAttribute], droppableNodes: ["droppableNodes", "droppableNodes", booleanAttribute], metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], propagateSelectionUp: ["propagateSelectionUp", "propagateSelectionUp", booleanAttribute], propagateSelectionDown: ["propagateSelectionDown", "propagateSelectionDown", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", emptyMessage: "emptyMessage", ariaLabel: "ariaLabel", togglerAriaLabel: "togglerAriaLabel", ariaLabelledBy: "ariaLabelledBy", validateDrop: ["validateDrop", "validateDrop", booleanAttribute], filter: ["filter", "filter", booleanAttribute], filterBy: "filterBy", filterMode: "filterMode", filterPlaceholder: "filterPlaceholder", filteredNodes: "filteredNodes", filterLocale: "filterLocale", scrollHeight: "scrollHeight", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", indentation: ["indentation", "indentation", numberAttribute], _templateMap: "_templateMap", nodeActionButton: "nodeActionButton", actionButtonMode: "actionButtonMode", trackBy: "trackBy", virtualNodeHeight: "virtualNodeHeight" }, outputs: { selectionChange: "selectionChange", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onNodeContextMenuSelect: "onNodeContextMenuSelect", onNodeDrop: "onNodeDrop", onLazyLoad: "onLazyLoad", onScroll: "onScroll", onScrollIndexChange: "onScrollIndexChange", onFilter: "onFilter", onNodeActionClick: "onNodeActionClick" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"{ 'cax-tree cax-component': true, 'cax-tree-selectable': selectionMode, 'cax-treenode-dragover': dragHover, 'cax-tree-loading': loading, 'cax-tree-flex-scrollable': scrollHeight === 'flex' }\"\n [ngStyle]=\"style\"\n [class]=\"styleClass\"\n *ngIf=\"!horizontal\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragenter)=\"onDragEnter()\"\n (dragleave)=\"onDragLeave($event)\"\n>\n <div class=\"cax-tree-loading-overlay cax-component-overlay\" *ngIf=\"loading && loadingMode === 'mask'\">\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n <ng-container *ngIf=\"!loadingIcon\">\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div *ngIf=\"filter\" class=\"cax-tree-filter-container\">\n <input #filter type=\"search\" autocomplete=\"off\" class=\"cax-tree-filter cax-inputtext cax-component\" [attr.placeholder]=\"filterPlaceholder\" (keydown.enter)=\"$event.preventDefault()\" (input)=\"_filter($event.target.value)\" />\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-tree-filter-icon'\" />\n <span *ngIf=\"filterIconTemplate\" class=\"cax-tree-filter-icon\">\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\n </span>\n </div>\n <ng-container *ngIf=\"getRootNode()?.length\">\n <cax-scroller\n #scroller\n *ngIf=\"virtualScroll\"\n [items]=\"serializedValue\"\n [tabindex]=\"-1\"\n styleClass=\"cax-tree-wrapper\"\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\n [itemSize]=\"virtualScrollItemSize || _virtualNodeHeight\"\n [lazy]=\"lazy\"\n (onScroll)=\"onScroll.emit($event)\"\n (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\n [options]=\"virtualScrollOptions\"\n >\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\n <ul *ngIf=\"items\" class=\"cax-tree-container\" [ngClass]=\"scrollerOptions.contentStyleClass\" [style]=\"scrollerOptions.contentStyle\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n <cax-treeNode\n #treeNode\n *ngFor=\"let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n [level]=\"rowNode.level\"\n [rowNode]=\"rowNode\"\n [rightIcon]=\"rightIcon\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [node]=\"rowNode.node\"\n [parentNode]=\"rowNode.parent\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [index]=\"getIndex(scrollerOptions, index)\"\n [itemSize]=\"scrollerOptions.itemSize\"\n [indentation]=\"indentation\"\n [loadingMode]=\"loadingMode\"\n (onNodeActionClick)=\"onNodeAction($event, node)\"\n ></cax-treeNode>\n </ul>\n </ng-template>\n <ng-container *ngIf=\"loaderTemplate\">\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\n </ng-template>\n </ng-container>\n </cax-scroller>\n <ng-container *ngIf=\"!virtualScroll\">\n <div #wrapper class=\"cax-tree-wrapper\" [ngStyle]=\"{ 'max-height': scrollHeight }\">\n <ul class=\"cax-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n <cax-treeNode\n *ngFor=\"let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n [node]=\"node\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [rightIcon]=\"rightIcon\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [index]=\"index\"\n [level]=\"0\"\n [loadingMode]=\"loadingMode\"\n (onNodeActionClick)=\"onNodeAction($event, node)\"\n ></cax-treeNode>\n </ul>\n </div>\n </ng-container>\n </ng-container>\n\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n<div [ngClass]=\"{ 'cax-tree cax-tree-horizontal cax-component': true, 'cax-tree-selectable': selectionMode }\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"horizontal\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div class=\"cax-tree-loading-mask cax-component-overlay\" *ngIf=\"loading\">\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n <ng-container *ngIf=\"!loadingIcon\">\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </div>\n <table *ngIf=\"value && value[0]\">\n <cax-treeNode [node]=\"value[0]\" [root]=\"true\" [rightIcon]=\"rightIcon\" [nodeActionButton]=\"nodeActionButton\" [actionButtonMode]=\"actionButtonMode\" (onNodeActionClick)=\"onNodeAction($event, node)\"></cax-treeNode>\n </table>\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n", styles: ["@layer cax{.cax-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.cax-treenode-children{margin:0;padding:0;list-style-type:none}.cax-tree-wrapper{overflow:auto}.cax-treenode-selectable{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-tree-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}.cax-treenode-content{display:flex;align-items:center}.cax-tree-filter{width:100%}.cax-tree-filter-container{position:relative;display:block;width:100%}.cax-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-tree-loading{position:relative;min-height:4rem}.cax-tree .cax-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.cax-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.cax-tree-flex-scrollable .cax-tree-wrapper{flex:1}.cax-tree .cax-treenode-droppoint{height:4px;list-style-type:none}.cax-tree .cax-treenode-droppoint-active{border:0 none}.cax-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.cax-tree.cax-tree-horizontal table,.cax-tree.cax-tree-horizontal tr,.cax-tree.cax-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.cax-tree-horizontal .cax-treenode-content{font-weight:400;padding:.4em 1em .4em .2em;display:flex;align-items:center}.cax-tree-horizontal .cax-treenode-parent .cax-treenode-content{font-weight:400;white-space:nowrap}.cax-tree.cax-tree-horizontal .cax-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-leaf,.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-collapsed{padding-right:0}.cax-tree.cax-tree-horizontal .cax-treenode-children{padding:0;margin:0}.cax-tree.cax-tree-horizontal .cax-treenode-connector{width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-table{height:100%;width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.cax-tree.cax-tree-horizontal table{height:0}.cax-scroller .cax-tree-container{overflow:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i12.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "component", type: i13.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: "component", type: i14.SearchIcon, selector: "SearchIcon" }, { kind: "component", type: i7.SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: UITreeNode, selector: "cax-treeNode", inputs: ["rightIcon", "rowNode", "node", "parentNode", "nodeActionButton", "actionButtonMode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"], outputs: ["onNodeActionClick"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
1405
- }
1406
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Tree, decorators: [{
1407
- type: Component,
1408
- args: [{ selector: 'cax-tree', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
1409
- class: 'cax-element'
1410
- }, template: "<div\n [ngClass]=\"{ 'cax-tree cax-component': true, 'cax-tree-selectable': selectionMode, 'cax-treenode-dragover': dragHover, 'cax-tree-loading': loading, 'cax-tree-flex-scrollable': scrollHeight === 'flex' }\"\n [ngStyle]=\"style\"\n [class]=\"styleClass\"\n *ngIf=\"!horizontal\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragenter)=\"onDragEnter()\"\n (dragleave)=\"onDragLeave($event)\"\n>\n <div class=\"cax-tree-loading-overlay cax-component-overlay\" *ngIf=\"loading && loadingMode === 'mask'\">\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n <ng-container *ngIf=\"!loadingIcon\">\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div *ngIf=\"filter\" class=\"cax-tree-filter-container\">\n <input #filter type=\"search\" autocomplete=\"off\" class=\"cax-tree-filter cax-inputtext cax-component\" [attr.placeholder]=\"filterPlaceholder\" (keydown.enter)=\"$event.preventDefault()\" (input)=\"_filter($event.target.value)\" />\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-tree-filter-icon'\" />\n <span *ngIf=\"filterIconTemplate\" class=\"cax-tree-filter-icon\">\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\n </span>\n </div>\n <ng-container *ngIf=\"getRootNode()?.length\">\n <cax-scroller\n #scroller\n *ngIf=\"virtualScroll\"\n [items]=\"serializedValue\"\n [tabindex]=\"-1\"\n styleClass=\"cax-tree-wrapper\"\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\n [itemSize]=\"virtualScrollItemSize || _virtualNodeHeight\"\n [lazy]=\"lazy\"\n (onScroll)=\"onScroll.emit($event)\"\n (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\n [options]=\"virtualScrollOptions\"\n >\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\n <ul *ngIf=\"items\" class=\"cax-tree-container\" [ngClass]=\"scrollerOptions.contentStyleClass\" [style]=\"scrollerOptions.contentStyle\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n <cax-treeNode\n #treeNode\n *ngFor=\"let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n [level]=\"rowNode.level\"\n [rowNode]=\"rowNode\"\n [rightIcon]=\"rightIcon\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [node]=\"rowNode.node\"\n [parentNode]=\"rowNode.parent\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [index]=\"getIndex(scrollerOptions, index)\"\n [itemSize]=\"scrollerOptions.itemSize\"\n [indentation]=\"indentation\"\n [loadingMode]=\"loadingMode\"\n (onNodeActionClick)=\"onNodeAction($event, node)\"\n ></cax-treeNode>\n </ul>\n </ng-template>\n <ng-container *ngIf=\"loaderTemplate\">\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\n </ng-template>\n </ng-container>\n </cax-scroller>\n <ng-container *ngIf=\"!virtualScroll\">\n <div #wrapper class=\"cax-tree-wrapper\" [ngStyle]=\"{ 'max-height': scrollHeight }\">\n <ul class=\"cax-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n <cax-treeNode\n *ngFor=\"let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n [node]=\"node\"\n [firstChild]=\"firstChild\"\n [lastChild]=\"lastChild\"\n [rightIcon]=\"rightIcon\"\n [nodeActionButton]=\"nodeActionButton\"\n [actionButtonMode]=\"actionButtonMode\"\n [index]=\"index\"\n [level]=\"0\"\n [loadingMode]=\"loadingMode\"\n (onNodeActionClick)=\"onNodeAction($event, node)\"\n ></cax-treeNode>\n </ul>\n </div>\n </ng-container>\n </ng-container>\n\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n<div [ngClass]=\"{ 'cax-tree cax-tree-horizontal cax-component': true, 'cax-tree-selectable': selectionMode }\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"horizontal\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div class=\"cax-tree-loading-mask cax-component-overlay\" *ngIf=\"loading\">\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n <ng-container *ngIf=\"!loadingIcon\">\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </div>\n <table *ngIf=\"value && value[0]\">\n <cax-treeNode [node]=\"value[0]\" [root]=\"true\" [rightIcon]=\"rightIcon\" [nodeActionButton]=\"nodeActionButton\" [actionButtonMode]=\"actionButtonMode\" (onNodeActionClick)=\"onNodeAction($event, node)\"></cax-treeNode>\n </table>\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n", styles: ["@layer cax{.cax-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.cax-treenode-children{margin:0;padding:0;list-style-type:none}.cax-tree-wrapper{overflow:auto}.cax-treenode-selectable{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-tree-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}.cax-treenode-content{display:flex;align-items:center}.cax-tree-filter{width:100%}.cax-tree-filter-container{position:relative;display:block;width:100%}.cax-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-tree-loading{position:relative;min-height:4rem}.cax-tree .cax-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.cax-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.cax-tree-flex-scrollable .cax-tree-wrapper{flex:1}.cax-tree .cax-treenode-droppoint{height:4px;list-style-type:none}.cax-tree .cax-treenode-droppoint-active{border:0 none}.cax-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.cax-tree.cax-tree-horizontal table,.cax-tree.cax-tree-horizontal tr,.cax-tree.cax-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.cax-tree-horizontal .cax-treenode-content{font-weight:400;padding:.4em 1em .4em .2em;display:flex;align-items:center}.cax-tree-horizontal .cax-treenode-parent .cax-treenode-content{font-weight:400;white-space:nowrap}.cax-tree.cax-tree-horizontal .cax-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-leaf,.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-collapsed{padding-right:0}.cax-tree.cax-tree-horizontal .cax-treenode-children{padding:0;margin:0}.cax-tree.cax-tree-horizontal .cax-treenode-connector{width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-table{height:100%;width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.cax-tree.cax-tree-horizontal table{height:0}.cax-scroller .cax-tree-container{overflow:visible}}\n"] }]
1411
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i12.TreeDragDropService, decorators: [{
1412
- type: Optional
1413
- }] }, { type: i12.caxConfig }, { type: i0.ChangeDetectorRef }], propDecorators: { rightIcon: [{
1414
- type: Input
1415
- }], value: [{
1416
- type: Input
1417
- }], selectionMode: [{
1418
- type: Input
1419
- }], allowUnselect: [{
1420
- type: Input
1421
- }], loadingMode: [{
1422
- type: Input
1423
- }], selection: [{
1424
- type: Input
1425
- }], style: [{
1426
- type: Input
1427
- }], styleClass: [{
1428
- type: Input
1429
- }], contextMenu: [{
1430
- type: Input
1431
- }], layout: [{
1432
- type: Input
1433
- }], draggableScope: [{
1434
- type: Input
1435
- }], droppableScope: [{
1436
- type: Input
1437
- }], draggableNodes: [{
1438
- type: Input,
1439
- args: [{ transform: booleanAttribute }]
1440
- }], droppableNodes: [{
1441
- type: Input,
1442
- args: [{ transform: booleanAttribute }]
1443
- }], metaKeySelection: [{
1444
- type: Input,
1445
- args: [{ transform: booleanAttribute }]
1446
- }], propagateSelectionUp: [{
1447
- type: Input,
1448
- args: [{ transform: booleanAttribute }]
1449
- }], propagateSelectionDown: [{
1450
- type: Input,
1451
- args: [{ transform: booleanAttribute }]
1452
- }], loading: [{
1453
- type: Input,
1454
- args: [{ transform: booleanAttribute }]
1455
- }], loadingIcon: [{
1456
- type: Input
1457
- }], emptyMessage: [{
1458
- type: Input
1459
- }], ariaLabel: [{
1460
- type: Input
1461
- }], togglerAriaLabel: [{
1462
- type: Input
1463
- }], ariaLabelledBy: [{
1464
- type: Input
1465
- }], validateDrop: [{
1466
- type: Input,
1467
- args: [{ transform: booleanAttribute }]
1468
- }], filter: [{
1469
- type: Input,
1470
- args: [{ transform: booleanAttribute }]
1471
- }], filterBy: [{
1472
- type: Input
1473
- }], filterMode: [{
1474
- type: Input
1475
- }], filterPlaceholder: [{
1476
- type: Input
1477
- }], filteredNodes: [{
1478
- type: Input
1479
- }], filterLocale: [{
1480
- type: Input
1481
- }], scrollHeight: [{
1482
- type: Input
1483
- }], lazy: [{
1484
- type: Input,
1485
- args: [{ transform: booleanAttribute }]
1486
- }], virtualScroll: [{
1487
- type: Input,
1488
- args: [{ transform: booleanAttribute }]
1489
- }], virtualScrollItemSize: [{
1490
- type: Input,
1491
- args: [{ transform: numberAttribute }]
1492
- }], virtualScrollOptions: [{
1493
- type: Input
1494
- }], indentation: [{
1495
- type: Input,
1496
- args: [{ transform: numberAttribute }]
1497
- }], _templateMap: [{
1498
- type: Input
1499
- }], nodeActionButton: [{
1500
- type: Input
1501
- }], actionButtonMode: [{
1502
- type: Input
1503
- }], trackBy: [{
1504
- type: Input
1505
- }], virtualNodeHeight: [{
1506
- type: Input
1507
- }], selectionChange: [{
1508
- type: Output
1509
- }], onNodeSelect: [{
1510
- type: Output
1511
- }], onNodeUnselect: [{
1512
- type: Output
1513
- }], onNodeExpand: [{
1514
- type: Output
1515
- }], onNodeCollapse: [{
1516
- type: Output
1517
- }], onNodeContextMenuSelect: [{
1518
- type: Output
1519
- }], onNodeDrop: [{
1520
- type: Output
1521
- }], onLazyLoad: [{
1522
- type: Output
1523
- }], onScroll: [{
1524
- type: Output
1525
- }], onScrollIndexChange: [{
1526
- type: Output
1527
- }], onFilter: [{
1528
- type: Output
1529
- }], onNodeActionClick: [{
1530
- type: Output
1531
- }], templates: [{
1532
- type: ContentChildren,
1533
- args: [CaxTemplate]
1534
- }], filterViewChild: [{
1535
- type: ViewChild,
1536
- args: ['filter']
1537
- }], scroller: [{
1538
- type: ViewChild,
1539
- args: ['scroller']
1540
- }], wrapperViewChild: [{
1541
- type: ViewChild,
1542
- args: ['wrapper']
1543
- }] } });
1544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy90cmVlL3RyZWUudHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvdHJlZS90cmVlbm9kZS5odG1sIiwiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3RyZWUvdHJlZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixRQUFRLEVBQ1IsTUFBTSxFQUlOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixXQUFXLEVBQW1CLGVBQWUsRUFBaUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBd0J0RCxNQUFNLE9BQU8sVUFBVTtJQUNuQixNQUFNLENBQUMsVUFBVSxHQUFXLG9CQUFvQixDQUFDO0lBRXhDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFM0IsT0FBTyxDQUFNO0lBRWIsSUFBSSxDQUE0QjtJQUVoQyxVQUFVLENBQTRCO0lBRXRDLGdCQUFnQixDQUFxQjtJQUVyQyxnQkFBZ0IsR0FBbUMsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBc0I7SUFFM0IsS0FBSyxDQUFxQjtJQUV6QixVQUFVLENBQXNCO0lBRWhDLFNBQVMsQ0FBc0I7SUFFaEMsS0FBSyxDQUFxQjtJQUUxQixXQUFXLENBQXFCO0lBRWhDLFFBQVEsQ0FBcUI7SUFFM0QsV0FBVyxDQUFTO0lBRW5CLGlCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFD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QUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmxvY2thYmxlVUksIGNheENvbmZpZywgQ2F4VGVtcGxhdGUsIFNjcm9sbGVyT3B0aW9ucywgVHJhbnNsYXRpb25LZXlzLCBUcmVlRHJhZ0Ryb3BTZXJ2aWNlLCBUcmVlTm9kZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2FwaSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vZG9tJztcbmltcG9ydCB7IFNjcm9sbGVyIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vc2Nyb2xsZXInO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vdHMtaGVscGVycyc7XG5pbXBvcnQge1xuICAgIFRyZWVGaWx0ZXJFdmVudCxcbiAgICBUcmVlTGF6eUxvYWRFdmVudCxcbiAgICBUcmVlTm9kZUNvbGxhcHNlRXZlbnQsXG4gICAgVHJlZU5vZGVDb250ZXh0TWVudVNlbGVjdEV2ZW50LFxuICAgIFRyZWVOb2RlRHJvcEV2ZW50LFxuICAgIFRyZWVOb2RlRXhwYW5kRXZlbnQsXG4gICAgVHJlZU5vZGVTZWxlY3RFdmVudCxcbiAgICBUcmVlTm9kZVVuU2VsZWN0RXZlbnQsXG4gICAgVHJlZVNjcm9sbEV2ZW50LFxuICAgIFRyZWVTY3JvbGxJbmRleENoYW5nZUV2ZW50XG59IGZyb20gJy4vdHJlZS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC10cmVlTm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWVub2RlLmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NheC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVUlUcmVlTm9kZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgc3RhdGljIElDT05fQ0xBU1M6IHN0cmluZyA9ICdjYXgtdHJlZW5vZGUtaWNvbiAnO1xuXG4gICAgQElucHV0KCkgcmlnaHRJY29uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSByb3dOb2RlOiBhbnk7XG5cbiAgICBASW5wdXQoKSBub2RlOiBUcmVlTm9kZTxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgcGFyZW50Tm9kZTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIG5vZGVBY3Rpb25CdXR0b246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbk1vZGU6ICdob3ZlcicgfCAnc2VsZWN0JyB8IHVuZGVmaW5lZCA9ICdob3Zlcic7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcm9vdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmlyc3RDaGlsZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsYXN0Q2hpbGQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBsZXZlbDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaW5kZW50YXRpb246IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGl0ZW1TaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBsb2FkaW5nTW9kZTogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgpIG9uTm9kZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgdHJlZTogVHJlZTtcblxuICAgIHRpbWVvdXQ6IGFueTtcblxuICAgIGRyYWdob3ZlclByZXY6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBkcmFnaG92ZXJOZXh0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgZHJhZ2hvdmVyTm9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGdldCBhcmlhU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgfHwgdGhpcy50cmVlLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScgPyB0aGlzLmlzU2VsZWN0ZWQoKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgYXJpYUNoZWNrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuc2VsZWN0aW9uTW9kZSA9PT0gJ2NoZWNrYm94JyA/IHRoaXMuaXNTZWxlY3RlZCgpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBUcmVlKSkgdHJlZTogVHJlZSkge1xuICAgICAgICB0aGlzLnRyZWUgPSB0cmVlIGFzIFRyZWU7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5wYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLnRyZWUuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcERpYWxvZ1dyYXBwZXIgPSBuYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2NheC1kaWFsb2cnKTtcblxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlICYmICFwRGlhbG9nV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5zZXRBbGxOb2Rlc1RhYkluZGV4ZXMoKTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5zeW5jTm9kZU9wdGlvbig8VHJlZU5vZGU+dGhpcy5ub2RlLCA8VHJlZU5vZGU8YW55PltdPnRoaXMudHJlZS52YWx1ZSwgJ3BhcmVudCcsIHRoaXMudHJlZS5nZXROb2RlV2l0aEtleSg8c3RyaW5nPnRoaXMucGFyZW50Tm9kZS5rZXksIDxUcmVlTm9kZTxhbnk+W10+dGhpcy50cmVlLnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uKCkge1xuICAgICAgICBsZXQgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICgoPFRyZWVOb2RlPnRoaXMubm9kZSkuaWNvbikgaWNvbiA9ICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5pY29uIGFzIHN0cmluZztcbiAgICAgICAgZWxzZSBpY29uID0gKDxUcmVlTm9kZT50aGlzLm5vZGUpLmV4cGFuZGVkICYmICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5jaGlsZHJlbiAmJiAoPFRyZWVOb2RlPnRoaXMubm9kZSkuY2hpbGRyZW4/Lmxlbmd0aCA/ICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5leHBhbmRlZEljb24gOiAoPFRyZWVOb2RlPnRoaXMubm9kZSkuY29sbGFwc2VkSWNvbjtcblxuICAgICAgICByZXR1cm4gVUlUcmVlTm9kZS5JQ09OX0NMQVNTICsgJyAnICsgaWNvbjtcbiAgICB9XG4gICAgZ2V0UmlnaHRJY29uKCkge1xuICAgICAgICBsZXQgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICgoPFRyZWVOb2RlPnRoaXMubm9kZSkucmlnaHRJY29uKSBpY29uID0gKDxUcmVlTm9kZT50aGlzLm5vZGUpLnJpZ2h0SWNvbiBhcyBzdHJpbmc7XG4gICAgICAgIGVsc2UgaWNvbiA9ICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5leHBhbmRlZCAmJiAoPFRyZWVOb2RlPnRoaXMubm9kZSkuY2hpbGRyZW4gJiYgKDxUcmVlTm9kZT50aGlzLm5vZGUpLmNoaWxkcmVuPy5sZW5ndGggPyAoPFRyZWVOb2RlPnRoaXMubm9kZSkuZXhwYW5kZWRJY29uIDogKDxUcmVlTm9kZT50aGlzLm5vZGUpLmNvbGxhcHNlZEljb247XG5cbiAgICAgICAgcmV0dXJuIFVJVHJlZU5vZGUuSUNPTl9DTEFTUyArICcgJyArIGljb247XG4gICAgfVxuXG4gICAgb25Ob2RlQWN0aW9uKGV2ZW50OiBFdmVudCwgbm9kZTogVHJlZU5vZGUpIHtcbiAgICAgICAgdGhpcy5vbk5vZGVBY3Rpb25DbGljay5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgfVxuXG4gICAgaXNMZWFmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLmlzTm9kZUxlYWYoPFRyZWVOb2RlPnRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoKDxUcmVlTm9kZT50aGlzLm5vZGUpLmV4cGFuZGVkKSB0aGlzLmNvbGxhcHNlKGV2ZW50KTtcbiAgICAgICAgZWxzZSB0aGlzLmV4cGFuZChldmVudCk7XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kKGV2ZW50OiBFdmVudCkge1xuICAgICAgICAoPFRyZWVOb2RlPnRoaXMubm9kZSkuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy50cmVlLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZS51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNWaXJ0dWFsTm9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJlZS5vbk5vZGVFeHBhbmQuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiA8VHJlZU5vZGU+dGhpcy5ub2RlIH0pO1xuICAgIH1cblxuICAgIGNvbGxhcHNlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICAoPFRyZWVOb2RlPnRoaXMubm9kZSkuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudHJlZS52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUudXBkYXRlU2VyaWFsaXplZFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVmlydHVhbE5vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyZWUub25Ob2RlQ29sbGFwc2UuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiA8VHJlZU5vZGU+dGhpcy5ub2RlIH0pO1xuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMudHJlZS5vbk5vZGVDbGljayhldmVudCwgPFRyZWVOb2RlPnRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgb25Ob2RlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUub25Ob2RlQ2xpY2soZXZlbnQsIDxUcmVlTm9kZT50aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG91Y2hFbmQoKSB7XG4gICAgICAgIHRoaXMudHJlZS5vbk5vZGVUb3VjaEVuZCgpO1xuICAgIH1cblxuICAgIG9uTm9kZVJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy50cmVlLm9uTm9kZVJpZ2h0Q2xpY2soZXZlbnQsIDxUcmVlTm9kZT50aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuaXNTZWxlY3RlZCg8VHJlZU5vZGU+dGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICBpc1NhbWVOb2RlKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIChldmVudC5jdXJyZW50VGFyZ2V0LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0KSB8fCBldmVudC5jdXJyZW50VGFyZ2V0LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSkpO1xuICAgIH1cblxuICAgIG9uRHJvcFBvaW50KGV2ZW50OiBEcmFnRXZlbnQsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGRyYWdOb2RlID0gdGhpcy50cmVlLmRyYWdOb2RlO1xuICAgICAgICBsZXQgZHJhZ05vZGVJbmRleCA9IHRoaXMudHJlZS5kcmFnTm9kZUluZGV4O1xuICAgICAgICBsZXQgZHJhZ05vZGVTY29wZSA9IHRoaXMudHJlZS5kcmFnTm9kZVNjb3BlO1xuICAgICAgICBsZXQgaXNWYWxpZERyb3BQb2ludEluZGV4ID0gdGhpcy50cmVlLmRyYWdOb2RlVHJlZSA9PT0gdGhpcy50cmVlID8gcG9zaXRpb24gPT09IDEgfHwgZHJhZ05vZGVJbmRleCAhPT0gPG51bWJlcj50aGlzLmluZGV4IC0gMSA6IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMudHJlZS5hbGxvd0Ryb3AoPFRyZWVOb2RlPmRyYWdOb2RlLCA8VHJlZU5vZGU+dGhpcy5ub2RlLCBkcmFnTm9kZVNjb3BlKSAmJiBpc1ZhbGlkRHJvcFBvaW50SW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBkcm9wUGFyYW1zID0geyAuLi50aGlzLmNyZWF0ZURyb3BQb2ludEV2ZW50TWV0YWRhdGEoPG51bWJlcj5wb3NpdGlvbikgfTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZS52YWxpZGF0ZURyb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWUub25Ob2RlRHJvcC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJvcE5vZGU6IHRoaXMubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUG9pbnREcm9wKGRyb3BQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BvaW50RHJvcChkcm9wUGFyYW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWUub25Ob2RlRHJvcC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJvcE5vZGU6IHRoaXMubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJhZ2hvdmVyUHJldiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdob3Zlck5leHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUG9pbnREcm9wKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IG5ld05vZGVMaXN0ID0gZXZlbnQuZHJvcE5vZGUucGFyZW50ID8gZXZlbnQuZHJvcE5vZGUucGFyZW50LmNoaWxkcmVuIDogdGhpcy50cmVlLnZhbHVlO1xuICAgICAgICBldmVudC5kcmFnTm9kZVN1Yk5vZGVzLnNwbGljZShldmVudC5kcmFnTm9kZUluZGV4LCAxKTtcbiAgICAgICAgbGV0IGRyb3BJbmRleCA9IHRoaXMuaW5kZXg7XG5cbiAgICAgICAgaWYgKGV2ZW50LnBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgZHJvcEluZGV4ID0gZXZlbnQuZHJhZ05vZGVTdWJOb2RlcyA9PT0gbmV3Tm9kZUxpc3QgPyAoZXZlbnQuZHJhZ05vZGVJbmRleCA+IGV2ZW50LmluZGV4ID8gZXZlbnQuaW5kZXggOiBldmVudC5pbmRleCAtIDEpIDogZXZlbnQuaW5kZXg7XG4gICAgICAgICAgICBuZXdOb2RlTGlzdC5zcGxpY2UoZHJvcEluZGV4LCAwLCBldmVudC5kcmFnTm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcm9wSW5kZXggPSBuZXdOb2RlTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXdOb2RlTGlzdC5wdXNoKGV2ZW50LmRyYWdOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJlZS5kcmFnRHJvcFNlcnZpY2Uuc3RvcERyYWcoe1xuICAgICAgICAgICAgbm9kZTogZXZlbnQuZHJhZ05vZGUsXG4gICAgICAgICAgICBzdWJOb2RlczogZXZlbnQuZHJvcE5vZGUucGFyZW50ID8gZXZlbnQuZHJvcE5vZGUucGFyZW50LmNoaWxkcmVuIDogdGhpcy50cmVlLnZhbHVlLFxuICAgICAgICAgICAgaW5kZXg6IGV2ZW50LmRyYWdOb2RlSW5kZXhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlRHJvcFBvaW50RXZlbnRNZXRhZGF0YShwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkcmFnTm9kZTogdGhpcy50cmVlLmRyYWdOb2RlLFxuICAgICAgICAgICAgZHJhZ05vZGVJbmRleDogdGhpcy50cmVlLmRyYWdOb2RlSW5kZXgsXG4gICAgICAgICAgICBkcmFnTm9kZVN1Yk5vZGVzOiB0aGlzLnRyZWUuZHJhZ05vZGVTdWJOb2RlcyxcbiAgICAgICAgICAgIGRyb3BOb2RlOiB0aGlzLm5vZGUsXG4gICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uRHJvcFBvaW50RHJhZ092ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkRyb3BQb2ludERyYWdFbnRlcihldmVudDogRXZlbnQsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5hbGxvd0Ryb3AoPFRyZWVOb2RlPnRoaXMudHJlZS5kcmFnTm9kZSwgPFRyZWVOb2RlPnRoaXMubm9kZSwgdGhpcy50cmVlLmRyYWdOb2RlU2NvcGUpKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB0aGlzLmRyYWdob3ZlclByZXYgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmRyYWdob3Zlck5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ecm9wUG9pbnREcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZHJhZ2hvdmVyUHJldiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdob3Zlck5leHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWUuZHJhZ2dhYmxlTm9kZXMgJiYgKDxUcmVlTm9kZT50aGlzLm5vZGUpLmRyYWdnYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0JywgJ2RhdGEnKTtcblxuICAgICAgICAgICAgdGhpcy50cmVlLmRyYWdEcm9wU2VydmljZS5zdGFydERyYWcoe1xuICAgICAgICAgICAgICAgIHRyZWU6IHRoaXMsXG4gICAgICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlLFxuICAgICAgICAgICAgICAgIHN1Yk5vZGVzOiB0aGlzLm5vZGU/LnBhcmVudCA/IHRoaXMubm9kZS5wYXJlbnQuY2hpbGRyZW4gOiB0aGlzLnRyZWUudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMudHJlZS5kcmFnZ2FibGVTY29wZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RvcChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMudHJlZS5kcmFnRHJvcFNlcnZpY2Uuc3RvcERyYWcoe1xuICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlLFxuICAgICAgICAgICAgc3ViTm9kZXM6IHRoaXMubm9kZT8ucGFyZW50ID8gdGhpcy5ub2RlLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMudHJlZS52YWx1ZSxcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRHJvcE5vZGVEcmFnT3ZlcihldmVudDogYW55KSB7XG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xuICAgICAgICBpZiAodGhpcy50cmVlLmRyb3BwYWJsZU5vZGVzKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyb3BOb2RlKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5kcm9wcGFibGVOb2RlcyAmJiB0aGlzLm5vZGU/LmRyb3BwYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGxldCBkcmFnTm9kZSA9IHRoaXMudHJlZS5kcmFnTm9kZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZS5hbGxvd0Ryb3AoPFRyZWVOb2RlPmRyYWdOb2RlLCA8VHJlZU5vZGU+dGhpcy5ub2RlLCB0aGlzLnRyZWUuZHJhZ05vZGVTY29wZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZHJvcFBhcmFtcyA9IHsgLi4udGhpcy5jcmVhdGVEcm9wTm9kZUV2ZW50TWV0YWRhdGEoKSB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZS52YWxpZGF0ZURyb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiB0aGlzLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc05vZGVEcm9wKGRyb3BQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NOb2RlRHJvcChkcm9wUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiB0aGlzLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kcmFnaG92ZXJOb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY3JlYXRlRHJvcE5vZGVFdmVudE1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZHJhZ05vZGU6IHRoaXMudHJlZS5kcmFnTm9kZSxcbiAgICAgICAgICAgIGRyYWdOb2RlSW5kZXg6IHRoaXMudHJlZS5kcmFnTm9kZUluZGV4LFxuICAgICAgICAgICAgZHJhZ05vZGVTdWJOb2RlczogdGhpcy50cmVlLmRyYWdOb2RlU3ViTm9kZXMsXG4gICAgICAgICAgICBkcm9wTm9kZTogdGhpcy5ub2RlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvY2Vzc05vZGVEcm9wKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IGRyYWdOb2RlSW5kZXggPSBldmVudC5kcmFnTm9kZUluZGV4O1xuICAgICAgICBldmVudC5kcmFnTm9kZVN1Yk5vZGVzLnNwbGljZShkcmFnTm9kZUluZGV4LCAxKTtcblxuICAgICAgICBpZiAoZXZlbnQuZHJvcE5vZGUuY2hpbGRyZW4pIGV2ZW50LmRyb3BOb2RlLmNoaWxkcmVuLnB1c2goZXZlbnQuZHJhZ05vZGUpO1xuICAgICAgICBlbHNlIGV2ZW50LmRyb3BOb2RlLmNoaWxkcmVuID0gW2V2ZW50LmRyYWdOb2RlXTtcblxuICAgICAgICB0aGlzLnRyZWUuZHJhZ0Ryb3BTZXJ2aWNlLnN0b3BEcmFnKHtcbiAgICAgICAgICAgIG5vZGU6IGV2ZW50LmRyYWdOb2RlLFxuICAgICAgICAgICAgc3ViTm9kZXM6IGV2ZW50LmRyb3BOb2RlLnBhcmVudCA/IGV2ZW50LmRyb3BOb2RlLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMudHJlZS52YWx1ZSxcbiAgICAgICAgICAgIGluZGV4OiBkcmFnTm9kZUluZGV4XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRHJvcE5vZGVEcmFnRW50ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy50cmVlLmRyb3BwYWJsZU5vZGVzICYmIHRoaXMubm9kZT8uZHJvcHBhYmxlICE9PSBmYWxzZSAmJiB0aGlzLnRyZWUuYWxsb3dEcm9wKDxUcmVlTm9kZT50aGlzLnRyZWUuZHJhZ05vZGUsIDxUcmVlTm9kZT50aGlzLm5vZGUsIHRoaXMudHJlZS5kcmFnTm9kZVNjb3BlKSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnaG92ZXJOb2RlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcE5vZGVEcmFnTGVhdmUoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy50cmVlLmRyb3BwYWJsZU5vZGVzKSB7XG4gICAgICAgICAgICBsZXQgcmVjdCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBpZiAoZXZlbnQueCA+IHJlY3QubGVmdCArIHJlY3Qud2lkdGggfHwgZXZlbnQueCA8IHJlY3QubGVmdCB8fCBldmVudC55ID49IE1hdGguZmxvb3IocmVjdC50b3AgKyByZWN0LmhlaWdodCkgfHwgZXZlbnQueSA8IHJlY3QudG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnaG92ZXJOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2FtZU5vZGUoZXZlbnQpIHx8ICh0aGlzLnRyZWUuY29udGV4dE1lbnUgJiYgdGhpcy50cmVlLmNvbnRleHRNZW51LmNvbnRhaW5lclZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgICAvL2Rvd24gYXJyb3dcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vdXAgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy9yaWdodCBhcnJvd1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93UmlnaHQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL2xlZnQgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93TGVmdChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vZW50ZXJcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ051bXBhZEVudGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL3NwYWNlXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQubm9kZU5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFbJ0lOUFVUJ10uaW5jbHVkZXMobm9kZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FbnRlcihldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL3RhYlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFsbE5vZGVzVGFiSW5kZXhlcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vbm8gb3BcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlRWxlbWVudCA9ICg8SFRNTERpdkVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGMtc2VjdGlvbicpID09PSAndG9nZ2xlcicgPyAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpIDogKDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQpLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKG5vZGVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2Uobm9kZUVsZW1lbnQsIG5vZGVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcsIHRoaXMuZmluZExhc3RWaXNpYmxlRGVzY2VuZGFudChub2RlRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50Tm9kZUVsZW1lbnQgPSB0aGlzLmdldFBhcmVudE5vZGVFbGVtZW50KG5vZGVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Jvd0NoYW5nZShub2RlRWxlbWVudCwgcGFyZW50Tm9kZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlRWxlbWVudCA9ICg8SFRNTERpdkVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGMtc2VjdGlvbicpID09PSAndG9nZ2xlcicgPyAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpIDogPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldDtcbiAgICAgICAgY29uc3QgbGlzdEVsZW1lbnQgPSBub2RlRWxlbWVudC5jaGlsZHJlblsxXTtcblxuICAgICAgICBpZiAobGlzdEVsZW1lbnQgJiYgbGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Jvd0NoYW5nZShub2RlRWxlbWVudCwgbGlzdEVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGVFbGVtZW50LnBhcmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Jvd0NoYW5nZShub2RlRWxlbWVudCwgbm9kZUVsZW1lbnQucGFyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dFNpYmxpbmdBbmNlc3RvciA9IHRoaXMuZmluZE5leHRTaWJsaW5nT2ZBbmNlc3Rvcihub2RlRWxlbWVudC5wYXJlbnRFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0FuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2Uobm9kZUVsZW1lbnQsIG5leHRTaWJsaW5nQW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMubm9kZT8uZXhwYW5kZWQgJiYgIXRoaXMudHJlZS5pc05vZGVMZWFmKDxUcmVlTm9kZT50aGlzLm5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZChldmVudCk7XG4gICAgICAgICAgICAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LmN1cnJlbnRUYXJnZXQpLnRhYkluZGV4ID0gLTE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlRWxlbWVudCA9ICg8SFRNTERpdkVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGMtc2VjdGlvbicpID09PSAndG9nZ2xlcicgPyAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpIDogPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldDtcblxuICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCAmJiAhdGhpcy5ub2RlPy5leHBhbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZT8uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmVudE5vZGVFbGVtZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlRWxlbWVudChub2RlRWxlbWVudC5wYXJlbnRFbGVtZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Tm9kZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2UoZXZlbnQuY3VycmVudFRhcmdldCwgcGFyZW50Tm9kZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpc0FjdGlvbmFibGVFbGVtZW50KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICBjb25zdCBpc0FjdGlvbmFibGUgPSB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAodGFyZ2V0Lm5vZGVOYW1lID09ICdBJyB8fCB0YXJnZXQubm9kZU5hbWUgPT0gJ0JVVFRPTicpO1xuXG4gICAgICAgIHJldHVybiBpc0FjdGlvbmFibGU7XG4gICAgfVxuXG4gICAgb25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLnRyZWUub25Ob2RlQ2xpY2soZXZlbnQsIDxUcmVlTm9kZT50aGlzLm5vZGUpO1xuICAgICAgICB0aGlzLnNldFRhYkluZGV4Rm9yU2VsZWN0aW9uTW9kZShldmVudCwgdGhpcy50cmVlLm5vZGVUb3VjaGVkKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3Rpb25hYmxlRWxlbWVudChldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxOb2Rlc1RhYkluZGV4ZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gRG9tSGFuZGxlci5maW5kKHRoaXMudHJlZS5lbC5uYXRpdmVFbGVtZW50LCAnLmNheC10cmVlbm9kZScpO1xuXG4gICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkTm9kZSA9IFsuLi5ub2Rlc10uc29tZSgobm9kZSkgPT4gbm9kZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnKSA9PT0gJ3RydWUnIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnKSA9PT0gJ3RydWUnKTtcblxuICAgICAgICBbLi4ubm9kZXNdLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUudGFiSW5kZXggPSAtMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc1NlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlcyA9IFsuLi5ub2Rlc10uZmlsdGVyKChub2RlKSA9PiBub2RlLmdldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcpID09PSAndHJ1ZScgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcpID09PSAndHJ1ZScpO1xuXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzWzBdLnRhYkluZGV4ID0gMDtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgWy4uLm5vZGVzXVswXS50YWJJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgc2V0VGFiSW5kZXhGb3JTZWxlY3Rpb25Nb2RlKGV2ZW50LCBub2RlVG91Y2hlZCkge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbk1vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLkRvbUhhbmRsZXIuZmluZCh0aGlzLnRyZWUuZWwubmF0aXZlRWxlbWVudCwgJy5jYXgtdHJlZW5vZGUnKV07XG5cbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQudGFiSW5kZXggPSBub2RlVG91Y2hlZCA9PT0gZmFsc2UgPyAtMSA6IDA7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50cy5ldmVyeSgoZWxlbWVudCkgPT4gZWxlbWVudC50YWJJbmRleCA9PT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHNbMF0udGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZE5leHRTaWJsaW5nT2ZBbmNlc3Rvcihub2RlRWxlbWVudDogYW55KTogYW55IHtcbiAgICAgICAgbGV0IHBhcmVudE5vZGVFbGVtZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlRWxlbWVudChub2RlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSByZXR1cm4gcGFyZW50Tm9kZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5maW5kTmV4dFNpYmxpbmdPZkFuY2VzdG9yKHBhcmVudE5vZGVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZExhc3RWaXNpYmxlRGVzY2VuZGFudChub2RlRWxlbWVudDogYW55KTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+QXJyYXkuZnJvbShub2RlRWxlbWVudC5jaGlsZHJlbikuZmluZCgoZWwpID0+IERvbUhhbmRsZXIuaGFzQ2xhc3MoZWwsICdjYXgtdHJlZW5vZGUnKSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuTGlzdEVsZW1lbnQgPSBsaXN0RWxlbWVudC5jaGlsZHJlblsxXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuTGlzdEVsZW1lbnQgJiYgY2hpbGRyZW5MaXN0RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q2hpbGRFbGVtZW50ID0gY2hpbGRyZW5MaXN0RWxlbWVudC5jaGlsZHJlbltjaGlsZHJlbkxpc3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVEZXNjZW5kYW50KGxhc3RDaGlsZEVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50Tm9kZUVsZW1lbnQobm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlRWxlbWVudCA9IG5vZGVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudE5vZGVFbGVtZW50Py50YWdOYW1lID09PSAnUC1UUkVFTk9ERScgPyBwYXJlbnROb2RlRWxlbWVudCA6IG51bGw7XG4gICAgfVxuXG4gICAgZm9jdXNOb2RlKGVsZW1lbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy50cmVlLmRyb3BwYWJsZU5vZGVzKSAoZWxlbWVudC5jaGlsZHJlblsxXSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgICAgICAgZWxzZSAoZWxlbWVudC5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb2N1c1Jvd0NoYW5nZShmaXJzdEZvY3VzYWJsZVJvdywgY3VycmVudEZvY3VzZWRSb3csIGxhc3RWaXNpYmxlRGVzY2VuZGFudD8pIHtcbiAgICAgICAgZmlyc3RGb2N1c2FibGVSb3cudGFiSW5kZXggPSAnLTEnO1xuICAgICAgICBjdXJyZW50Rm9jdXNlZFJvdy5jaGlsZHJlblswXS50YWJJbmRleCA9ICcwJztcblxuICAgICAgICB0aGlzLmZvY3VzTm9kZShsYXN0VmlzaWJsZURlc2NlbmRhbnQgfHwgY3VycmVudEZvY3VzZWRSb3cpO1xuICAgIH1cblxuICAgIGZvY3VzVmlydHVhbE5vZGUoKSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUoZG9jdW1lbnQuYm9keSwgYFtkYXRhLWlkPVwiJHs8VHJlZU5vZGU+dGhpcy5ub2RlPy5rZXkgPz8gPFRyZWVOb2RlPnRoaXMubm9kZT8uZGF0YX1cIl1gKTtcbiAgICAgICAgICAgIERvbUhhbmRsZXIuZm9jdXMobm9kZSk7XG4gICAgICAgIH0sIDEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUcmVlIGlzIHVzZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgZGF0YS5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F4LXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL3RyZWUuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdjYXgtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRyZWUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBCbG9ja2FibGVVSSB7XG4gICAgQElucHV0KCkgcmlnaHRJY29uOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdHJlZW5vZGVzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBUcmVlTm9kZTxhbnk+IHwgVHJlZU5vZGU8YW55PltdIHwgYW55W10gfCBhbnk7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc2VsZWN0aW9uIG1vZGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgJ2NoZWNrYm94JyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBhbGxvd1Vuc2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBMb2FkaW5nIG1vZGUgZGlzcGxheS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nTW9kZTogJ21hc2snIHwgJ2ljb24nID0gJ21hc2snO1xuICAgIC8qKlxuICAgICAqIEEgc2luZ2xlIHRyZWVub2RlIGluc3RhbmNlIG9yIGFuIGFycmF5IHRvIHJlZmVyIHRvIHRoZSBzZWxlY3Rpb25zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbjogYW55O1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIENvbnRleHQgbWVudSBpbnN0YW5jZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb250ZXh0TWVudTogYW55O1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSB0cmVlLCB2YWxpZCB2YWx1ZXMgYXJlICd2ZXJ0aWNhbCcgYW5kICdob3Jpem9udGFsJy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsYXlvdXQ6IHN0cmluZyA9ICd2ZXJ0aWNhbCc7XG4gICAgLyoqXG4gICAgICogU2NvcGUgb2YgdGhlIGRyYWdnYWJsZSBub2RlcyB0byBtYXRjaCBhIGRyb3BwYWJsZVNjb3BlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZVNjb3BlOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2NvcGUgb2YgdGhlIGRyb3BwYWJsZSBub2RlcyB0byBtYXRjaCBhIGRyYWdnYWJsZVNjb3BlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3BwYWJsZVNjb3BlOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbm9kZXMgYXJlIGRyYWdnYWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZHJhZ2dhYmxlTm9kZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbm9kZXMgYXJlIGRyb3BwYWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZHJvcHBhYmxlTm9kZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBob3cgbXVsdGlwbGUgaXRlbXMgY2FuIGJlIHNlbGVjdGVkLCB3aGVuIHRydWUgbWV0YUtleSBuZWVkcyB0byBiZSBwcmVzc2VkIHRvIHNlbGVjdCBvciB1bnNlbGVjdCBhbiBpdGVtIGFuZCB3aGVuIHNldCB0byBmYWxzZSBzZWxlY3Rpb24gb2YgZWFjaCBpdGVtIGNhbiBiZSB0b2dnbGVkIGluZGl2aWR1YWxseS4gT24gdG91Y2ggZW5hYmxlZCBkZXZpY2VzLCBtZXRhS2V5U2VsZWN0aW9uIGlzIHR1cm5lZCBvZmYgYXV0b21hdGljYWxseS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbWV0YUtleVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY2hlY2tib3ggc2VsZWN0aW9ucyBwcm9wYWdhdGUgdG8gYW5jZXN0b3Igbm9kZXMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHByb3BhZ2F0ZVNlbGVjdGlvblVwOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGNoZWNrYm94IHNlbGVjdGlvbnMgcHJvcGFnYXRlIHRvIGRlc2NlbmRhbnQgbm9kZXMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHByb3BhZ2F0ZVNlbGVjdGlvbkRvd246IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgbG9hZGVyIHRvIGluZGljYXRlIGRhdGEgbG9hZCBpcyBpbiBwcm9ncmVzcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUaGUgaWNvbiB0byBzaG93IHdoaWxlIGluZGljYXRpbmcgZGF0YSBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmdJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGVmaW5lIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSB0cmVlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBzdHJpbmcgdGhhdCBsYWJlbHMgdGhlIHRvZ2dsZXIgaWNvbiBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0b2dnbGVyQXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRXN0YWJsaXNoZXMgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYW5kIGxhYmVsKHMpIHdoZXJlIGl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGRyb3AgY2FuIGJlIGFjY2VwdGVkIG9yIHJlamVjdGVkIGJhc2VkIG9uIGNvbmRpdGlvbiBkZWZpbmVkIGF0IG9uTm9kZURyb3AuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHZhbGlkYXRlRHJvcDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHNwZWNpZmllZCwgZGlzcGxheXMgYW4gaW5wdXQgZmllbGQgdG8gZmlsdGVyIHRoZSBpdGVtcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmlsdGVyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIGZpbHRlckJ5IGRlY2lkZXMgd2hpY2ggZmllbGQgb3IgZmllbGRzIChjb21tYSBzZXBhcmF0ZWQpIHRvIHNlYXJjaCBhZ2FpbnN0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlckJ5OiBzdHJpbmcgPSAnbGFiZWwnO1xuICAgIC8qKlxuICAgICAqIE1vZGUgZm9yIGZpbHRlcmluZyB2YWxpZCB2YWx1ZXMgYXJlIFwibGVuaWVudFwiIGFuZCBcInN0cmljdFwiLiBEZWZhdWx0IGlzIGxlbmllbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyTW9kZTogc3RyaW5nID0gJ2xlbmllbnQnO1xuICAgIC8qKlxuICAgICAqIFBsYWNlaG9sZGVyIHRleHQgdG8gc2hvdyB3aGVuIGZpbHRlciBpbnB1dCBpcyBlbXB0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ0RlZmF1bHQgUGxhY2Vob2xkZXInO1xuICAgIC8qKlxuICAgICAqIFZhbHVlcyBhZnRlciB0aGUgdHJlZSBub2RlcyBhcmUgZmlsdGVyZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyZWROb2RlczogVHJlZU5vZGU8YW55PltdIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBMb2NhbGUgdG8gdXNlIGluIGZpbHRlcmluZy4gVGhlIGRlZmF1bHQgbG9jYWxlIGlzIHRoZSBob3N0IGVudmlyb25tZW50J3MgY3VycmVudCBsb2NhbGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBzY3JvbGxhYmxlIHZpZXdwb3J0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgaWYgZGF0YSBpcyBsb2FkZWQgYW5kIGludGVyYWN0ZWQgd2l0aCBpbiBsYXp5IG1hbm5lci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBvbiBkZW1hbmQgZHVyaW5nIHNjcm9sbC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgYW4gaXRlbSBpbiB0aGUgbGlzdCBmb3IgVmlydHVhbFNjcm9sbGluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsSXRlbVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHVzZSB0aGUgc2Nyb2xsZXIgZmVhdHVyZS4gVGhlIHByb3BlcnRpZXMgb2Ygc2Nyb2xsZXIgY29tcG9uZW50IGNhbiBiZSB1c2VkIGxpa2UgYW4gb2JqZWN0IGluIGl0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGxPcHRpb25zOiBTY3JvbGxlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5kZW50YXRpb24gZmFjdG9yIGZvciBzcGFjaW5nIG9mIHRoZSBuZXN0ZWQgbm9kZSB3aGVuIHZpcnR1YWwgc2Nyb2xsaW5nIGlzIGVuYWJsZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaW5kZW50YXRpb246IG51bWJlciA9IDEuNTtcbiAgICAvKipcbiAgICAgKiBDdXN0b20gdGVtcGxhdGVzIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgX3RlbXBsYXRlTWFwOiBhbnk7XG5cbiAgICBASW5wdXQoKSBub2RlQWN0aW9uQnV0dG9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25Nb2RlOiAnaG92ZXInIHwgJ3NlbGVjdCcgfCB1bmRlZmluZWQgPSAnaG92ZXInO1xuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIG9wdGltaXplIHRoZSBub2RlIGxpc3QgcmVuZGVyaW5nLCBkZWZhdWx0IGFsZ29yaXRobSBjaGVja3MgZm9yIG9iamVjdCBpZGVudGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0cmFja0J5OiBGdW5jdGlvbiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBub2RlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZXByZWNhdGVkIHVzZSB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBfdmlydHVhbE5vZGVIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBnZXQgdmlydHVhbE5vZGVIZWlnaHQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZpcnR1YWxOb2RlSGVpZ2h0O1xuICAgIH1cbiAgICBzZXQgdmlydHVhbE5vZGVIZWlnaHQodmFsOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdmlydHVhbE5vZGVIZWlnaHQgPSB2YWw7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIHZpcnR1YWxOb2RlSGVpZ2h0IHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsIHVzZSB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIG9uIHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHsoVHJlZU5vZGU8YW55PiB8IFRyZWVOb2RlPGFueT5bXSB8IG51bGwpfSBldmVudCAtIEN1c3RvbSBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxUcmVlTm9kZTxhbnk+IHwgVHJlZU5vZGU8YW55PltdIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVOb2RlPGFueT4gfCBUcmVlTm9kZTxhbnk+W10gfCBudWxsPigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0ge1RyZWVOb2RlU2VsZWN0RXZlbnR9IGV2ZW50IC0gTm9kZSBzZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9kZVNlbGVjdDogRXZlbnRFbWl0dGVyPFRyZWVOb2RlU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTm9kZVNlbGVjdEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyB1bnNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSB7VHJlZU5vZGVVblNlbGVjdEV2ZW50fSBldmVudCAtIE5vZGUgdW5zZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9kZVVuc2VsZWN0OiBFdmVudEVtaXR0ZXI8VHJlZU5vZGVVblNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVVblNlbGVjdEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge1RyZWVOb2RlRXhwYW5kRXZlbnR9IGV2ZW50IC0gTm9kZSBleHBhbmQgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9kZUV4cGFuZDogRXZlbnRFbWl0dGVyPFRyZWVOb2RlRXhwYW5kRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTm9kZUV4cGFuZEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtUcmVlTm9kZUNvbGxhcHNlRXZlbnR9IGV2ZW50IC0gTm9kZSBjb2xsYXBzZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ob2RlQ29sbGFwc2U6IEV2ZW50RW1pdHRlcjxUcmVlTm9kZUNvbGxhcHNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTm9kZUNvbGxhcHNlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkIHdpdGggcmlnaHQgY2xpY2suXG4gICAgICogQHBhcmFtIHtvbk5vZGVDb250ZXh0TWVudVNlbGVjdH0gZXZlbnQgLSBOb2RlIGNvbnRleHQgbWVudSBzZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9kZUNvbnRleHRNZW51U2VsZWN0OiBFdmVudEVtaXR0ZXI8VHJlZU5vZGVDb250ZXh0TWVudVNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVDb250ZXh0TWVudVNlbGVjdEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBkcm9wcGVkLlxuICAgICAqIEBwYXJhbSB7VHJlZU5vZGVEcm9wRXZlbnR9IGV2ZW50IC0gTm9kZSBkcm9wIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk5vZGVEcm9wOiBFdmVudEVtaXR0ZXI8VHJlZU5vZGVEcm9wRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTm9kZURyb3BFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2UgaW4gbGF6eSBtb2RlIHRvIGxvYWQgbmV3IGRhdGEuXG4gICAgICogQHBhcmFtIHtUcmVlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBDdXN0b20gbGF6eSBsb2FkIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxhenlMb2FkOiBFdmVudEVtaXR0ZXI8VHJlZUxhenlMb2FkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTGF6eUxvYWRFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2UgaW4gdmlydHVhbCBzY3JvbGwgbW9kZSB3aGVuIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7VHJlZVNjcm9sbEV2ZW50fSBldmVudCAtIEN1c3RvbSBzY3JvbGwgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsOiBFdmVudEVtaXR0ZXI8VHJlZVNjcm9sbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZVNjcm9sbEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBpbiB2aXJ0dWFsIHNjcm9sbCBtb2RlIHdoZW4gc2Nyb2xsIHBvc2l0aW9uIGFuZCBpdGVtJ3MgcmFuZ2UgaW4gdmlldyBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7VHJlZVNjcm9sbEluZGV4Q2hhbmdlRXZlbnR9IGV2ZW50IC0gU2Nyb2xsIGluZGV4IGNoYW5nZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TY3JvbGxJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPFRyZWVTY3JvbGxJbmRleENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZVNjcm9sbEluZGV4Q2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAcGFyYW0ge1RyZWVGaWx0ZXJFdmVudH0gZXZlbnQgLSBDdXN0b20gZmlsdGVyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbHRlcjogRXZlbnRFbWl0dGVyPFRyZWVGaWx0ZXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVGaWx0ZXJFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBvbk5vZGVBY3Rpb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oQ2F4VGVtcGxhdGUpIHRlbXBsYXRlczogTnVsbGFibGU8UXVlcnlMaXN0PGFueT4+O1xuXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyJykgZmlsdGVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGVyJykgc2Nyb2xsZXI6IE51bGxhYmxlPFNjcm9sbGVyPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3dyYXBwZXInKSB3cmFwcGVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIHNlcmlhbGl6ZWRWYWx1ZTogTnVsbGFibGU8VHJlZU5vZGU8YW55PltdPjtcblxuICAgIGhlYWRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGZvb3RlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGxvYWRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGVtcHR5TWVzc2FnZVRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHRvZ2dsZXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgY2hlY2tib3hJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgbG9hZGluZ0ljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBmaWx0ZXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcHVibGljIG5vZGVUb3VjaGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHB1YmxpYyBkcmFnTm9kZVRyZWU6IFRyZWUgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIGRyYWdOb2RlOiBUcmVlTm9kZTxhbnk+IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHB1YmxpYyBkcmFnTm9kZVN1Yk5vZGVzOiBUcmVlTm9kZTxhbnk+W10gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIGRyYWdOb2RlSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBwdWJsaWMgZHJhZ05vZGVTY29wZTogYW55O1xuXG4gICAgcHVibGljIGRyYWdIb3ZlcjogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBwdWJsaWMgZHJhZ1N0YXJ0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIGRyYWdTdG9wU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIGRyYWdEcm9wU2VydmljZTogVHJlZURyYWdEcm9wU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbmZpZzogY2F4Q29uZmlnLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wcGFibGVOb2Rlcykge1xuICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRTdWJzY3JpcHRpb24gPSB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnU3RhcnQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdOb2RlVHJlZSA9IGV2ZW50LnRyZWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZSA9IGV2ZW50Lm5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZVN1Yk5vZGVzID0gZXZlbnQuc3ViTm9kZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZUluZGV4ID0gZXZlbnQuaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZVNjb3BlID0gZXZlbnQuc2NvcGU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5kcmFnU3RvcFN1YnNjcmlwdGlvbiA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmRyYWdTdG9wJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZVRyZWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVTdWJOb2RlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdOb2RlU2NvcGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0hvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcmlhbGl6ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmlsdGVyQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5maWx0ZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVBY3Rpb24oZXZlbnQ6IEV2ZW50LCBub2RlOiBUcmVlTm9kZSkge1xuICAgICAgICB0aGlzLm9uTm9kZUFjdGlvbkNsaWNrLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgaG9yaXpvbnRhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0ID09ICdob3Jpem9udGFsJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlNZXNzYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNZXNzYWdlIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5FTVBUWV9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICgodGhpcy50ZW1wbGF0ZXMgYXMgUXVlcnlMaXN0PENheFRlbXBsYXRlPikubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMudGVtcGxhdGVzIGFzIFF1ZXJ5TGlzdDxDYXhUZW1wbGF0ZT4pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHlNZXNzYWdlVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2xvYWRlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZXJpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVySWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94SWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcFs8YW55Pml0ZW0ubmFtZV0gPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VyaWFsaXplZFZhbHVlKCkge1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZU5vZGVzKG51bGwsIHRoaXMuZ2V0Um9vdE5vZGUoKSwgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplTm9kZXMocGFyZW50OiBUcmVlTm9kZTxhbnk+IHwgbnVsbCwgbm9kZXM6IFRyZWVOb2RlPGFueT5bXSB8IGFueSwgbGV2ZWw6IG51bWJlciwgdmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdmlzaWJsZSAmJiAocGFyZW50ID8gcGFyZW50LmV4cGFuZGVkIDogdHJ1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICh0aGlzLnNlcmlhbGl6ZWRWYWx1ZSBhcyBUcmVlTm9kZTxhbnk+W10pLnB1c2goPFRyZWVOb2RlPnJvd05vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJvd05vZGUudmlzaWJsZSAmJiBub2RlLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VyaWFsaXplTm9kZXMobm9kZSwgbm9kZS5jaGlsZHJlbiwgbGV2ZWwgKyAxLCByb3dOb2RlLnZpc2libGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKGV2ZW50OiBFdmVudCwgbm9kZTogVHJlZU5vZGUpIHtcbiAgICAgICAgbGV0IGV2ZW50VGFyZ2V0ID0gPEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoRG9tSGFuZGxlci5oYXNDbGFzcyhldmVudFRhcmdldCwgJ2NheC10cmVlLXRvZ2dsZXInKSB8fCBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50VGFyZ2V0LCAnY2F4LXRyZWUtdG9nZ2xlci1pY29uJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnNlbGVjdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zdHlsZSA9ICctLWNheC1mb2N1cy1yaW5nLWNvbG9yOiBub25lOyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLnN0eWxlID0gJy0tY2F4LWZvY3VzLXJpbmctY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmlsdGVyZWROb2RlcygpKSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuZ2V0Tm9kZVdpdGhLZXkoPHN0cmluZz5ub2RlLmtleSwgPFRyZWVOb2RlPGFueT5bXT50aGlzLmZpbHRlcmVkTm9kZXMpIGFzIFRyZWVOb2RlO1xuICAgICAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gaW5kZXggPj0gMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wYWdhdGVTZWxlY3Rpb25Eb3duKSB0aGlzLnByb3BhZ2F0ZURvd24obm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKCh2YWw6IFRyZWVOb2RlLCBpOiBudW1iZXIpID0+IGkgIT0gaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BhZ2F0ZVNlbGVjdGlvblVwICYmIG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVVwKG5vZGUucGFyZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGFnYXRlU2VsZWN0aW9uRG93bikgdGhpcy5wcm9wYWdhdGVEb3duKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2VsZWN0aW9uID0gWy4uLih0aGlzLnNlbGVjdGlvbiB8fCBbXSksIG5vZGVdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BhZ2F0ZVNlbGVjdGlvblVwICYmIG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVVwKG5vZGUucGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgbWV0YVNlbGVjdGlvbiA9IHRoaXMubm9kZVRvdWNoZWQgPyBmYWxzZSA6IHRoaXMubWV0YUtleVNlbGVjdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChtZXRhU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXRhS2V5ID0gKDxLZXlib2FyZEV2ZW50PmV2ZW50KS5tZXRhS2V5IHx8ICg8S2V5Ym9hcmRFdmVudD5ldmVudCkuY3RybEtleTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgbWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigodmFsOiBUcmVlTm9kZSwgaTogbnVtYmVyKSA9PiBpICE9IGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoPFRyZWVOb2RlPm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9ICFtZXRhS2V5ID8gW10gOiB0aGlzLnNlbGVjdGlvbiB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbiwgbm9kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvd1Vuc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigodmFsOiBUcmVlTm9kZSwgaTogbnVtYmVyKSA9PiBpICE9IGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVVuc2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbLi4uKHRoaXMuc2VsZWN0aW9uIHx8IFtdKSwgbm9kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm9kZVRvdWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbk5vZGVUb3VjaEVuZCgpIHtcbiAgICAgICAgdGhpcy5ub2RlVG91Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25Ob2RlUmlnaHRDbGljayhldmVudDogTW91c2VFdmVudCwgbm9kZTogVHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudSkge1xuICAgICAgICAgICAgbGV0IGV2ZW50VGFyZ2V0ID0gPEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGV2ZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcblxuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuaW5jbHVkZXMoJ2NheC10cmVlLXRvZ2dsZXInKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5maW5kSW5kZXhJblNlbGVjdGlvbihub2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBpbmRleCA+PSAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KFtub2RlXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZUNvbnRleHRNZW51U2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZU5vZGVzRXF1YWwgPSAodGhpcy5zZWxlY3Rpb24ua2V5ICYmIHRoaXMuc2VsZWN0aW9uLmtleSA9PT0gbm9kZS5rZXkpIHx8IHRoaXMuc2VsZWN0aW9uID09IG5vZGU7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBhcmVOb2Rlc0VxdWFsID8gMCA6IC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGlvbltpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZU5vZGVzRXF1YWwgPSAoc2VsZWN0ZWROb2RlLmtleSAmJiBzZWxlY3RlZE5vZGUua2V5ID09PSBub2RlLmtleSkgfHwgc2VsZWN0ZWROb2RlID09IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmVOb2Rlc0VxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBzeW5jTm9kZU9wdGlvbihub2RlOiBUcmVlTm9kZSwgcGFyZW50Tm9kZXM6IFRyZWVOb2RlPGFueT5bXSwgb3B0aW9uOiBhbnksIHZhbHVlPzogYW55KSB7XG4gICAgICAgIC8vIHRvIHN5bmNocm9uaXplIHRoZSBub2RlIG9wdGlvbiBiZXR3ZWVuIHRoZSBmaWx0ZXJlZCBub2RlcyBhbmQgdGhlIG9yaWdpbmFsIG5vZGVzKHRoaXMudmFsdWUpXG4gICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5oYXNGaWx0ZXJlZE5vZGVzKCkgPyB0aGlzLmdldE5vZGVXaXRoS2V5KDxzdHJpbmc+bm9kZS5rZXksIHBhcmVudE5vZGVzKSA6IG51bGw7XG4gICAgICAgIGlmIChfbm9kZSkge1xuICAgICAgICAgICAgKDxhbnk+X25vZGUpW29wdGlvbl0gPSB2YWx1ZSB8fCAoPGFueT5ub2RlKVtvcHRpb25dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzRmlsdGVyZWROb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyICYmIHRoaXMuZmlsdGVyZWROb2RlcyAmJiB0aGlzLmZpbHRlcmVkTm9kZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGhhc0ZpbHRlckFjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyICYmIHRoaXMuZmlsdGVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50Py52YWx1ZS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldE5vZGVXaXRoS2V5KGtleTogc3RyaW5nLCBub2RlczogVHJlZU5vZGU8YW55PltdKTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoZWROb2RlID0gdGhpcy5nZXROb2RlV2l0aEtleShrZXksIG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlZE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGFnYXRlVXAobm9kZTogVHJlZU5vZGUsIHNlbGVjdDogYm9vbGVhbikge1xuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkQ291bnQ6IG51bWJlciA9IDA7XG4gICAgICAgICAgICBsZXQgY2hpbGRQYXJ0aWFsU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50Kys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5wYXJ0aWFsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRQYXJ0aWFsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdCAmJiBzZWxlY3RlZENvdW50ID09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbLi4uKHRoaXMuc2VsZWN0aW9uIHx8IFtdKSwgbm9kZV07XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJ0aWFsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5maW5kSW5kZXhJblNlbGVjdGlvbihub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKCh2YWw6IFRyZWVOb2RlLCBpOiBudW1iZXIpID0+IGkgIT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkUGFydGlhbFNlbGVjdGVkIHx8IChzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSkgbm9kZS5wYXJ0aWFsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsc2Ugbm9kZS5wYXJ0aWFsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zeW5jTm9kZU9wdGlvbihub2RlLCA8VHJlZU5vZGU8YW55PltdPnRoaXMuZmlsdGVyZWROb2RlcywgJ3BhcnRpYWxTZWxlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVVwKHBhcmVudCwgc2VsZWN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3BhZ2F0ZURvd24obm9kZTogVHJlZU5vZGUsIHNlbGVjdDogYm9vbGVhbikge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGUpO1xuXG4gICAgICAgIGlmIChzZWxlY3QgJiYgaW5kZXggPT0gLTEgJiYgbm9kZS5zZWxlY3RhYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbLi4uKHRoaXMuc2VsZWN0aW9uIHx8IFtdKSwgdGhpcy5maWx0ZXJVbnNlbGVjdGFibGVDaGlsZHJlbihub2RlKV07XG4gICAgICAgIH0gZWxzZSBpZiAoIXNlbGVjdCAmJiBpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigodmFsOiBUcmVlTm9kZSwgaTogbnVtYmVyKSA9PiBpICE9IGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUucGFydGlhbFNlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zeW5jTm9kZU9wdGlvbihub2RlLCA8VHJlZU5vZGU8YW55PltdPnRoaXMuZmlsdGVyZWROb2RlcywgJ3BhcnRpYWxTZWxlY3RlZCcpO1xuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVEb3duKGNoaWxkLCBzZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlsdGVyVW5zZWxlY3RhYmxlQ2hpbGRyZW4obm9kZTogVHJlZU5vZGUpOiBUcmVlTm9kZSB7XG4gICAgICAgIGxldCBjbG9uZWROb2RlID0gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKGNsb25lZE5vZGUuY2hpbGRyZW4gJiYgY2xvbmVkTm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNsb25lZE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc2VsZWN0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVkTm9kZS5jaGlsZHJlbiA9IGNsb25lZE5vZGUuY2hpbGRyZW4uZmlsdGVyKCh2YWw6IFRyZWVOb2RlKSA9PiB2YWwgIT0gY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGlsZCA9IHRoaXMuZmlsdGVyVW5zZWxlY3RhYmxlQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb25lZE5vZGU7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChub2RlOiBUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kSW5kZXhJblNlbGVjdGlvbihub2RlKSAhPSAtMTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGlzQ2hlY2tib3hTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnY2hlY2tib3gnO1xuICAgIH1cblxuICAgIGlzTm9kZUxlYWYobm9kZTogVHJlZU5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubGVhZiA9PSBmYWxzZSA/IGZhbHNlIDogIShub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBnZXRSb290Tm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWROb2RlcyA/IHRoaXMuZmlsdGVyZWROb2RlcyA6IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0VGVtcGxhdGVGb3JOb2RlKG5vZGU6IFRyZWVOb2RlKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGVNYXApIHJldHVybiBub2RlLnR5cGUgPyB0aGlzLl90ZW1wbGF0ZU1hcFtub2RlLnR5cGVdIDogdGhpcy5fdGVtcGxhdGVNYXBbJ2RlZmF1bHQnXTtcbiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcHBhYmxlTm9kZXMgJiYgKCF0aGlzLnZhbHVlIHx8ICg8YW55PnRoaXMudmFsdWUpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICg8YW55PmV2ZW50KS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wcGFibGVOb2RlcyAmJiAoIXRoaXMudmFsdWUgfHwgKDxhbnk+dGhpcy52YWx1ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBkcmFnTm9kZSA9IHRoaXMuZHJhZ05vZGUgYXMgVHJlZU5vZGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RHJvcChkcmFnTm9kZSwgbnVsbCwgdGhpcy5kcmFnTm9kZVNjb3BlKSkge1xuICAgICAgICAgICAgICAgIGxldCBkcmFnTm9kZUluZGV4ID0gPG51bWJlcj50aGlzLmRyYWdOb2RlSW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUgfHwgW107XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0ZURyb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVEcm9wLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnTm9kZTogZHJhZ05vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wTm9kZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBkcmFnTm9kZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVHJlZURyb3AoZHJhZ05vZGUsIGRyYWdOb2RlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGRyYWdOb2RlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVHJlZURyb3AoZHJhZ05vZGUsIGRyYWdOb2RlSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NUcmVlRHJvcChkcmFnTm9kZTogVHJlZU5vZGUsIGRyYWdOb2RlSW5kZXg6IG51bWJlcikge1xuICAgICAgICAoPFRyZWVOb2RlPGFueT5bXT50aGlzLmRyYWdOb2RlU3ViTm9kZXMpLnNwbGljZShkcmFnTm9kZUluZGV4LCAxKTtcbiAgICAgICAgKHRoaXMudmFsdWUgYXMgVHJlZU5vZGU8YW55PltdKS5wdXNoKGRyYWdOb2RlKTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2Uuc3RvcERyYWcoe1xuICAgICAgICAgICAgbm9kZTogZHJhZ05vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25EcmFnRW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BwYWJsZU5vZGVzICYmIHRoaXMuYWxsb3dEcm9wKDxUcmVlTm9kZT50aGlzLmRyYWdOb2RlLCBudWxsLCB0aGlzLmRyYWdOb2RlU2NvcGUpKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdIb3ZlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BwYWJsZU5vZGVzKSB7XG4gICAgICAgICAgICBsZXQgcmVjdCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmIChldmVudC54ID4gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCB8fCBldmVudC54IDwgcmVjdC5sZWZ0IHx8IGV2ZW50LnkgPiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IHx8IGV2ZW50LnkgPCByZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0hvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhbGxvd0Ryb3AoZHJhZ05vZGU6IFRyZWVOb2RlLCBkcm9wTm9kZTogVHJlZU5vZGU8YW55PiB8IG51bGwsIGRyYWdOb2RlU2NvcGU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWRyYWdOb2RlKSB7XG4gICAgICAgICAgICAvL3ByZXZlbnQgcmFuZG9tIGh0bWwgZWxlbWVudHMgdG8gYmUgZHJhZ2dlZFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNWYWxpZERyYWdTY29wZShkcmFnTm9kZVNjb3BlKSkge1xuICAgICAgICAgICAgbGV0IGFsbG93OiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkcm9wTm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChkcmFnTm9kZSA9PT0gZHJvcE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZHJvcE5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IGRyYWdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhbGxvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsaWREcmFnU2NvcGUoZHJhZ1Njb3BlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGRyb3BTY29wZSA9IHRoaXMuZHJvcHBhYmxlU2NvcGU7XG5cbiAgICAgICAgaWYgKGRyb3BTY29wZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkcm9wU2NvcGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkcmFnU2NvcGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZHJvcFNjb3BlID09PSBkcmFnU2NvcGU7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkcmFnU2NvcGUpKSByZXR1cm4gKDxBcnJheTxhbnk+PmRyYWdTY29wZSkuaW5kZXhPZihkcm9wU2NvcGUpICE9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRyb3BTY29wZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRyYWdTY29wZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8QXJyYXk8YW55Pj5kcm9wU2NvcGUpLmluZGV4T2YoZHJhZ1Njb3BlKSAhPSAtMTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHJhZ1Njb3BlKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzIG9mIGRyb3BTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZHMgb2YgZHJhZ1Njb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIF9maWx0ZXIodmFsdWU6IHN0cmluZykge1xuICAgICAgICBsZXQgZmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE5vZGVzID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWROb2RlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IHRoaXMuZmlsdGVyQnkuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclRleHQgPSBPYmplY3RVdGlscy5yZW1vdmVBY2NlbnRzKGZpbHRlclZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmZpbHRlckxvY2FsZSk7XG4gICAgICAgICAgICBjb25zdCBpc1N0cmljdE1vZGUgPSB0aGlzLmZpbHRlck1vZGUgPT09ICdzdHJpY3QnO1xuICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiA8VHJlZU5vZGU8YW55PltdPnRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29weU5vZGUgPSB7IC4uLm5vZGUgfTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyYW1zV2l0aG91dE5vZGUgPSB7IHNlYXJjaEZpZWxkcywgZmlsdGVyVGV4dCwgaXNTdHJpY3RNb2RlIH07XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoaXNTdHJpY3RNb2RlICYmICh0aGlzLmZpbmRGaWx0ZXJlZE5vZGVzKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSkgfHwgdGhpcy5pc0ZpbHRlck1hdGNoZWQoY29weU5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICghaXNTdHJpY3RNb2RlICYmICh0aGlzLmlzRmlsdGVyTWF0Y2hlZChjb3B5Tm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpIHx8IHRoaXMuZmluZEZpbHRlcmVkTm9kZXMoY29weU5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWROb2Rlcy5wdXNoKGNvcHlOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmlhbGl6ZWRWYWx1ZSgpO1xuICAgICAgICB0aGlzLm9uRmlsdGVyLmVtaXQoe1xuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgIGZpbHRlcmVkVmFsdWU6IHRoaXMuZmlsdGVyZWROb2Rlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgZmlsdGVyLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXRGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWROb2RlcyA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmlld0NoaWxkICYmIHRoaXMuZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRvIHZpcnR1YWwgaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIEluZGV4IHRvIGJlIHNjcm9sbGVkLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsVG9WaXJ0dWFsSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5zY3JvbGxlcj8uc2Nyb2xsVG9JbmRleChpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdG8gdmlydHVhbCBpbmRleC5cbiAgICAgKiBAcGFyYW0ge1Njcm9sbFRvT3B0aW9uc30gb3B0aW9ucyAtIFNjcm9sbCBvcHRpb25zLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsVG8ob3B0aW9uczogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXI/LnNjcm9sbFRvKG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud3JhcHBlclZpZXdDaGlsZCAmJiB0aGlzLndyYXBwZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcHBlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ob3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBvcHRpb25zLmxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gb3B0aW9ucy50b3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kRmlsdGVyZWROb2Rlcyhub2RlOiBUcmVlTm9kZSwgcGFyYW1zV2l0aG91dE5vZGU6IGFueSkge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkTm9kZXMgPSBbLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkTm9kZSBvZiBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3B5Q2hpbGROb2RlID0geyAuLi5jaGlsZE5vZGUgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJNYXRjaGVkKGNvcHlDaGlsZE5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2goY29weUNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZpbHRlck1hdGNoZWQobm9kZTogVHJlZU5vZGUsIHBhcmFtczogYW55KSB7XG4gICAgICAgIGxldCB7IHNlYXJjaEZpZWxkcywgZmlsdGVyVGV4dCwgaXNTdHJpY3RNb2RlIH0gPSBwYXJhbXM7XG4gICAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHNlYXJjaEZpZWxkcykge1xuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSBPYmplY3RVdGlscy5yZW1vdmVBY2NlbnRzKFN0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKG5vZGUsIGZpZWxkKSkpLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZmlsdGVyTG9jYWxlKTtcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlLmluZGV4T2YoZmlsdGVyVGV4dCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYXRjaGVkIHx8IChpc1N0cmljdE1vZGUgJiYgIXRoaXMuaXNOb2RlTGVhZihub2RlKSkpIHtcbiAgICAgICAgICAgIG1hdGNoZWQgPSB0aGlzLmZpbmRGaWx0ZXJlZE5vZGVzKG5vZGUsIHsgc2VhcmNoRmllbGRzLCBmaWx0ZXJUZXh0LCBpc1N0cmljdE1vZGUgfSkgfHwgbWF0Y2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cblxuICAgIGdldEluZGV4KG9wdGlvbnM6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnZXRJdGVtT3B0aW9ucyA9IG9wdGlvbnNbJ2dldEl0ZW1PcHRpb25zJ107XG4gICAgICAgIHJldHVybiBnZXRJdGVtT3B0aW9ucyA/IGdldEl0ZW1PcHRpb25zKGluZGV4KS5pbmRleCA6IGluZGV4O1xuICAgIH1cblxuICAgIGdldEJsb2NrYWJsZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kcmFnU3RhcnRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kcmFnU3RvcFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kcmFnU3RvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIm5vZGVcIj5cbiAgICA8bGlcbiAgICAgICAgKm5nSWY9XCJ0cmVlLmRyb3BwYWJsZU5vZGVzXCJcbiAgICAgICAgY2xhc3M9XCJjYXgtdHJlZW5vZGUtZHJvcHBvaW50XCJcbiAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1kcm9wcG9pbnQtYWN0aXZlJzogZHJhZ2hvdmVyUHJldiB9XCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wUG9pbnQoJGV2ZW50LCAtMSlcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25Ecm9wUG9pbnREcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyb3BQb2ludERyYWdFbnRlcigkZXZlbnQsIC0xKVwiXG4gICAgICAgIChkcmFnbGVhdmUpPVwib25Ecm9wUG9pbnREcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgPjwvbGk+XG4gICAgPGNheC1za2VsZXRvbiAqbmdJZj1cIm5vZGUubG9hZGluZ1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ4cHhcIiBib3JkZXJSYWRpdXM9XCIxMnB4XCIgLz5cbiAgICA8bGlcbiAgICAgICAgKm5nSWY9XCIhdHJlZS5ob3Jpem9udGFsICYmICFub2RlLmxvYWRpbmdcIlxuICAgICAgICBbbmdDbGFzc109XCJbJ2NheC10cmVlbm9kZScsIG5vZGUuc3R5bGVDbGFzcyB8fCAnJywgaXNMZWFmKCkgPyAnY2F4LXRyZWVub2RlLWxlYWYnIDogJyddXCJcbiAgICAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGl0ZW1TaXplICsgJ3B4JyB9XCJcbiAgICAgICAgW3N0eWxlXT1cIm5vZGUuc3R5bGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5vZGUubGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiYXJpYUNoZWNrZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwibm9kZS5jaGlsZHJlbiA/IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIDogMFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYXJpYVNlbGVjdGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJpbmRleCArIDFcIlxuICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsICsgMVwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImluZGV4ID09PSAwID8gMCA6IC0xXCJcbiAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJub2RlLmtleVwiXG4gICAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2F4LXRyZWVub2RlLWNvbnRlbnRcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctbGVmdCc6IGxldmVsICogaW5kZW50YXRpb24gKyAncmVtJ1xuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvbk5vZGVSaWdodENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKHRvdWNoZW5kKT1cIm9uTm9kZVRvdWNoRW5kKClcIlxuICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wTm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyb3BOb2RlRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJhZ2VudGVyKT1cIm9uRHJvcE5vZGVEcmFnRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJvcE5vZGVEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZHJhZ2dhYmxlXT1cInRyZWUuZHJhZ2dhYmxlTm9kZXNcIlxuICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ1N0b3AoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtc2VsZWN0YWJsZSc6IHRyZWUuc2VsZWN0aW9uTW9kZSAmJiBub2RlLnNlbGVjdGFibGUgIT09IGZhbHNlLCAnY2F4LXRyZWVub2RlLWRyYWdvdmVyJzogZHJhZ2hvdmVyTm9kZSwgJ2NheC1oaWdobGlnaHQnOiBpc1NlbGVjdGVkKCkgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhbm9kZS5sZWFmXCIgW2Rpc2FibGVkXT1cImlzTGVhZigpXCIgdHlwZT1cImJ1dHRvblwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndG9nZ2xlcidcIiBjbGFzcz1cImNheC10cmVlLXRvZ2dsZXIgY2F4LWxpbmtcIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIiBjYXhSaXBwbGUgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdHJlZS50b2dnbGVySWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZS5sb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0SWNvbiAqbmdJZj1cIiFub2RlLmV4cGFuZGVkXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLXRvZ2dsZXItaWNvbidcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIiBbc3R5bGVDbGFzc109XCInY2F4LXRyZWUtdG9nZ2xlci1pY29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ01vZGUgPT09ICdpY29uJyAmJiBub2RlLmxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTcGlubmVySWNvbiBbc3Bpbl09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLW5vZGUtdG9nZ2xlci1pY29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS50b2dnbGVySWNvblRlbXBsYXRlXCIgY2xhc3M9XCJjYXgtdHJlZS10b2dnbGVyLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZS50b2dnbGVySWNvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZS5leHBhbmRlZCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNheC1jaGVja2JveCBjYXgtY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXgtY2hlY2tib3gtZGlzYWJsZWQgY2F4LWRpc2FibGVkJzogbm9kZS5zZWxlY3RhYmxlID09PSBmYWxzZSwgJ2NheC12YXJpYW50LWZpbGxlZCc6IHRyZWU/LmNvbmZpZy5pbnB1dFN0eWxlKCkgPT09ICdmaWxsZWQnIH1cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZS5zZWxlY3Rpb25Nb2RlID09ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jaGVja2JveC1ib3hcIiBbbmdDbGFzc109XCJ7ICdjYXgtaGlnaGxpZ2h0JzogaXNTZWxlY3RlZCgpLCAnY2F4LWluZGV0ZXJtaW5hdGUnOiBub2RlLnBhcnRpYWxTZWxlY3RlZCB9XCIgcm9sZT1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdHJlZS5jaGVja2JveEljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrSWNvbiAqbmdJZj1cIiFub2RlLnBhcnRpYWxTZWxlY3RlZCAmJiBpc1NlbGVjdGVkKClcIiBbc3R5bGVDbGFzc109XCInY2F4LWNoZWNrYm94LWljb24nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNaW51c0ljb24gKm5nSWY9XCJub2RlLnBhcnRpYWxTZWxlY3RlZFwiIFtzdHlsZUNsYXNzXT1cIidjYXgtY2hlY2tib3gtaWNvbidcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZS5jaGVja2JveEljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGlzU2VsZWN0ZWQoKSwgcGFydGlhbFNlbGVjdGVkOiBub2RlLnBhcnRpYWxTZWxlY3RlZCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdldEljb24oKVwiICpuZ0lmPVwibm9kZS5pY29uIHx8IG5vZGUuZXhwYW5kZWRJY29uIHx8IG5vZGUuY29sbGFwc2VkSWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F4LXRyZWVub2RlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWUuZ2V0VGVtcGxhdGVGb3JOb2RlKG5vZGUpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMC41cmVtXCIgW2NsYXNzXT1cImdldFJpZ2h0SWNvbigpXCIgKm5nSWY9XCIobm9kZS5yaWdodEljb24gfHwgbm9kZS5leHBhbmRlZEljb24gfHwgbm9kZS5jb2xsYXBzZWRJY29uKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZS1hY3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtdHJlZS1iYWRnZVwiICpuZ0lmPVwibm9kZS5iYWRnZSA+IC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjYXgtYmFkZ2UgW3NldmVyaXR5XT1cIidzZWNvbmRhcnknXCIgW3ZhbHVlXT1cIm5vZGUuYmFkZ2VcIj48L2NheC1iYWRnZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGNheC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZS5oaWRlQWN0aW9uQnV0dG9uICYmIG5vZGVBY3Rpb25CdXR0b24/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LXRyZWUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjYXgtdHJlZS1idXR0b24taG92ZXInOiBhY3Rpb25CdXR0b25Nb2RlID09PSAnaG92ZXInLCAnY2F4LXRyZWUtYnV0dG9uLXNlbGVjdCc6IGFjdGlvbkJ1dHRvbk1vZGUgPT09ICdzZWxlY3QnfVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJub2RlQWN0aW9uQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtvdXRsaW5lZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uTm9kZUFjdGlvbigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICA+PC9jYXgtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dWxcbiAgICAgICAgICAgIGNsYXNzPVwiY2F4LXRyZWVub2RlLWNoaWxkcmVuXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vZGUuZXhwYW5kZWQgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nSWY9XCIhdHJlZS52aXJ0dWFsU2Nyb2xsICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5leHBhbmRlZFwiXG4gICAgICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8Y2F4LXRyZWVOb2RlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuOyBsZXQgZmlyc3RDaGlsZCA9IGZpcnN0OyBsZXQgbGFzdENoaWxkID0gbGFzdDsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyZWUudHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgW25vZGVdPVwiY2hpbGROb2RlXCJcbiAgICAgICAgICAgICAgICBbcGFyZW50Tm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICBbZmlyc3RDaGlsZF09XCJmaXJzdENoaWxkXCJcbiAgICAgICAgICAgICAgICBbbGFzdENoaWxkXT1cImxhc3RDaGlsZFwiXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbVNpemVcIlxuICAgICAgICAgICAgICAgIFtsZXZlbF09XCJsZXZlbCArIDFcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nTW9kZV09XCJsb2FkaW5nTW9kZVwiXG4gICAgICAgICAgICAgICAgW25vZGVBY3Rpb25CdXR0b25dPVwibm9kZUFjdGlvbkJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2FjdGlvbkJ1dHRvbk1vZGVdPVwiYWN0aW9uQnV0dG9uTW9kZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZUFjdGlvbkNsaWNrKT1cIm9uTm9kZUFjdGlvbigkZXZlbnQsIGNoaWxkTm9kZSlcIlxuICAgICAgICAgICAgPjwvY2F4LXRyZWVOb2RlPlxuICAgICAgICA8L3VsPlxuICAgIDwvbGk+XG5cbiAgICA8bGlcbiAgICAgICAgKm5nSWY9XCJ0cmVlLmRyb3BwYWJsZU5vZGVzICYmIGxhc3RDaGlsZFwiXG4gICAgICAgIGNsYXNzPVwiY2F4LXRyZWVub2RlLWRyb3Bwb2ludFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1kcm9wcG9pbnQtYWN0aXZlJzogZHJhZ2hvdmVyTmV4dCB9XCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wUG9pbnQoJGV2ZW50LCAxKVwiXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25Ecm9wUG9pbnREcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyb3BQb2ludERyYWdFbnRlcigkZXZlbnQsIDEpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyb3BQb2ludERyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICA+PC9saT5cblxuICAgIDx0YWJsZSAqbmdJZj1cInRyZWUuaG9yaXpvbnRhbFwiIFtjbGFzc109XCJub2RlLnN0eWxlQ2xhc3NcIj5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNheC10cmVlbm9kZS1jb25uZWN0b3JcIiAqbmdJZj1cIiFyb290XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImNheC10cmVlbm9kZS1jb25uZWN0b3ItdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtY29ubmVjdG9yLWxpbmUnOiAhZmlyc3RDaGlsZCB9XCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1jb25uZWN0b3ItbGluZSc6ICFsYXN0Q2hpbGQgfVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXgtdHJlZW5vZGVcIiBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtY29sbGFwc2VkJzogIW5vZGUuZXhwYW5kZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC10cmVlbm9kZS1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtc2VsZWN0YWJsZSc6IHRyZWUuc2VsZWN0aW9uTW9kZSwgJ2NheC1oaWdobGlnaHQnOiBpc1NlbGVjdGVkKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwib25Ob2RlUmlnaHRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvbk5vZGVUb3VjaEVuZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGVhZigpXCIgW25nQ2xhc3NdPVwiJ2NheC10cmVlLXRvZ2dsZXInXCIgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0cmVlLnRvZ2dsZXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXNJY29uICpuZ0lmPVwiIW5vZGUuZXhwYW5kZWRcIiBbc3R5bGVDbGFzc109XCInY2F4LXRyZWUtdG9nZ2xlci1pY29uJ1wiIFthcmlhTGFiZWxdPVwidHJlZS50b2dnbGVyQXJpYUxhYmVsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1pbnVzSWNvbiAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIiBbc3R5bGVDbGFzc109XCInY2F4LXRyZWUtdG9nZ2xlci1pY29uJ1wiIFthcmlhTGFiZWxdPVwidHJlZS50b2dnbGVyQXJpYUxhYmVsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyZWUudG9nZ2xlckljb25UZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LXRyZWUtdG9nZ2xlci1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWUudG9nZ2xlckljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUuZXhwYW5kZWQgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdldEljb24oKVwiICpuZ0lmPVwibm9kZS5pY29uIHx8IG5vZGUuZXhwYW5kZWRJY29uIHx8IG5vZGUuY29sbGFwc2VkSWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F4LXRyZWVub2RlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWUuZ2V0VGVtcGxhdGVGb3JOb2RlKG5vZGUpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC10cmVlbm9kZS1jaGlsZHJlbi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuY2hpbGRyZW4gJiYgbm9kZS5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9kZS5leHBhbmRlZCA/ICd0YWJsZS1jZWxsJyA6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC10cmVlbm9kZS1jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNheC10cmVlTm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbjsgbGV0IGZpcnN0Q2hpbGQgPSBmaXJzdDsgbGV0IGxhc3RDaGlsZCA9IGxhc3Q7IHRyYWNrQnk6IHRyZWUudHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVBY3Rpb25CdXR0b25dPVwibm9kZUFjdGlvbkJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkJ1dHRvbk1vZGVdPVwiYWN0aW9uQnV0dG9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwiY2hpbGROb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlyc3RDaGlsZF09XCJmaXJzdENoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFzdENoaWxkXT1cImxhc3RDaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uTm9kZUFjdGlvbkNsaWNrKT1cIm9uTm9kZUFjdGlvbigkZXZlbnQsIGNoaWxkTm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvY2F4LXRyZWVOb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuPC9uZy10ZW1wbGF0ZT5cbiIsIjxkaXZcbiAgICBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZSBjYXgtY29tcG9uZW50JzogdHJ1ZSwgJ2NheC10cmVlLXNlbGVjdGFibGUnOiBzZWxlY3Rpb25Nb2RlLCAnY2F4LXRyZWVub2RlLWRyYWdvdmVyJzogZHJhZ0hvdmVyLCAnY2F4LXRyZWUtbG9hZGluZyc6IGxvYWRpbmcsICdjYXgtdHJlZS1mbGV4LXNjcm9sbGFibGUnOiBzY3JvbGxIZWlnaHQgPT09ICdmbGV4JyB9XCJcbiAgICBbbmdTdHlsZV09XCJzdHlsZVwiXG4gICAgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICAgICpuZ0lmPVwiIWhvcml6b250YWxcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2VudGVyKT1cIm9uRHJhZ0VudGVyKClcIlxuICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImNheC10cmVlLWxvYWRpbmctb3ZlcmxheSBjYXgtY29tcG9uZW50LW92ZXJsYXlcIiAqbmdJZj1cImxvYWRpbmcgJiYgbG9hZGluZ01vZGUgPT09ICdtYXNrJ1wiPlxuICAgICAgICA8aSAqbmdJZj1cImxvYWRpbmdJY29uXCIgW2NsYXNzXT1cIidjYXgtdHJlZS1sb2FkaW5nLWljb24gcGktc3BpbiAnICsgbG9hZGluZ0ljb25cIj48L2k+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ0ljb25cIj5cbiAgICAgICAgICAgIDxTcGlubmVySWNvbiAqbmdJZj1cIiFsb2FkaW5nSWNvblRlbXBsYXRlXCIgW3NwaW5dPVwidHJ1ZVwiIFtzdHlsZUNsYXNzXT1cIidjYXgtdHJlZS1sb2FkaW5nLWljb24nXCIgLz5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LXRyZWUtbG9hZGluZy1pY29uXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJcIiBjbGFzcz1cImNheC10cmVlLWZpbHRlci1jb250YWluZXJcIj5cbiAgICAgICAgPGlucHV0ICNmaWx0ZXIgdHlwZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiY2F4LXRyZWUtZmlsdGVyIGNheC1pbnB1dHRleHQgY2F4LWNvbXBvbmVudFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cImZpbHRlclBsYWNlaG9sZGVyXCIgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoaW5wdXQpPVwiX2ZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG4gICAgICAgIDxTZWFyY2hJY29uICpuZ0lmPVwiIWZpbHRlckljb25UZW1wbGF0ZVwiIFtzdHlsZUNsYXNzXT1cIidjYXgtdHJlZS1maWx0ZXItaWNvbidcIiAvPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlckljb25UZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LXRyZWUtZmlsdGVyLWljb25cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Um9vdE5vZGUoKT8ubGVuZ3RoXCI+XG4gICAgICAgIDxjYXgtc2Nyb2xsZXJcbiAgICAgICAgICAgICNzY3JvbGxlclxuICAgICAgICAgICAgKm5nSWY9XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJzZXJpYWxpemVkVmFsdWVcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJjYXgtdHJlZS13cmFwcGVyXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogc2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcgPyBzY3JvbGxIZWlnaHQgOiB1bmRlZmluZWQgfVwiXG4gICAgICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodCAhPT0gJ2ZsZXgnID8gdW5kZWZpbmVkIDogJzEwMCUnXCJcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgfHwgX3ZpcnR1YWxOb2RlSGVpZ2h0XCJcbiAgICAgICAgICAgIFtsYXp5XT1cImxhenlcIlxuICAgICAgICAgICAgKG9uU2Nyb2xsKT1cIm9uU2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25TY3JvbGxJbmRleENoYW5nZSk9XCJvblNjcm9sbEluZGV4Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJ2aXJ0dWFsU2Nyb2xsT3B0aW9uc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtaXRlbXMgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dWwgKm5nSWY9XCJpdGVtc1wiIGNsYXNzPVwiY2F4LXRyZWUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwic2Nyb2xsZXJPcHRpb25zLmNvbnRlbnRTdHlsZUNsYXNzXCIgW3N0eWxlXT1cInNjcm9sbGVyT3B0aW9ucy5jb250ZW50U3R5bGVcIiByb2xlPVwidHJlZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxjYXgtdHJlZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICN0cmVlTm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvd05vZGUgb2YgaXRlbXM7IGxldCBmaXJzdENoaWxkID0gZmlyc3Q7IGxldCBsYXN0Q2hpbGQgPSBsYXN0OyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwicm93Tm9kZS5sZXZlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93Tm9kZV09XCJyb3dOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyaWdodEljb25dPVwicmlnaHRJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlQWN0aW9uQnV0dG9uXT1cIm5vZGVBY3Rpb25CdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkJ1dHRvbk1vZGVdPVwiYWN0aW9uQnV0dG9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJyb3dOb2RlLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmVudE5vZGVdPVwicm93Tm9kZS5wYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpcnN0Q2hpbGRdPVwiZmlyc3RDaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdENoaWxkXT1cImxhc3RDaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiZ2V0SW5kZXgoc2Nyb2xsZXJPcHRpb25zLCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1TaXplXT1cInNjcm9sbGVyT3B0aW9ucy5pdGVtU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZW50YXRpb25dPVwiaW5kZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmdNb2RlXT1cImxvYWRpbmdNb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbk5vZGVBY3Rpb25DbGljayk9XCJvbk5vZGVBY3Rpb24oJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2NheC10cmVlTm9kZT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImxvYWRlclwiIGxldC1zY3JvbGxlck9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBvcHRpb25zOiBzY3JvbGxlck9wdGlvbnMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9jYXgtc2Nyb2xsZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgPGRpdiAjd3JhcHBlciBjbGFzcz1cImNheC10cmVlLXdyYXBwZXJcIiBbbmdTdHlsZV09XCJ7ICdtYXgtaGVpZ2h0Jzogc2Nyb2xsSGVpZ2h0IH1cIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjYXgtdHJlZS1jb250YWluZXJcIiAqbmdJZj1cImdldFJvb3ROb2RlKClcIiByb2xlPVwidHJlZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxjYXgtdHJlZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGdldFJvb3ROb2RlKCk7IGxldCBmaXJzdENoaWxkID0gZmlyc3Q7IGxldCBsYXN0Q2hpbGQgPSBsYXN0OyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENoaWxkXT1cImZpcnN0Q2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhc3RDaGlsZF09XCJsYXN0Q2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0SWNvbl09XCJyaWdodEljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVBY3Rpb25CdXR0b25dPVwibm9kZUFjdGlvbkJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uQnV0dG9uTW9kZV09XCJhY3Rpb25CdXR0b25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ01vZGVdPVwibG9hZGluZ01vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uTm9kZUFjdGlvbkNsaWNrKT1cIm9uTm9kZUFjdGlvbigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvY2F4LXRyZWVOb2RlPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2F4LXRyZWUtZW1wdHktbWVzc2FnZVwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgKGdldFJvb3ROb2RlKCkgPT0gbnVsbCB8fCBnZXRSb290Tm9kZSgpLmxlbmd0aCA9PT0gMClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlbXB0eU1lc3NhZ2VUZW1wbGF0ZTsgZWxzZSBlbXB0eUZpbHRlclwiPiB7eyBlbXB0eU1lc3NhZ2VMYWJlbCB9fSA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZW1wdHlGaWx0ZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlIGNheC10cmVlLWhvcml6b250YWwgY2F4LWNvbXBvbmVudCc6IHRydWUsICdjYXgtdHJlZS1zZWxlY3RhYmxlJzogc2VsZWN0aW9uTW9kZSB9XCIgW25nU3R5bGVdPVwic3R5bGVcIiBbY2xhc3NdPVwic3R5bGVDbGFzc1wiICpuZ0lmPVwiaG9yaXpvbnRhbFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZS1sb2FkaW5nLW1hc2sgY2F4LWNvbXBvbmVudC1vdmVybGF5XCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIDxpICpuZ0lmPVwibG9hZGluZ0ljb25cIiBbY2xhc3NdPVwiJ2NheC10cmVlLWxvYWRpbmctaWNvbiBwaS1zcGluICcgKyBsb2FkaW5nSWNvblwiPjwvaT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nSWNvblwiPlxuICAgICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwiIWxvYWRpbmdJY29uVGVtcGxhdGVcIiBbc3Bpbl09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLWxvYWRpbmctaWNvbidcIiAvPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nSWNvblRlbXBsYXRlXCIgY2xhc3M9XCJjYXgtdHJlZS1sb2FkaW5nLWljb25cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nSWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHRhYmxlICpuZ0lmPVwidmFsdWUgJiYgdmFsdWVbMF1cIj5cbiAgICAgICAgPGNheC10cmVlTm9kZSBbbm9kZV09XCJ2YWx1ZVswXVwiIFtyb290XT1cInRydWVcIiBbcmlnaHRJY29uXT1cInJpZ2h0SWNvblwiIFtub2RlQWN0aW9uQnV0dG9uXT1cIm5vZGVBY3Rpb25CdXR0b25cIiBbYWN0aW9uQnV0dG9uTW9kZV09XCJhY3Rpb25CdXR0b25Nb2RlXCIgKG9uTm9kZUFjdGlvbkNsaWNrKT1cIm9uTm9kZUFjdGlvbigkZXZlbnQsIG5vZGUpXCI+PC9jYXgtdHJlZU5vZGU+XG4gICAgPC90YWJsZT5cbiAgICA8ZGl2IGNsYXNzPVwiY2F4LXRyZWUtZW1wdHktbWVzc2FnZVwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgKGdldFJvb3ROb2RlKCkgPT0gbnVsbCB8fCBnZXRSb290Tm9kZSgpLmxlbmd0aCA9PT0gMClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlbXB0eU1lc3NhZ2VUZW1wbGF0ZTsgZWxzZSBlbXB0eUZpbHRlclwiPiB7eyBlbXB0eU1lc3NhZ2VMYWJlbCB9fSA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZW1wdHlGaWx0ZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=