primeng 18.0.0 → 18.0.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 (318) hide show
  1. package/accordion/accordion.d.ts +7 -7
  2. package/autocomplete/autocomplete.d.ts +21 -8
  3. package/badge/badge.d.ts +1 -3
  4. package/basecomponent/basecomponent.d.ts +2 -5
  5. package/blockui/blockui.d.ts +10 -5
  6. package/breadcrumb/breadcrumb.d.ts +9 -6
  7. package/button/button.d.ts +10 -4
  8. package/calendar/calendar.d.ts +29 -15
  9. package/card/card.d.ts +12 -5
  10. package/carousel/carousel.d.ts +10 -4
  11. package/cascadeselect/cascadeselect.d.ts +18 -8
  12. package/checkbox/checkbox.d.ts +8 -4
  13. package/chip/chip.d.ts +9 -7
  14. package/confirmdialog/confirmdialog.d.ts +14 -5
  15. package/confirmpopup/confirmpopup.d.ts +11 -5
  16. package/contextmenu/contextmenu.d.ts +10 -6
  17. package/datepicker/datepicker.d.ts +113 -33
  18. package/dialog/dialog.d.ts +15 -4
  19. package/divider/divider.d.ts +1 -1
  20. package/dock/dock.d.ts +7 -4
  21. package/drawer/drawer.d.ts +18 -10
  22. package/dropdown/dropdown.d.ts +4 -3
  23. package/dynamicdialog/dynamicdialog.d.ts +1 -0
  24. package/editor/editor.d.ts +7 -3
  25. package/esm2022/accordion/accordion.mjs +58 -43
  26. package/esm2022/autocomplete/autocomplete.mjs +153 -92
  27. package/esm2022/badge/badge.mjs +39 -32
  28. package/esm2022/basecomponent/basecomponent.mjs +3 -26
  29. package/esm2022/blockui/blockui.mjs +38 -18
  30. package/esm2022/breadcrumb/breadcrumb.mjs +50 -32
  31. package/esm2022/button/button.mjs +55 -28
  32. package/esm2022/calendar/calendar.mjs +207 -143
  33. package/esm2022/card/card.mjs +96 -46
  34. package/esm2022/carousel/carousel.mjs +74 -42
  35. package/esm2022/cascadeselect/cascadeselect.mjs +100 -62
  36. package/esm2022/checkbox/checkbox.mjs +32 -14
  37. package/esm2022/chip/chip.mjs +117 -96
  38. package/esm2022/confirmdialog/confirmdialog.mjs +96 -57
  39. package/esm2022/confirmpopup/confirmpopup.mjs +57 -29
  40. package/esm2022/contextmenu/contextmenu.mjs +51 -20
  41. package/esm2022/datepicker/datepicker.mjs +198 -156
  42. package/esm2022/dialog/dialog.mjs +98 -52
  43. package/esm2022/divider/divider.mjs +2 -4
  44. package/esm2022/dock/dock.mjs +31 -13
  45. package/esm2022/drawer/drawer.mjs +112 -70
  46. package/esm2022/dropdown/dropdown.mjs +13 -5
  47. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +13 -13
  48. package/esm2022/dynamicdialog/dynamicdialog.mjs +9 -5
  49. package/esm2022/editor/editor.mjs +27 -11
  50. package/esm2022/fieldset/fieldset.mjs +61 -33
  51. package/esm2022/fileupload/fileupload.mjs +139 -89
  52. package/esm2022/galleria/galleria.mjs +18 -9
  53. package/esm2022/image/image.mjs +113 -66
  54. package/esm2022/imagecompare/imagecompare.mjs +31 -11
  55. package/esm2022/inplace/inplace.mjs +49 -24
  56. package/esm2022/inputmask/inputmask.mjs +30 -14
  57. package/esm2022/inputmask/style/inputmaskstyle.mjs +2 -2
  58. package/esm2022/inputnumber/inputnumber.mjs +55 -47
  59. package/esm2022/inputotp/inputotp.mjs +30 -11
  60. package/esm2022/listbox/listbox.mjs +137 -78
  61. package/esm2022/megamenu/megamenu.mjs +105 -59
  62. package/esm2022/menu/menu.mjs +26 -26
  63. package/esm2022/menubar/menubar.mjs +70 -35
  64. package/esm2022/message/message.mjs +50 -26
  65. package/esm2022/messages/messages.mjs +13 -4
  66. package/esm2022/metergroup/metergroup.mjs +63 -31
  67. package/esm2022/multiselect/multiselect.mjs +247 -156
  68. package/esm2022/orderlist/orderlist.mjs +125 -70
  69. package/esm2022/organizationchart/organizationchart.mjs +30 -14
  70. package/esm2022/overlay/overlay.mjs +27 -7
  71. package/esm2022/overlaypanel/overlaypanel.mjs +33 -10
  72. package/esm2022/paginator/paginator.mjs +92 -60
  73. package/esm2022/panel/panel.mjs +160 -100
  74. package/esm2022/panelmenu/panelmenu.mjs +55 -32
  75. package/esm2022/password/password.mjs +88 -49
  76. package/esm2022/picklist/picklist.mjs +363 -259
  77. package/esm2022/popover/popover.mjs +29 -12
  78. package/esm2022/progressbar/progressbar.mjs +27 -9
  79. package/esm2022/rating/rating.mjs +46 -22
  80. package/esm2022/scroller/scroller.mjs +47 -37
  81. package/esm2022/scrollpanel/scrollpanel.mjs +28 -9
  82. package/esm2022/scrolltop/scrolltop.mjs +17 -10
  83. package/esm2022/select/select.mjs +198 -119
  84. package/esm2022/selectbutton/selectbutton.mjs +26 -11
  85. package/esm2022/sidebar/sidebar.mjs +82 -60
  86. package/esm2022/speeddial/speeddial.mjs +54 -29
  87. package/esm2022/splitbutton/splitbutton.mjs +41 -18
  88. package/esm2022/splitter/splitter.mjs +5 -5
  89. package/esm2022/stepper/stepper.mjs +27 -13
  90. package/esm2022/table/table.mjs +107 -96
  91. package/esm2022/tabmenu/tabmenu.mjs +54 -27
  92. package/esm2022/tabs/tablist.mjs +28 -20
  93. package/esm2022/tabview/tabview.mjs +106 -54
  94. package/esm2022/tag/tag.mjs +68 -44
  95. package/esm2022/tieredmenu/tieredmenu.mjs +44 -21
  96. package/esm2022/timeline/timeline.mjs +41 -17
  97. package/esm2022/toast/toast.mjs +31 -9
  98. package/esm2022/togglebutton/togglebutton.mjs +45 -30
  99. package/esm2022/toggleswitch/toggleswitch.mjs +28 -9
  100. package/esm2022/toolbar/toolbar.mjs +47 -21
  101. package/esm2022/tooltip/tooltip.mjs +35 -70
  102. package/esm2022/tree/tree.mjs +114 -97
  103. package/esm2022/treeselect/treeselect.mjs +156 -89
  104. package/esm2022/treetable/treetable.mjs +31 -12
  105. package/esm2022/usestyle/usestyle.mjs +2 -2
  106. package/fesm2022/primeng-accordion.mjs +57 -42
  107. package/fesm2022/primeng-accordion.mjs.map +1 -1
  108. package/fesm2022/primeng-autocomplete.mjs +152 -91
  109. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  110. package/fesm2022/primeng-badge.mjs +38 -31
  111. package/fesm2022/primeng-badge.mjs.map +1 -1
  112. package/fesm2022/primeng-basecomponent.mjs +2 -25
  113. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  114. package/fesm2022/primeng-blockui.mjs +37 -17
  115. package/fesm2022/primeng-blockui.mjs.map +1 -1
  116. package/fesm2022/primeng-breadcrumb.mjs +49 -31
  117. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  118. package/fesm2022/primeng-button.mjs +54 -27
  119. package/fesm2022/primeng-button.mjs.map +1 -1
  120. package/fesm2022/primeng-calendar.mjs +206 -142
  121. package/fesm2022/primeng-calendar.mjs.map +1 -1
  122. package/fesm2022/primeng-card.mjs +95 -45
  123. package/fesm2022/primeng-card.mjs.map +1 -1
  124. package/fesm2022/primeng-carousel.mjs +73 -41
  125. package/fesm2022/primeng-carousel.mjs.map +1 -1
  126. package/fesm2022/primeng-cascadeselect.mjs +99 -61
  127. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  128. package/fesm2022/primeng-checkbox.mjs +31 -13
  129. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  130. package/fesm2022/primeng-chip.mjs +116 -95
  131. package/fesm2022/primeng-chip.mjs.map +1 -1
  132. package/fesm2022/primeng-confirmdialog.mjs +95 -56
  133. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  134. package/fesm2022/primeng-confirmpopup.mjs +56 -28
  135. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  136. package/fesm2022/primeng-contextmenu.mjs +50 -19
  137. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  138. package/fesm2022/primeng-datepicker.mjs +197 -155
  139. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  140. package/fesm2022/primeng-dialog.mjs +97 -51
  141. package/fesm2022/primeng-dialog.mjs.map +1 -1
  142. package/fesm2022/primeng-divider.mjs +1 -3
  143. package/fesm2022/primeng-divider.mjs.map +1 -1
  144. package/fesm2022/primeng-dock.mjs +30 -12
  145. package/fesm2022/primeng-dock.mjs.map +1 -1
  146. package/fesm2022/primeng-drawer.mjs +111 -69
  147. package/fesm2022/primeng-drawer.mjs.map +1 -1
  148. package/fesm2022/primeng-dropdown.mjs +12 -4
  149. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  150. package/fesm2022/primeng-dynamicdialog.mjs +20 -16
  151. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  152. package/fesm2022/primeng-editor.mjs +26 -10
  153. package/fesm2022/primeng-editor.mjs.map +1 -1
  154. package/fesm2022/primeng-fieldset.mjs +60 -32
  155. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  156. package/fesm2022/primeng-fileupload.mjs +138 -88
  157. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  158. package/fesm2022/primeng-galleria.mjs +17 -8
  159. package/fesm2022/primeng-galleria.mjs.map +1 -1
  160. package/fesm2022/primeng-image.mjs +112 -65
  161. package/fesm2022/primeng-image.mjs.map +1 -1
  162. package/fesm2022/primeng-imagecompare.mjs +30 -10
  163. package/fesm2022/primeng-imagecompare.mjs.map +1 -1
  164. package/fesm2022/primeng-inplace.mjs +48 -23
  165. package/fesm2022/primeng-inplace.mjs.map +1 -1
  166. package/fesm2022/primeng-inputmask.mjs +30 -14
  167. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  168. package/fesm2022/primeng-inputnumber.mjs +54 -46
  169. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  170. package/fesm2022/primeng-inputotp.mjs +29 -10
  171. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  172. package/fesm2022/primeng-listbox.mjs +136 -77
  173. package/fesm2022/primeng-listbox.mjs.map +1 -1
  174. package/fesm2022/primeng-megamenu.mjs +104 -58
  175. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  176. package/fesm2022/primeng-menu.mjs +25 -25
  177. package/fesm2022/primeng-menu.mjs.map +1 -1
  178. package/fesm2022/primeng-menubar.mjs +69 -34
  179. package/fesm2022/primeng-menubar.mjs.map +1 -1
  180. package/fesm2022/primeng-message.mjs +49 -25
  181. package/fesm2022/primeng-message.mjs.map +1 -1
  182. package/fesm2022/primeng-messages.mjs +12 -3
  183. package/fesm2022/primeng-messages.mjs.map +1 -1
  184. package/fesm2022/primeng-metergroup.mjs +62 -30
  185. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  186. package/fesm2022/primeng-multiselect.mjs +246 -155
  187. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  188. package/fesm2022/primeng-orderlist.mjs +124 -69
  189. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  190. package/fesm2022/primeng-organizationchart.mjs +29 -13
  191. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  192. package/fesm2022/primeng-overlay.mjs +26 -6
  193. package/fesm2022/primeng-overlay.mjs.map +1 -1
  194. package/fesm2022/primeng-overlaypanel.mjs +32 -9
  195. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  196. package/fesm2022/primeng-paginator.mjs +91 -59
  197. package/fesm2022/primeng-paginator.mjs.map +1 -1
  198. package/fesm2022/primeng-panel.mjs +159 -99
  199. package/fesm2022/primeng-panel.mjs.map +1 -1
  200. package/fesm2022/primeng-panelmenu.mjs +54 -31
  201. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  202. package/fesm2022/primeng-password.mjs +87 -48
  203. package/fesm2022/primeng-password.mjs.map +1 -1
  204. package/fesm2022/primeng-picklist.mjs +362 -258
  205. package/fesm2022/primeng-picklist.mjs.map +1 -1
  206. package/fesm2022/primeng-popover.mjs +28 -11
  207. package/fesm2022/primeng-popover.mjs.map +1 -1
  208. package/fesm2022/primeng-progressbar.mjs +26 -8
  209. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  210. package/fesm2022/primeng-rating.mjs +45 -21
  211. package/fesm2022/primeng-rating.mjs.map +1 -1
  212. package/fesm2022/primeng-scroller.mjs +46 -36
  213. package/fesm2022/primeng-scroller.mjs.map +1 -1
  214. package/fesm2022/primeng-scrollpanel.mjs +27 -8
  215. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  216. package/fesm2022/primeng-scrolltop.mjs +16 -9
  217. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  218. package/fesm2022/primeng-select.mjs +197 -118
  219. package/fesm2022/primeng-select.mjs.map +1 -1
  220. package/fesm2022/primeng-selectbutton.mjs +25 -10
  221. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  222. package/fesm2022/primeng-sidebar.mjs +81 -59
  223. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  224. package/fesm2022/primeng-speeddial.mjs +53 -28
  225. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  226. package/fesm2022/primeng-splitbutton.mjs +40 -17
  227. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  228. package/fesm2022/primeng-splitter.mjs +4 -4
  229. package/fesm2022/primeng-splitter.mjs.map +1 -1
  230. package/fesm2022/primeng-stepper.mjs +26 -12
  231. package/fesm2022/primeng-stepper.mjs.map +1 -1
  232. package/fesm2022/primeng-table.mjs +106 -95
  233. package/fesm2022/primeng-table.mjs.map +1 -1
  234. package/fesm2022/primeng-tabmenu.mjs +53 -26
  235. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  236. package/fesm2022/primeng-tabs.mjs +27 -19
  237. package/fesm2022/primeng-tabs.mjs.map +1 -1
  238. package/fesm2022/primeng-tabview.mjs +106 -54
  239. package/fesm2022/primeng-tabview.mjs.map +1 -1
  240. package/fesm2022/primeng-tag.mjs +67 -43
  241. package/fesm2022/primeng-tag.mjs.map +1 -1
  242. package/fesm2022/primeng-tieredmenu.mjs +43 -20
  243. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  244. package/fesm2022/primeng-timeline.mjs +40 -16
  245. package/fesm2022/primeng-timeline.mjs.map +1 -1
  246. package/fesm2022/primeng-toast.mjs +30 -8
  247. package/fesm2022/primeng-toast.mjs.map +1 -1
  248. package/fesm2022/primeng-togglebutton.mjs +44 -29
  249. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  250. package/fesm2022/primeng-toggleswitch.mjs +27 -8
  251. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  252. package/fesm2022/primeng-toolbar.mjs +46 -20
  253. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  254. package/fesm2022/primeng-tooltip.mjs +35 -70
  255. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  256. package/fesm2022/primeng-tree.mjs +114 -97
  257. package/fesm2022/primeng-tree.mjs.map +1 -1
  258. package/fesm2022/primeng-treeselect.mjs +155 -88
  259. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  260. package/fesm2022/primeng-treetable.mjs +30 -11
  261. package/fesm2022/primeng-treetable.mjs.map +1 -1
  262. package/fesm2022/primeng-usestyle.mjs +1 -1
  263. package/fesm2022/primeng-usestyle.mjs.map +1 -1
  264. package/fieldset/fieldset.d.ts +12 -6
  265. package/fileupload/fileupload.d.ts +19 -8
  266. package/galleria/galleria.d.ts +3 -2
  267. package/image/image.d.ts +18 -7
  268. package/imagecompare/imagecompare.d.ts +7 -2
  269. package/inplace/inplace.d.ts +12 -6
  270. package/inputmask/inputmask.d.ts +8 -4
  271. package/inputnumber/inputnumber.d.ts +11 -6
  272. package/inputotp/inputotp.d.ts +7 -2
  273. package/listbox/listbox.d.ts +17 -4
  274. package/megamenu/megamenu.d.ts +16 -7
  275. package/menu/menu.d.ts +6 -6
  276. package/menubar/menubar.d.ts +13 -6
  277. package/message/message.d.ts +10 -4
  278. package/messages/messages.d.ts +4 -3
  279. package/metergroup/metergroup.d.ts +11 -3
  280. package/multiselect/multiselect.d.ts +36 -17
  281. package/orderlist/orderlist.d.ts +23 -11
  282. package/organizationchart/organizationchart.d.ts +6 -4
  283. package/overlay/overlay.d.ts +6 -3
  284. package/overlaypanel/overlaypanel.d.ts +6 -3
  285. package/package.json +165 -165
  286. package/paginator/paginator.d.ts +15 -8
  287. package/panel/panel.d.ts +14 -5
  288. package/panelmenu/panelmenu.d.ts +8 -4
  289. package/password/password.d.ts +15 -7
  290. package/picklist/picklist.d.ts +23 -3
  291. package/popover/popover.d.ts +8 -5
  292. package/progressbar/progressbar.d.ts +7 -3
  293. package/rating/rating.d.ts +11 -5
  294. package/scroller/scroller.d.ts +9 -4
  295. package/scrollpanel/scrollpanel.d.ts +7 -3
  296. package/scrolltop/scrolltop.d.ts +7 -4
  297. package/select/select.d.ts +31 -13
  298. package/selectbutton/selectbutton.d.ts +7 -3
  299. package/sidebar/sidebar.d.ts +9 -2
  300. package/speeddial/speeddial.d.ts +9 -4
  301. package/splitbutton/splitbutton.d.ts +9 -5
  302. package/splitter/splitter.d.ts +4 -4
  303. package/stepper/stepper.d.ts +8 -3
  304. package/table/table.d.ts +2 -2
  305. package/tabmenu/tabmenu.d.ts +12 -7
  306. package/tabs/tablist.d.ts +6 -2
  307. package/tabview/tabview.d.ts +16 -7
  308. package/tag/tag.d.ts +8 -9
  309. package/tieredmenu/tieredmenu.d.ts +10 -6
  310. package/timeline/timeline.d.ts +7 -2
  311. package/toast/toast.d.ts +7 -3
  312. package/togglebutton/togglebutton.d.ts +8 -3
  313. package/toggleswitch/toggleswitch.d.ts +6 -2
  314. package/toolbar/toolbar.d.ts +9 -4
  315. package/tooltip/tooltip.d.ts +2 -1
  316. package/tree/tree.d.ts +23 -10
  317. package/treeselect/treeselect.d.ts +26 -12
  318. package/treetable/treetable.d.ts +7 -5
@@ -1,7 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, ContentChild, Directive, EventEmitter, inject, Input, NgModule, numberAttribute, Output, ViewEncapsulation } from '@angular/core';
2
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, ContentChild, ContentChildren, Directive, EventEmitter, inject, Input, NgModule, numberAttribute, Output, ViewEncapsulation } from '@angular/core';
3
3
  import { addClass, findSingle, isEmpty } from '@primeuix/utils';
4
- import { SharedModule } from 'primeng/api';
4
+ import { PrimeTemplate, SharedModule } from 'primeng/api';
5
5
  import { AutoFocus } from 'primeng/autofocus';
6
6
  import { BadgeModule } from 'primeng/badge';
7
7
  import { BaseComponent } from 'primeng/basecomponent';
@@ -49,7 +49,7 @@ function Button_ng_container_3_2_Template(rf, ctx) { if (rf & 1) {
49
49
  i0.ɵɵtemplate(0, Button_ng_container_3_2_ng_template_0_Template, 0, 0, "ng-template", 10);
50
50
  } if (rf & 2) {
51
51
  const ctx_r0 = i0.ɵɵnextContext(2);
52
- i0.ɵɵproperty("ngIf", ctx_r0.loadingicon);
52
+ i0.ɵɵproperty("ngIf", ctx_r0.loadingIconTemplate || ctx_r0._loadingIconTemplate);
53
53
  } }
54
54
  function Button_ng_container_3_Template(rf, ctx) { if (rf & 1) {
55
55
  i0.ɵɵelementContainerStart(0);
@@ -58,9 +58,9 @@ function Button_ng_container_3_Template(rf, ctx) { if (rf & 1) {
58
58
  } if (rf & 2) {
59
59
  const ctx_r0 = i0.ɵɵnextContext();
60
60
  i0.ɵɵadvance();
61
- i0.ɵɵproperty("ngIf", !ctx_r0.loadingicon);
61
+ i0.ɵɵproperty("ngIf", !ctx_r0.loadingIconTemplate && !ctx_r0._loadingIconTemplate);
62
62
  i0.ɵɵadvance();
63
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.loadingicon)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c4, ctx_r0.iconClass()));
63
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.loadingIconTemplate || ctx_r0._loadingIconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c4, ctx_r0.iconClass()));
64
64
  } }
65
65
  function Button_ng_container_4_span_1_Template(rf, ctx) { if (rf & 1) {
66
66
  i0.ɵɵelement(0, "span", 8);
@@ -75,7 +75,7 @@ function Button_ng_container_4_2_Template(rf, ctx) { if (rf & 1) {
75
75
  i0.ɵɵtemplate(0, Button_ng_container_4_2_ng_template_0_Template, 0, 0, "ng-template", 10);
76
76
  } if (rf & 2) {
77
77
  const ctx_r0 = i0.ɵɵnextContext(2);
78
- i0.ɵɵproperty("ngIf", !ctx_r0.icon && ctx_r0.iconTemplate);
78
+ i0.ɵɵproperty("ngIf", !ctx_r0.icon && (ctx_r0.iconTemplate || ctx_r0._iconTemplate));
79
79
  } }
80
80
  function Button_ng_container_4_Template(rf, ctx) { if (rf & 1) {
81
81
  i0.ɵɵelementContainerStart(0);
@@ -84,9 +84,9 @@ function Button_ng_container_4_Template(rf, ctx) { if (rf & 1) {
84
84
  } if (rf & 2) {
85
85
  const ctx_r0 = i0.ɵɵnextContext();
86
86
  i0.ɵɵadvance();
87
- i0.ɵɵproperty("ngIf", ctx_r0.icon && !ctx_r0.iconTemplate);
87
+ i0.ɵɵproperty("ngIf", ctx_r0.icon && !ctx_r0.iconTemplate && !ctx_r0._iconTemplate);
88
88
  i0.ɵɵadvance();
89
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.iconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c4, ctx_r0.iconClass()));
89
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.iconTemplate || ctx_r0._iconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c4, ctx_r0.iconClass()));
90
90
  } }
91
91
  function Button_span_5_Template(rf, ctx) { if (rf & 1) {
92
92
  i0.ɵɵelementStart(0, "span", 12);
@@ -648,12 +648,12 @@ export class Button extends BaseComponent {
648
648
  * Template of the content.
649
649
  * @group Templates
650
650
  **/
651
- content;
651
+ contentTemplate;
652
652
  /**
653
653
  * Template of the loading.
654
654
  * @group Templates
655
655
  **/
656
- loadingicon;
656
+ loadingIconTemplate;
657
657
  /**
658
658
  * Template of the icon.
659
659
  * @group Templates
@@ -680,6 +680,28 @@ export class Button extends BaseComponent {
680
680
  return isEmpty(this.fluid) ? !!fluidComponent : this.fluid;
681
681
  }
682
682
  _componentStyle = inject(ButtonStyle);
683
+ templates;
684
+ _contentTemplate;
685
+ _iconTemplate;
686
+ _loadingIconTemplate;
687
+ ngAfterContentInit() {
688
+ this.templates?.forEach((item) => {
689
+ switch (item.getType()) {
690
+ case 'content':
691
+ this.contentTemplate = item.template;
692
+ break;
693
+ case 'icon':
694
+ this.iconTemplate = item.template;
695
+ break;
696
+ case 'loadingicon':
697
+ this.loadingIconTemplate = item.template;
698
+ break;
699
+ default:
700
+ this.contentTemplate = item.template;
701
+ break;
702
+ }
703
+ });
704
+ }
683
705
  ngOnChanges(simpleChanges) {
684
706
  super.ngOnChanges(simpleChanges);
685
707
  const { buttonProps } = simpleChanges;
@@ -708,7 +730,7 @@ export class Button extends BaseComponent {
708
730
  get buttonClass() {
709
731
  return {
710
732
  'p-button p-component': true,
711
- 'p-button-icon-only': (this.icon || this.iconTemplate || this.loadingIcon || this.loadingicon) && !this.label,
733
+ 'p-button-icon-only': (this.icon || this.iconTemplate || this.loadingIcon || this.loadingIconTemplate || this._loadingIconTemplate) && !this.label,
712
734
  'p-button-vertical': (this.iconPos === 'top' || this.iconPos === 'bottom') && this.label,
713
735
  'p-button-loading': this.loading,
714
736
  'p-button-loading-label-only': this.loading && !this.icon && this.label && !this.loadingIcon && this.iconPos === 'left',
@@ -716,8 +738,8 @@ export class Button extends BaseComponent {
716
738
  [`p-button-${this.severity}`]: this.severity,
717
739
  'p-button-raised': this.raised,
718
740
  'p-button-rounded': this.rounded,
719
- 'p-button-text': this.text,
720
- 'p-button-outlined': this.outlined,
741
+ 'p-button-text': this.text || this.variant == 'text',
742
+ 'p-button-outlined': this.outlined || this.variant == 'outlined',
721
743
  'p-button-sm': this.size === 'small',
722
744
  'p-button-lg': this.size === 'large',
723
745
  'p-button-plain': this.plain,
@@ -730,11 +752,13 @@ export class Button extends BaseComponent {
730
752
  i0.ɵɵcontentQuery(dirIndex, _c0, 5);
731
753
  i0.ɵɵcontentQuery(dirIndex, _c1, 5);
732
754
  i0.ɵɵcontentQuery(dirIndex, _c2, 5);
755
+ i0.ɵɵcontentQuery(dirIndex, PrimeTemplate, 4);
733
756
  } if (rf & 2) {
734
757
  let _t;
735
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.content = _t.first);
736
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loadingicon = _t.first);
758
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);
759
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loadingIconTemplate = _t.first);
737
760
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconTemplate = _t.first);
761
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templates = _t);
738
762
  } }, inputs: { type: "type", iconPos: "iconPos", icon: "icon", badge: "badge", label: "label", disabled: [2, "disabled", "disabled", booleanAttribute], loading: [2, "loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", raised: [2, "raised", "raised", booleanAttribute], rounded: [2, "rounded", "rounded", booleanAttribute], text: [2, "text", "text", booleanAttribute], plain: [2, "plain", "plain", booleanAttribute], severity: "severity", outlined: [2, "outlined", "outlined", booleanAttribute], link: [2, "link", "link", booleanAttribute], tabindex: [2, "tabindex", "tabindex", numberAttribute], size: "size", variant: "variant", style: "style", styleClass: "styleClass", badgeClass: "badgeClass", badgeSeverity: "badgeSeverity", ariaLabel: "ariaLabel", autofocus: [2, "autofocus", "autofocus", booleanAttribute], fluid: [2, "fluid", "fluid", booleanAttribute], buttonProps: "buttonProps" }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur" }, standalone: true, features: [i0.ɵɵProvidersFeature([ButtonStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], ngContentSelectors: _c3, decls: 7, vars: 14, consts: [["pRipple", "", 3, "click", "focus", "blur", "ngStyle", "disabled", "ngClass", "pAutoFocus"], [4, "ngTemplateOutlet"], [4, "ngIf"], ["class", "p-button-label", 4, "ngIf"], [3, "value", "severity", 4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "ngClass", 4, "ngIf"], [3, "styleClass", "spin", 4, "ngIf"], [3, "ngClass"], [3, "styleClass", "spin"], [3, "ngIf"], [3, "class", "ngClass", 4, "ngIf"], [1, "p-button-label"], [3, "value", "severity"]], template: function Button_Template(rf, ctx) { if (rf & 1) {
739
763
  i0.ɵɵprojectionDef();
740
764
  i0.ɵɵelementStart(0, "button", 0);
@@ -746,15 +770,15 @@ export class Button extends BaseComponent {
746
770
  i0.ɵɵproperty("ngStyle", ctx.style)("disabled", ctx.disabled || ctx.loading)("ngClass", ctx.buttonClass)("pAutoFocus", ctx.autofocus);
747
771
  i0.ɵɵattribute("type", ctx.type)("aria-label", ctx.ariaLabel)("data-pc-name", "button")("data-pc-section", "root")("tabindex", ctx.tabindex);
748
772
  i0.ɵɵadvance(2);
749
- i0.ɵɵproperty("ngTemplateOutlet", ctx.content);
773
+ i0.ɵɵproperty("ngTemplateOutlet", ctx.contentTemplate || ctx._contentTemplate);
750
774
  i0.ɵɵadvance();
751
775
  i0.ɵɵproperty("ngIf", ctx.loading);
752
776
  i0.ɵɵadvance();
753
777
  i0.ɵɵproperty("ngIf", !ctx.loading);
754
778
  i0.ɵɵadvance();
755
- i0.ɵɵproperty("ngIf", !ctx.content && ctx.label);
779
+ i0.ɵɵproperty("ngIf", !ctx.contentTemplate && !ctx._contentTemplate && ctx.label);
756
780
  i0.ɵɵadvance();
757
- i0.ɵɵproperty("ngIf", !ctx.content && ctx.badge);
781
+ i0.ɵɵproperty("ngIf", !ctx.contentTemplate && !ctx._contentTemplate && ctx.badge);
758
782
  } }, dependencies: [CommonModule, i1.NgClass, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, Ripple, AutoFocus, SpinnerIcon, BadgeModule, i2.Badge, SharedModule], encapsulation: 2, changeDetection: 0 });
759
783
  }
760
784
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Button, [{
@@ -780,20 +804,20 @@ export class Button extends BaseComponent {
780
804
  [pAutoFocus]="autofocus"
781
805
  >
782
806
  <ng-content></ng-content>
783
- <ng-container *ngTemplateOutlet="content"></ng-container>
807
+ <ng-container *ngTemplateOutlet="contentTemplate || _contentTemplate"></ng-container>
784
808
  <ng-container *ngIf="loading">
785
- <ng-container *ngIf="!loadingicon">
809
+ <ng-container *ngIf="!loadingIconTemplate && !_loadingIconTemplate">
786
810
  <span *ngIf="loadingIcon" [ngClass]="iconClass()" [attr.aria-hidden]="true" [attr.data-pc-section]="'loadingicon'"></span>
787
811
  <SpinnerIcon *ngIf="!loadingIcon" [styleClass]="spinnerIconClass()" [spin]="true" [attr.aria-hidden]="true" [attr.data-pc-section]="'loadingicon'" />
788
812
  </ng-container>
789
- <ng-template [ngIf]="loadingicon" *ngTemplateOutlet="loadingicon; context: { class: iconClass() }"></ng-template>
813
+ <ng-template [ngIf]="loadingIconTemplate || _loadingIconTemplate" *ngTemplateOutlet="loadingIconTemplate || _loadingIconTemplate; context: { class: iconClass() }"></ng-template>
790
814
  </ng-container>
791
815
  <ng-container *ngIf="!loading">
792
- <span *ngIf="icon && !iconTemplate" [class]="icon" [ngClass]="iconClass()" [attr.data-pc-section]="'icon'"></span>
793
- <ng-template [ngIf]="!icon && iconTemplate" *ngTemplateOutlet="iconTemplate; context: { class: iconClass() }"></ng-template>
816
+ <span *ngIf="icon && !iconTemplate && !_iconTemplate" [class]="icon" [ngClass]="iconClass()" [attr.data-pc-section]="'icon'"></span>
817
+ <ng-template [ngIf]="!icon && (iconTemplate || _iconTemplate)" *ngTemplateOutlet="iconTemplate || _iconTemplate; context: { class: iconClass() }"></ng-template>
794
818
  </ng-container>
795
- <span class="p-button-label" [attr.aria-hidden]="icon && !label" *ngIf="!content && label" [attr.data-pc-section]="'label'">{{ label }}</span>
796
- <p-badge *ngIf="!content && badge" [value]="badge" [severity]="badgeSeverity"></p-badge>
819
+ <span class="p-button-label" [attr.aria-hidden]="icon && !label" *ngIf="!contentTemplate && !_contentTemplate && label" [attr.data-pc-section]="'label'">{{ label }}</span>
820
+ <p-badge *ngIf="!contentTemplate && !_contentTemplate && badge" [value]="badge" [severity]="badgeSeverity"></p-badge>
797
821
  </button>
798
822
  `,
799
823
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -867,10 +891,10 @@ export class Button extends BaseComponent {
867
891
  type: Output
868
892
  }], onBlur: [{
869
893
  type: Output
870
- }], content: [{
894
+ }], contentTemplate: [{
871
895
  type: ContentChild,
872
896
  args: ['content']
873
- }], loadingicon: [{
897
+ }], loadingIconTemplate: [{
874
898
  type: ContentChild,
875
899
  args: ['loading']
876
900
  }], iconTemplate: [{
@@ -878,6 +902,9 @@ export class Button extends BaseComponent {
878
902
  args: ['icon']
879
903
  }], buttonProps: [{
880
904
  type: Input
905
+ }], templates: [{
906
+ type: ContentChildren,
907
+ args: [PrimeTemplate]
881
908
  }] }); })();
882
909
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(Button, { className: "Button" }); })();
883
910
  export class ButtonModule {
@@ -893,4 +920,4 @@ export class ButtonModule {
893
920
  }]
894
921
  }], null, null); })();
895
922
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ButtonModule, { imports: [CommonModule, ButtonDirective, Button, SharedModule, ButtonLabel, ButtonIcon], exports: [ButtonDirective, Button, ButtonLabel, ButtonIcon, SharedModule] }); })();
896
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1dHRvbi9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFHSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLGVBQWUsRUFFZixNQUFNLEVBR04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztJQWthdEMsd0JBQXlEOzs7SUFHakQsMEJBQTBIOzs7SUFBaEcsNENBQXVCOzs7O0lBQ2pELGlDQUFxSjs7O0lBQWpGLEFBQWxDLHNEQUFpQyxjQUFjOzs7O0lBRnJGLDZCQUFtQztJQUUvQixBQURBLHVGQUFtSCx3RkFDa0M7Ozs7SUFEOUksY0FBaUI7SUFBakIseUNBQWlCO0lBQ1YsY0FBa0I7SUFBbEIsMENBQWtCOzs7O0lBRXBDLHlGQUFtRzs7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TTtZQU9QLFdBQVc7a0JBQXZCLEtBQUs7O2tGQTNLRyxNQUFNO0FBd1BuQixNQUFNLE9BQU8sWUFBWTtzR0FBWixZQUFZOzREQUFaLFlBQVk7Z0VBSFgsWUFBWSxFQUFtQixNQUFNLEVBQUUsWUFBWSxFQUNELFlBQVk7O2lGQUUvRCxZQUFZO2NBSnhCLFFBQVE7ZUFBQztnQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQzthQUM1RTs7d0ZBQ1ksWUFBWSxjQUhYLFlBQVksRUExbkJiLGVBQWUsRUFxWWYsTUFBTSxFQXFQa0MsWUFBWSxFQXRwQnBELFdBQVcsRUFZWCxVQUFVLGFBZ0JWLGVBQWUsRUFxWWYsTUFBTSxFQWphTixXQUFXLEVBWVgsVUFBVSxFQTJvQnlDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgY29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ2xhc3MsIGZpbmRTaW5nbGUsIGlzRW1wdHkgfSBmcm9tICdAcHJpbWV1aXgvdXRpbHMnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQXV0b0ZvY3VzIH0gZnJvbSAncHJpbWVuZy9hdXRvZm9jdXMnO1xuaW1wb3J0IHsgQmFkZ2VNb2R1bGUgfSBmcm9tICdwcmltZW5nL2JhZGdlJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgU3Bpbm5lckljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IFJpcHBsZSB9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7IEJ1dHRvblByb3BzIH0gZnJvbSAnLi9idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1dHRvblN0eWxlIH0gZnJvbSAnLi9zdHlsZS9idXR0b25zdHlsZSc7XG5cbnR5cGUgQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbmNvbnN0IElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTID0ge1xuICAgIGJ1dHRvbjogJ3AtYnV0dG9uJyxcbiAgICBjb21wb25lbnQ6ICdwLWNvbXBvbmVudCcsXG4gICAgaWNvbk9ubHk6ICdwLWJ1dHRvbi1pY29uLW9ubHknLFxuICAgIGRpc2FibGVkOiAncC1kaXNhYmxlZCcsXG4gICAgbG9hZGluZzogJ3AtYnV0dG9uLWxvYWRpbmcnLFxuICAgIGxhYmVsT25seTogJ3AtYnV0dG9uLWxvYWRpbmctbGFiZWwtb25seSdcbn0gYXMgY29uc3Q7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3BCdXR0b25MYWJlbF0nLFxuICAgIHByb3ZpZGVyczogW0J1dHRvblN0eWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLWJ1dHRvbi1sYWJlbF0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkxhYmVsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KEJ1dHRvblN0eWxlKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcEJ1dHRvbkljb25dJyxcbiAgICBwcm92aWRlcnM6IFtCdXR0b25TdHlsZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MucC1idXR0b24taWNvbl0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkljb24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQnV0dG9uU3R5bGUpO1xufVxuLyoqXG4gKiBCdXR0b24gZGlyZWN0aXZlIGlzIGFuIGV4dGVuc2lvbiB0byBidXR0b24gY29tcG9uZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcEJ1dHRvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbQnV0dG9uU3R5bGVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLWJ1dHRvbi1pY29uLW9ubHldJzogJ2lzSWNvbk9ubHkoKScsXG4gICAgICAgICdbY2xhc3MucC1idXR0b24tdGV4dF0nOiAnaXNUZXh0QnV0dG9uKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgaWNvbi5cbiAgICAgKiBAZGVwcmVjYXRlZCB1dGlsaXplIHBCdXR0b25JY29uIGFuZCBwQnV0dG9uTGFiZWwgZGlyZWN0aXZlcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uUG9zOiBCdXR0b25JY29uUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgLyoqXG4gICAgICogVXNlcyB0byBwYXNzIGF0dHJpYnV0ZXMgdG8gdGhlIGxvYWRpbmcgaWNvbidzIERPTSBlbGVtZW50LlxuICAgICAqIEBkZXByZWNhdGVkIHV0aWxpemUgcEJ1dG9uSWNvbiBpbnN0ZWFkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmdJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBzZXQgbGFiZWwodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2YWw7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQgaWNvbih2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pY29uID0gdmFsO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUljb24oKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGVDbGFzcygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBpbiBsb2FkaW5nIHN0YXRlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgICB9XG4gICAgc2V0IGxvYWRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWw7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2J1dHRvblByb3BzITogQnV0dG9uUHJvcHM7XG5cbiAgICBwcml2YXRlIGljb25TaWduYWwgPSBjb250ZW50Q2hpbGQoQnV0dG9uSWNvbik7XG5cbiAgICBwcml2YXRlIGxhYmVsU2lnbmFsID0gY29udGVudENoaWxkKEJ1dHRvbkxhYmVsKTtcblxuICAgIGlzSWNvbk9ubHkgPSBjb21wdXRlZCgoKSA9PiAhISghdGhpcy5sYWJlbFNpZ25hbCgpICYmIHRoaXMuaWNvblNpZ25hbCgpKSk7XG5cbiAgICBzZXQgYnV0dG9uUHJvcHModmFsOiBCdXR0b25Qcm9wcykge1xuICAgICAgICB0aGlzLl9idXR0b25Qcm9wcyA9IHZhbDtcblxuICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbCkuZm9yRWFjaCgoW2ssIHZdKSA9PiB0aGlzW2BfJHtrfWBdICE9PSB2ICYmICh0aGlzW2BfJHtrfWBdID0gdikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHN0eWxlIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2V2ZXJpdHk6ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdkYW5nZXInIHwgJ2hlbHAnIHwgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnY29udHJhc3QnIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBzaGFkb3cgdG8gaW5kaWNhdGUgZWxldmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByYWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBjaXJjdWxhciBib3JkZXIgcmFkaXVzIHRvIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvdW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0ZXh0OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgYm9yZGVyIGNsYXNzIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGluaXRpYWxseS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3V0bGluZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdsYXJnZScgfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBwbGFpbiB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB2YXJpYW50IHByb3BlcnR5IGluc3RlYWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBsYWluOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogU3BhbnMgMTAwJSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIHdoZW4gZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmx1aWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgX2xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgX2ljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGluaXRpYWxpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBnZXQgaHRtbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ludGVybmFsQ2xhc3Nlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTKTtcblxuICAgIGlzVGV4dEJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+ICEhKCF0aGlzLmljb25TaWduYWwoKSAmJiB0aGlzLmxhYmVsU2lnbmFsKCkgJiYgdGhpcy50ZXh0KSk7XG5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9mIHRoZSBidXR0b24uXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBCdXR0b25MYWJlbCBkaXJlY3RpdmUgaW5zdGVhZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgbGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBpY29uLlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBwQnV0dG9uSWNvbiBkaXJlY3RpdmUgaW5zdGVhZFxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHBhc3MgYWxsIHByb3BlcnRpZXMgb2YgdGhlIEJ1dHRvblByb3BzIHRvIHRoZSBCdXR0b24gY29tcG9uZW50LlxuICAgICAqIEBkZXByZWNhdGVkIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byB0aGUgYnV0dG9uIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGJ1dHRvblByb3BzKCk6IEJ1dHRvblByb3BzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblByb3BzO1xuICAgIH1cblxuICAgIHNwaW5uZXJJY29uID0gYDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwicC1pY29uLXNwaW5cIj5cbiAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MTdfMjE0MDgpXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNNi45OTcwMSAxNEM1Ljg1NDQxIDEzLjk5OSA0LjcyOTM5IDEzLjcxODYgMy43MjAxMiAxMy4xODMyQzIuNzEwODQgMTIuNjQ3OCAxLjg0Nzk1IDExLjg3MzcgMS4yMDY3MyAxMC45Mjg0QzAuNTY1NTA0IDkuOTgzMDUgMC4xNjU0MjQgOC44OTUyNiAwLjA0MTM4NyA3Ljc1OTg5Qy0wLjA4MjY0OTYgNi42MjQ1MyAwLjA3MzEyNSA1LjQ3NjA3IDAuNDk1MTIyIDQuNDE0N0MwLjkxNzExOSAzLjM1MzMzIDEuNTkyNTIgMi40MTEzIDIuNDYyNDEgMS42NzA3N0MzLjMzMjI5IDAuOTMwMjQ3IDQuMzcwMjQgMC40MTM3MjkgNS40ODU3IDAuMTY2Mjc1QzYuNjAxMTcgLTAuMDgxMTc5NiA3Ljc2MDI2IC0wLjA1MjA1MzUgOC44NjE4OCAwLjI1MTExMkM5Ljk2MzUgMC41NTQyNzggMTAuOTc0MiAxLjEyMjI3IDExLjgwNTcgMS45MDU1NUMxMS45MTUgMi4wMTQ5MyAxMS45NzY0IDIuMTYzMTkgMTEuOTc2NCAyLjMxNzc4QzExLjk3NjQgMi40NzIzNiAxMS45MTUgMi42MjA2MiAxMS44MDU3IDIuNzNDMTEuNzUyMSAyLjc4NTAzIDExLjY4OCAyLjgyODc3IDExLjYxNzEgMi44NTg2NEMxMS41NDYzIDIuODg4NSAxMS40NzAyIDIuOTAzODkgMTEuMzkzMyAyLjkwMzg5QzExLjMxNjUgMi45MDM4OSAxMS4yNDA0IDIuODg4NSAxMS4xNjk1IDIuODU4NjRDMTEuMDk4NyAyLjgyODc3IDExLjAzNDYgMi43ODUwMyAxMC45ODA5IDIuNzNDOS45OTk4IDEuODEyNzMgOC43MzI0NiAxLjI2MTM4IDcuMzkyMjYgMS4xNjg3NkM2LjA1MjA2IDEuMDc2MTUgNC43MjA4NiAxLjQ0Nzk0IDMuNjIyNzkgMi4yMjE1MkMyLjUyNDcxIDIuOTk1MTEgMS43MjY4MyA0LjEyMzI1IDEuMzYzNDUgNS40MTYwMkMxLjAwMDA4IDYuNzA4NzkgMS4wOTM0MiA4LjA4NzIzIDEuNjI3NzUgOS4zMTkyNkMyLjE2MjA5IDEwLjU1MTMgMy4xMDQ3OCAxMS41NjE3IDQuMjk3MTMgMTIuMTgwM0M1LjQ4OTQ3IDEyLjc5ODkgNi44NTg2NSAxMi45ODggOC4xNzQxNCAxMi43MTU3QzkuNDg5NjMgMTIuNDQzNSAxMC42NzExIDExLjcyNjQgMTEuNTE5NiAxMC42ODU0QzEyLjM2ODEgOS42NDQzMiAxMi44MzE5IDguMzQyODIgMTIuODMyOCA3QzEyLjgzMjggNi44NDUyOSAxMi44OTQzIDYuNjk2OTIgMTMuMDAzOCA2LjU4NzUyQzEzLjExMzIgNi40NzgxMiAxMy4yNjE2IDYuNDE2NjcgMTMuNDE2NCA2LjQxNjY3QzEzLjU3MTIgNi40MTY2NyAxMy43MTk2IDYuNDc4MTIgMTMuODI5MSA2LjU4NzUyQzEzLjkzODUgNi42OTY5MiAxNCA2Ljg0NTI5IDE0IDdDMTQgOC44NTY1MSAxMy4yNjIyIDEwLjYzNyAxMS45NDg5IDExLjk0OTdDMTAuNjM1NiAxMy4yNjI1IDguODU0MzIgMTQgNi45OTcwMSAxNFpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQxN18yMTQwOFwiPlxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICA8L2RlZnM+XG4gICAgPC9zdmc+YDtcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChCdXR0b25TdHlsZSk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBhZGRDbGFzcyh0aGlzLmh0bWxFbGVtZW50LCB0aGlzLmdldFN0eWxlQ2xhc3MoKS5qb2luKCcgJykpO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlSWNvbigpO1xuICAgICAgICB0aGlzLmNyZWF0ZUxhYmVsKCk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBidXR0b25Qcm9wcyB9ID0gc2ltcGxlQ2hhbmdlcztcblxuICAgICAgICBpZiAoYnV0dG9uUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYnV0dG9uUHJvcHMuY3VycmVudFZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBwcm9wc1twcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdHlsZUNsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgc3R5bGVDbGFzczogc3RyaW5nW10gPSBbSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMuYnV0dG9uLCBJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5jb21wb25lbnRdO1xuXG4gICAgICAgIGlmICh0aGlzLmljb24gJiYgIXRoaXMubGFiZWwgJiYgaXNFbXB0eSh0aGlzLmh0bWxFbGVtZW50LnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTLmljb25Pbmx5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaChJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5kaXNhYmxlZCwgSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMubG9hZGluZyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pY29uICYmIHRoaXMubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMubGFiZWxPbmx5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdGhpcy5sYWJlbCAmJiAhaXNFbXB0eSh0aGlzLmh0bWxFbGVtZW50LnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaChJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5pY29uT25seSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0KSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goJ3AtYnV0dG9uLXRleHQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldmVyaXR5KSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goYHAtYnV0dG9uLSR7dGhpcy5zZXZlcml0eX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWluKSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goJ3AtYnV0dG9uLXBsYWluJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yYWlzZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tcmFpc2VkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaXplKSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goYHAtYnV0dG9uLSR7dGhpcy5zaXplfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3V0bGluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tb3V0bGluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdW5kZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tcm91bmRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKCdwLWJ1dHRvbi1zbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKCdwLWJ1dHRvbi1sZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRmx1aWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tZmx1aWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZUNsYXNzO1xuICAgIH1cblxuICAgIGdldCBoYXNGbHVpZCgpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZmx1aWRDb21wb25lbnQgPSBuYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3AtZmx1aWQnKTtcblxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmZsdWlkKSA/ICEhZmx1aWRDb21wb25lbnQgOiB0aGlzLmZsdWlkO1xuICAgIH1cblxuICAgIHNldFN0eWxlQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlQ2xhc3MgPSB0aGlzLmdldFN0eWxlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRoaXMuX2ludGVybmFsQ2xhc3Nlcyk7XG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5zdHlsZUNsYXNzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVMYWJlbCgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IGZpbmRTaW5nbGUodGhpcy5odG1sRWxlbWVudCwgJy5wLWJ1dHRvbi1sYWJlbCcpO1xuICAgICAgICBpZiAoIWNyZWF0ZWQgJiYgdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IGxhYmVsRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1sYWJlbCc7XG4gICAgICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmxhYmVsKSk7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUljb24oKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBmaW5kU2luZ2xlKHRoaXMuaHRtbEVsZW1lbnQsICcucC1idXR0b24taWNvbicpO1xuICAgICAgICBpZiAoIWNyZWF0ZWQgJiYgKHRoaXMuaWNvbiB8fCB0aGlzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgICBsZXQgaWNvbkVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uJztcbiAgICAgICAgICAgIGljb25FbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgICAgbGV0IGljb25Qb3NDbGFzcyA9IHRoaXMubGFiZWwgPyAncC1idXR0b24taWNvbi0nICsgdGhpcy5pY29uUG9zIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGljb25Qb3NDbGFzcykge1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGljb25FbGVtZW50LCBpY29uUG9zQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWNvbkNsYXNzID0gdGhpcy5nZXRJY29uQ2xhc3MoKTtcblxuICAgICAgICAgICAgaWYgKGljb25DbGFzcykge1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGljb25FbGVtZW50LCBpY29uQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0ljb24gJiYgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgaWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5zcGlubmVySWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5pbnNlcnRCZWZvcmUoaWNvbkVsZW1lbnQsIHRoaXMuaHRtbEVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVMYWJlbCgpIHtcbiAgICAgICAgbGV0IGxhYmVsRWxlbWVudCA9IGZpbmRTaW5nbGUodGhpcy5odG1sRWxlbWVudCwgJy5wLWJ1dHRvbi1sYWJlbCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgbGFiZWxFbGVtZW50ICYmIHRoaXMuaHRtbEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsRWxlbWVudCA/IChsYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsKSA6IHRoaXMuY3JlYXRlTGFiZWwoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVJY29uKCkge1xuICAgICAgICBsZXQgaWNvbkVsZW1lbnQgPSBmaW5kU2luZ2xlKHRoaXMuaHRtbEVsZW1lbnQsICcucC1idXR0b24taWNvbicpO1xuICAgICAgICBsZXQgbGFiZWxFbGVtZW50ID0gZmluZFNpbmdsZSh0aGlzLmh0bWxFbGVtZW50LCAnLnAtYnV0dG9uLWxhYmVsJyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZGluZyAmJiAhdGhpcy5sb2FkaW5nSWNvbiAmJiBpY29uRWxlbWVudCkge1xuICAgICAgICAgICAgaWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5zcGlubmVySWNvbjtcbiAgICAgICAgfSBlbHNlIGlmIChpY29uRWxlbWVudD8uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICBpY29uRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpY29uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvblBvcykge1xuICAgICAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uICcgKyAobGFiZWxFbGVtZW50ID8gJ3AtYnV0dG9uLWljb24tJyArIHRoaXMuaWNvblBvcyA6ICcnKSArICcgJyArIHRoaXMuZ2V0SWNvbkNsYXNzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uICcgKyB0aGlzLmdldEljb25DbGFzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVJY29uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPyAncC1idXR0b24tbG9hZGluZy1pY29uICcgKyAodGhpcy5sb2FkaW5nSWNvbiA/IHRoaXMubG9hZGluZ0ljb24gOiAncC1pY29uJykgOiB0aGlzLmljb24gfHwgJ3AtaGlkZGVuJztcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbi8qKlxuICogQnV0dG9uIGlzIGFuIGV4dGVuc2lvbiB0byBzdGFuZGFyZCBidXR0b24gZWxlbWVudCB3aXRoIGljb25zIGFuZCB0aGVtaW5nLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWJ1dHRvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSaXBwbGUsIEF1dG9Gb2N1cywgU3Bpbm5lckljb24sIEJhZGdlTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFthdHRyLnR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9hZGluZ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1ci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1uYW1lXT1cIididXR0b24nXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncm9vdCdcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgW3BBdXRvRm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5naWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdJY29uXCIgW25nQ2xhc3NdPVwiaWNvbkNsYXNzKClcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidsb2FkaW5naWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxTcGlubmVySWNvbiAqbmdJZj1cIiFsb2FkaW5nSWNvblwiIFtzdHlsZUNsYXNzXT1cInNwaW5uZXJJY29uQ2xhc3MoKVwiIFtzcGluXT1cInRydWVcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidsb2FkaW5naWNvbidcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJsb2FkaW5naWNvblwiICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ2ljb247IGNvbnRleHQ6IHsgY2xhc3M6IGljb25DbGFzcygpIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImljb24gJiYgIWljb25UZW1wbGF0ZVwiIFtjbGFzc109XCJpY29uXCIgW25nQ2xhc3NdPVwiaWNvbkNsYXNzKClcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2ljb24nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaWNvbiAmJiBpY29uVGVtcGxhdGVcIiAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyBjbGFzczogaWNvbkNsYXNzKCkgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1idXR0b24tbGFiZWxcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJpY29uICYmICFsYWJlbFwiICpuZ0lmPVwiIWNvbnRlbnQgJiYgbGFiZWxcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2xhYmVsJ1wiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHAtYmFkZ2UgKm5nSWY9XCIhY29udGVudCAmJiBiYWRnZVwiIFt2YWx1ZV09XCJiYWRnZVwiIFtzZXZlcml0eV09XCJiYWRnZVNldmVyaXR5XCI+PC9wLWJhZGdlPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQnV0dG9uU3R5bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ2J1dHRvbic7XG4gICAgLyoqXG4gICAgICogUG9zaXRpb24gb2YgdGhlIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvblBvczogQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFZhbHVlIG9mIHRoZSBiYWRnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBiYWRnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFVzZXMgdG8gcGFzcyBhdHRyaWJ1dGVzIHRvIHRoZSBsYWJlbCdzIERPTSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgYnV0dG9uIGlzIGluIGxvYWRpbmcgc3RhdGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJY29uIHRvIGRpc3BsYXkgaW4gbG9hZGluZyBzdGF0ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nSWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIHNoYWRvdyB0byBpbmRpY2F0ZSBlbGV2YXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJhaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGNpcmN1bGFyIGJvcmRlciByYWRpdXMgdG8gdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcm91bmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIHRleHR1YWwgY2xhc3MgdG8gdGhlIGJ1dHRvbiB3aXRob3V0IGEgYmFja2dyb3VuZCBpbml0aWFsbHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBwbGFpbiB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB2YXJpYW50IHByb3BlcnR5IGluc3RlYWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBsYWluOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc3R5bGUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2RhbmdlcicgfCAnaGVscCcgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdjb250cmFzdCcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGJvcmRlciBjbGFzcyB3aXRob3V0IGEgYmFja2dyb3VuZCBpbml0aWFsbHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG91dGxpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgbGluayBzdHlsZSB0byB0aGUgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsaW5rOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgdGFiaW5kZXggdG8gdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNpemUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ2xhcmdlJyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZhcmlhbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YXJpYW50OiAnb3V0bGluZWQnIHwgJ3RleHQnIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGJhZGdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZXByZWNhdGVkIHVzZSBiYWRnZVNldmVyaXR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgYmFkZ2VDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFNldmVyaXR5IHR5cGUgb2YgdGhlIGJhZGdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgc2Vjb25kYXJ5XG4gICAgICovXG4gICAgQElucHV0KCkgYmFkZ2VTZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2RhbmdlcicgfCAnaGVscCcgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdjb250cmFzdCcgfCBudWxsIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZWZpbmUgYSBzdHJpbmcgdGhhdCBhdXRvY29tcGxldGUgYXR0cmlidXRlIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IGdldCBmb2N1cyBvbiBsb2FkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3BhbnMgMTAwJSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIHdoZW4gZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmx1aWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgICAqIFRoaXMgZXZlbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSA8cC1idXR0b24+IGNvbXBvbmVudC4gVXNpbmcgYSByZWd1bGFyIDxidXR0b24+IGVsZW1lbnQsIHVzZSAoY2xpY2spLlxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgLSBNb3VzZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiBidXR0b24gaXMgZm9jdXNlZC5cbiAgICAgKiBUaGlzIGV2ZW50IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgPHAtYnV0dG9uPiBjb21wb25lbnQuIFVzaW5nIGEgcmVndWxhciA8YnV0dG9uPiBlbGVtZW50LCB1c2UgKGZvY3VzKS5cbiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2ZW50IC0gRm9jdXMgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gYnV0dG9uIGxvc2VzIGZvY3VzLlxuICAgICAqIFRoaXMgZXZlbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSA8cC1idXR0b24+IGNvbXBvbmVudC4gVXNpbmcgYSByZWd1bGFyIDxidXR0b24+IGVsZW1lbnQsIHVzZSAoYmx1cikuXG4gICAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBldmVudCAtIEZvY3VzIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICoqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIG9mIHRoZSBsb2FkaW5nLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKiovXG4gICAgQENvbnRlbnRDaGlsZCgnbG9hZGluZycpIGxvYWRpbmdpY29uOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIG9mIHRoZSBpY29uLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKiovXG4gICAgQENvbnRlbnRDaGlsZCgnaWNvbicpIGljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9idXR0b25Qcm9wczogYW55IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcGFzcyBhbGwgcHJvcGVydGllcyBvZiB0aGUgQnV0dG9uUHJvcHMgdG8gdGhlIEJ1dHRvbiBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGJ1dHRvblByb3BzKCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idXR0b25Qcm9wcztcbiAgICB9XG4gICAgc2V0IGJ1dHRvblByb3BzKHZhbDogYW55IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2J1dHRvblByb3BzID0gdmFsO1xuXG4gICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsKS5mb3JFYWNoKChbaywgdl0pID0+IHRoaXNbYF8ke2t9YF0gIT09IHYgJiYgKHRoaXNbYF8ke2t9YF0gPSB2KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaGFzRmx1aWQoKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZsdWlkQ29tcG9uZW50ID0gbmF0aXZlRWxlbWVudC5jbG9zZXN0KCdwLWZsdWlkJyk7XG5cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5mbHVpZCkgPyAhIWZsdWlkQ29tcG9uZW50IDogdGhpcy5mbHVpZDtcbiAgICB9XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQnV0dG9uU3R5bGUpO1xuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBidXR0b25Qcm9wcyB9ID0gc2ltcGxlQ2hhbmdlcztcblxuICAgICAgICBpZiAoYnV0dG9uUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYnV0dG9uUHJvcHMuY3VycmVudFZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBwcm9wc1twcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzcGlubmVySWNvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmljb25DbGFzcygpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gYWNjICsgYCAke2tleX1gLCAncC1idXR0b24tbG9hZGluZy1pY29uJyk7XG4gICAgfVxuXG4gICAgaWNvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2BwLWJ1dHRvbi1sb2FkaW5nLWljb24gcGktc3BpbiAke3RoaXMubG9hZGluZ0ljb24gPz8gJyd9YF06IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uJzogdHJ1ZSxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLWxlZnQnOiB0aGlzLmljb25Qb3MgPT09ICdsZWZ0JyAmJiB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWljb24tcmlnaHQnOiB0aGlzLmljb25Qb3MgPT09ICdyaWdodCcgJiYgdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLXRvcCc6IHRoaXMuaWNvblBvcyA9PT0gJ3RvcCcgJiYgdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLWJvdHRvbSc6IHRoaXMuaWNvblBvcyA9PT0gJ2JvdHRvbScgJiYgdGhpcy5sYWJlbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdwLWJ1dHRvbiBwLWNvbXBvbmVudCc6IHRydWUsXG4gICAgICAgICAgICAncC1idXR0b24taWNvbi1vbmx5JzogKHRoaXMuaWNvbiB8fCB0aGlzLmljb25UZW1wbGF0ZSB8fCB0aGlzLmxvYWRpbmdJY29uIHx8IHRoaXMubG9hZGluZ2ljb24pICYmICF0aGlzLmxhYmVsLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLXZlcnRpY2FsJzogKHRoaXMuaWNvblBvcyA9PT0gJ3RvcCcgfHwgdGhpcy5pY29uUG9zID09PSAnYm90dG9tJykgJiYgdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1sb2FkaW5nJzogdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWxvYWRpbmctbGFiZWwtb25seSc6IHRoaXMubG9hZGluZyAmJiAhdGhpcy5pY29uICYmIHRoaXMubGFiZWwgJiYgIXRoaXMubG9hZGluZ0ljb24gJiYgdGhpcy5pY29uUG9zID09PSAnbGVmdCcsXG4gICAgICAgICAgICAncC1idXR0b24tbGluayc6IHRoaXMubGluayxcbiAgICAgICAgICAgIFtgcC1idXR0b24tJHt0aGlzLnNldmVyaXR5fWBdOiB0aGlzLnNldmVyaXR5LFxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRoaXMucmFpc2VkLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0aGlzLnJvdW5kZWQsXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRoaXMudGV4dCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRoaXMub3V0bGluZWQsXG4gICAgICAgICAgICAncC1idXR0b24tc20nOiB0aGlzLnNpemUgPT09ICdzbWFsbCcsXG4gICAgICAgICAgICAncC1idXR0b24tbGcnOiB0aGlzLnNpemUgPT09ICdsYXJnZScsXG4gICAgICAgICAgICAncC1idXR0b24tcGxhaW4nOiB0aGlzLnBsYWluLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWZsdWlkJzogdGhpcy5oYXNGbHVpZCxcbiAgICAgICAgICAgIFtgJHt0aGlzLnN0eWxlQ2xhc3N9YF06IHRoaXMuc3R5bGVDbGFzc1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdXR0b25EaXJlY3RpdmUsIEJ1dHRvbiwgU2hhcmVkTW9kdWxlLCBCdXR0b25MYWJlbCwgQnV0dG9uSWNvbl0sXG4gICAgZXhwb3J0czogW0J1dHRvbkRpcmVjdGl2ZSwgQnV0dG9uLCBCdXR0b25MYWJlbCwgQnV0dG9uSWNvbiwgU2hhcmVkTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Nb2R1bGUge31cbiJdfQ==
923
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1dHRvbi9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFHSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBRWYsTUFBTSxFQUlOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7O0lBa2F0Qyx3QkFBcUY7OztJQUc3RSwwQkFBMEg7OztJQUFoRyw0Q0FBdUI7Ozs7SUFDakQsaUNBQXFKOzs7SUFBakYsQUFBbEMsc0RBQWlDLGNBQWM7Ozs7SUFGckYsNkJBQW9FO0lBRWhFLEFBREEsdUZBQW1ILHdGQUNrQzs7OztJQUQ5SSxjQUFpQjtJQUFqQix5Q0FBaUI7SUFDVixjQUFrQjtJQUFsQiwwQ0FB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Z0JBQ3ZGLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7YUFDNUU7O3dGQUNZLFlBQVksY0FIWCxZQUFZLEVBeHBCYixlQUFlLEVBcVlmLE1BQU0sRUFtUmtDLFlBQVksRUFwckJwRCxXQUFXLEVBWVgsVUFBVSxhQWdCVixlQUFlLEVBcVlmLE1BQU0sRUFqYU4sV0FBVyxFQVlYLFVBQVUsRUF5cUJ5QyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGNvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ2xhc3MsIGZpbmRTaW5nbGUsIGlzRW1wdHkgfSBmcm9tICdAcHJpbWV1aXgvdXRpbHMnO1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSwgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQXV0b0ZvY3VzIH0gZnJvbSAncHJpbWVuZy9hdXRvZm9jdXMnO1xuaW1wb3J0IHsgQmFkZ2VNb2R1bGUgfSBmcm9tICdwcmltZW5nL2JhZGdlJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgU3Bpbm5lckljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IFJpcHBsZSB9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7IEJ1dHRvblByb3BzIH0gZnJvbSAnLi9idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1dHRvblN0eWxlIH0gZnJvbSAnLi9zdHlsZS9idXR0b25zdHlsZSc7XG5cbnR5cGUgQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbmNvbnN0IElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTID0ge1xuICAgIGJ1dHRvbjogJ3AtYnV0dG9uJyxcbiAgICBjb21wb25lbnQ6ICdwLWNvbXBvbmVudCcsXG4gICAgaWNvbk9ubHk6ICdwLWJ1dHRvbi1pY29uLW9ubHknLFxuICAgIGRpc2FibGVkOiAncC1kaXNhYmxlZCcsXG4gICAgbG9hZGluZzogJ3AtYnV0dG9uLWxvYWRpbmcnLFxuICAgIGxhYmVsT25seTogJ3AtYnV0dG9uLWxvYWRpbmctbGFiZWwtb25seSdcbn0gYXMgY29uc3Q7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3BCdXR0b25MYWJlbF0nLFxuICAgIHByb3ZpZGVyczogW0J1dHRvblN0eWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLWJ1dHRvbi1sYWJlbF0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkxhYmVsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KEJ1dHRvblN0eWxlKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcEJ1dHRvbkljb25dJyxcbiAgICBwcm92aWRlcnM6IFtCdXR0b25TdHlsZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MucC1idXR0b24taWNvbl0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkljb24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQnV0dG9uU3R5bGUpO1xufVxuLyoqXG4gKiBCdXR0b24gZGlyZWN0aXZlIGlzIGFuIGV4dGVuc2lvbiB0byBidXR0b24gY29tcG9uZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcEJ1dHRvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbQnV0dG9uU3R5bGVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLWJ1dHRvbi1pY29uLW9ubHldJzogJ2lzSWNvbk9ubHkoKScsXG4gICAgICAgICdbY2xhc3MucC1idXR0b24tdGV4dF0nOiAnaXNUZXh0QnV0dG9uKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgaWNvbi5cbiAgICAgKiBAZGVwcmVjYXRlZCB1dGlsaXplIHBCdXR0b25JY29uIGFuZCBwQnV0dG9uTGFiZWwgZGlyZWN0aXZlcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uUG9zOiBCdXR0b25JY29uUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgLyoqXG4gICAgICogVXNlcyB0byBwYXNzIGF0dHJpYnV0ZXMgdG8gdGhlIGxvYWRpbmcgaWNvbidzIERPTSBlbGVtZW50LlxuICAgICAqIEBkZXByZWNhdGVkIHV0aWxpemUgcEJ1dG9uSWNvbiBpbnN0ZWFkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmdJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBzZXQgbGFiZWwodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2YWw7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQgaWNvbih2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pY29uID0gdmFsO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUljb24oKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGVDbGFzcygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBpbiBsb2FkaW5nIHN0YXRlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgICB9XG4gICAgc2V0IGxvYWRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWw7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2J1dHRvblByb3BzITogQnV0dG9uUHJvcHM7XG5cbiAgICBwcml2YXRlIGljb25TaWduYWwgPSBjb250ZW50Q2hpbGQoQnV0dG9uSWNvbik7XG5cbiAgICBwcml2YXRlIGxhYmVsU2lnbmFsID0gY29udGVudENoaWxkKEJ1dHRvbkxhYmVsKTtcblxuICAgIGlzSWNvbk9ubHkgPSBjb21wdXRlZCgoKSA9PiAhISghdGhpcy5sYWJlbFNpZ25hbCgpICYmIHRoaXMuaWNvblNpZ25hbCgpKSk7XG5cbiAgICBzZXQgYnV0dG9uUHJvcHModmFsOiBCdXR0b25Qcm9wcykge1xuICAgICAgICB0aGlzLl9idXR0b25Qcm9wcyA9IHZhbDtcblxuICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbCkuZm9yRWFjaCgoW2ssIHZdKSA9PiB0aGlzW2BfJHtrfWBdICE9PSB2ICYmICh0aGlzW2BfJHtrfWBdID0gdikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHN0eWxlIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2V2ZXJpdHk6ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdkYW5nZXInIHwgJ2hlbHAnIHwgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnY29udHJhc3QnIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBzaGFkb3cgdG8gaW5kaWNhdGUgZWxldmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByYWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBjaXJjdWxhciBib3JkZXIgcmFkaXVzIHRvIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvdW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0ZXh0OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgYm9yZGVyIGNsYXNzIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGluaXRpYWxseS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3V0bGluZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdsYXJnZScgfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBwbGFpbiB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB2YXJpYW50IHByb3BlcnR5IGluc3RlYWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBsYWluOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogU3BhbnMgMTAwJSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIHdoZW4gZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmx1aWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgX2xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgX2ljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGluaXRpYWxpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBnZXQgaHRtbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ludGVybmFsQ2xhc3Nlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTKTtcblxuICAgIGlzVGV4dEJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+ICEhKCF0aGlzLmljb25TaWduYWwoKSAmJiB0aGlzLmxhYmVsU2lnbmFsKCkgJiYgdGhpcy50ZXh0KSk7XG5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9mIHRoZSBidXR0b24uXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBCdXR0b25MYWJlbCBkaXJlY3RpdmUgaW5zdGVhZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgbGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBpY29uLlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBwQnV0dG9uSWNvbiBkaXJlY3RpdmUgaW5zdGVhZFxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHBhc3MgYWxsIHByb3BlcnRpZXMgb2YgdGhlIEJ1dHRvblByb3BzIHRvIHRoZSBCdXR0b24gY29tcG9uZW50LlxuICAgICAqIEBkZXByZWNhdGVkIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byB0aGUgYnV0dG9uIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGJ1dHRvblByb3BzKCk6IEJ1dHRvblByb3BzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblByb3BzO1xuICAgIH1cblxuICAgIHNwaW5uZXJJY29uID0gYDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwicC1pY29uLXNwaW5cIj5cbiAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MTdfMjE0MDgpXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNNi45OTcwMSAxNEM1Ljg1NDQxIDEzLjk5OSA0LjcyOTM5IDEzLjcxODYgMy43MjAxMiAxMy4xODMyQzIuNzEwODQgMTIuNjQ3OCAxLjg0Nzk1IDExLjg3MzcgMS4yMDY3MyAxMC45Mjg0QzAuNTY1NTA0IDkuOTgzMDUgMC4xNjU0MjQgOC44OTUyNiAwLjA0MTM4NyA3Ljc1OTg5Qy0wLjA4MjY0OTYgNi42MjQ1MyAwLjA3MzEyNSA1LjQ3NjA3IDAuNDk1MTIyIDQuNDE0N0MwLjkxNzExOSAzLjM1MzMzIDEuNTkyNTIgMi40MTEzIDIuNDYyNDEgMS42NzA3N0MzLjMzMjI5IDAuOTMwMjQ3IDQuMzcwMjQgMC40MTM3MjkgNS40ODU3IDAuMTY2Mjc1QzYuNjAxMTcgLTAuMDgxMTc5NiA3Ljc2MDI2IC0wLjA1MjA1MzUgOC44NjE4OCAwLjI1MTExMkM5Ljk2MzUgMC41NTQyNzggMTAuOTc0MiAxLjEyMjI3IDExLjgwNTcgMS45MDU1NUMxMS45MTUgMi4wMTQ5MyAxMS45NzY0IDIuMTYzMTkgMTEuOTc2NCAyLjMxNzc4QzExLjk3NjQgMi40NzIzNiAxMS45MTUgMi42MjA2MiAxMS44MDU3IDIuNzNDMTEuNzUyMSAyLjc4NTAzIDExLjY4OCAyLjgyODc3IDExLjYxNzEgMi44NTg2NEMxMS41NDYzIDIuODg4NSAxMS40NzAyIDIuOTAzODkgMTEuMzkzMyAyLjkwMzg5QzExLjMxNjUgMi45MDM4OSAxMS4yNDA0IDIuODg4NSAxMS4xNjk1IDIuODU4NjRDMTEuMDk4NyAyLjgyODc3IDExLjAzNDYgMi43ODUwMyAxMC45ODA5IDIuNzNDOS45OTk4IDEuODEyNzMgOC43MzI0NiAxLjI2MTM4IDcuMzkyMjYgMS4xNjg3NkM2LjA1MjA2IDEuMDc2MTUgNC43MjA4NiAxLjQ0Nzk0IDMuNjIyNzkgMi4yMjE1MkMyLjUyNDcxIDIuOTk1MTEgMS43MjY4MyA0LjEyMzI1IDEuMzYzNDUgNS40MTYwMkMxLjAwMDA4IDYuNzA4NzkgMS4wOTM0MiA4LjA4NzIzIDEuNjI3NzUgOS4zMTkyNkMyLjE2MjA5IDEwLjU1MTMgMy4xMDQ3OCAxMS41NjE3IDQuMjk3MTMgMTIuMTgwM0M1LjQ4OTQ3IDEyLjc5ODkgNi44NTg2NSAxMi45ODggOC4xNzQxNCAxMi43MTU3QzkuNDg5NjMgMTIuNDQzNSAxMC42NzExIDExLjcyNjQgMTEuNTE5NiAxMC42ODU0QzEyLjM2ODEgOS42NDQzMiAxMi44MzE5IDguMzQyODIgMTIuODMyOCA3QzEyLjgzMjggNi44NDUyOSAxMi44OTQzIDYuNjk2OTIgMTMuMDAzOCA2LjU4NzUyQzEzLjExMzIgNi40NzgxMiAxMy4yNjE2IDYuNDE2NjcgMTMuNDE2NCA2LjQxNjY3QzEzLjU3MTIgNi40MTY2NyAxMy43MTk2IDYuNDc4MTIgMTMuODI5MSA2LjU4NzUyQzEzLjkzODUgNi42OTY5MiAxNCA2Ljg0NTI5IDE0IDdDMTQgOC44NTY1MSAxMy4yNjIyIDEwLjYzNyAxMS45NDg5IDExLjk0OTdDMTAuNjM1NiAxMy4yNjI1IDguODU0MzIgMTQgNi45OTcwMSAxNFpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQxN18yMTQwOFwiPlxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICA8L2RlZnM+XG4gICAgPC9zdmc+YDtcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChCdXR0b25TdHlsZSk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBhZGRDbGFzcyh0aGlzLmh0bWxFbGVtZW50LCB0aGlzLmdldFN0eWxlQ2xhc3MoKS5qb2luKCcgJykpO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlSWNvbigpO1xuICAgICAgICB0aGlzLmNyZWF0ZUxhYmVsKCk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBidXR0b25Qcm9wcyB9ID0gc2ltcGxlQ2hhbmdlcztcblxuICAgICAgICBpZiAoYnV0dG9uUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYnV0dG9uUHJvcHMuY3VycmVudFZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBwcm9wc1twcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdHlsZUNsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgc3R5bGVDbGFzczogc3RyaW5nW10gPSBbSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMuYnV0dG9uLCBJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5jb21wb25lbnRdO1xuXG4gICAgICAgIGlmICh0aGlzLmljb24gJiYgIXRoaXMubGFiZWwgJiYgaXNFbXB0eSh0aGlzLmh0bWxFbGVtZW50LnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKElOVEVSTkFMX0JVVFRPTl9DTEFTU0VTLmljb25Pbmx5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaChJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5kaXNhYmxlZCwgSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMubG9hZGluZyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pY29uICYmIHRoaXMubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goSU5URVJOQUxfQlVUVE9OX0NMQVNTRVMubGFiZWxPbmx5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdGhpcy5sYWJlbCAmJiAhaXNFbXB0eSh0aGlzLmh0bWxFbGVtZW50LnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaChJTlRFUk5BTF9CVVRUT05fQ0xBU1NFUy5pY29uT25seSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0KSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goJ3AtYnV0dG9uLXRleHQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldmVyaXR5KSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goYHAtYnV0dG9uLSR7dGhpcy5zZXZlcml0eX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWluKSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goJ3AtYnV0dG9uLXBsYWluJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yYWlzZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tcmFpc2VkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaXplKSB7XG4gICAgICAgICAgICBzdHlsZUNsYXNzLnB1c2goYHAtYnV0dG9uLSR7dGhpcy5zaXplfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3V0bGluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tb3V0bGluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdW5kZWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tcm91bmRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKCdwLWJ1dHRvbi1zbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgICAgICAgc3R5bGVDbGFzcy5wdXNoKCdwLWJ1dHRvbi1sZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRmx1aWQpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MucHVzaCgncC1idXR0b24tZmx1aWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZUNsYXNzO1xuICAgIH1cblxuICAgIGdldCBoYXNGbHVpZCgpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZmx1aWRDb21wb25lbnQgPSBuYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3AtZmx1aWQnKTtcblxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmZsdWlkKSA/ICEhZmx1aWRDb21wb25lbnQgOiB0aGlzLmZsdWlkO1xuICAgIH1cblxuICAgIHNldFN0eWxlQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlQ2xhc3MgPSB0aGlzLmdldFN0eWxlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRoaXMuX2ludGVybmFsQ2xhc3Nlcyk7XG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5zdHlsZUNsYXNzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVMYWJlbCgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IGZpbmRTaW5nbGUodGhpcy5odG1sRWxlbWVudCwgJy5wLWJ1dHRvbi1sYWJlbCcpO1xuICAgICAgICBpZiAoIWNyZWF0ZWQgJiYgdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IGxhYmVsRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1sYWJlbCc7XG4gICAgICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmxhYmVsKSk7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUljb24oKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBmaW5kU2luZ2xlKHRoaXMuaHRtbEVsZW1lbnQsICcucC1idXR0b24taWNvbicpO1xuICAgICAgICBpZiAoIWNyZWF0ZWQgJiYgKHRoaXMuaWNvbiB8fCB0aGlzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgICBsZXQgaWNvbkVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uJztcbiAgICAgICAgICAgIGljb25FbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgICAgbGV0IGljb25Qb3NDbGFzcyA9IHRoaXMubGFiZWwgPyAncC1idXR0b24taWNvbi0nICsgdGhpcy5pY29uUG9zIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGljb25Qb3NDbGFzcykge1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGljb25FbGVtZW50LCBpY29uUG9zQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWNvbkNsYXNzID0gdGhpcy5nZXRJY29uQ2xhc3MoKTtcblxuICAgICAgICAgICAgaWYgKGljb25DbGFzcykge1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGljb25FbGVtZW50LCBpY29uQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0ljb24gJiYgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgaWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5zcGlubmVySWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5pbnNlcnRCZWZvcmUoaWNvbkVsZW1lbnQsIHRoaXMuaHRtbEVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVMYWJlbCgpIHtcbiAgICAgICAgbGV0IGxhYmVsRWxlbWVudCA9IGZpbmRTaW5nbGUodGhpcy5odG1sRWxlbWVudCwgJy5wLWJ1dHRvbi1sYWJlbCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgbGFiZWxFbGVtZW50ICYmIHRoaXMuaHRtbEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsRWxlbWVudCA/IChsYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsKSA6IHRoaXMuY3JlYXRlTGFiZWwoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVJY29uKCkge1xuICAgICAgICBsZXQgaWNvbkVsZW1lbnQgPSBmaW5kU2luZ2xlKHRoaXMuaHRtbEVsZW1lbnQsICcucC1idXR0b24taWNvbicpO1xuICAgICAgICBsZXQgbGFiZWxFbGVtZW50ID0gZmluZFNpbmdsZSh0aGlzLmh0bWxFbGVtZW50LCAnLnAtYnV0dG9uLWxhYmVsJyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZGluZyAmJiAhdGhpcy5sb2FkaW5nSWNvbiAmJiBpY29uRWxlbWVudCkge1xuICAgICAgICAgICAgaWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5zcGlubmVySWNvbjtcbiAgICAgICAgfSBlbHNlIGlmIChpY29uRWxlbWVudD8uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICBpY29uRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpY29uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvblBvcykge1xuICAgICAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uICcgKyAobGFiZWxFbGVtZW50ID8gJ3AtYnV0dG9uLWljb24tJyArIHRoaXMuaWNvblBvcyA6ICcnKSArICcgJyArIHRoaXMuZ2V0SWNvbkNsYXNzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTmFtZSA9ICdwLWJ1dHRvbi1pY29uICcgKyB0aGlzLmdldEljb25DbGFzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVJY29uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPyAncC1idXR0b24tbG9hZGluZy1pY29uICcgKyAodGhpcy5sb2FkaW5nSWNvbiA/IHRoaXMubG9hZGluZ0ljb24gOiAncC1pY29uJykgOiB0aGlzLmljb24gfHwgJ3AtaGlkZGVuJztcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbi8qKlxuICogQnV0dG9uIGlzIGFuIGV4dGVuc2lvbiB0byBzdGFuZGFyZCBidXR0b24gZWxlbWVudCB3aXRoIGljb25zIGFuZCB0aGVtaW5nLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWJ1dHRvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSaXBwbGUsIEF1dG9Gb2N1cywgU3Bpbm5lckljb24sIEJhZGdlTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFthdHRyLnR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9hZGluZ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1ci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1uYW1lXT1cIididXR0b24nXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncm9vdCdcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgW3BBdXRvRm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZSB8fCBfY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ0ljb25UZW1wbGF0ZSAmJiAhX2xvYWRpbmdJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nSWNvblwiIFtuZ0NsYXNzXT1cImljb25DbGFzcygpXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInbG9hZGluZ2ljb24nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lckljb24gKm5nSWY9XCIhbG9hZGluZ0ljb25cIiBbc3R5bGVDbGFzc109XCJzcGlubmVySWNvbkNsYXNzKClcIiBbc3Bpbl09XCJ0cnVlXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInbG9hZGluZ2ljb24nXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwibG9hZGluZ0ljb25UZW1wbGF0ZSB8fCBfbG9hZGluZ0ljb25UZW1wbGF0ZVwiICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0ljb25UZW1wbGF0ZSB8fCBfbG9hZGluZ0ljb25UZW1wbGF0ZTsgY29udGV4dDogeyBjbGFzczogaWNvbkNsYXNzKCkgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaWNvbiAmJiAhaWNvblRlbXBsYXRlICYmICFfaWNvblRlbXBsYXRlXCIgW2NsYXNzXT1cImljb25cIiBbbmdDbGFzc109XCJpY29uQ2xhc3MoKVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInaWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpY29uICYmIChpY29uVGVtcGxhdGUgfHwgX2ljb25UZW1wbGF0ZSlcIiAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZSB8fCBfaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGNsYXNzOiBpY29uQ2xhc3MoKSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWJ1dHRvbi1sYWJlbFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cImljb24gJiYgIWxhYmVsXCIgKm5nSWY9XCIhY29udGVudFRlbXBsYXRlICYmICFfY29udGVudFRlbXBsYXRlICYmIGxhYmVsXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidsYWJlbCdcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxwLWJhZGdlICpuZ0lmPVwiIWNvbnRlbnRUZW1wbGF0ZSAmJiAhX2NvbnRlbnRUZW1wbGF0ZSAmJiBiYWRnZVwiIFt2YWx1ZV09XCJiYWRnZVwiIFtzZXZlcml0eV09XCJiYWRnZVNldmVyaXR5XCI+PC9wLWJhZGdlPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQnV0dG9uU3R5bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHRoZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ2J1dHRvbic7XG4gICAgLyoqXG4gICAgICogUG9zaXRpb24gb2YgdGhlIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvblBvczogQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFZhbHVlIG9mIHRoZSBiYWRnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBiYWRnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFVzZXMgdG8gcGFzcyBhdHRyaWJ1dGVzIHRvIHRoZSBsYWJlbCdzIERPTSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgYnV0dG9uIGlzIGluIGxvYWRpbmcgc3RhdGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJY29uIHRvIGRpc3BsYXkgaW4gbG9hZGluZyBzdGF0ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nSWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIHNoYWRvdyB0byBpbmRpY2F0ZSBlbGV2YXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJhaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGNpcmN1bGFyIGJvcmRlciByYWRpdXMgdG8gdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcm91bmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIHRleHR1YWwgY2xhc3MgdG8gdGhlIGJ1dHRvbiB3aXRob3V0IGEgYmFja2dyb3VuZCBpbml0aWFsbHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBwbGFpbiB0ZXh0dWFsIGNsYXNzIHRvIHRoZSBidXR0b24gd2l0aG91dCBhIGJhY2tncm91bmQgaW5pdGlhbGx5LlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB2YXJpYW50IHByb3BlcnR5IGluc3RlYWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBsYWluOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc3R5bGUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2RhbmdlcicgfCAnaGVscCcgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdjb250cmFzdCcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGJvcmRlciBjbGFzcyB3aXRob3V0IGEgYmFja2dyb3VuZCBpbml0aWFsbHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG91dGxpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgbGluayBzdHlsZSB0byB0aGUgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsaW5rOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkIGEgdGFiaW5kZXggdG8gdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNpemUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ2xhcmdlJyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZhcmlhbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YXJpYW50OiAnb3V0bGluZWQnIHwgJ3RleHQnIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGJhZGdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZXByZWNhdGVkIHVzZSBiYWRnZVNldmVyaXR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgYmFkZ2VDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFNldmVyaXR5IHR5cGUgb2YgdGhlIGJhZGdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgc2Vjb25kYXJ5XG4gICAgICovXG4gICAgQElucHV0KCkgYmFkZ2VTZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2RhbmdlcicgfCAnaGVscCcgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdjb250cmFzdCcgfCBudWxsIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZWZpbmUgYSBzdHJpbmcgdGhhdCBhdXRvY29tcGxldGUgYXR0cmlidXRlIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IGdldCBmb2N1cyBvbiBsb2FkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3BhbnMgMTAwJSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIHdoZW4gZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmx1aWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgICAqIFRoaXMgZXZlbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSA8cC1idXR0b24+IGNvbXBvbmVudC4gVXNpbmcgYSByZWd1bGFyIDxidXR0b24+IGVsZW1lbnQsIHVzZSAoY2xpY2spLlxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgLSBNb3VzZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiBidXR0b24gaXMgZm9jdXNlZC5cbiAgICAgKiBUaGlzIGV2ZW50IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgPHAtYnV0dG9uPiBjb21wb25lbnQuIFVzaW5nIGEgcmVndWxhciA8YnV0dG9uPiBlbGVtZW50LCB1c2UgKGZvY3VzKS5cbiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2ZW50IC0gRm9jdXMgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gYnV0dG9uIGxvc2VzIGZvY3VzLlxuICAgICAqIFRoaXMgZXZlbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSA8cC1idXR0b24+IGNvbXBvbmVudC4gVXNpbmcgYSByZWd1bGFyIDxidXR0b24+IGVsZW1lbnQsIHVzZSAoYmx1cikuXG4gICAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBldmVudCAtIEZvY3VzIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICoqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgb2YgdGhlIGxvYWRpbmcuXG4gICAgICogQGdyb3VwIFRlbXBsYXRlc1xuICAgICAqKi9cbiAgICBAQ29udGVudENoaWxkKCdsb2FkaW5nJykgbG9hZGluZ0ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBvZiB0aGUgaWNvbi5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICoqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2ljb24nKSBpY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfYnV0dG9uUHJvcHM6IGFueSB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHBhc3MgYWxsIHByb3BlcnRpZXMgb2YgdGhlIEJ1dHRvblByb3BzIHRvIHRoZSBCdXR0b24gY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBidXR0b25Qcm9wcygpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uUHJvcHM7XG4gICAgfVxuICAgIHNldCBidXR0b25Qcm9wcyh2YWw6IGFueSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9idXR0b25Qcm9wcyA9IHZhbDtcblxuICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbCkuZm9yRWFjaCgoW2ssIHZdKSA9PiB0aGlzW2BfJHtrfWBdICE9PSB2ICYmICh0aGlzW2BfJHtrfWBdID0gdikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGhhc0ZsdWlkKCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBmbHVpZENvbXBvbmVudCA9IG5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgncC1mbHVpZCcpO1xuXG4gICAgICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZmx1aWQpID8gISFmbHVpZENvbXBvbmVudCA6IHRoaXMuZmx1aWQ7XG4gICAgfVxuXG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KEJ1dHRvblN0eWxlKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfY29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9sb2FkaW5nSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBidXR0b25Qcm9wcyB9ID0gc2ltcGxlQ2hhbmdlcztcblxuICAgICAgICBpZiAoYnV0dG9uUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYnV0dG9uUHJvcHMuY3VycmVudFZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBwcm9wc1twcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzcGlubmVySWNvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmljb25DbGFzcygpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gYWNjICsgYCAke2tleX1gLCAncC1idXR0b24tbG9hZGluZy1pY29uJyk7XG4gICAgfVxuXG4gICAgaWNvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2BwLWJ1dHRvbi1sb2FkaW5nLWljb24gcGktc3BpbiAke3RoaXMubG9hZGluZ0ljb24gPz8gJyd9YF06IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uJzogdHJ1ZSxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLWxlZnQnOiB0aGlzLmljb25Qb3MgPT09ICdsZWZ0JyAmJiB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWljb24tcmlnaHQnOiB0aGlzLmljb25Qb3MgPT09ICdyaWdodCcgJiYgdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLXRvcCc6IHRoaXMuaWNvblBvcyA9PT0gJ3RvcCcgJiYgdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1pY29uLWJvdHRvbSc6IHRoaXMuaWNvblBvcyA9PT0gJ2JvdHRvbScgJiYgdGhpcy5sYWJlbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdwLWJ1dHRvbiBwLWNvbXBvbmVudCc6IHRydWUsXG4gICAgICAgICAgICAncC1idXR0b24taWNvbi1vbmx5JzogKHRoaXMuaWNvbiB8fCB0aGlzLmljb25UZW1wbGF0ZSB8fCB0aGlzLmxvYWRpbmdJY29uIHx8IHRoaXMubG9hZGluZ0ljb25UZW1wbGF0ZSB8fCB0aGlzLl9sb2FkaW5nSWNvblRlbXBsYXRlKSAmJiAhdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi12ZXJ0aWNhbCc6ICh0aGlzLmljb25Qb3MgPT09ICd0b3AnIHx8IHRoaXMuaWNvblBvcyA9PT0gJ2JvdHRvbScpICYmIHRoaXMubGFiZWwsXG4gICAgICAgICAgICAncC1idXR0b24tbG9hZGluZyc6IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1sb2FkaW5nLWxhYmVsLW9ubHknOiB0aGlzLmxvYWRpbmcgJiYgIXRoaXMuaWNvbiAmJiB0aGlzLmxhYmVsICYmICF0aGlzLmxvYWRpbmdJY29uICYmIHRoaXMuaWNvblBvcyA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWxpbmsnOiB0aGlzLmxpbmssXG4gICAgICAgICAgICBbYHAtYnV0dG9uLSR7dGhpcy5zZXZlcml0eX1gXTogdGhpcy5zZXZlcml0eSxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0aGlzLnJhaXNlZCxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdGhpcy5yb3VuZGVkLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0aGlzLnRleHQgfHwgdGhpcy52YXJpYW50ID09ICd0ZXh0JyxcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRoaXMub3V0bGluZWQgfHwgdGhpcy52YXJpYW50ID09ICdvdXRsaW5lZCcsXG4gICAgICAgICAgICAncC1idXR0b24tc20nOiB0aGlzLnNpemUgPT09ICdzbWFsbCcsXG4gICAgICAgICAgICAncC1idXR0b24tbGcnOiB0aGlzLnNpemUgPT09ICdsYXJnZScsXG4gICAgICAgICAgICAncC1idXR0b24tcGxhaW4nOiB0aGlzLnBsYWluLFxuICAgICAgICAgICAgJ3AtYnV0dG9uLWZsdWlkJzogdGhpcy5oYXNGbHVpZCxcbiAgICAgICAgICAgIFtgJHt0aGlzLnN0eWxlQ2xhc3N9YF06IHRoaXMuc3R5bGVDbGFzc1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdXR0b25EaXJlY3RpdmUsIEJ1dHRvbiwgU2hhcmVkTW9kdWxlLCBCdXR0b25MYWJlbCwgQnV0dG9uSWNvbl0sXG4gICAgZXhwb3J0czogW0J1dHRvbkRpcmVjdGl2ZSwgQnV0dG9uLCBCdXR0b25MYWJlbCwgQnV0dG9uSWNvbiwgU2hhcmVkTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Nb2R1bGUge31cbiJdfQ==