ctt-babylon 0.8.6 → 0.8.7

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 (782) hide show
  1. package/{lib/directives/babylon-sliders → directives}/babylon-hotels-slider.directive.d.ts +1 -2
  2. package/esm2022/directives/babylon-hotels-slider.directive.mjs +103 -0
  3. package/esm2022/lib/components/core/babylon-404/babylon-404.component.mjs +5 -18
  4. package/esm2022/lib/components/core/babylon-404-v2/babylon-404-v2.component.mjs +11 -0
  5. package/esm2022/lib/components/core/babylon-advantages/babylon-advantages.component.mjs +5 -29
  6. package/esm2022/lib/components/core/babylon-adventages-v2/babylon-adventages-v2.component.mjs +12 -0
  7. package/esm2022/lib/components/core/babylon-banner-gallery/babylon-banner-gallery.component.mjs +5 -31
  8. package/esm2022/lib/components/core/babylon-banner-info/babylon-banner-info.component.mjs +6 -133
  9. package/esm2022/lib/components/core/babylon-banner-newsletter/babylon-banner-newsletter.component.mjs +5 -39
  10. package/esm2022/lib/components/core/babylon-blog-details/babylon-blog-details.component.mjs +5 -98
  11. package/esm2022/lib/components/core/babylon-blog-list/babylon-blog-list.component.mjs +6 -80
  12. package/esm2022/lib/components/core/babylon-breadcrumb/babylon-breadcrumb.component.mjs +5 -14
  13. package/esm2022/lib/components/core/babylon-breadcrumb-v2/babylon-breadcrumb-v2.component.mjs +11 -0
  14. package/esm2022/lib/components/core/babylon-comingsoon/babylon-comingsoon.component.mjs +5 -10
  15. package/esm2022/lib/components/core/babylon-contact-form/babylon-contact-form.component.mjs +20 -134
  16. package/esm2022/lib/components/core/babylon-contact-form-v2/babylon-contact-form-v2.component.mjs +37 -0
  17. package/esm2022/lib/components/core/babylon-contact-how/babylon-contact-how.component.mjs +6 -23
  18. package/esm2022/lib/components/core/babylon-contact-map/babylon-contact-map.component.mjs +6 -29
  19. package/esm2022/lib/components/core/babylon-container-text-l2/babylon-container-text-l2.component.mjs +11 -0
  20. package/esm2022/lib/components/core/babylon-engine/babylon-engine.component.mjs +22 -237
  21. package/esm2022/lib/components/core/babylon-engine-modal/babylon-engine-modal.component.mjs +33 -225
  22. package/esm2022/lib/components/core/babylon-engine-modal-v2/babylon-engine-modal-v2.component.mjs +130 -0
  23. package/esm2022/lib/components/core/babylon-faq/babylon-faq.component.mjs +5 -38
  24. package/esm2022/lib/components/core/babylon-faq-v2/babylon-faq-v2.component.mjs +17 -0
  25. package/esm2022/lib/components/core/babylon-feature-pills/babylon-feature-pills.component.mjs +11 -0
  26. package/esm2022/lib/components/core/babylon-feature-pills-number/babylon-feature-pills-number.component.mjs +11 -0
  27. package/esm2022/lib/components/core/babylon-features-slider/babylon-features-slider.component.mjs +6 -28
  28. package/esm2022/lib/components/core/babylon-filter-modal/babylon-filter-modal.component.mjs +6 -16
  29. package/esm2022/lib/components/core/babylon-filter-modal-v2/babylon-filter-modal-v2.component.mjs +21 -0
  30. package/esm2022/lib/components/core/babylon-footer-contact/babylon-footer-contact.component.mjs +5 -25
  31. package/esm2022/lib/components/core/babylon-footer-links/babylon-footer-links.component.mjs +5 -13
  32. package/esm2022/lib/components/core/babylon-footer-logos/babylon-footer-logos.component.mjs +5 -23
  33. package/esm2022/lib/components/core/babylon-footer-social/babylon-footer-social.component.mjs +5 -14
  34. package/esm2022/lib/components/core/babylon-gallery/babylon-gallery.component.mjs +23 -72
  35. package/esm2022/lib/components/core/babylon-gallery-v2/babylon-gallery-v2.component.mjs +105 -0
  36. package/esm2022/lib/components/core/babylon-grid-gallery/babylon-grid-gallery.component.mjs +6 -42
  37. package/esm2022/lib/components/core/babylon-guests-popup/babylon-guests-popup.component.mjs +7 -91
  38. package/esm2022/lib/components/core/babylon-head-intro/babylon-head-intro.component.mjs +5 -24
  39. package/esm2022/lib/components/core/babylon-header-book-show/babylon-header-book-show.component.mjs +52 -114
  40. package/esm2022/lib/components/core/babylon-header-clear/babylon-header-clear.component.mjs +53 -143
  41. package/esm2022/lib/components/core/babylon-header-clear-v2/babylon-header-clear-v2.component.mjs +76 -0
  42. package/esm2022/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.component.mjs +52 -148
  43. package/esm2022/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.component.mjs +52 -92
  44. package/esm2022/lib/components/core/babylon-hotels-list/babylon-hotels-list.component.mjs +5 -12
  45. package/esm2022/lib/components/core/babylon-hotels-slider/babylon-hotels-slider.component.mjs +6 -19
  46. package/esm2022/lib/components/core/babylon-img-banner/babylon-img-banner.component.mjs +13 -0
  47. package/esm2022/lib/components/core/babylon-info-big/babylon-info-big.component.mjs +5 -19
  48. package/esm2022/lib/components/core/babylon-info-big-v2/babylon-info-big-v2.component.mjs +60 -0
  49. package/esm2022/lib/components/core/babylon-info-big-v3/babylon-info-big-v3.component.mjs +11 -0
  50. package/esm2022/lib/components/core/babylon-info-circle-imgs/babylon-info-circle-imgs.component.mjs +11 -0
  51. package/esm2022/lib/components/core/babylon-info-grid/babylon-info-grid.component.mjs +7 -31
  52. package/esm2022/lib/components/core/babylon-info-img/babylon-info-img.component.mjs +5 -95
  53. package/esm2022/lib/components/core/babylon-info-img-v2/babylon-info-img-v2.component.mjs +11 -0
  54. package/esm2022/lib/components/core/babylon-info-intro/babylon-info-intro.component.mjs +5 -62
  55. package/esm2022/lib/components/core/babylon-info-show-img/babylon-info-show-img.component.mjs +5 -7
  56. package/esm2022/lib/components/core/babylon-info-zig-zag/babylon-info-zig-zag.component.mjs +5 -31
  57. package/esm2022/lib/components/core/babylon-info-zigzag-v2/babylon-info-zigzag-v2.component.mjs +5 -19
  58. package/esm2022/lib/components/core/babylon-info-zigzag-v3/babylon-info-zigzag-v3.component.mjs +18 -0
  59. package/esm2022/lib/components/core/babylon-info-zigzag-v3-1/babylon-info-zigzag-v3-1.component.mjs +11 -0
  60. package/esm2022/lib/components/core/babylon-info-zigzag-v4/babylon-info-zigzag-v4.component.mjs +13 -0
  61. package/esm2022/lib/components/core/babylon-info2img/babylon-info2img.component.mjs +5 -30
  62. package/esm2022/lib/components/core/babylon-info2img-big/babylon-info2img-big.component.mjs +5 -38
  63. package/esm2022/lib/components/core/babylon-info3img/babylon-info3img.component.mjs +5 -19
  64. package/esm2022/lib/components/core/babylon-info4img/babylon-info4img.component.mjs +5 -23
  65. package/esm2022/lib/components/core/babylon-items-grid/babylon-items-grid.component.mjs +5 -21
  66. package/esm2022/lib/components/core/babylon-language-modal/babylon-language-modal.component.mjs +7 -13
  67. package/esm2022/lib/components/core/babylon-language-modal-v2/babylon-language-modal-v2.component.mjs +28 -0
  68. package/esm2022/lib/components/core/babylon-legal/babylon-legal.component.mjs +5 -19
  69. package/esm2022/lib/components/core/babylon-list-box-info/babylon-list-box-info.component.mjs +11 -0
  70. package/esm2022/lib/components/core/babylon-list-c3-img-txt/babylon-list-c3-img-txt.component.mjs +11 -0
  71. package/esm2022/lib/components/core/babylon-list-grid/babylon-list-grid.component.mjs +5 -15
  72. package/esm2022/lib/components/core/babylon-list-img/babylon-list-img.component.mjs +78 -0
  73. package/esm2022/lib/components/core/babylon-list-img-info/babylon-list-img-info.component.mjs +11 -0
  74. package/esm2022/lib/components/core/babylon-list-img-v2/babylon-list-img-v2.component.mjs +11 -0
  75. package/esm2022/lib/components/core/babylon-loyalty-table/babylon-loyalty-table.component.mjs +65 -0
  76. package/esm2022/lib/components/core/babylon-menu-modal/babylon-menu-modal.component.mjs +19 -0
  77. package/esm2022/lib/components/core/babylon-newsletter/babylon-newsletter.component.mjs +9 -52
  78. package/esm2022/lib/components/core/babylon-newsletter-modal/babylon-newsletter-modal.component.mjs +19 -0
  79. package/esm2022/lib/components/core/babylon-offer-detail/babylon-offer-detail.component.mjs +5 -37
  80. package/esm2022/lib/components/core/babylon-offer-detail-v2/babylon-offer-detail-v2.component.mjs +11 -0
  81. package/esm2022/lib/components/core/babylon-offer-popup/babylon-offer-popup.component.mjs +11 -34
  82. package/esm2022/lib/components/core/babylon-offer-popup-v2/babylon-offer-popup-v2.component.mjs +19 -0
  83. package/esm2022/lib/components/core/babylon-offer-slider/babylon-offer-slider.component.mjs +5 -20
  84. package/esm2022/lib/components/core/babylon-offers-list/babylon-offers-list.component.mjs +5 -47
  85. package/esm2022/lib/components/core/babylon-offers-slider/babylon-offers-slider.component.mjs +5 -20
  86. package/esm2022/lib/components/core/babylon-preload/babylon-preload.component.mjs +4 -28
  87. package/esm2022/lib/components/core/babylon-reviews/babylon-reviews.component.mjs +11 -0
  88. package/esm2022/lib/components/core/babylon-room-details/babylon-room-details.component.mjs +5 -19
  89. package/esm2022/lib/components/core/babylon-rooms-cols/babylon-rooms-cols.component.mjs +5 -158
  90. package/esm2022/lib/components/core/babylon-rooms-grid/babylon-rooms-grid.component.mjs +6 -19
  91. package/esm2022/lib/components/core/babylon-rooms-list/babylon-rooms-list.component.mjs +6 -32
  92. package/esm2022/lib/components/core/babylon-rooms-list-v2/babylon-rooms-list-v2.component.mjs +11 -0
  93. package/esm2022/lib/components/core/babylon-rooms-slider/babylon-rooms-slider.component.mjs +5 -25
  94. package/esm2022/lib/components/core/babylon-services-slider/babylon-services-slider.component.mjs +5 -17
  95. package/esm2022/lib/components/core/babylon-simple-img-info/babylon-simple-img-info.component.mjs +12 -0
  96. package/esm2022/lib/components/core/babylon-slider-box/babylon-slider-box.component.mjs +12 -0
  97. package/esm2022/lib/components/core/babylon-slider-img-static/babylon-slider-img-static.component.mjs +12 -0
  98. package/esm2022/lib/components/core/babylon-slider-img-static-v2/babylon-slider-img-static-v2.component.mjs +13 -0
  99. package/esm2022/lib/components/core/babylon-slider-img-video/babylon-slider-img-video.component.mjs +52 -0
  100. package/esm2022/lib/components/core/babylon-slider2col/babylon-slider2col.component.mjs +5 -28
  101. package/esm2022/lib/components/core/babylon-slider2col-v2/babylon-slider2col-v2.component.mjs +13 -0
  102. package/esm2022/lib/components/core/babylon-slider2items/babylon-slider2items.component.mjs +5 -15
  103. package/esm2022/lib/components/core/babylon-slider3col/babylon-slider3colcomponent.mjs +11 -0
  104. package/esm2022/lib/components/core/babylon-slider3col-v2/babylon-slider3col-v2.component.mjs +12 -0
  105. package/esm2022/lib/components/core/babylon-slider3items/babylon-slider3items.component.mjs +5 -14
  106. package/esm2022/lib/components/core/babylon-slider4col/babylon-slider4col.component.mjs +5 -37
  107. package/esm2022/lib/components/core/babylon-social-bar/babylon-social-bar.component.mjs +11 -0
  108. package/esm2022/lib/components/core/babylon-social-bar-v2/babylon-social-bar-v2.component.mjs +11 -0
  109. package/esm2022/lib/components/core/babylon-static-footer/babylon-static-footer.component.mjs +6 -104
  110. package/esm2022/lib/components/core/babylon-static-footer-v2/babylon-static-footer-v2.component.mjs +8 -48
  111. package/esm2022/lib/components/core/babylon-static-footer-v3/babylon-static-footer-v3.component.mjs +67 -0
  112. package/esm2022/lib/components/core/babylon-submenu-hotel/babylon-submenu-hotel.component.mjs +5 -35
  113. package/esm2022/lib/components/core/babylon-thanks/babylon-thanks.component.mjs +5 -18
  114. package/esm2022/lib/components/core/babylon-top-simple-banner/babylon-top-simple-banner.component.mjs +15 -0
  115. package/esm2022/lib/components/core/babylon-top-simple-img/babylon-top-simple-img.component.mjs +11 -0
  116. package/esm2022/lib/components/core/babylon-top-slider/babylon-top-slider.component.mjs +5 -187
  117. package/esm2022/lib/components/core/babylon-top-slider-thumbs/babylon-top-slider-thumbs.component.mjs +6 -33
  118. package/esm2022/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2.component.mjs +5 -22
  119. package/esm2022/lib/components/core/babylon-top-slider-video/babylon-top-slider-video.component.mjs +5 -194
  120. package/esm2022/lib/components/core/babylon-top-slider-video-v2/babylon-top-slider-video-v2.component.mjs +12 -0
  121. package/esm2022/lib/components/core/babylon-variant-selector/babylon-variant-selector.component.mjs +82 -0
  122. package/esm2022/lib/components/core/babylon-webmap/babylon-webmap.component.mjs +5 -23
  123. package/esm2022/lib/components/core/babylon-webmap-v2/babylon-webmap-v2.component.mjs +11 -0
  124. package/esm2022/lib/directives/scroll/scroll-to.directive.mjs +183 -0
  125. package/esm2022/lib/directives/sliders/slick-init.directive.mjs +211 -0
  126. package/esm2022/lib/directives/sliders/slider-fix-arrows.directive.mjs +105 -0
  127. package/esm2022/lib/directives/utils/sticky-avoid-footer.directive.mjs +91 -0
  128. package/esm2022/lib/services/index.mjs +1 -3
  129. package/esm2022/lib/services/screen-sizer/screen-sizer.service.mjs +35 -46
  130. package/esm2022/lib/services/scroll/scroll-spy.service.mjs +50 -0
  131. package/esm2022/public-api.mjs +114 -11
  132. package/fesm2022/ctt-babylon.mjs +2369 -9425
  133. package/fesm2022/ctt-babylon.mjs.map +1 -1
  134. package/lib/components/core/babylon-404/babylon-404.component.d.ts +1 -8
  135. package/lib/components/core/babylon-404-v2/babylon-404-v2.component.d.ts +5 -0
  136. package/lib/components/core/babylon-advantages/babylon-advantages.component.d.ts +1 -14
  137. package/lib/components/core/babylon-adventages-v2/babylon-adventages-v2.component.d.ts +5 -0
  138. package/lib/components/core/babylon-banner-gallery/babylon-banner-gallery.component.d.ts +1 -11
  139. package/lib/components/core/babylon-banner-info/babylon-banner-info.component.d.ts +2 -25
  140. package/lib/components/core/babylon-banner-newsletter/babylon-banner-newsletter.component.d.ts +1 -16
  141. package/lib/components/core/babylon-blog-details/babylon-blog-details.component.d.ts +1 -39
  142. package/lib/components/core/babylon-blog-list/babylon-blog-list.component.d.ts +2 -47
  143. package/lib/components/core/babylon-breadcrumb/babylon-breadcrumb.component.d.ts +1 -4
  144. package/lib/components/core/babylon-breadcrumb-v2/babylon-breadcrumb-v2.component.d.ts +5 -0
  145. package/lib/components/core/babylon-comingsoon/babylon-comingsoon.component.d.ts +1 -12
  146. package/lib/components/core/babylon-contact-form/babylon-contact-form.component.d.ts +6 -35
  147. package/lib/components/core/babylon-contact-form-v2/babylon-contact-form-v2.component.d.ts +10 -0
  148. package/lib/components/core/babylon-contact-how/babylon-contact-how.component.d.ts +2 -14
  149. package/lib/components/core/babylon-contact-map/babylon-contact-map.component.d.ts +2 -16
  150. package/lib/components/core/babylon-container-text-l2/babylon-container-text-l2.component.d.ts +5 -0
  151. package/lib/components/core/babylon-engine/babylon-engine.component.d.ts +11 -71
  152. package/lib/components/core/babylon-engine-modal/babylon-engine-modal.component.d.ts +16 -60
  153. package/lib/components/core/babylon-engine-modal-v2/babylon-engine-modal-v2.component.d.ts +44 -0
  154. package/lib/components/core/babylon-faq/babylon-faq.component.d.ts +1 -15
  155. package/lib/components/core/babylon-faq-v2/babylon-faq-v2.component.d.ts +7 -0
  156. package/lib/components/core/babylon-feature-pills/babylon-feature-pills.component.d.ts +5 -0
  157. package/lib/components/core/babylon-feature-pills-number/babylon-feature-pills-number.component.d.ts +5 -0
  158. package/lib/components/core/babylon-features-slider/babylon-features-slider.component.d.ts +2 -18
  159. package/lib/components/core/babylon-filter-modal/babylon-filter-modal.component.d.ts +3 -8
  160. package/lib/components/core/babylon-filter-modal-v2/babylon-filter-modal-v2.component.d.ts +10 -0
  161. package/lib/components/core/babylon-footer-contact/babylon-footer-contact.component.d.ts +1 -24
  162. package/lib/components/core/babylon-footer-links/babylon-footer-links.component.d.ts +1 -5
  163. package/lib/components/core/babylon-footer-logos/babylon-footer-logos.component.d.ts +1 -11
  164. package/lib/components/core/babylon-footer-social/babylon-footer-social.component.d.ts +1 -5
  165. package/lib/components/core/babylon-gallery/babylon-gallery.component.d.ts +8 -34
  166. package/lib/components/core/babylon-gallery-v2/babylon-gallery-v2.component.d.ts +22 -0
  167. package/lib/components/core/babylon-grid-gallery/babylon-grid-gallery.component.d.ts +2 -19
  168. package/lib/components/core/babylon-guests-popup/babylon-guests-popup.component.d.ts +7 -24
  169. package/lib/components/core/babylon-head-intro/babylon-head-intro.component.d.ts +1 -9
  170. package/lib/components/core/babylon-header-book-show/babylon-header-book-show.component.d.ts +7 -35
  171. package/lib/components/core/babylon-header-clear/babylon-header-clear.component.d.ts +9 -34
  172. package/lib/components/core/babylon-header-clear-v2/babylon-header-clear-v2.component.d.ts +16 -0
  173. package/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.component.d.ts +8 -33
  174. package/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.component.d.ts +8 -29
  175. package/lib/components/core/babylon-hotels-list/babylon-hotels-list.component.d.ts +1 -5
  176. package/lib/components/core/babylon-hotels-slider/babylon-hotels-slider.component.d.ts +1 -5
  177. package/lib/components/core/babylon-img-banner/babylon-img-banner.component.d.ts +5 -0
  178. package/lib/components/core/babylon-info-big/babylon-info-big.component.d.ts +1 -9
  179. package/lib/components/core/babylon-info-big-v2/babylon-info-big-v2.component.d.ts +12 -0
  180. package/lib/components/core/babylon-info-big-v3/babylon-info-big-v3.component.d.ts +5 -0
  181. package/lib/components/core/babylon-info-circle-imgs/babylon-info-circle-imgs.component.d.ts +5 -0
  182. package/lib/components/core/babylon-info-grid/babylon-info-grid.component.d.ts +3 -22
  183. package/lib/components/core/babylon-info-img/babylon-info-img.component.d.ts +2 -40
  184. package/lib/components/core/babylon-info-img-v2/babylon-info-img-v2.component.d.ts +5 -0
  185. package/lib/components/core/babylon-info-intro/babylon-info-intro.component.d.ts +1 -26
  186. package/lib/components/core/babylon-info-show-img/babylon-info-show-img.component.d.ts +1 -3
  187. package/lib/components/core/babylon-info-zig-zag/babylon-info-zig-zag.component.d.ts +1 -29
  188. package/lib/components/core/babylon-info-zigzag-v2/babylon-info-zigzag-v2.component.d.ts +1 -16
  189. package/lib/components/core/babylon-info-zigzag-v3/babylon-info-zigzag-v3.component.d.ts +6 -0
  190. package/lib/components/core/babylon-info-zigzag-v3-1/babylon-info-zigzag-v3-1.component.d.ts +5 -0
  191. package/lib/components/core/babylon-info-zigzag-v4/babylon-info-zigzag-v4.component.d.ts +5 -0
  192. package/lib/components/core/babylon-info2img/babylon-info2img.component.d.ts +1 -14
  193. package/lib/components/core/babylon-info2img-big/babylon-info2img-big.component.d.ts +1 -16
  194. package/lib/components/core/babylon-info3img/babylon-info3img.component.d.ts +1 -9
  195. package/lib/components/core/babylon-info4img/babylon-info4img.component.d.ts +1 -11
  196. package/lib/components/core/babylon-items-grid/babylon-items-grid.component.d.ts +1 -14
  197. package/lib/components/core/babylon-language-modal/babylon-language-modal.component.d.ts +5 -12
  198. package/lib/components/core/babylon-language-modal-v2/babylon-language-modal-v2.component.d.ts +12 -0
  199. package/lib/components/core/babylon-legal/babylon-legal.component.d.ts +1 -9
  200. package/lib/components/core/babylon-list-box-info/babylon-list-box-info.component.d.ts +5 -0
  201. package/lib/components/core/babylon-list-c3-img-txt/babylon-list-c3-img-txt.component.d.ts +5 -0
  202. package/lib/components/core/babylon-list-grid/babylon-list-grid.component.d.ts +1 -17
  203. package/lib/components/core/babylon-list-img/babylon-list-img.component.d.ts +17 -0
  204. package/lib/components/core/babylon-list-img-info/babylon-list-img-info.component.d.ts +5 -0
  205. package/lib/components/core/babylon-list-img-v2/babylon-list-img-v2.component.d.ts +5 -0
  206. package/lib/components/core/babylon-loyalty-table/babylon-loyalty-table.component.d.ts +10 -0
  207. package/lib/components/core/babylon-menu-modal/babylon-menu-modal.component.d.ts +7 -0
  208. package/lib/components/core/babylon-newsletter/babylon-newsletter.component.d.ts +3 -19
  209. package/lib/components/core/babylon-newsletter-modal/babylon-newsletter-modal.component.d.ts +7 -0
  210. package/lib/components/core/babylon-offer-detail/babylon-offer-detail.component.d.ts +1 -16
  211. package/lib/components/core/babylon-offer-detail-v2/babylon-offer-detail-v2.component.d.ts +5 -0
  212. package/lib/components/core/babylon-offer-popup/babylon-offer-popup.component.d.ts +5 -18
  213. package/lib/components/core/babylon-offer-popup-v2/babylon-offer-popup-v2.component.d.ts +7 -0
  214. package/lib/components/core/babylon-offer-slider/babylon-offer-slider.component.d.ts +1 -6
  215. package/lib/components/core/babylon-offers-list/babylon-offers-list.component.d.ts +2 -33
  216. package/lib/components/core/babylon-offers-slider/babylon-offers-slider.component.d.ts +1 -5
  217. package/lib/components/core/babylon-preload/babylon-preload.component.d.ts +1 -5
  218. package/lib/components/core/babylon-reviews/babylon-reviews.component.d.ts +5 -0
  219. package/lib/components/core/babylon-room-details/babylon-room-details.component.d.ts +1 -13
  220. package/lib/components/core/babylon-rooms-cols/babylon-rooms-cols.component.d.ts +1 -39
  221. package/lib/components/core/babylon-rooms-grid/babylon-rooms-grid.component.d.ts +1 -10
  222. package/lib/components/core/babylon-rooms-list/babylon-rooms-list.component.d.ts +1 -27
  223. package/lib/components/core/babylon-rooms-list-v2/babylon-rooms-list-v2.component.d.ts +5 -0
  224. package/lib/components/core/babylon-rooms-slider/babylon-rooms-slider.component.d.ts +1 -6
  225. package/lib/components/core/babylon-services-slider/babylon-services-slider.component.d.ts +1 -7
  226. package/lib/components/core/babylon-simple-img-info/babylon-simple-img-info.component.d.ts +5 -0
  227. package/lib/components/core/babylon-slider-box/babylon-slider-box.component.d.ts +5 -0
  228. package/lib/components/core/babylon-slider-img-static/babylon-slider-img-static.component.d.ts +5 -0
  229. package/lib/components/core/babylon-slider-img-static-v2/babylon-slider-img-static-v2.component.d.ts +5 -0
  230. package/lib/components/core/babylon-slider-img-video/babylon-slider-img-video.component.d.ts +9 -0
  231. package/lib/components/core/babylon-slider2col/babylon-slider2col.component.d.ts +1 -22
  232. package/lib/components/core/babylon-slider2col-v2/babylon-slider2col-v2.component.d.ts +5 -0
  233. package/lib/components/core/babylon-slider2items/babylon-slider2items.component.d.ts +1 -5
  234. package/lib/components/core/babylon-slider3col/babylon-slider3colcomponent.d.ts +5 -0
  235. package/lib/components/core/babylon-slider3col-v2/babylon-slider3col-v2.component.d.ts +5 -0
  236. package/lib/components/core/babylon-slider3items/babylon-slider3items.component.d.ts +1 -15
  237. package/lib/components/core/babylon-slider4col/babylon-slider4col.component.d.ts +1 -15
  238. package/lib/components/core/babylon-social-bar/babylon-social-bar.component.d.ts +5 -0
  239. package/lib/components/core/babylon-social-bar-v2/babylon-social-bar-v2.component.d.ts +5 -0
  240. package/lib/components/core/babylon-static-footer/babylon-static-footer.component.d.ts +2 -55
  241. package/lib/components/core/babylon-static-footer-v2/babylon-static-footer-v2.component.d.ts +3 -24
  242. package/lib/components/core/babylon-static-footer-v3/babylon-static-footer-v3.component.d.ts +12 -0
  243. package/lib/components/core/babylon-submenu-hotel/babylon-submenu-hotel.component.d.ts +2 -13
  244. package/lib/components/core/babylon-thanks/babylon-thanks.component.d.ts +1 -7
  245. package/lib/components/core/babylon-top-simple-banner/babylon-top-simple-banner.component.d.ts +6 -0
  246. package/lib/components/core/babylon-top-simple-img/babylon-top-simple-img.component.d.ts +5 -0
  247. package/lib/components/core/babylon-top-slider/babylon-top-slider.component.d.ts +2 -37
  248. package/lib/components/core/babylon-top-slider-thumbs/babylon-top-slider-thumbs.component.d.ts +2 -12
  249. package/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2.component.d.ts +1 -10
  250. package/lib/components/core/babylon-top-slider-video/babylon-top-slider-video.component.d.ts +2 -34
  251. package/lib/components/core/babylon-top-slider-video-v2/babylon-top-slider-video-v2.component.d.ts +5 -0
  252. package/lib/components/core/babylon-variant-selector/babylon-variant-selector.component.d.ts +12 -0
  253. package/lib/components/core/babylon-webmap/babylon-webmap.component.d.ts +1 -11
  254. package/lib/components/core/babylon-webmap-v2/babylon-webmap-v2.component.d.ts +5 -0
  255. package/lib/directives/scroll/scroll-to.directive.d.ts +31 -0
  256. package/lib/directives/sliders/slick-init.directive.d.ts +14 -0
  257. package/lib/directives/sliders/slider-fix-arrows.directive.d.ts +21 -0
  258. package/lib/directives/utils/sticky-avoid-footer.directive.d.ts +24 -0
  259. package/lib/services/index.d.ts +0 -2
  260. package/lib/services/screen-sizer/screen-sizer.service.d.ts +0 -2
  261. package/lib/services/scroll/scroll-spy.service.d.ts +17 -0
  262. package/lib/styles/styles/babylon/scss-daba/airDatePicker.min.css +13 -0
  263. package/lib/styles/styles/babylon/scss-daba/aos.min.css +1 -0
  264. package/lib/styles/styles/babylon/scss-daba/buttons.css +1 -0
  265. package/lib/styles/styles/babylon/scss-daba/buttons.scss +441 -0
  266. package/lib/styles/styles/babylon/scss-daba/fancybox.css +829 -0
  267. package/lib/styles/styles/babylon/scss-daba/fancybox.min.css +1 -0
  268. package/lib/styles/styles/babylon/scss-daba/funciones.scss +491 -0
  269. package/lib/styles/styles/babylon/scss-daba/inputs.css +1 -0
  270. package/lib/styles/styles/babylon/scss-daba/inputs.scss +168 -0
  271. package/lib/styles/styles/babylon/scss-daba/jquery.fancybox.min.css +1 -0
  272. package/lib/styles/styles/babylon/scss-daba/style.css +1 -0
  273. package/lib/styles/styles/babylon/scss-daba/style.scss +445 -0
  274. package/lib/styles/styles/babylon/scss-daba/swiper-bundle.min.css +635 -0
  275. package/lib/styles/styles-babylon.scss +7 -48
  276. package/package.json +4 -11
  277. package/public-api.d.ts +111 -6
  278. package/esm2022/lib/Enum/buttons-type.enum.mjs +0 -6
  279. package/esm2022/lib/Enum/index.mjs +0 -3
  280. package/esm2022/lib/Enum/logo-type.enum.mjs +0 -10
  281. package/esm2022/lib/Enum/services.enum.mjs +0 -8
  282. package/esm2022/lib/Enum/views.enum.mjs +0 -5
  283. package/esm2022/lib/components/core/babylon-404/babylon-404.interface.mjs +0 -2
  284. package/esm2022/lib/components/core/babylon-404/index.mjs +0 -3
  285. package/esm2022/lib/components/core/babylon-action-banner/babylon-action-banner.component.mjs +0 -30
  286. package/esm2022/lib/components/core/babylon-action-banner/babylon-action-banner.interface.mjs +0 -2
  287. package/esm2022/lib/components/core/babylon-action-banner/index.mjs +0 -3
  288. package/esm2022/lib/components/core/babylon-advantages/babylon-advantages-info.interface.mjs +0 -2
  289. package/esm2022/lib/components/core/babylon-advantages/babylon-advantages.interface.mjs +0 -2
  290. package/esm2022/lib/components/core/babylon-advantages/index.mjs +0 -4
  291. package/esm2022/lib/components/core/babylon-banner-gallery/babylon-banner-gallery.interface.mjs +0 -2
  292. package/esm2022/lib/components/core/babylon-banner-gallery/index.mjs +0 -3
  293. package/esm2022/lib/components/core/babylon-banner-info/babylon-banner-info.interface.mjs +0 -2
  294. package/esm2022/lib/components/core/babylon-banner-info/index.mjs +0 -3
  295. package/esm2022/lib/components/core/babylon-banner-newsletter/babylon-banner-newsletter.interface.mjs +0 -2
  296. package/esm2022/lib/components/core/babylon-banner-newsletter/index.mjs +0 -3
  297. package/esm2022/lib/components/core/babylon-blog-details/babylon-blog-details.interface.mjs +0 -2
  298. package/esm2022/lib/components/core/babylon-blog-details/index.mjs +0 -3
  299. package/esm2022/lib/components/core/babylon-blog-list/babylon-blog-list.interface.mjs +0 -2
  300. package/esm2022/lib/components/core/babylon-blog-list/index.mjs +0 -3
  301. package/esm2022/lib/components/core/babylon-breadcrumb/babylon-breadcrumb.interface.mjs +0 -2
  302. package/esm2022/lib/components/core/babylon-breadcrumb/index.mjs +0 -3
  303. package/esm2022/lib/components/core/babylon-color-picker/babylon-color-picker.component.mjs +0 -267
  304. package/esm2022/lib/components/core/babylon-color-picker/index.mjs +0 -2
  305. package/esm2022/lib/components/core/babylon-comingsoon/babylon-comingsoon.interface.mjs +0 -2
  306. package/esm2022/lib/components/core/babylon-comingsoon/index.mjs +0 -3
  307. package/esm2022/lib/components/core/babylon-contact-address/babylon-contact-address.component.mjs +0 -19
  308. package/esm2022/lib/components/core/babylon-contact-address/babylon-contact-address.interface.mjs +0 -2
  309. package/esm2022/lib/components/core/babylon-contact-address/index.mjs +0 -3
  310. package/esm2022/lib/components/core/babylon-contact-form/babylon-contact-form.interface.mjs +0 -2
  311. package/esm2022/lib/components/core/babylon-contact-form/index.mjs +0 -3
  312. package/esm2022/lib/components/core/babylon-contact-how/babylon-contact-how.interface.mjs +0 -2
  313. package/esm2022/lib/components/core/babylon-contact-how/index.mjs +0 -3
  314. package/esm2022/lib/components/core/babylon-contact-map/babylon-contact-map.interface.mjs +0 -2
  315. package/esm2022/lib/components/core/babylon-contact-map/index.mjs +0 -3
  316. package/esm2022/lib/components/core/babylon-engine/babylon-engine.interface.mjs +0 -2
  317. package/esm2022/lib/components/core/babylon-engine/index.mjs +0 -3
  318. package/esm2022/lib/components/core/babylon-engine-modal/babylon-engine-modal.interface.mjs +0 -2
  319. package/esm2022/lib/components/core/babylon-engine-modal/index.mjs +0 -3
  320. package/esm2022/lib/components/core/babylon-external-script/babylon-external-script.component.mjs +0 -80
  321. package/esm2022/lib/components/core/babylon-external-script/babylon-external-script.interface.mjs +0 -2
  322. package/esm2022/lib/components/core/babylon-external-script/index.mjs +0 -3
  323. package/esm2022/lib/components/core/babylon-faq/babylon-faq.interface.mjs +0 -2
  324. package/esm2022/lib/components/core/babylon-faq/index.mjs +0 -3
  325. package/esm2022/lib/components/core/babylon-features-slider/babylon-features-slider.interface.mjs +0 -2
  326. package/esm2022/lib/components/core/babylon-features-slider/index.mjs +0 -3
  327. package/esm2022/lib/components/core/babylon-filter-modal/index.mjs +0 -2
  328. package/esm2022/lib/components/core/babylon-floating-buttons/babylon-floating-buttons.component.mjs +0 -121
  329. package/esm2022/lib/components/core/babylon-floating-buttons/babylon-floating-buttons.interface.mjs +0 -2
  330. package/esm2022/lib/components/core/babylon-floating-buttons/index.mjs +0 -3
  331. package/esm2022/lib/components/core/babylon-footer-contact/babylon-footer-contact.interface.mjs +0 -2
  332. package/esm2022/lib/components/core/babylon-footer-contact/index.mjs +0 -3
  333. package/esm2022/lib/components/core/babylon-footer-links/babylon-footer-links.interface.mjs +0 -2
  334. package/esm2022/lib/components/core/babylon-footer-links/index.mjs +0 -3
  335. package/esm2022/lib/components/core/babylon-footer-logos/babylon-footer-logos.interface.mjs +0 -2
  336. package/esm2022/lib/components/core/babylon-footer-logos/index.mjs +0 -3
  337. package/esm2022/lib/components/core/babylon-footer-social/babylon-footer-social.interface.mjs +0 -3
  338. package/esm2022/lib/components/core/babylon-footer-social/index.mjs +0 -3
  339. package/esm2022/lib/components/core/babylon-gallery/babylon-gallery.interface.mjs +0 -2
  340. package/esm2022/lib/components/core/babylon-gallery/index.mjs +0 -3
  341. package/esm2022/lib/components/core/babylon-global-modal/babylon-global-modal.component.mjs +0 -38
  342. package/esm2022/lib/components/core/babylon-global-modal/babylon-global-modal.interface.mjs +0 -2
  343. package/esm2022/lib/components/core/babylon-global-modal/index.mjs +0 -3
  344. package/esm2022/lib/components/core/babylon-grid-gallery/babylon-grid-gallery.interface.mjs +0 -2
  345. package/esm2022/lib/components/core/babylon-grid-gallery/index.mjs +0 -3
  346. package/esm2022/lib/components/core/babylon-guests-popup/babylon-guests-popup.interface.mjs +0 -2
  347. package/esm2022/lib/components/core/babylon-guests-popup/index.mjs +0 -3
  348. package/esm2022/lib/components/core/babylon-head-intro/babylon-head-intro.interface.mjs +0 -2
  349. package/esm2022/lib/components/core/babylon-head-intro/index.mjs +0 -3
  350. package/esm2022/lib/components/core/babylon-header-book-show/babylon-header-book-show.interface.mjs +0 -2
  351. package/esm2022/lib/components/core/babylon-header-book-show/index.mjs +0 -3
  352. package/esm2022/lib/components/core/babylon-header-clear/babylon-header-clear.interface.mjs +0 -2
  353. package/esm2022/lib/components/core/babylon-header-clear/index.mjs +0 -3
  354. package/esm2022/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.interface.mjs +0 -2
  355. package/esm2022/lib/components/core/babylon-header-menu-center/index.mjs +0 -3
  356. package/esm2022/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.component.mjs +0 -122
  357. package/esm2022/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.interface.mjs +0 -2
  358. package/esm2022/lib/components/core/babylon-header-menu-logo-center/index.mjs +0 -3
  359. package/esm2022/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.interface.mjs +0 -2
  360. package/esm2022/lib/components/core/babylon-header-menu-show/index.mjs +0 -3
  361. package/esm2022/lib/components/core/babylon-header-mobile/babylon-header-mobile.component.mjs +0 -156
  362. package/esm2022/lib/components/core/babylon-header-mobile/babylon-header-mobile.interface.mjs +0 -2
  363. package/esm2022/lib/components/core/babylon-header-mobile/index.mjs +0 -3
  364. package/esm2022/lib/components/core/babylon-hotels-list/babylon-hotel.interface.mjs +0 -2
  365. package/esm2022/lib/components/core/babylon-hotels-list/babylon-hotels-list.interface.mjs +0 -2
  366. package/esm2022/lib/components/core/babylon-hotels-list/index.mjs +0 -4
  367. package/esm2022/lib/components/core/babylon-hotels-slider/babylon-hotels-slider.interface.mjs +0 -2
  368. package/esm2022/lib/components/core/babylon-hotels-slider/index.mjs +0 -3
  369. package/esm2022/lib/components/core/babylon-info-big/babylon-info-big.interface.mjs +0 -2
  370. package/esm2022/lib/components/core/babylon-info-big/index.mjs +0 -3
  371. package/esm2022/lib/components/core/babylon-info-grid/babylon-info-grid.interface.mjs +0 -3
  372. package/esm2022/lib/components/core/babylon-info-grid/index.mjs +0 -3
  373. package/esm2022/lib/components/core/babylon-info-img/babylon-info-img.interface.mjs +0 -2
  374. package/esm2022/lib/components/core/babylon-info-img/index.mjs +0 -3
  375. package/esm2022/lib/components/core/babylon-info-img-slider/babylon-info-img-slider.component.mjs +0 -56
  376. package/esm2022/lib/components/core/babylon-info-img-slider/babylon-info-img-slider.interface.mjs +0 -2
  377. package/esm2022/lib/components/core/babylon-info-img-slider/index.mjs +0 -3
  378. package/esm2022/lib/components/core/babylon-info-intro/babylon-info-intro.interface.mjs +0 -2
  379. package/esm2022/lib/components/core/babylon-info-intro/index.mjs +0 -3
  380. package/esm2022/lib/components/core/babylon-info-show-img/index.mjs +0 -2
  381. package/esm2022/lib/components/core/babylon-info-zig-zag/babylon-info-zig-zag.interface.mjs +0 -2
  382. package/esm2022/lib/components/core/babylon-info-zig-zag/index.mjs +0 -3
  383. package/esm2022/lib/components/core/babylon-info-zig-zag-counter/babylon-info-zig-zag-counter.component.mjs +0 -92
  384. package/esm2022/lib/components/core/babylon-info-zig-zag-counter/babylon-info-zig-zag-counter.interface.mjs +0 -2
  385. package/esm2022/lib/components/core/babylon-info-zig-zag-counter/index.mjs +0 -3
  386. package/esm2022/lib/components/core/babylon-info-zigzag-v2/babylon-info-zigzag-v2.interface.mjs +0 -2
  387. package/esm2022/lib/components/core/babylon-info-zigzag-v2/index.mjs +0 -3
  388. package/esm2022/lib/components/core/babylon-info2col-img/babylon-info2col-img.component.mjs +0 -36
  389. package/esm2022/lib/components/core/babylon-info2col-img/babylon-info2col-img.interface.mjs +0 -2
  390. package/esm2022/lib/components/core/babylon-info2col-img/index.mjs +0 -3
  391. package/esm2022/lib/components/core/babylon-info2img/babylon-info2img.interface.mjs +0 -2
  392. package/esm2022/lib/components/core/babylon-info2img/index.mjs +0 -3
  393. package/esm2022/lib/components/core/babylon-info2img-big/babylon-info2img-big.interface.mjs +0 -2
  394. package/esm2022/lib/components/core/babylon-info2img-big/index.mjs +0 -3
  395. package/esm2022/lib/components/core/babylon-info3img/index.mjs +0 -2
  396. package/esm2022/lib/components/core/babylon-info4img/babylon-info4img.interface.mjs +0 -2
  397. package/esm2022/lib/components/core/babylon-info4img/index.mjs +0 -3
  398. package/esm2022/lib/components/core/babylon-items-grid/babylon-items-grid.interface.mjs +0 -2
  399. package/esm2022/lib/components/core/babylon-items-grid/index.mjs +0 -3
  400. package/esm2022/lib/components/core/babylon-language-modal/babylon-language-modal.interface.mjs +0 -2
  401. package/esm2022/lib/components/core/babylon-language-modal/index.mjs +0 -3
  402. package/esm2022/lib/components/core/babylon-legal/babylon-legal.interface.mjs +0 -2
  403. package/esm2022/lib/components/core/babylon-legal/index.mjs +0 -3
  404. package/esm2022/lib/components/core/babylon-list-grid/babylon-list-grid.interface.mjs +0 -3
  405. package/esm2022/lib/components/core/babylon-list-grid/index.mjs +0 -3
  406. package/esm2022/lib/components/core/babylon-modal-menu/babylon-modal-menu.component.mjs +0 -139
  407. package/esm2022/lib/components/core/babylon-modal-multiple-motors/babylon-modal-multiple-motors.component.mjs +0 -35
  408. package/esm2022/lib/components/core/babylon-modal-multiple-motors/babylon-modal-multiple-motors.interface.mjs +0 -2
  409. package/esm2022/lib/components/core/babylon-modal-multiple-motors/index.mjs +0 -3
  410. package/esm2022/lib/components/core/babylon-modal-popup/babylon-modal-popup.component.mjs +0 -39
  411. package/esm2022/lib/components/core/babylon-modal-popup/babylon-modal-popup.interface.mjs +0 -2
  412. package/esm2022/lib/components/core/babylon-modal-popup/index.mjs +0 -3
  413. package/esm2022/lib/components/core/babylon-newsletter/babylon-newsletter.interface.mjs +0 -3
  414. package/esm2022/lib/components/core/babylon-newsletter/index.mjs +0 -3
  415. package/esm2022/lib/components/core/babylon-offer-detail/babylon-offer-detail.interface.mjs +0 -2
  416. package/esm2022/lib/components/core/babylon-offer-detail/index.mjs +0 -3
  417. package/esm2022/lib/components/core/babylon-offer-popup/babylon-offer-popup.interface.mjs +0 -2
  418. package/esm2022/lib/components/core/babylon-offer-popup/index.mjs +0 -3
  419. package/esm2022/lib/components/core/babylon-offer-popupV2/babylon-offer-popup-v2.component.mjs +0 -49
  420. package/esm2022/lib/components/core/babylon-offer-popupV2/babylon-offer-popup-v2.interface.mjs +0 -2
  421. package/esm2022/lib/components/core/babylon-offer-popupV2/index.mjs +0 -3
  422. package/esm2022/lib/components/core/babylon-offer-slider/babylon-offer-slider.interface.mjs +0 -2
  423. package/esm2022/lib/components/core/babylon-offer-slider/babylon-offer.interface.mjs +0 -2
  424. package/esm2022/lib/components/core/babylon-offer-slider/index.mjs +0 -4
  425. package/esm2022/lib/components/core/babylon-offers-list/babylon-offers-list.interface.mjs +0 -2
  426. package/esm2022/lib/components/core/babylon-offers-list/index.mjs +0 -3
  427. package/esm2022/lib/components/core/babylon-offers-slider/index.mjs +0 -2
  428. package/esm2022/lib/components/core/babylon-preload/index.mjs +0 -2
  429. package/esm2022/lib/components/core/babylon-press-list/babylon-press-list.component.mjs +0 -27
  430. package/esm2022/lib/components/core/babylon-press-list/babylon-press-list.interface.mjs +0 -2
  431. package/esm2022/lib/components/core/babylon-press-list/index.mjs +0 -3
  432. package/esm2022/lib/components/core/babylon-room-details/babylon-room-detail.interface.mjs +0 -2
  433. package/esm2022/lib/components/core/babylon-room-details/index.mjs +0 -3
  434. package/esm2022/lib/components/core/babylon-rooms-cols/babylon-rooms-cols.interface.mjs +0 -2
  435. package/esm2022/lib/components/core/babylon-rooms-cols/index.mjs +0 -3
  436. package/esm2022/lib/components/core/babylon-rooms-grid/babylon-rooms-grid.interface.mjs +0 -2
  437. package/esm2022/lib/components/core/babylon-rooms-grid/index.mjs +0 -3
  438. package/esm2022/lib/components/core/babylon-rooms-list/babylon-rooms-list.interface.mjs +0 -2
  439. package/esm2022/lib/components/core/babylon-rooms-list/index.mjs +0 -3
  440. package/esm2022/lib/components/core/babylon-rooms-slider/babylon-room.interface.mjs +0 -2
  441. package/esm2022/lib/components/core/babylon-rooms-slider/babylon-rooms-slider.interface.mjs +0 -2
  442. package/esm2022/lib/components/core/babylon-rooms-slider/babylon-rooms-text-info.interface.mjs +0 -2
  443. package/esm2022/lib/components/core/babylon-rooms-slider/index.mjs +0 -5
  444. package/esm2022/lib/components/core/babylon-services-slider/babylon-service-slider.interface.mjs +0 -2
  445. package/esm2022/lib/components/core/babylon-services-slider/index.mjs +0 -3
  446. package/esm2022/lib/components/core/babylon-slider2col/index.mjs +0 -2
  447. package/esm2022/lib/components/core/babylon-slider2items/babylon-slider2items.interface.mjs +0 -2
  448. package/esm2022/lib/components/core/babylon-slider2items/index.mjs +0 -3
  449. package/esm2022/lib/components/core/babylon-slider3col/babylon-slider3col.component.mjs +0 -53
  450. package/esm2022/lib/components/core/babylon-slider3col/index.mjs +0 -2
  451. package/esm2022/lib/components/core/babylon-slider3col-clear/babylon-slider3col-clear.component.mjs +0 -11
  452. package/esm2022/lib/components/core/babylon-slider3col-clear/index.mjs +0 -2
  453. package/esm2022/lib/components/core/babylon-slider3items/babylon-slider3items.interface.mjs +0 -2
  454. package/esm2022/lib/components/core/babylon-slider3items/index.mjs +0 -3
  455. package/esm2022/lib/components/core/babylon-slider4col/index.mjs +0 -2
  456. package/esm2022/lib/components/core/babylon-static-footer/babylon-static-footer.interface.mjs +0 -2
  457. package/esm2022/lib/components/core/babylon-static-footer/index.mjs +0 -3
  458. package/esm2022/lib/components/core/babylon-static-footer-v2/babylon-static-footer-v2.interface.mjs +0 -2
  459. package/esm2022/lib/components/core/babylon-static-footer-v2/index.mjs +0 -3
  460. package/esm2022/lib/components/core/babylon-submenu-hotel/babylon-submenu-hotel.interface.mjs +0 -2
  461. package/esm2022/lib/components/core/babylon-submenu-hotel/index.mjs +0 -3
  462. package/esm2022/lib/components/core/babylon-thanks/babylon-thanks.interface.mjs +0 -2
  463. package/esm2022/lib/components/core/babylon-thanks/index.mjs +0 -3
  464. package/esm2022/lib/components/core/babylon-top-slider/babylon-top-slider-item.interface.mjs +0 -2
  465. package/esm2022/lib/components/core/babylon-top-slider/babylon-top-slider.interface.mjs +0 -2
  466. package/esm2022/lib/components/core/babylon-top-slider/index.mjs +0 -4
  467. package/esm2022/lib/components/core/babylon-top-slider-thumbs/babylon-top-slider-thumbs.interface.mjs +0 -2
  468. package/esm2022/lib/components/core/babylon-top-slider-thumbs/index.mjs +0 -3
  469. package/esm2022/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2-item.interface.mjs +0 -2
  470. package/esm2022/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2.interface.mjs +0 -2
  471. package/esm2022/lib/components/core/babylon-top-slider-v2/index.mjs +0 -4
  472. package/esm2022/lib/components/core/babylon-top-slider-video/babylon-top-slider-video.interface.mjs +0 -2
  473. package/esm2022/lib/components/core/babylon-top-slider-video/babylon-video-source.interface.mjs +0 -2
  474. package/esm2022/lib/components/core/babylon-top-slider-video/index.mjs +0 -4
  475. package/esm2022/lib/components/core/babylon-webmap/babylon-webmap.interface.mjs +0 -2
  476. package/esm2022/lib/components/core/babylon-webmap/index.mjs +0 -3
  477. package/esm2022/lib/components/core/index.mjs +0 -89
  478. package/esm2022/lib/components/shared/babylon-dynamic-heading/babylon-dynamic-heading.component.mjs +0 -124
  479. package/esm2022/lib/components/shared/babylon-dynamic-heading/babylon-dynamic-heading.interface.mjs +0 -2
  480. package/esm2022/lib/components/shared/babylon-dynamic-heading/index.mjs +0 -3
  481. package/esm2022/lib/components/shared/babylon-search/babylon-search.component.mjs +0 -82
  482. package/esm2022/lib/components/shared/babylon-search/index.mjs +0 -2
  483. package/esm2022/lib/components/shared/index.mjs +0 -2
  484. package/esm2022/lib/directives/babylon-background-strip/babylon-background-strip.directive.mjs +0 -71
  485. package/esm2022/lib/directives/babylon-customs/babylon-custom-mouse-pointer.directive.mjs +0 -52
  486. package/esm2022/lib/directives/babylon-galleries/babylon-light-gallery.directive.mjs +0 -107
  487. package/esm2022/lib/directives/babylon-hobble-effect/babylon-hobble-effect.directive.mjs +0 -60
  488. package/esm2022/lib/directives/babylon-pagination/babylon-pagination.directive.mjs +0 -127
  489. package/esm2022/lib/directives/babylon-sliders/babylon-custom-slider.directive.mjs +0 -62
  490. package/esm2022/lib/directives/babylon-sliders/babylon-hotels-slider.directive.mjs +0 -107
  491. package/esm2022/lib/directives/babylon-sliders/babylon-sliders.directive.mjs +0 -438
  492. package/esm2022/lib/directives/babylon-sliders/babylon-swiper-slider.directive.mjs +0 -107
  493. package/esm2022/lib/directives/data-background/data-background.directive.mjs +0 -32
  494. package/esm2022/lib/directives/link-type/link-type.directive.mjs +0 -284
  495. package/esm2022/lib/directives/scrolls/scroll-up.directive.mjs +0 -27
  496. package/esm2022/lib/interfaces/babylon-button.interface.mjs +0 -2
  497. package/esm2022/lib/interfaces/babylon-consult-type.interface.mjs +0 -2
  498. package/esm2022/lib/interfaces/babylon-dropdown.interface.mjs +0 -2
  499. package/esm2022/lib/interfaces/babylon-global-icon.interface.mjs +0 -2
  500. package/esm2022/lib/interfaces/babylon-image.interface.mjs +0 -2
  501. package/esm2022/lib/interfaces/babylon-input.interface.mjs +0 -2
  502. package/esm2022/lib/interfaces/babylon-menu-button.interface.mjs +0 -2
  503. package/esm2022/lib/interfaces/babylon-menu-info.interface.mjs +0 -2
  504. package/esm2022/lib/interfaces/babylon-page-config.interface.mjs +0 -2
  505. package/esm2022/lib/interfaces/babylon-site-config.interface.mjs +0 -2
  506. package/esm2022/lib/interfaces/babylon-tags.interface.mjs +0 -2
  507. package/esm2022/lib/interfaces/babylon-text-info.interface.mjs +0 -2
  508. package/esm2022/lib/interfaces/babylon-texts-colors.interface.mjs +0 -2
  509. package/esm2022/lib/interfaces/babylon-texts.interface.mjs +0 -2
  510. package/esm2022/lib/interfaces/index.mjs +0 -15
  511. package/esm2022/lib/pipes/babylon-clean-phone.pipe.mjs +0 -14
  512. package/esm2022/lib/pipes/babylon-currency.pipe.mjs +0 -29
  513. package/esm2022/lib/services/color-panel.service.mjs +0 -316
  514. package/esm2022/lib/services/mapper/index.mjs +0 -3
  515. package/esm2022/lib/services/mapper/mapper.service.mjs +0 -2544
  516. package/esm2022/lib/services/mapper/mapper.service.token.mjs +0 -3
  517. package/esm2022/lib/services/modals-service/index.mjs +0 -2
  518. package/esm2022/lib/services/modals-service/modals.service.mjs +0 -77
  519. package/esm2022/lib/utils/complex-links.token.mjs +0 -6
  520. package/esm2022/lib/utils/index.mjs +0 -2
  521. package/esm2022/lib/utils/utils.mjs +0 -153
  522. package/lib/Enum/buttons-type.enum.d.ts +0 -4
  523. package/lib/Enum/index.d.ts +0 -2
  524. package/lib/Enum/logo-type.enum.d.ts +0 -8
  525. package/lib/Enum/services.enum.d.ts +0 -6
  526. package/lib/Enum/views.enum.d.ts +0 -3
  527. package/lib/components/core/babylon-404/babylon-404.interface.d.ts +0 -9
  528. package/lib/components/core/babylon-404/index.d.ts +0 -2
  529. package/lib/components/core/babylon-action-banner/babylon-action-banner.component.d.ts +0 -14
  530. package/lib/components/core/babylon-action-banner/babylon-action-banner.interface.d.ts +0 -9
  531. package/lib/components/core/babylon-action-banner/index.d.ts +0 -2
  532. package/lib/components/core/babylon-advantages/babylon-advantages-info.interface.d.ts +0 -5
  533. package/lib/components/core/babylon-advantages/babylon-advantages.interface.d.ts +0 -13
  534. package/lib/components/core/babylon-advantages/index.d.ts +0 -3
  535. package/lib/components/core/babylon-banner-gallery/babylon-banner-gallery.interface.d.ts +0 -9
  536. package/lib/components/core/babylon-banner-gallery/index.d.ts +0 -2
  537. package/lib/components/core/babylon-banner-info/babylon-banner-info.interface.d.ts +0 -10
  538. package/lib/components/core/babylon-banner-info/index.d.ts +0 -2
  539. package/lib/components/core/babylon-banner-newsletter/babylon-banner-newsletter.interface.d.ts +0 -9
  540. package/lib/components/core/babylon-banner-newsletter/index.d.ts +0 -2
  541. package/lib/components/core/babylon-blog-details/babylon-blog-details.interface.d.ts +0 -24
  542. package/lib/components/core/babylon-blog-details/index.d.ts +0 -2
  543. package/lib/components/core/babylon-blog-list/babylon-blog-list.interface.d.ts +0 -18
  544. package/lib/components/core/babylon-blog-list/index.d.ts +0 -2
  545. package/lib/components/core/babylon-breadcrumb/babylon-breadcrumb.interface.d.ts +0 -4
  546. package/lib/components/core/babylon-breadcrumb/index.d.ts +0 -2
  547. package/lib/components/core/babylon-color-picker/babylon-color-picker.component.d.ts +0 -57
  548. package/lib/components/core/babylon-color-picker/index.d.ts +0 -1
  549. package/lib/components/core/babylon-comingsoon/babylon-comingsoon.interface.d.ts +0 -11
  550. package/lib/components/core/babylon-comingsoon/index.d.ts +0 -2
  551. package/lib/components/core/babylon-contact-address/babylon-contact-address.component.d.ts +0 -22
  552. package/lib/components/core/babylon-contact-address/babylon-contact-address.interface.d.ts +0 -4
  553. package/lib/components/core/babylon-contact-address/index.d.ts +0 -2
  554. package/lib/components/core/babylon-contact-form/babylon-contact-form.interface.d.ts +0 -15
  555. package/lib/components/core/babylon-contact-form/index.d.ts +0 -2
  556. package/lib/components/core/babylon-contact-how/babylon-contact-how.interface.d.ts +0 -6
  557. package/lib/components/core/babylon-contact-how/index.d.ts +0 -2
  558. package/lib/components/core/babylon-contact-map/babylon-contact-map.interface.d.ts +0 -8
  559. package/lib/components/core/babylon-contact-map/index.d.ts +0 -2
  560. package/lib/components/core/babylon-engine/babylon-engine.interface.d.ts +0 -24
  561. package/lib/components/core/babylon-engine/index.d.ts +0 -2
  562. package/lib/components/core/babylon-engine-modal/babylon-engine-modal.interface.d.ts +0 -22
  563. package/lib/components/core/babylon-engine-modal/index.d.ts +0 -2
  564. package/lib/components/core/babylon-external-script/babylon-external-script.component.d.ts +0 -21
  565. package/lib/components/core/babylon-external-script/babylon-external-script.interface.d.ts +0 -5
  566. package/lib/components/core/babylon-external-script/index.d.ts +0 -2
  567. package/lib/components/core/babylon-faq/babylon-faq.interface.d.ts +0 -8
  568. package/lib/components/core/babylon-faq/index.d.ts +0 -2
  569. package/lib/components/core/babylon-features-slider/babylon-features-slider.interface.d.ts +0 -8
  570. package/lib/components/core/babylon-features-slider/index.d.ts +0 -2
  571. package/lib/components/core/babylon-filter-modal/index.d.ts +0 -1
  572. package/lib/components/core/babylon-floating-buttons/babylon-floating-buttons.component.d.ts +0 -39
  573. package/lib/components/core/babylon-floating-buttons/babylon-floating-buttons.interface.d.ts +0 -8
  574. package/lib/components/core/babylon-floating-buttons/index.d.ts +0 -2
  575. package/lib/components/core/babylon-footer-contact/babylon-footer-contact.interface.d.ts +0 -14
  576. package/lib/components/core/babylon-footer-contact/index.d.ts +0 -2
  577. package/lib/components/core/babylon-footer-links/babylon-footer-links.interface.d.ts +0 -6
  578. package/lib/components/core/babylon-footer-links/index.d.ts +0 -2
  579. package/lib/components/core/babylon-footer-logos/babylon-footer-logos.interface.d.ts +0 -7
  580. package/lib/components/core/babylon-footer-logos/index.d.ts +0 -2
  581. package/lib/components/core/babylon-footer-social/babylon-footer-social.interface.d.ts +0 -6
  582. package/lib/components/core/babylon-footer-social/index.d.ts +0 -2
  583. package/lib/components/core/babylon-gallery/babylon-gallery.interface.d.ts +0 -12
  584. package/lib/components/core/babylon-gallery/index.d.ts +0 -2
  585. package/lib/components/core/babylon-global-modal/babylon-global-modal.component.d.ts +0 -31
  586. package/lib/components/core/babylon-global-modal/babylon-global-modal.interface.d.ts +0 -8
  587. package/lib/components/core/babylon-global-modal/index.d.ts +0 -2
  588. package/lib/components/core/babylon-grid-gallery/babylon-grid-gallery.interface.d.ts +0 -8
  589. package/lib/components/core/babylon-grid-gallery/index.d.ts +0 -2
  590. package/lib/components/core/babylon-guests-popup/babylon-guests-popup.interface.d.ts +0 -11
  591. package/lib/components/core/babylon-guests-popup/index.d.ts +0 -2
  592. package/lib/components/core/babylon-head-intro/babylon-head-intro.interface.d.ts +0 -10
  593. package/lib/components/core/babylon-head-intro/index.d.ts +0 -2
  594. package/lib/components/core/babylon-header-book-show/babylon-header-book-show.interface.d.ts +0 -20
  595. package/lib/components/core/babylon-header-book-show/index.d.ts +0 -2
  596. package/lib/components/core/babylon-header-clear/babylon-header-clear.interface.d.ts +0 -22
  597. package/lib/components/core/babylon-header-clear/index.d.ts +0 -2
  598. package/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.interface.d.ts +0 -19
  599. package/lib/components/core/babylon-header-menu-center/index.d.ts +0 -2
  600. package/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.component.d.ts +0 -40
  601. package/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.interface.d.ts +0 -23
  602. package/lib/components/core/babylon-header-menu-logo-center/index.d.ts +0 -2
  603. package/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.interface.d.ts +0 -18
  604. package/lib/components/core/babylon-header-menu-show/index.d.ts +0 -2
  605. package/lib/components/core/babylon-header-mobile/babylon-header-mobile.component.d.ts +0 -53
  606. package/lib/components/core/babylon-header-mobile/babylon-header-mobile.interface.d.ts +0 -26
  607. package/lib/components/core/babylon-header-mobile/index.d.ts +0 -2
  608. package/lib/components/core/babylon-hotels-list/babylon-hotel.interface.d.ts +0 -18
  609. package/lib/components/core/babylon-hotels-list/babylon-hotels-list.interface.d.ts +0 -6
  610. package/lib/components/core/babylon-hotels-list/index.d.ts +0 -3
  611. package/lib/components/core/babylon-hotels-slider/babylon-hotels-slider.interface.d.ts +0 -6
  612. package/lib/components/core/babylon-hotels-slider/index.d.ts +0 -2
  613. package/lib/components/core/babylon-info-big/babylon-info-big.interface.d.ts +0 -10
  614. package/lib/components/core/babylon-info-big/index.d.ts +0 -2
  615. package/lib/components/core/babylon-info-grid/babylon-info-grid.interface.d.ts +0 -9
  616. package/lib/components/core/babylon-info-grid/index.d.ts +0 -2
  617. package/lib/components/core/babylon-info-img/babylon-info-img.interface.d.ts +0 -27
  618. package/lib/components/core/babylon-info-img/index.d.ts +0 -2
  619. package/lib/components/core/babylon-info-img-slider/babylon-info-img-slider.component.d.ts +0 -33
  620. package/lib/components/core/babylon-info-img-slider/babylon-info-img-slider.interface.d.ts +0 -11
  621. package/lib/components/core/babylon-info-img-slider/index.d.ts +0 -2
  622. package/lib/components/core/babylon-info-intro/babylon-info-intro.interface.d.ts +0 -19
  623. package/lib/components/core/babylon-info-intro/index.d.ts +0 -2
  624. package/lib/components/core/babylon-info-show-img/index.d.ts +0 -1
  625. package/lib/components/core/babylon-info-zig-zag/babylon-info-zig-zag.interface.d.ts +0 -12
  626. package/lib/components/core/babylon-info-zig-zag/index.d.ts +0 -2
  627. package/lib/components/core/babylon-info-zig-zag-counter/babylon-info-zig-zag-counter.component.d.ts +0 -47
  628. package/lib/components/core/babylon-info-zig-zag-counter/babylon-info-zig-zag-counter.interface.d.ts +0 -14
  629. package/lib/components/core/babylon-info-zig-zag-counter/index.d.ts +0 -2
  630. package/lib/components/core/babylon-info-zigzag-v2/babylon-info-zigzag-v2.interface.d.ts +0 -5
  631. package/lib/components/core/babylon-info-zigzag-v2/index.d.ts +0 -2
  632. package/lib/components/core/babylon-info2col-img/babylon-info2col-img.component.d.ts +0 -21
  633. package/lib/components/core/babylon-info2col-img/babylon-info2col-img.interface.d.ts +0 -12
  634. package/lib/components/core/babylon-info2col-img/index.d.ts +0 -2
  635. package/lib/components/core/babylon-info2img/babylon-info2img.interface.d.ts +0 -11
  636. package/lib/components/core/babylon-info2img/index.d.ts +0 -2
  637. package/lib/components/core/babylon-info2img-big/babylon-info2img-big.interface.d.ts +0 -14
  638. package/lib/components/core/babylon-info2img-big/index.d.ts +0 -2
  639. package/lib/components/core/babylon-info3img/index.d.ts +0 -1
  640. package/lib/components/core/babylon-info4img/babylon-info4img.interface.d.ts +0 -12
  641. package/lib/components/core/babylon-info4img/index.d.ts +0 -2
  642. package/lib/components/core/babylon-items-grid/babylon-items-grid.interface.d.ts +0 -8
  643. package/lib/components/core/babylon-items-grid/index.d.ts +0 -2
  644. package/lib/components/core/babylon-language-modal/babylon-language-modal.interface.d.ts +0 -7
  645. package/lib/components/core/babylon-language-modal/index.d.ts +0 -2
  646. package/lib/components/core/babylon-legal/babylon-legal.interface.d.ts +0 -7
  647. package/lib/components/core/babylon-legal/index.d.ts +0 -2
  648. package/lib/components/core/babylon-list-grid/babylon-list-grid.interface.d.ts +0 -8
  649. package/lib/components/core/babylon-list-grid/index.d.ts +0 -2
  650. package/lib/components/core/babylon-modal-menu/babylon-modal-menu.component.d.ts +0 -45
  651. package/lib/components/core/babylon-modal-multiple-motors/babylon-modal-multiple-motors.component.d.ts +0 -16
  652. package/lib/components/core/babylon-modal-multiple-motors/babylon-modal-multiple-motors.interface.d.ts +0 -8
  653. package/lib/components/core/babylon-modal-multiple-motors/index.d.ts +0 -2
  654. package/lib/components/core/babylon-modal-popup/babylon-modal-popup.component.d.ts +0 -25
  655. package/lib/components/core/babylon-modal-popup/babylon-modal-popup.interface.d.ts +0 -9
  656. package/lib/components/core/babylon-modal-popup/index.d.ts +0 -2
  657. package/lib/components/core/babylon-newsletter/babylon-newsletter.interface.d.ts +0 -9
  658. package/lib/components/core/babylon-newsletter/index.d.ts +0 -2
  659. package/lib/components/core/babylon-offer-detail/babylon-offer-detail.interface.d.ts +0 -17
  660. package/lib/components/core/babylon-offer-detail/index.d.ts +0 -2
  661. package/lib/components/core/babylon-offer-popup/babylon-offer-popup.interface.d.ts +0 -7
  662. package/lib/components/core/babylon-offer-popup/index.d.ts +0 -2
  663. package/lib/components/core/babylon-offer-popupV2/babylon-offer-popup-v2.component.d.ts +0 -21
  664. package/lib/components/core/babylon-offer-popupV2/babylon-offer-popup-v2.interface.d.ts +0 -9
  665. package/lib/components/core/babylon-offer-popupV2/index.d.ts +0 -2
  666. package/lib/components/core/babylon-offer-slider/babylon-offer-slider.interface.d.ts +0 -7
  667. package/lib/components/core/babylon-offer-slider/babylon-offer.interface.d.ts +0 -18
  668. package/lib/components/core/babylon-offer-slider/index.d.ts +0 -3
  669. package/lib/components/core/babylon-offers-list/babylon-offers-list.interface.d.ts +0 -14
  670. package/lib/components/core/babylon-offers-list/index.d.ts +0 -2
  671. package/lib/components/core/babylon-offers-slider/index.d.ts +0 -1
  672. package/lib/components/core/babylon-preload/index.d.ts +0 -1
  673. package/lib/components/core/babylon-press-list/babylon-press-list.component.d.ts +0 -17
  674. package/lib/components/core/babylon-press-list/babylon-press-list.interface.d.ts +0 -8
  675. package/lib/components/core/babylon-press-list/index.d.ts +0 -2
  676. package/lib/components/core/babylon-room-details/babylon-room-detail.interface.d.ts +0 -12
  677. package/lib/components/core/babylon-room-details/index.d.ts +0 -2
  678. package/lib/components/core/babylon-rooms-cols/babylon-rooms-cols.interface.d.ts +0 -10
  679. package/lib/components/core/babylon-rooms-cols/index.d.ts +0 -2
  680. package/lib/components/core/babylon-rooms-grid/babylon-rooms-grid.interface.d.ts +0 -8
  681. package/lib/components/core/babylon-rooms-grid/index.d.ts +0 -2
  682. package/lib/components/core/babylon-rooms-list/babylon-rooms-list.interface.d.ts +0 -6
  683. package/lib/components/core/babylon-rooms-list/index.d.ts +0 -2
  684. package/lib/components/core/babylon-rooms-slider/babylon-room.interface.d.ts +0 -15
  685. package/lib/components/core/babylon-rooms-slider/babylon-rooms-slider.interface.d.ts +0 -6
  686. package/lib/components/core/babylon-rooms-slider/babylon-rooms-text-info.interface.d.ts +0 -8
  687. package/lib/components/core/babylon-rooms-slider/index.d.ts +0 -4
  688. package/lib/components/core/babylon-services-slider/babylon-service-slider.interface.d.ts +0 -6
  689. package/lib/components/core/babylon-services-slider/index.d.ts +0 -2
  690. package/lib/components/core/babylon-slider2col/index.d.ts +0 -1
  691. package/lib/components/core/babylon-slider2items/babylon-slider2items.interface.d.ts +0 -6
  692. package/lib/components/core/babylon-slider2items/index.d.ts +0 -2
  693. package/lib/components/core/babylon-slider3col/babylon-slider3col.component.d.ts +0 -20
  694. package/lib/components/core/babylon-slider3col/index.d.ts +0 -1
  695. package/lib/components/core/babylon-slider3col-clear/babylon-slider3col-clear.component.d.ts +0 -5
  696. package/lib/components/core/babylon-slider3col-clear/index.d.ts +0 -1
  697. package/lib/components/core/babylon-slider3items/babylon-slider3items.interface.d.ts +0 -6
  698. package/lib/components/core/babylon-slider3items/index.d.ts +0 -2
  699. package/lib/components/core/babylon-slider4col/index.d.ts +0 -1
  700. package/lib/components/core/babylon-static-footer/babylon-static-footer.interface.d.ts +0 -29
  701. package/lib/components/core/babylon-static-footer/index.d.ts +0 -2
  702. package/lib/components/core/babylon-static-footer-v2/babylon-static-footer-v2.interface.d.ts +0 -18
  703. package/lib/components/core/babylon-static-footer-v2/index.d.ts +0 -2
  704. package/lib/components/core/babylon-submenu-hotel/babylon-submenu-hotel.interface.d.ts +0 -5
  705. package/lib/components/core/babylon-submenu-hotel/index.d.ts +0 -2
  706. package/lib/components/core/babylon-thanks/babylon-thanks.interface.d.ts +0 -7
  707. package/lib/components/core/babylon-thanks/index.d.ts +0 -2
  708. package/lib/components/core/babylon-top-slider/babylon-top-slider-item.interface.d.ts +0 -9
  709. package/lib/components/core/babylon-top-slider/babylon-top-slider.interface.d.ts +0 -12
  710. package/lib/components/core/babylon-top-slider/index.d.ts +0 -3
  711. package/lib/components/core/babylon-top-slider-thumbs/babylon-top-slider-thumbs.interface.d.ts +0 -8
  712. package/lib/components/core/babylon-top-slider-thumbs/index.d.ts +0 -2
  713. package/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2-item.interface.d.ts +0 -7
  714. package/lib/components/core/babylon-top-slider-v2/babylon-top-slider-v2.interface.d.ts +0 -8
  715. package/lib/components/core/babylon-top-slider-v2/index.d.ts +0 -3
  716. package/lib/components/core/babylon-top-slider-video/babylon-top-slider-video.interface.d.ts +0 -9
  717. package/lib/components/core/babylon-top-slider-video/babylon-video-source.interface.d.ts +0 -5
  718. package/lib/components/core/babylon-top-slider-video/index.d.ts +0 -3
  719. package/lib/components/core/babylon-webmap/babylon-webmap.interface.d.ts +0 -9
  720. package/lib/components/core/babylon-webmap/index.d.ts +0 -2
  721. package/lib/components/core/index.d.ts +0 -88
  722. package/lib/components/shared/babylon-dynamic-heading/babylon-dynamic-heading.component.d.ts +0 -31
  723. package/lib/components/shared/babylon-dynamic-heading/babylon-dynamic-heading.interface.d.ts +0 -5
  724. package/lib/components/shared/babylon-dynamic-heading/index.d.ts +0 -2
  725. package/lib/components/shared/babylon-search/babylon-search.component.d.ts +0 -30
  726. package/lib/components/shared/babylon-search/index.d.ts +0 -1
  727. package/lib/components/shared/index.d.ts +0 -1
  728. package/lib/directives/babylon-background-strip/babylon-background-strip.directive.d.ts +0 -17
  729. package/lib/directives/babylon-customs/babylon-custom-mouse-pointer.directive.d.ts +0 -12
  730. package/lib/directives/babylon-galleries/babylon-light-gallery.directive.d.ts +0 -18
  731. package/lib/directives/babylon-hobble-effect/babylon-hobble-effect.directive.d.ts +0 -15
  732. package/lib/directives/babylon-pagination/babylon-pagination.directive.d.ts +0 -39
  733. package/lib/directives/babylon-sliders/babylon-custom-slider.directive.d.ts +0 -13
  734. package/lib/directives/babylon-sliders/babylon-sliders.directive.d.ts +0 -36
  735. package/lib/directives/babylon-sliders/babylon-swiper-slider.directive.d.ts +0 -14
  736. package/lib/directives/data-background/data-background.directive.d.ts +0 -11
  737. package/lib/directives/link-type/link-type.directive.d.ts +0 -40
  738. package/lib/directives/scrolls/scroll-up.directive.d.ts +0 -7
  739. package/lib/interfaces/babylon-button.interface.d.ts +0 -9
  740. package/lib/interfaces/babylon-consult-type.interface.d.ts +0 -10
  741. package/lib/interfaces/babylon-dropdown.interface.d.ts +0 -9
  742. package/lib/interfaces/babylon-global-icon.interface.d.ts +0 -4
  743. package/lib/interfaces/babylon-image.interface.d.ts +0 -12
  744. package/lib/interfaces/babylon-input.interface.d.ts +0 -12
  745. package/lib/interfaces/babylon-menu-button.interface.d.ts +0 -10
  746. package/lib/interfaces/babylon-menu-info.interface.d.ts +0 -27
  747. package/lib/interfaces/babylon-page-config.interface.d.ts +0 -43
  748. package/lib/interfaces/babylon-site-config.interface.d.ts +0 -57
  749. package/lib/interfaces/babylon-tags.interface.d.ts +0 -21
  750. package/lib/interfaces/babylon-text-info.interface.d.ts +0 -17
  751. package/lib/interfaces/babylon-texts-colors.interface.d.ts +0 -20
  752. package/lib/interfaces/babylon-texts.interface.d.ts +0 -5
  753. package/lib/interfaces/index.d.ts +0 -14
  754. package/lib/pipes/babylon-clean-phone.pipe.d.ts +0 -7
  755. package/lib/pipes/babylon-currency.pipe.d.ts +0 -7
  756. package/lib/services/color-panel.service.d.ts +0 -41
  757. package/lib/services/mapper/index.d.ts +0 -2
  758. package/lib/services/mapper/mapper.service.d.ts +0 -137
  759. package/lib/services/mapper/mapper.service.token.d.ts +0 -2
  760. package/lib/services/modals-service/index.d.ts +0 -1
  761. package/lib/services/modals-service/modals.service.d.ts +0 -15
  762. package/lib/styles/styles/babylon/_spacing.css +0 -1
  763. package/lib/styles/styles/babylon/_spacing.scss +0 -72
  764. package/lib/styles/styles/babylon/common.css +0 -1
  765. package/lib/styles/styles/babylon/common.scss +0 -1823
  766. package/lib/styles/styles/babylon/globals.css +0 -1
  767. package/lib/styles/styles/babylon/globals.scss +0 -848
  768. package/lib/styles/styles/babylon/mixins.css +0 -1
  769. package/lib/styles/styles/babylon/mixins.scss +0 -1019
  770. package/lib/styles/styles/babylon/reset.css +0 -1
  771. package/lib/styles/styles/babylon/reset.scss +0 -136
  772. package/lib/styles/styles/babylon/slide.css +0 -1
  773. package/lib/styles/styles/babylon/slider.css +0 -1
  774. package/lib/styles/styles/babylon/slider.scss +0 -876
  775. package/lib/styles/styles/babylon/structure.scss +0 -1
  776. package/lib/styles/styles/babylon/variables-v2.css +0 -0
  777. package/lib/styles/styles/babylon/variables.css +0 -1
  778. package/lib/styles/styles/babylon/variables.scss +0 -342
  779. package/lib/utils/complex-links.token.d.ts +0 -2
  780. package/lib/utils/index.d.ts +0 -1
  781. package/lib/utils/utils.d.ts +0 -14
  782. /package/lib/styles/styles/babylon/{structure.css → scss-daba/funciones.css} +0 -0
@@ -1,2544 +0,0 @@
1
- import { isPlatformBrowser } from '@angular/common';
2
- import { computed, inject, Injectable, PLATFORM_ID, signal, } from '@angular/core';
3
- import { Validators } from '@angular/forms';
4
- import { RoomServiceType } from '../../Enum/services.enum';
5
- import { ViewsType } from '../../Enum/views.enum';
6
- import { Utils } from '../../utils/utils';
7
- import { ScreenSizerService } from '../screen-sizer';
8
- import { SITE_CONFIG_SERVICE_TOKEN } from './mapper.service.token';
9
- import * as i0 from "@angular/core";
10
- export class MapperService {
11
- constructor() {
12
- this.siteSvc = inject(SITE_CONFIG_SERVICE_TOKEN);
13
- this.screenSizer = inject(ScreenSizerService);
14
- this.headerButtons = signal(undefined);
15
- this.siteId = computed(() => this.siteSvc.webConfigInstant?.siteID);
16
- this.platformId = inject(PLATFORM_ID);
17
- }
18
- get isMinFullTabletInstant() {
19
- return this.screenSizer.minFullTabletInstant();
20
- }
21
- getImageResponsive(image, isFigure = true) {
22
- let selectedImage;
23
- if (isPlatformBrowser(this.platformId)) {
24
- if (this.screenSizer.mobile()) {
25
- selectedImage = image?.thumbnails?.[375]?.webp;
26
- }
27
- else if (this.screenSizer.isSmallTabletInstant()) {
28
- selectedImage = image?.thumbnails?.[540]?.webp;
29
- }
30
- else if (this.screenSizer.isMediumTabletInstant()) {
31
- selectedImage = image?.thumbnails?.[768]?.webp;
32
- }
33
- else if (this.screenSizer.isFullTabletInstant()) {
34
- selectedImage = image?.thumbnails?.[1024]?.webp;
35
- }
36
- else if (this.screenSizer.isSmallDesktopInstant()) {
37
- selectedImage = image?.thumbnails?.[1280]?.webp;
38
- }
39
- else if (this.screenSizer.minMediumDesktop()) {
40
- selectedImage = image?.path?.webp;
41
- }
42
- else {
43
- selectedImage = image?.thumbnails?.[1366]?.webp;
44
- }
45
- }
46
- return selectedImage
47
- ? isFigure
48
- ? `${this.siteSvc.cdnImagesInstant}${selectedImage}`
49
- : {
50
- src: `${this.siteSvc.cdnImagesInstant}${selectedImage}`,
51
- alt: image?.alt,
52
- }
53
- : undefined;
54
- }
55
- getArrayImageResponsive(images, isFigure = true) {
56
- return images?.map((img) => this.getImageResponsive(img, isFigure));
57
- }
58
- generateAgesOptions(maxLength, minLength = 0) {
59
- const options = [];
60
- for (let i = minLength; i <= maxLength; i++) {
61
- options.push({ code: i, name: i < 10 ? `0${i}` : `${i}` });
62
- }
63
- return options;
64
- }
65
- mapBodyExtra(body) {
66
- const bodyMapped = body?.map((component) => {
67
- const componentMapped = {
68
- name: component.name?.toLowerCase(),
69
- order: component.order,
70
- props: {},
71
- };
72
- switch (component.name?.toLowerCase()) {
73
- case 'menu':
74
- componentMapped.props = this.mapSubmenu(component.props);
75
- componentMapped.name = 'menu';
76
- break;
77
- }
78
- return componentMapped;
79
- });
80
- return bodyMapped;
81
- }
82
- mapSubmenu(props) {
83
- const selected = props?.items?.find((item) => item.selected);
84
- const submenu = {
85
- // hotel: props?.hotel,
86
- items: props?.items
87
- ?.filter((item) => item.active)
88
- ?.map((link) => ({
89
- label: link?.name,
90
- url: link?.linkValue,
91
- linkType: 'internal',
92
- })),
93
- selected: {
94
- label: selected?.name,
95
- url: selected?.linkValue,
96
- },
97
- };
98
- return submenu;
99
- }
100
- mapComponents(body, addons) {
101
- if (!body || !body.length) {
102
- return [];
103
- }
104
- const bodyMapped = body
105
- ?.filter((component) => component !== null && component !== undefined)
106
- ?.map((component) => {
107
- const componentMapped = {
108
- name: component.name?.toLowerCase(),
109
- order: component.order,
110
- props: {},
111
- alias: component.alias,
112
- textColor: component.textcolor,
113
- };
114
- if (component.props) {
115
- //It is necessary, otherwise it gives an error and does not show components
116
- try {
117
- switch (component.name?.toLowerCase()) {
118
- case 'module404':
119
- componentMapped.props = this.map404(component.props);
120
- break;
121
- //---- LAYOUT COMPONENTS ----//
122
- case 'topslider':
123
- componentMapped.props = this.mapTopSlider(component.props);
124
- break;
125
- case 'topslidervideo':
126
- componentMapped.props = this.mapTopSliderVideo(component.props);
127
- break;
128
- case 'topsliderv2left':
129
- case 'topsliderv2right':
130
- componentMapped.props = this.mapTopSliderV2(component.props, componentMapped.name === 'topsliderv2right');
131
- break;
132
- case 'infoimg':
133
- case 'infoimgright':
134
- case 'infoimgleft':
135
- componentMapped.props = this.mapInfoImg(component.props, componentMapped.name === 'infoimgright', component.textcolor);
136
- break;
137
- case 'infoimgsliderright':
138
- case 'infoimgsliderleft':
139
- componentMapped.props = this.mapInfoImgSlider(component.props, componentMapped.name ===
140
- 'infoimgsliderright');
141
- break;
142
- case 'infointro':
143
- componentMapped.props = this.mapInfoIntro(component.props);
144
- break;
145
- case 'info2imgleft':
146
- case 'info2imgright':
147
- componentMapped.props = this.mapInfo2img(component.props, componentMapped.name === 'info2imgright');
148
- break;
149
- case 'info2colimgright':
150
- componentMapped.props = this.mapInfo2colimg(component.props, componentMapped.name === 'info2colimgright');
151
- break;
152
- case 'info2colimgleft':
153
- componentMapped.props = this.mapInfo2colimg(component.props, componentMapped.name === 'info2colimgleft');
154
- break;
155
- case 'info3img':
156
- componentMapped.props = this.mapInfoImg(component.props, false, component.textcolor);
157
- break;
158
- case 'infozigzagleft':
159
- case 'infozigzagright':
160
- componentMapped.props = this.mapZigzag(component.props, componentMapped.name === 'infozigzagright');
161
- break;
162
- case 'infogrid':
163
- componentMapped.props = this.mapInfoGrid(component.props);
164
- break;
165
- case 'slider2colleft':
166
- case 'slider2colright':
167
- componentMapped.props = this.mapSliderColl2(component.props, componentMapped.name === 'slider2colright');
168
- break;
169
- case 'slider3col':
170
- componentMapped.props = this.mapSliderColl(component.props);
171
- break;
172
- case 'slider4col':
173
- componentMapped.props = this.mapSliderColl(component.props);
174
- break;
175
- case 'itemsgrid':
176
- componentMapped.props = this.mapItemsGrid(component.props);
177
- break;
178
- case 'roomsslider':
179
- componentMapped.props = this.mapRoomsSlider(component.props);
180
- break;
181
- case 'roomsgrid':
182
- componentMapped.props = this.mapRoomsGrid(component.props);
183
- break;
184
- case 'bannergallery':
185
- componentMapped.props = this.mapBannerGallery(component.props);
186
- break;
187
- case 'gridgallery':
188
- componentMapped.props = this.mapGridGallery(component.props);
189
- break;
190
- case 'bannernewsletter':
191
- componentMapped.props =
192
- this.mapBannerNewsletter(component.props);
193
- break;
194
- case 'offersslider':
195
- componentMapped.props = this.mapOfferSlider(component.props);
196
- break;
197
- //---- LAYOUT COMPONENTS END----//
198
- case 'thanks':
199
- componentMapped.props = this.mapThanks(component.props);
200
- break;
201
- case 'contactform':
202
- componentMapped.props = this.mapContactForm(component.props, addons?.contactOffice, addons?.consultType);
203
- break;
204
- case 'contacthow':
205
- componentMapped.props = this.mapContactHow(component.props);
206
- break;
207
- case 'webmap':
208
- componentMapped.props = this.mapWebmap(component.props);
209
- break;
210
- case 'contactmap':
211
- componentMapped.props = this.mapContactMap(component.props);
212
- break;
213
- case 'legal':
214
- componentMapped.props = this.mapLegal(component.props);
215
- break;
216
- case 'roomscols':
217
- componentMapped.props = this.mapRoomsCols(component.props);
218
- break;
219
- case 'roomdetails':
220
- componentMapped.props = this.mapRoomDetail(component.props);
221
- break;
222
- case 'topsliderthumbs':
223
- componentMapped.props = this.mapTopSliderThumbs(component.props);
224
- break;
225
- case 'featuresslider':
226
- componentMapped.props = this.mapFeaturesSlider(component.props);
227
- break;
228
- case 'bannerinfo':
229
- componentMapped.props = this.mapBannerInfo(component.props);
230
- break;
231
- case 'roomslist':
232
- componentMapped.props = this.mapRoomsList(component.props);
233
- break;
234
- case 'comingsoon':
235
- componentMapped.props = this.mapComingSoon(component.props);
236
- break;
237
- case 'offerdetail':
238
- componentMapped.props = this.mapOfferDetail(component.props);
239
- break;
240
- case 'offerslist':
241
- componentMapped.props = this.mapOffersList(component.props);
242
- break;
243
- case 'faq':
244
- componentMapped.props = this.mapFaq(component.props);
245
- break;
246
- case 'staticfooter':
247
- componentMapped.props = this.mapStaticFooter(component.props);
248
- break;
249
- case 'gallery':
250
- componentMapped.props = this.mapGallery(component.props);
251
- break;
252
- case 'nav':
253
- componentMapped.props = this.mapMenu(component.props, addons?.menuSocialMedia);
254
- break;
255
- case 'languagesmodal':
256
- componentMapped.props = this.mapLanguageModal(component.props);
257
- break;
258
- case 'slider3items':
259
- componentMapped.props = this.mapSlider3Items(component.props);
260
- break;
261
- case 'hotelsslider':
262
- componentMapped.props = this.mapHotelsSlider(component.props);
263
- break;
264
- case 'hotelslist':
265
- componentMapped.props = this.mapHotelsList(component.props);
266
- break;
267
- case 'info4img':
268
- componentMapped.props = this.mapInfo4Img(component.props);
269
- break;
270
- case 'servicesslider':
271
- componentMapped.props = this.mapServicesSlider(component.props);
272
- break;
273
- case 'contactaddress':
274
- componentMapped.props = this.mapContactAddress(component.props);
275
- break;
276
- case 'advantages':
277
- componentMapped.props = this.mapAdvantages(component.props);
278
- break;
279
- case 'infobig':
280
- componentMapped.props = this.mapInfoBig(component.props);
281
- break;
282
- case 'infozigzagv2left':
283
- componentMapped.props = this.mapInfoZigZagV2(component.props);
284
- break;
285
- case 'infozigzagv2right':
286
- componentMapped.props = this.mapInfoZigZagV2(component.props);
287
- break;
288
- case 'footercontact':
289
- componentMapped.props = this.mapFooterContact(component.props);
290
- break;
291
- case 'info2imgbig':
292
- componentMapped.props = this.mapInfo2ImgBig(component.props);
293
- break;
294
- case 'footerlinks':
295
- componentMapped.props = this.mapFooterLinks(component.props);
296
- break;
297
- case 'footerlogos':
298
- componentMapped.props = this.mapFooterLogos(component.props);
299
- break;
300
- case 'offerslider':
301
- componentMapped.props = this.mapOfferSlider(component.props);
302
- break;
303
- case 'footersocials':
304
- componentMapped.props = this.mapFooterSocials(component.props);
305
- break;
306
- case 'slider2items':
307
- componentMapped.props = this.mapSlider2items(component.props);
308
- break;
309
- case 'staticfooterv2':
310
- componentMapped.props = this.mapStaticFooterv2(component.props);
311
- break;
312
- case 'listgrid':
313
- componentMapped.props = this.mapListGrid(component.props);
314
- break;
315
- case 'newslettermodal':
316
- componentMapped.props = this.mapNewsletterModal(component.props);
317
- break;
318
- case 'headintro':
319
- componentMapped.props = this.mapHeadIntro(component.props, component);
320
- break;
321
- case 'breadcrumbs':
322
- componentMapped.props = this.mapBreadcrumbs(component.props);
323
- break;
324
- case 'offerbannerv2':
325
- componentMapped.props = this.mapOfferBannerV2(component.props);
326
- break;
327
- case 'globalmodal':
328
- case 'globalmodal2':
329
- componentMapped.props = this.mapGlobalModal(component.props);
330
- break;
331
- case 'menu':
332
- componentMapped.props = this.mapSubmenu(component.props);
333
- break;
334
- case 'spalopia':
335
- componentMapped.props = this.mapExternalScript(component.props);
336
- break;
337
- case 'bloglist':
338
- componentMapped.props = this.mapBlogList(component.props);
339
- break;
340
- case 'blogdetail':
341
- componentMapped.props = this.mapBlogDetail(component.props);
342
- break;
343
- case 'offerbanner':
344
- componentMapped.props = this.mapOfferBanner(component.props);
345
- break;
346
- case 'modalmultiplemotors':
347
- componentMapped.props =
348
- this.mapModalMultipleMotors(component.props);
349
- break;
350
- case 'modalpopup':
351
- componentMapped.props = this.mapModalPopup(component.props);
352
- break;
353
- case 'presslist':
354
- componentMapped.props = this.mapPressList(component.props);
355
- break;
356
- case 'actionbanner':
357
- componentMapped.props = this.mapActionBanner(component.props);
358
- break;
359
- case 'infozigzagcounter':
360
- componentMapped.props =
361
- this.mapInfoZigZagCounter(component.props);
362
- break;
363
- default:
364
- break;
365
- }
366
- }
367
- catch (error) {
368
- console.error(error);
369
- }
370
- }
371
- return componentMapped;
372
- });
373
- return bodyMapped;
374
- }
375
- map404(props) {
376
- return {
377
- title: props.texts?.title,
378
- description: props.texts?.description,
379
- subtitle: props.texts?.subtitle,
380
- button: Utils.mapButtons(props.buttons)?.[0],
381
- };
382
- }
383
- //---- LAYOUT COMPONENTS ----//
384
- mapTopSlider(props) {
385
- return {
386
- buttons: Utils.mapButtons(props?.buttons),
387
- links: Utils.mapButtons(props?.links),
388
- items: props?.multimedia?.imagenes?.map((item) => ({
389
- title: item?.title,
390
- subtitle: item?.pretitle,
391
- img: this.getImageResponsive(item, false),
392
- buttons: Utils.mapButtons(item?.buttons),
393
- links: Utils.mapButtons(item?.links),
394
- })),
395
- itemsMobile: props?.multimedia?.imagenesmobile?.map((item) => ({
396
- title: item?.title,
397
- subtitle: item?.pretitle,
398
- img: this.getImageResponsive(item, false),
399
- buttons: Utils.mapButtons(item?.buttons),
400
- links: Utils.mapButtons(item?.links),
401
- })),
402
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
403
- logoTitle: this.getImageResponsive(props?.multimedia?.logotitle?.[0], false),
404
- videoData: {
405
- // title: props?.video?.title,
406
- src: props?.texts?.video,
407
- type: 'video/mp4',
408
- },
409
- };
410
- }
411
- mapTopSliderVideo(props) {
412
- return {
413
- videoData: {
414
- title: props?.video?.title,
415
- src: props?.video?.src,
416
- type: 'video/mp4',
417
- },
418
- smallVideoData: props?.video?.mobile
419
- ? {
420
- title: props?.video?.title,
421
- src: props?.video?.mobile,
422
- type: 'video/mp4',
423
- }
424
- : undefined,
425
- labelInfos: {
426
- pretitle: typeof props?.texts?.pretitle === 'string'
427
- ? props?.texts?.pretitle
428
- : props?.texts?.pretitle?.contain,
429
- title: typeof props?.texts?.title === 'string'
430
- ? props?.texts?.title
431
- : props?.texts?.title?.contain,
432
- },
433
- tags: {
434
- pretitle: props?.texts?.pretitle?.tag,
435
- title: props?.texts?.title?.tag,
436
- },
437
- img: this.getImageResponsive(props?.multimedia?.imagemobile?.[0], false),
438
- button: Utils.mapButtons(props?.buttons)?.[0],
439
- };
440
- }
441
- mapTopSliderV2(props, rightSide = false) {
442
- return props
443
- ? {
444
- rightSide: rightSide,
445
- buttons: Utils.mapButtons(props?.buttons)?.[0],
446
- items: props?.multimedia?.imagenes?.map((item) => ({
447
- title: item.title,
448
- subtitle: item.pretitle,
449
- img: this.getImageResponsive(item),
450
- })),
451
- labels: {
452
- title: props?.texts?.title,
453
- subtitle: props?.texts?.pretitle,
454
- pretitle: props?.texts?.text,
455
- description: props?.texts?.description,
456
- text: props?.texts?.text,
457
- },
458
- }
459
- : undefined;
460
- }
461
- mapInfoImg(props, rightSide = false, textColor) {
462
- return {
463
- rightSide: rightSide,
464
- title: typeof props?.texts?.title === 'string'
465
- ? props?.texts?.title
466
- : props?.texts?.title?.contain,
467
- pretitle: typeof props?.texts?.pretitle === 'string'
468
- ? props?.texts?.pretitle
469
- : props?.texts?.pretitle?.contain,
470
- buttons: props?.buttons
471
- ? Utils.mapButtons(props?.buttons?.filter((link) => link?.linkValue !== null))
472
- : undefined,
473
- description: typeof props?.texts?.description === 'string'
474
- ? props?.texts?.description
475
- : props?.texts?.description?.contain,
476
- text: typeof props?.texts?.subtitle === 'string'
477
- ? props?.texts?.subtitle
478
- : props?.texts?.subtitle?.contain,
479
- ndtitle: typeof props?.texts?.ndtitle === 'string'
480
- ? props?.texts?.ndtitle
481
- : props?.texts?.ndtitle?.contain,
482
- lessBtn: props?.texts?.seeLess,
483
- moreBtn: props?.texts?.seeMore,
484
- images: this.getArrayImageResponsive(props?.multimedia?.imagenes, false),
485
- advantages: props?.Ventajas?.filter((item) => item?.title || item?.text)?.map((item) => ({
486
- title: item.title,
487
- text: item.text,
488
- icon: item.icon ? `icon-${item.icon}` : undefined,
489
- })),
490
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
491
- advTitle: typeof props?.texts?.text === 'string'
492
- ? props?.texts?.text
493
- : props?.texts?.text?.contain,
494
- topBG: this.getImageResponsive(props?.multimedia?.topbg?.[0], false),
495
- bottomBG: this.getImageResponsive(props?.multimedia?.bottombg?.[0], false),
496
- topColor: props?.texts?.topColor,
497
- bottomColor: props?.texts?.BottomColor,
498
- textColor: textColor,
499
- tags: {
500
- pretitle: props?.texts?.pretitle?.tag,
501
- title: props?.texts?.title?.tag,
502
- text: props?.texts?.subtitle?.tag,
503
- description: props?.texts?.description?.tag,
504
- ndtitle: props?.texts?.ndtitle?.tag,
505
- advTitle: props?.texts?.text?.tag,
506
- },
507
- textColors: {
508
- pretitle: props?.texts?.pretitle?.color?.trim(),
509
- title: props?.texts?.title?.color?.trim(),
510
- text: props?.texts?.subtitle?.color?.trim(),
511
- description: props?.texts?.description?.color?.trim(),
512
- },
513
- };
514
- }
515
- mapInfoImgSlider(props, rightSide = false) {
516
- // TODO: add topBG, bottomBG
517
- return {
518
- rightSide: rightSide,
519
- topColor: props?.texts?.topColor,
520
- bottomColor: props?.texts?.bottomColor,
521
- lessBtn: props?.texts?.seeLess,
522
- moreBtn: props?.texts?.seeMore,
523
- items: props?.multimedia?.imagenes?.map((item) => ({
524
- title: item?.title,
525
- pretitle: item?.pretitle,
526
- subtitle: item?.subtitle,
527
- description: item?.description,
528
- ndtitle: item?.nd_title,
529
- image: this.getImageResponsive(item, false),
530
- buttons: Utils.mapButtons(item?.buttons),
531
- links: Utils.mapButtons(item?.links),
532
- })),
533
- };
534
- }
535
- mapInfoIntro(props) {
536
- return {
537
- title: typeof props?.texts?.title === 'string'
538
- ? props?.texts?.title
539
- : props?.texts?.title?.contain,
540
- pretitle: typeof props?.texts?.pretitle === 'string'
541
- ? props?.texts?.pretitle
542
- : props?.texts?.pretitle?.contain,
543
- description: typeof props?.texts?.description === 'string'
544
- ? props?.texts?.description
545
- : props?.texts?.description?.contain,
546
- button: Utils.mapButtons(props?.buttons)?.[0],
547
- images: this.getArrayImageResponsive(props?.multimedia?.imagenes, false),
548
- topBG: this.getImageResponsive(props?.multimedia?.topbg?.[0], false),
549
- bottomBG: this.getImageResponsive(props?.multimedia?.bottombg?.[0], false),
550
- topColor: props?.texts?.topColor,
551
- bottomColor: props?.texts?.BottomColor,
552
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
553
- logo2: this.getImageResponsive(props?.multimedia?.logo2?.[0], false),
554
- tags: {
555
- pretitle: props?.texts?.pretitle?.tag,
556
- title: props?.texts?.title?.tag,
557
- description: props?.texts?.description?.tag,
558
- },
559
- textColors: {
560
- pretitle: props?.texts?.pretitle?.color?.trim(),
561
- title: props?.texts?.title?.color?.trim(),
562
- description: props?.texts?.description?.color?.trim(),
563
- },
564
- buttonModal: props?.texts?.popupmodal,
565
- };
566
- }
567
- mapHeader(props, menu) {
568
- const link = menu.links?.logoLink?.flat()?.[0];
569
- const headerButtons = props;
570
- if (headerButtons) {
571
- this.floatingButtons = {
572
- texts: [
573
- {
574
- icon: `babylon-${headerButtons.texts?.transferIcon}`,
575
- label: headerButtons?.texts?.transfer,
576
- },
577
- {
578
- icon: `babylon-${headerButtons.texts?.checkinIcon}`,
579
- label: headerButtons?.texts?.checkin,
580
- },
581
- {
582
- icon: `babylon-${headerButtons.texts?.whatsapp}`,
583
- label: headerButtons?.texts?.whatsapp,
584
- },
585
- ],
586
- links: Utils.mapButtons(headerButtons?.links),
587
- };
588
- }
589
- return {
590
- floatingButtons: this.floatingButtons,
591
- lang: this.siteSvc.selectedLanguageInstant?.locate?.toUpperCase(),
592
- btnBook: { label: headerButtons?.texts?.bookNow },
593
- shop: headerButtons?.texts?.shop
594
- ? `icon-${headerButtons?.texts?.shop}`
595
- : undefined,
596
- links: Utils.mapButtons(headerButtons?.links),
597
- linkLogo: {
598
- label: link?.label,
599
- url: link?.linkValue,
600
- linkType: link?.linkType,
601
- },
602
- menu: menu?.nav?.map((menu) => ({
603
- name: menu?.name,
604
- url: menu?.linkValue,
605
- linkType: menu?.linkType,
606
- label: menu?.translations?.[0]?.name
607
- ? menu?.translations?.[0]?.name
608
- : menu?.name,
609
- children: menu?.children?.map((child) => ({
610
- name: child?.name,
611
- url: child?.linkValue,
612
- linkType: child?.linkType,
613
- label: child?.translations?.[0]?.name
614
- ? child?.translations?.[0]?.name
615
- : child?.name,
616
- })),
617
- })),
618
- menuInfo: this.mapMenu(menu, undefined),
619
- };
620
- }
621
- //TODO: Wait for back info
622
- mapMenu(props, socialMedia) {
623
- const links = Utils.mapButtons(props?.nav?.map((link) => ({
624
- ...link,
625
- label: link.translations?.[0]?.name,
626
- })));
627
- const contact = (() => {
628
- const raw = Utils.mapButtons(props?.links?.contact?.[0]); // p.ej. [undefined, undefined]
629
- const links = Array.isArray(raw) ? raw.filter(Boolean) : undefined;
630
- const rawTitle = typeof props?.texts?.contactTitle === 'string'
631
- ? props.texts.contactTitle
632
- : props?.texts?.contactTitle?.contain;
633
- const title = typeof rawTitle === 'string' && rawTitle.trim().length
634
- ? rawTitle.trim()
635
- : undefined;
636
- if (!links?.length && !title)
637
- return undefined;
638
- return {
639
- ...(links?.length ? { links } : {}),
640
- ...(title ? { title } : {}),
641
- };
642
- })();
643
- return {
644
- links: links?.slice(0, 6),
645
- bottomLinks: links?.slice(6),
646
- address: {
647
- address: props?.address?.[0]?.address,
648
- city: props?.address?.[0]?.city,
649
- country: props?.address?.[0]?.country,
650
- cp: props?.address?.[0]?.cp,
651
- title: typeof props?.texts?.addressTitle === 'string'
652
- ? props?.texts?.addressTitle
653
- : props?.texts?.addressTitle?.contain,
654
- province: props?.address?.[0]?.province,
655
- url: props?.address?.[0]?.link,
656
- links: {
657
- url: props?.address?.[0]?.link,
658
- linkType: 'external',
659
- },
660
- },
661
- contact: contact,
662
- socialMedia: socialMedia?.map((item) => ({
663
- icon: `babylon-${item.name?.toLowerCase()}`,
664
- url: item.url,
665
- })),
666
- img: this.getImageResponsive(props?.multimedia?.imagen?.[0], false),
667
- imgBackground: this.getImageResponsive(props?.multimedia?.background?.[0], false),
668
- linkLogo: {
669
- url: props?.links?.logoLink?.[0]?.linkValue,
670
- linkType: props?.links?.logoLink?.[0]?.linkType,
671
- },
672
- tags: {
673
- contactTitle: props?.texts?.contactTitle?.tag,
674
- addressTitle: props?.texts?.addressTitle?.tag,
675
- },
676
- textColors: {
677
- contactTitle: props?.texts?.contactTitle?.color?.trim(),
678
- addressTitle: props?.texts?.addressTitle?.color?.trim(),
679
- },
680
- };
681
- }
682
- mapInfo2img(props, rightSide = false) {
683
- return {
684
- rightSide: rightSide,
685
- tags: {
686
- pretitle: props?.texts?.pretitle?.tag,
687
- title: props?.texts?.title?.tag,
688
- },
689
- texts: {
690
- pretitle: typeof props?.texts?.pretitle === 'string'
691
- ? props?.texts?.pretitle
692
- : props?.texts?.pretitle?.contain,
693
- title: typeof props?.texts?.title === 'string'
694
- ? props?.texts?.title
695
- : props?.texts?.title?.contain,
696
- text: props?.texts?.text,
697
- item1: props?.texts?.item1,
698
- item1Text: props?.texts?.item1Text,
699
- },
700
- button: Utils.mapButtons(props?.buttons),
701
- images: this.getArrayImageResponsive(props?.multimedia?.imagenes, false),
702
- imagessmall: this.getArrayImageResponsive(props?.multimedia?.imagessmall, false),
703
- advantages: props?.Ventajas?.map((item) => ({
704
- title: item.title,
705
- text: item.text,
706
- icon: `icon-${item.icon}`,
707
- })),
708
- };
709
- }
710
- mapInfo2colimg(props, rightSide = false) {
711
- return {
712
- rightSide: rightSide,
713
- text: props?.texts?.text,
714
- pretitle: props?.texts?.pretitle,
715
- subtitle: props?.texts?.subtitle,
716
- title: props?.texts?.title,
717
- smallimage: this.getArrayImageResponsive(props?.multimedia?.smallimage, false),
718
- items: props?.multimedia?.imagenes?.map((item) => ({
719
- title: item?.title,
720
- description: item?.description,
721
- img: this.getImageResponsive(item, false),
722
- buttons: Utils.mapButtons(item?.buttons),
723
- })),
724
- };
725
- }
726
- mapZigzag(props, rightSide = false) {
727
- let images = [];
728
- let texts, tags;
729
- if (props?.multimedia?.imagenes) {
730
- images = this.getArrayImageResponsive(props?.multimedia?.imagenes, false);
731
- texts = {
732
- pretitle: props?.texts?.pretitle?.contain ??
733
- (typeof props?.texts?.pretitle == 'string'
734
- ? props?.texts?.pretitle
735
- : undefined),
736
- title: props?.texts?.title?.contain ??
737
- (typeof props?.texts?.title == 'string'
738
- ? props?.texts?.title
739
- : undefined),
740
- contenttitle: props?.texts?.contenttitle?.contain ??
741
- props?.texts?.contenttitle,
742
- contentsubtitle: props?.texts?.contentsubtitle?.contain ??
743
- props?.texts?.contentsubtitle,
744
- contentdescription: props?.texts?.contentdescription?.contain ??
745
- props?.texts?.contentdescription,
746
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
747
- icons: props?.Ventajas?.filter((item) => item?.title || item?.text)?.map((item) => ({
748
- title: item.title,
749
- text: item.text,
750
- icon: `icon-${item.icon}`,
751
- })),
752
- iconTitle: props?.texts?.icontitle?.contain ?? props?.texts?.icontitle,
753
- };
754
- tags = {
755
- pretitle: props?.texts?.pretitle?.tag,
756
- title: props?.texts?.title?.tag,
757
- contenttitle: props?.texts?.contenttitle?.tag,
758
- contentsubtitle: props?.texts?.contentsubtitle?.tag,
759
- contentdescription: props?.texts?.contentdescription?.tag,
760
- iconTitle: props?.texts?.icontitle?.tag,
761
- };
762
- }
763
- return {
764
- rightSide: rightSide,
765
- buttons: Utils.mapButtons(props?.buttons.filter((btn) => !!btn?.linkValue)),
766
- texts,
767
- images,
768
- tags,
769
- };
770
- }
771
- mapGridGallery(props) {
772
- const isInEnum = (enumObj, value) => Object.values(enumObj).includes(value);
773
- return {
774
- pretitle: props?.texts?.pretitle,
775
- title: props?.texts?.title,
776
- text: props?.texts?.text,
777
- hover: props?.texts?.hover,
778
- placeholder: props?.texts?.placeholder,
779
- button: Utils.mapButtons(props?.buttons),
780
- view: isInEnum(ViewsType, props?.multimedia?.view)
781
- ? props.multimedia?.view
782
- : undefined,
783
- images: this.getArrayImageResponsive(props?.multimedia?.imagenes, false),
784
- };
785
- }
786
- mapInfoGrid(props) {
787
- return {
788
- pretitle: typeof props?.texts?.pretitle === 'string'
789
- ? props?.texts?.pretitle
790
- : props?.texts?.pretitle?.contain,
791
- title: typeof props?.texts?.title === 'string'
792
- ? props?.texts?.title
793
- : props?.texts?.title?.contain,
794
- tags: {
795
- pretitle: props?.texts?.pretitle?.tag,
796
- title: props?.texts?.title?.tag,
797
- },
798
- text: props?.texts?.text,
799
- buttons: Utils.mapButtons(props?.buttons.filter((btn) => !!btn?.linkValue)),
800
- items: props?.multimedia?.imagenes?.map((item) => ({
801
- pretitle: item?.pretitle,
802
- title: item?.title,
803
- text: item?.description,
804
- image: this.getImageResponsive(item, false),
805
- links: item.links
806
- ? Utils.mapButtons(item.links.filter((link) => link?.linkValue !== null))?.[0]
807
- : undefined,
808
- })),
809
- };
810
- }
811
- mapBannerGallery(props) {
812
- return {
813
- pretitle: typeof props?.texts?.pretitle === 'string'
814
- ? props?.texts?.pretitle
815
- : props?.texts?.pretitle?.contain,
816
- title: typeof props?.texts?.title === 'string'
817
- ? props?.texts?.title
818
- : props?.texts?.title?.contain,
819
- tags: {
820
- pretitle: props?.texts?.pretitle?.tag,
821
- title: props?.texts?.title?.tag,
822
- },
823
- hover: props?.texts?.hover,
824
- button: Utils.mapButtons(props?.buttons),
825
- images: this.getArrayImageResponsive(props?.multimedia?.imagenes, false),
826
- };
827
- }
828
- mapBannerNewsletter(props) {
829
- return {
830
- pretitle: props?.texts?.pretitle,
831
- title: props?.texts?.title,
832
- text: props?.texts?.text,
833
- hover: props?.texts?.hover,
834
- placeholder: props?.texts?.placeholder,
835
- button: Utils.mapButtons(props?.buttons),
836
- image: this.getImageResponsive(props?.multimedia?.imagenes?.[0] ??
837
- props?.multimedia?.image?.[0], false),
838
- };
839
- }
840
- mapSliderColl2(props, rightSide = false) {
841
- return props
842
- ? {
843
- rightSide: rightSide,
844
- buttons: Utils.mapButtons(props?.buttons)?.[0],
845
- images: props?.multimedia?.imagenes?.map((item) => ({
846
- pretitle: item.pretitle,
847
- title: item.title,
848
- subtitle: item.subtitle,
849
- image: this.getImageResponsive(item, false),
850
- links: Utils.mapButtons(item?.links),
851
- })),
852
- labels: {
853
- title: typeof props?.texts?.title === 'string'
854
- ? props?.texts?.title
855
- : props?.texts?.title?.contain,
856
- pretitle: typeof props?.texts?.pretitle === 'string'
857
- ? props?.texts?.pretitle
858
- : props?.texts?.pretitle?.contain,
859
- },
860
- tags: {
861
- pretitle: props?.texts?.pretitle?.tag,
862
- title: props?.texts?.title?.tag,
863
- },
864
- }
865
- : undefined;
866
- }
867
- mapSliderColl(props) {
868
- let images = [];
869
- if (props?.multimedia?.imagenes) {
870
- images = props?.multimedia?.imagenes?.map((item) => {
871
- const imageResponse = this.getImageResponsive(item, false);
872
- return {
873
- pretitle: item?.pretitle,
874
- title: item?.title,
875
- subtitle: item?.subtitle,
876
- description: item?.description,
877
- src: typeof imageResponse === 'object'
878
- ? imageResponse.src
879
- : imageResponse,
880
- alt: typeof imageResponse === 'object'
881
- ? imageResponse.alt
882
- : undefined,
883
- buttons: Utils.mapButtons(item?.buttons?.filter((btn) => btn?.linkValue !== null || undefined)),
884
- links: Utils.mapButtons(item?.links?.filter((btn) => btn.linkValue !== null || undefined)),
885
- };
886
- });
887
- }
888
- if (props?.multimedia?.images) {
889
- images = props?.multimedia?.images?.map((item) => {
890
- const imageResponse = this.getImageResponsive(item, false);
891
- return {
892
- pretitle: item?.pretitle,
893
- title: item?.title,
894
- subtitle: item?.subtitle,
895
- description: item?.description,
896
- src: typeof imageResponse === 'object'
897
- ? imageResponse.src
898
- : imageResponse,
899
- alt: typeof imageResponse === 'object'
900
- ? imageResponse.alt
901
- : undefined,
902
- buttons: Utils.mapButtons(item?.buttons?.filter((btn) => btn?.linkValue !== null || undefined)),
903
- links: Utils.mapButtons(item?.buttons?.filter((btn) => btn?.linkValue !== null || undefined)),
904
- };
905
- });
906
- }
907
- return props
908
- ? {
909
- images: images,
910
- labels: {
911
- pretitle: typeof props?.texts?.pretitle === 'string'
912
- ? props?.texts?.pretitle
913
- : props?.texts?.pretitle?.contain,
914
- title: typeof props?.texts?.title === 'string'
915
- ? props?.texts?.title
916
- : props?.texts?.title?.contain,
917
- },
918
- topBG: this.getImageResponsive(props?.multimedia?.topbg?.[0], false),
919
- bottomBG: this.getImageResponsive(props?.multimedia?.bottombg?.[0], false),
920
- topColor: props?.texts?.topColor,
921
- bottomColor: props?.texts?.BottomColor,
922
- tags: {
923
- pretitle: props?.texts?.pretitle?.tag,
924
- title: props?.texts?.title?.tag,
925
- },
926
- }
927
- : undefined;
928
- }
929
- mapItemsGrid(props) {
930
- return props
931
- ? {
932
- images: props?.multimedia?.imagenes?.map((item) => {
933
- const imageResponse = this.getImageResponsive(item, false);
934
- return {
935
- pretitle: item?.pretitle,
936
- title: item?.title,
937
- subtitle: item?.subtitle,
938
- description: item?.description,
939
- src: typeof imageResponse === 'object'
940
- ? imageResponse.src
941
- : imageResponse,
942
- alt: typeof imageResponse === 'object'
943
- ? imageResponse.alt
944
- : undefined,
945
- buttons: Utils.mapButtons(item?.buttons?.filter((btn) => btn?.linkValue !== null)),
946
- links: Utils.mapButtons(item?.links?.filter((btn) => btn.linkValue !== null)),
947
- };
948
- }),
949
- labels: {
950
- title: props?.texts?.title,
951
- pretitle: props?.texts?.pretitle,
952
- },
953
- buttons: Utils.mapButtons(props?.buttons?.filter((btn) => btn?.linkValue !== null)),
954
- }
955
- : undefined;
956
- }
957
- mapRoom(props) {
958
- return {
959
- button: Utils.mapButtons(props?.buttons),
960
- texts: {
961
- pretitle: props?.texts?.pretitle,
962
- title: props?.texts?.title,
963
- },
964
- rooms: props?.rooms?.map((item) => ({
965
- button: Utils.mapButtons(item?.buttons),
966
- links: Utils.mapButtons(item?.links),
967
- images: item.multimedia
968
- ?.filter((img) => img.cover)
969
- ?.map((img) => ({
970
- pretitle: img.pretitle,
971
- title: img.title,
972
- subtitle: img.subtitle,
973
- src: this.getImageResponsive(img),
974
- })),
975
- texts: {
976
- name: item.texts?.name,
977
- description: item.texts?.description,
978
- additional1: item.texts?.additional1,
979
- additional2: item.texts?.additional2,
980
- additional3: item.texts?.additional3,
981
- additional4: item.texts?.additional4,
982
- },
983
- services: item?.services
984
- ?.filter((item) => item?.type
985
- ?.split(',')
986
- .map((v) => v.trim())
987
- .includes(RoomServiceType.characteristics))
988
- ?.map((item) => ({
989
- name: item.name,
990
- icon: `icon-${item.class}`,
991
- })),
992
- })),
993
- };
994
- }
995
- mapRoomsGrid(props) {
996
- let rooms = props?.rooms
997
- ?.map((item) => ({
998
- buttons: Utils.mapButtons(item?.buttons?.filter((btn) => btn?.linkType?.includes('internal'))),
999
- order: item?.order,
1000
- links: Utils.mapButtons(item?.links),
1001
- images: item.multimedia
1002
- ?.filter((img) => img.tags?.some((tag) => tag.name === 'RoomsGrid'))
1003
- ?.map((img) => ({
1004
- pretitle: img.pretitle,
1005
- title: img.title,
1006
- subtitle: img.subtitle,
1007
- src: this.getImageResponsive(img.tags?.some((tag) => tag.name === 'RoomsGrid')
1008
- ? img
1009
- : undefined),
1010
- tag: img.tags?.find((tag) => tag?.filterable)?.name,
1011
- }))
1012
- ?.slice(0, 1),
1013
- texts: {
1014
- name: item.texts?.name,
1015
- description: item.texts?.description,
1016
- additional1: item.texts?.additional1,
1017
- additional2: item.texts?.additional2,
1018
- additional3: item.texts?.additional3,
1019
- additional4: item.texts?.additional4,
1020
- },
1021
- services: item?.services
1022
- ?.filter((item) => item?.type
1023
- ?.split(',')
1024
- .map((v) => v.trim())
1025
- .includes(RoomServiceType.characteristics))
1026
- ?.map((item) => ({
1027
- name: item.name,
1028
- icon: `icon-${item.class}`,
1029
- })),
1030
- }))
1031
- .sort((a, b) => {
1032
- return (a.order ?? 0) - (b.order ?? 0);
1033
- });
1034
- return {
1035
- button: Utils.mapButtons(props?.buttons)?.[0],
1036
- labels: {
1037
- pretitle: typeof props?.texts?.pretitle === 'string'
1038
- ? props?.texts?.pretitle
1039
- : props?.texts?.pretitle?.contain,
1040
- title: typeof props?.texts?.title === 'string'
1041
- ? props?.texts?.title
1042
- : props?.texts?.title?.contain,
1043
- },
1044
- rooms: props?.buttons ? rooms.slice(0, 5) : rooms,
1045
- tags: {
1046
- pretitle: props?.texts?.pretitle?.tag,
1047
- title: props?.texts?.title?.tag,
1048
- },
1049
- };
1050
- }
1051
- mapRoomsSlider(props) {
1052
- return {
1053
- button: Utils.mapButtons(props?.buttons),
1054
- texts: {
1055
- pretitleContain: {
1056
- tag: props?.texts?.pretitle?.tag,
1057
- content: props?.texts?.pretitle?.contain,
1058
- },
1059
- titleContain: {
1060
- tag: props?.texts?.title?.tag,
1061
- content: props?.texts?.title?.contain,
1062
- },
1063
- },
1064
- rooms: props?.rooms
1065
- ?.map((item) => ({
1066
- buttons: Utils.mapButtons(item?.buttons?.slice().reverse()),
1067
- links: Utils.mapButtons(item?.links),
1068
- images: [
1069
- this.getImageResponsive(item?.multimedia?.find((img) => img?.cover) || item?.multimedia?.[0], false),
1070
- ],
1071
- texts: {
1072
- name: item.texts?.name,
1073
- description: item.texts?.description,
1074
- additional1: item.texts?.additional1,
1075
- additional2: item.texts?.additional2,
1076
- additional3: item.texts?.additional3,
1077
- additional4: item.texts?.additional4,
1078
- },
1079
- order: item?.order,
1080
- equipments: item?.services
1081
- ?.filter((svc) => {
1082
- const types = typeof svc.type === 'string'
1083
- ? svc.type
1084
- .split(',')
1085
- .map((t) => t.trim())
1086
- : [];
1087
- const hasCharacteristic = types.includes(RoomServiceType.characteristics);
1088
- const hasClass = !!svc.class &&
1089
- svc.class.toString().trim() !== '';
1090
- return hasCharacteristic && hasClass;
1091
- })
1092
- ?.map((svc) => ({
1093
- name: svc.name,
1094
- icon: `icon-${svc.class}`,
1095
- })) ?? [],
1096
- }))
1097
- .sort((a, b) => {
1098
- return (a.order ?? 0) - (b.order ?? 0);
1099
- }),
1100
- };
1101
- }
1102
- mapOfferSlider(props) {
1103
- return {
1104
- pretitle: props?.texts?.pretitle,
1105
- title: props?.texts?.title,
1106
- backgroundImage: this.getImageResponsive(props?.multimedia?.backgroundimagenes?.[0] ||
1107
- props?.multimedia?.backgroundimage?.[0], false),
1108
- offers: props?.offers?.map((item) => ({
1109
- applicationFrom: item?.applicationFrom,
1110
- applicationTo: item?.applicationTo,
1111
- button: Utils.mapButtons(item?.buttons),
1112
- currency: item?.currency,
1113
- discount: item?.discount,
1114
- price: item?.price,
1115
- links: Utils.mapButtons(item?.links),
1116
- images: this.getImageResponsive(item?.multimedia?.[0], false),
1117
- name: item?.name,
1118
- texts: {
1119
- title: item.texts?.title,
1120
- subtitle: item.texts?.subtitle,
1121
- description: item.texts?.description,
1122
- additional1: item.texts?.additional1,
1123
- additional2: item.texts?.additional2,
1124
- additional3: item.texts?.additional3,
1125
- conditions: item.texts?.conditions,
1126
- url: item.texts?.reservationUrl,
1127
- },
1128
- url: item?.url,
1129
- visibleFrom: item?.visibleFrom,
1130
- visibleTo: item?.visibleTo,
1131
- })),
1132
- };
1133
- }
1134
- //---- LAYOUT COMPONENTS END----//
1135
- mapThanks(props) {
1136
- return {
1137
- title: props.texts?.title,
1138
- description: props.texts?.description,
1139
- pretitle: props.texts?.pretitle,
1140
- button: Utils.mapButtons(props.buttons)?.[0],
1141
- };
1142
- }
1143
- mapContactForm(props, ndProps, ndPropsConsult) {
1144
- return {
1145
- pretitle: typeof props?.texts?.pretitle === 'string'
1146
- ? props?.texts?.pretitle
1147
- : props?.texts?.pretitle?.contain,
1148
- title: typeof props?.texts?.title === 'string'
1149
- ? props?.texts?.title
1150
- : props?.texts?.title?.contain,
1151
- description: typeof props?.texts?.description === 'string'
1152
- ? props?.texts?.description
1153
- : props?.texts?.description?.contain,
1154
- subtitle: typeof props?.texts?.subtitle === 'string'
1155
- ? props?.texts?.subtitle
1156
- : props?.texts?.subtitle?.contain,
1157
- tags: {
1158
- pretitle: props?.texts?.pretitle?.tag,
1159
- title: props?.texts?.title?.tag,
1160
- description: props?.texts?.description?.tag,
1161
- subtitle: props?.texts?.subtitle?.tag,
1162
- },
1163
- button: Utils.mapButtons(props?.buttons)?.[0],
1164
- textarea: {
1165
- id: 'mensaje',
1166
- title: props?.texts?.inputMessage,
1167
- name: Utils.normalizeText(props?.texts?.inputMessage),
1168
- placeholder: props?.texts?.inputMessagePlaceHolder,
1169
- value: '',
1170
- validators: [Validators.required],
1171
- error: props?.texts?.errorRequired,
1172
- },
1173
- conditions: props?.texts?.conditions,
1174
- conditions2: props?.texts?.conditions2,
1175
- dropdown: {
1176
- title: props?.texts?.dropdownTitle,
1177
- options: ndPropsConsult?.map((prop) => ({
1178
- consultTypeId: prop.consult_type_id ?? prop.consultTypeId,
1179
- code: prop.id,
1180
- name: prop.name,
1181
- })),
1182
- placeholder: props?.texts?.dropdownPlaceholder,
1183
- error: props?.texts?.errorRequired,
1184
- },
1185
- hotelDrop: props?.hotels?.length > 1
1186
- ? {
1187
- title: props?.texts?.hotelDropTitle,
1188
- options: props?.hotels?.map((prop) => ({
1189
- code: prop.id,
1190
- name: prop.name,
1191
- })),
1192
- placeholder: props?.texts?.hotelDropPlaceholder,
1193
- error: props?.texts?.errorRequired,
1194
- }
1195
- : undefined,
1196
- image: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1197
- inputs: [
1198
- {
1199
- id: 'nombre',
1200
- title: props?.texts?.inputName,
1201
- name: Utils.normalizeText(props?.texts?.inputName),
1202
- placeholder: props?.texts?.inputNamePlaceHolder,
1203
- value: '',
1204
- type: 'text',
1205
- error: props?.texts?.errorRequired,
1206
- validators: [Validators.required],
1207
- valid: true,
1208
- },
1209
- {
1210
- id: 'surname',
1211
- title: props?.texts?.inputSurnames,
1212
- name: Utils.normalizeText(props?.texts?.inputSurnames),
1213
- placeholder: props?.texts?.inputSurnamesPlaceHolder,
1214
- value: '',
1215
- type: 'text',
1216
- error: props?.texts?.errorRequired,
1217
- validators: [Validators.required],
1218
- valid: true,
1219
- },
1220
- {
1221
- id: 'email',
1222
- title: props?.texts?.inputEmail,
1223
- name: Utils.normalizeText(props?.texts?.inputEmail),
1224
- placeholder: props?.texts?.inputEmailPlaceHolder,
1225
- value: '',
1226
- type: 'text',
1227
- error: props?.texts?.errorEmail,
1228
- validators: [Validators.email, Validators.required],
1229
- valid: true,
1230
- },
1231
- {
1232
- id: 'phone',
1233
- title: props?.texts?.inputPhone,
1234
- name: Utils.normalizeText(props?.texts?.inputPhone),
1235
- placeholder: props?.texts?.inputPhonePlaceHolder,
1236
- value: '',
1237
- type: 'tel',
1238
- error: props?.texts?.errorPhone,
1239
- validators: [Validators.required],
1240
- valid: true,
1241
- },
1242
- ],
1243
- info: {
1244
- address: {
1245
- icon: 'icon-' + ndProps?.texts?.addressIcon,
1246
- title: ndProps?.texts?.addressTitle,
1247
- text: ndProps?.links?.address?.[0]?.[0]?.label,
1248
- },
1249
- email: {
1250
- icon: 'icon-' + ndProps?.texts?.emailIcon,
1251
- title: ndProps?.texts?.emailTitle,
1252
- links: Utils.mapButtons(ndProps?.links?.email?.[0])?.map((btn) => ({
1253
- ...btn,
1254
- url: `mailto:${btn?.url}l`,
1255
- })),
1256
- },
1257
- phone: {
1258
- icon: 'icon-' + ndProps?.texts?.phoneIcon,
1259
- title: ndProps?.texts?.phoneTitle,
1260
- links: Utils.mapButtons(ndProps?.links?.phone?.[0])?.map((btn) => ({
1261
- ...btn,
1262
- url: `phone:${btn?.url}l`,
1263
- })),
1264
- },
1265
- },
1266
- };
1267
- }
1268
- mapContactAddress(props) {
1269
- const addressSource = props?.hotelAddress ?? props?.address?.[0];
1270
- return {
1271
- info: {
1272
- address: {
1273
- icon: 'icon-' + props?.texts?.addressIcon,
1274
- title: typeof props?.texts?.addressTitle === 'string'
1275
- ? props?.texts?.addressTitle
1276
- : props?.texts?.addressTitle?.contain,
1277
- text: [
1278
- addressSource?.address,
1279
- [addressSource?.cp, addressSource?.city]
1280
- .filter(Boolean)
1281
- .join(' '),
1282
- addressSource?.locality,
1283
- [addressSource?.province, addressSource?.country]
1284
- .filter(Boolean)
1285
- .join(', '),
1286
- ]
1287
- .filter(Boolean)
1288
- .map((part, idx, arr) => {
1289
- if (idx === 0)
1290
- return part + '<br>';
1291
- if (idx === 1 && arr[2])
1292
- return part + ', ';
1293
- if (idx === 1)
1294
- return part + '<br>';
1295
- if (idx === 2)
1296
- return part + '<br>';
1297
- return part;
1298
- })
1299
- .join(''),
1300
- links: [
1301
- {
1302
- url: addressSource?.link,
1303
- linkType: 'external',
1304
- label: addressSource?.address,
1305
- },
1306
- ],
1307
- },
1308
- email: {
1309
- icon: 'icon-' + props?.texts?.emailIcon,
1310
- title: typeof props?.texts?.emailTitle === 'string'
1311
- ? props?.texts?.emailTitle
1312
- : props?.texts?.emailTitle?.contain ||
1313
- addressSource?.email,
1314
- links: [
1315
- {
1316
- url: `mailto:${addressSource?.email}`,
1317
- linkType: 'external',
1318
- label: addressSource?.email,
1319
- smallText: addressSource?.email,
1320
- },
1321
- ],
1322
- },
1323
- phone: {
1324
- icon: 'icon-' + props?.texts?.reservationsIcon,
1325
- title: typeof props?.texts?.reservationsTitle === 'string'
1326
- ? props?.texts?.reservationsTitle
1327
- : props?.texts?.reservationsTitle?.contain ||
1328
- addressSource?.phone,
1329
- links: [
1330
- {
1331
- url: `tel:${addressSource?.phone}`,
1332
- linkType: 'external',
1333
- label: addressSource?.phone,
1334
- smallText: addressSource?.phone,
1335
- },
1336
- ],
1337
- },
1338
- },
1339
- };
1340
- }
1341
- mapContactMap(props) {
1342
- return {
1343
- contentUrl: props?.texts?.phoneIcon,
1344
- mapImage: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1345
- button: Utils.mapButtons(props?.buttons)?.[0],
1346
- mapImageMobile: this.getImageResponsive(props?.multimedia?.imagenesmobile?.[0], false),
1347
- };
1348
- }
1349
- mapContactHow(props) {
1350
- return {
1351
- title: props?.texts?.title,
1352
- pretitle: props?.texts?.pretitle,
1353
- items: props?.Ventajas?.map((item) => ({
1354
- title: item.title,
1355
- description: item.text,
1356
- icon: `icon-${item.icon}`,
1357
- })),
1358
- };
1359
- }
1360
- mapWebmap(props) {
1361
- return {
1362
- links: (props?.pages?.map((link) => ({
1363
- label: link.name,
1364
- url: link.url,
1365
- linkType: 'internal',
1366
- }))).filter((link) => link.url?.split('/')[1] ===
1367
- this.siteSvc.selectedLanguageInstant?.locate),
1368
- title: typeof props?.texts?.title === 'string'
1369
- ? props?.texts?.title
1370
- : props?.texts?.title?.contain,
1371
- pretitle: typeof props?.texts?.pretitle === 'string'
1372
- ? props?.texts?.pretitle
1373
- : props?.texts?.pretitle?.contain,
1374
- image: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1375
- tags: {
1376
- pretitle: props?.texts?.pretitle?.tag,
1377
- title: props?.texts?.title?.tag,
1378
- },
1379
- };
1380
- }
1381
- mapLegal(props) {
1382
- return {
1383
- pretitle: typeof props?.texts?.pretitle === 'string'
1384
- ? props?.texts?.pretitle
1385
- : props?.texts?.pretitle?.contain,
1386
- title: typeof props?.texts?.title === 'string'
1387
- ? props?.texts?.title
1388
- : props?.texts?.title?.contain,
1389
- description: typeof props?.texts?.description === 'string'
1390
- ? props?.texts?.description
1391
- : props?.texts?.description?.contain,
1392
- img: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1393
- tags: {
1394
- pretitle: props?.texts?.pretitle?.tag,
1395
- title: props?.texts?.title?.tag,
1396
- description: props?.texts?.description?.tag,
1397
- },
1398
- textColors: {
1399
- pretitle: props?.texts?.pretitle?.color?.trim(),
1400
- title: props?.texts?.title?.color?.trim(),
1401
- description: props?.texts?.description?.color?.trim(),
1402
- },
1403
- };
1404
- }
1405
- mapBreadcrumbs(props) {
1406
- return {
1407
- links: props?.items
1408
- ?.sort((a, b) => a - b)
1409
- ?.map((item) => ({
1410
- label: item?.label,
1411
- linkType: 'internal',
1412
- url: item?.url
1413
- ? item?.url?.charAt(item?.url?.length - 1) ===
1414
- '/'
1415
- ? item?.url?.slice(0, -1)
1416
- : item?.url
1417
- : undefined,
1418
- })),
1419
- };
1420
- }
1421
- mapRoomsCols(props) {
1422
- return {
1423
- filters: props?.filters?.map((filter) => ({
1424
- placeholder: filter.name,
1425
- options: filter?.values?.map((option) => ({
1426
- code: option,
1427
- name: option,
1428
- })),
1429
- title: filter.name,
1430
- smalltitle: filter.smalltitle,
1431
- filterId: filter.filterId,
1432
- })),
1433
- stFilters: undefined,
1434
- ndFilters: undefined,
1435
- pretitle: typeof props?.texts?.pretitle === 'string'
1436
- ? props?.texts?.pretitle
1437
- : props?.texts?.pretitle?.contain,
1438
- title: typeof props?.texts?.title === 'string'
1439
- ? props?.texts?.title
1440
- : props?.texts?.title?.contain,
1441
- tags: {
1442
- pretitle: props?.texts?.pretitle?.tag,
1443
- title: props?.texts?.title?.tag,
1444
- },
1445
- items: props?.rooms
1446
- ?.map((item) => ({
1447
- bedroomFilterId: item?.texts?.beds,
1448
- characteristicsFilterId: 0,
1449
- links: Utils.mapButtons(item.links),
1450
- buttons: Utils.mapButtons(item.buttons),
1451
- title: item.texts?.name,
1452
- pretitle: item.texts?.additional1,
1453
- price: item?.price,
1454
- priceText: item.texts?.additional2,
1455
- order: item?.order,
1456
- equipment: item?.services
1457
- ?.filter((item) => item?.type
1458
- ?.split(',')
1459
- .map((v) => v.trim())
1460
- .includes(RoomServiceType.characteristics))
1461
- ?.map((item) => ({
1462
- icon: `icon-${item.class}`,
1463
- label: item.name,
1464
- })),
1465
- img: this.getImageResponsive(item.multimedia?.find((img) => img.tags?.some((tag) => tag.name === 'RoomsCols')
1466
- ? img
1467
- : undefined) ?? item.multimedia?.[0], false),
1468
- images: this.getArrayImageResponsive(item.multimedia, false),
1469
- }))
1470
- .sort((a, b) => {
1471
- return (a.order ?? 0) - (b.order ?? 0);
1472
- }),
1473
- };
1474
- }
1475
- mapFeaturesSlider(props) {
1476
- return {
1477
- title: typeof props?.texts?.title === 'string'
1478
- ? props?.texts?.title
1479
- : props?.texts?.title?.contain,
1480
- pretitle: typeof props?.texts?.pretitle === 'string'
1481
- ? props?.texts?.pretitle
1482
- : props?.texts?.pretitle?.contain,
1483
- tags: {
1484
- pretitle: props?.texts?.pretitle?.tag,
1485
- title: props?.texts?.title?.tag,
1486
- },
1487
- items: props?.Ventajas?.map((item) => ({
1488
- title: item.title,
1489
- description: item.text,
1490
- icon: `icon-${item.icon}`,
1491
- })),
1492
- button: Utils.mapButtons(props?.buttons)?.[0],
1493
- };
1494
- }
1495
- mapBannerInfo(props) {
1496
- return {
1497
- title: props?.multimedia?.imagenes?.[0]?.title,
1498
- pretitle: props?.multimedia?.imagenes?.[0]?.pretitle,
1499
- description: props?.multimedia?.imagenes?.[0]?.description,
1500
- video: props?.texts?.['Video-link'],
1501
- button: Utils.mapButtons(props?.multimedia?.imagenes?.[0]?.buttons),
1502
- image: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1503
- };
1504
- }
1505
- mapRoomDetail(props) {
1506
- if (!props?.room) {
1507
- return undefined;
1508
- }
1509
- const { texts, multimedia, buttons } = props?.room;
1510
- return {
1511
- title: texts?.name,
1512
- description: texts?.additional4 !== undefined &&
1513
- texts?.additional4 !== null &&
1514
- texts?.additional4 !== ''
1515
- ? texts?.additional4
1516
- : texts?.description,
1517
- pretitle: texts?.additional1,
1518
- equipmentTitle: texts?.additional2,
1519
- button: Utils.mapButtons(buttons)?.[0],
1520
- items: props.room?.services
1521
- ?.filter((item) => item?.type
1522
- ?.split(',')
1523
- .map((v) => v.trim())
1524
- .includes(RoomServiceType.Equipment))
1525
- .map((item) => ({
1526
- title: item?.name,
1527
- icon: `icon-${item?.class}`,
1528
- description: item?.description,
1529
- })),
1530
- showLess: props?.texts?.showLess,
1531
- showMore: props?.texts?.showMore,
1532
- };
1533
- }
1534
- mapTopSliderThumbs(props) {
1535
- return {
1536
- title: props?.texts?.title,
1537
- from: props?.texts?.from,
1538
- price: props?.texts?.price,
1539
- currency: props?.texts?.currency,
1540
- button: Utils.mapButtons(props.buttons)?.[0],
1541
- image: props?.multimedia?.imagen?.map((item) => ({
1542
- src: this.getImageResponsive(item),
1543
- })),
1544
- };
1545
- }
1546
- mapRoomsList(props) {
1547
- return {
1548
- stFilters: undefined,
1549
- ndFilters: undefined,
1550
- title: props?.texts?.title,
1551
- pretitle: props?.texts?.pretitle,
1552
- items: props?.rooms
1553
- ?.map((item) => ({
1554
- bedroomFilterId: 0,
1555
- characteristicsFilterId: 0,
1556
- links: Utils.mapButtons(item?.links),
1557
- buttons: Utils.mapButtons(item?.buttons?.slice().reverse()),
1558
- title: item?.texts?.name,
1559
- pretitle: item?.texts?.additional1,
1560
- description: item?.texts?.description,
1561
- price: item?.price,
1562
- priceText: item?.texts?.additional2,
1563
- equipment: item?.services
1564
- ?.filter((item) => item?.type
1565
- ?.split(',')
1566
- .map((v) => v.trim())
1567
- .includes(RoomServiceType.characteristics))
1568
- ?.map((item) => ({
1569
- icon: `icon-${item.class}`,
1570
- label: item.name,
1571
- })),
1572
- img: this.getImageResponsive(item.multimedia?.find((img) => img?.cover) || item?.multimedia?.[0], false),
1573
- images: this.getArrayImageResponsive(item.multimedia, false),
1574
- order: item?.order,
1575
- }))
1576
- .sort((a, b) => {
1577
- return (a.order ?? 0) - (b.order ?? 0);
1578
- }),
1579
- };
1580
- }
1581
- mapComingSoon(props) {
1582
- return {
1583
- images: props?.multimedia?.imagenes?.map((img) => ({
1584
- src: this.getImageResponsive(img),
1585
- })),
1586
- logo: props?.multimedia?.logo?.map((img) => ({
1587
- src: this.getImageResponsive(img),
1588
- }))[0],
1589
- texts: props?.texts,
1590
- socialMedia: props?.socialMedia,
1591
- link: Utils.mapButtons(props?.links)?.[0],
1592
- button: Utils.mapButtons(props?.buttons)?.[0],
1593
- };
1594
- }
1595
- mapOfferDetail(props) {
1596
- return {
1597
- pretitle: props?.offer?.[0]?.texts?.subtitle,
1598
- title: props?.offer?.[0]?.texts?.title,
1599
- description: props?.offer?.[0]?.texts?.description,
1600
- ndTitle: props?.offer?.[0]?.texts?.additional1,
1601
- labelDiscount: props?.offer?.[0]?.texts?.additional2,
1602
- labelFrom: props?.offer?.[0]?.texts?.additional3,
1603
- currency: props?.offer?.[0]?.currency,
1604
- price: props?.offer?.[0]?.price,
1605
- discount: props?.offer?.[0]?.discount,
1606
- conditions: props?.offer?.[0]?.texts?.conditions,
1607
- image: this.getImageResponsive(props?.offer?.[0]?.multimedia?.[0], false),
1608
- link: Utils.mapButtons(props?.links)?.[0],
1609
- button: Utils.mapButtons(props?.offer?.[0]?.buttons)?.[0],
1610
- };
1611
- }
1612
- mapOffersList(props) {
1613
- return {
1614
- title: typeof props?.texts?.title === 'string'
1615
- ? props?.texts?.title
1616
- : props?.texts?.title?.contain,
1617
- pretitle: typeof props?.texts?.pretitle === 'string'
1618
- ? props?.texts?.pretitle
1619
- : props?.texts?.pretitle?.contain,
1620
- items: props?.offers?.map((item) => ({
1621
- id: item?.id,
1622
- pretitle: item?.texts?.subtitle,
1623
- title: item?.texts?.title,
1624
- price: item?.price,
1625
- currency: item?.currency,
1626
- discount: item?.discount,
1627
- img: {
1628
- src: this.getImageResponsive(item?.multimedia?.[0]),
1629
- alt: item?.multimedia?.[0]?.alt,
1630
- },
1631
- reserveButton: Utils.mapButtons(item?.buttons)?.[0],
1632
- seeOfferButton: Utils.mapButtons(item?.links)?.[0],
1633
- labelFrom: item?.texts?.additional3,
1634
- labelDiscount: item?.texts?.additional2,
1635
- home: item?.sites?.[0]?.home,
1636
- popup: item?.sites?.[0]?.popup,
1637
- })),
1638
- placeholderImg: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1639
- button: Utils.mapButtons(props?.buttons)?.[0],
1640
- tags: {
1641
- pretitle: props?.texts?.pretitle?.tag,
1642
- title: props?.texts?.title?.tag,
1643
- },
1644
- textColors: {
1645
- pretitle: props?.texts?.pretitle?.color?.trim(),
1646
- title: props?.texts?.title?.color?.trim(),
1647
- },
1648
- };
1649
- }
1650
- mapFaq(props) {
1651
- return {
1652
- pretitle: typeof props?.texts?.pretitle === 'string'
1653
- ? props?.texts?.pretitle
1654
- : props?.texts?.pretitle?.contain,
1655
- title: typeof props?.texts?.title === 'string'
1656
- ? props?.texts?.title
1657
- : props?.texts?.title?.contain,
1658
- tags: {
1659
- pretitle: props?.texts?.pretitle?.tag,
1660
- title: props?.texts?.title?.tag,
1661
- },
1662
- items: props?.locationHow
1663
- ? props?.locationHow?.items?.map((faq) => ({
1664
- label: faq.title,
1665
- description: faq.description,
1666
- }))
1667
- : props?.items?.map((faq) => ({
1668
- label: faq.title,
1669
- description: faq.text,
1670
- })),
1671
- img: props?.locationMap
1672
- ? this.getImageResponsive(props?.locationMap?.multimedia?.imagenes?.[0], false)
1673
- : this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1674
- };
1675
- }
1676
- mapStaticFooter(props) {
1677
- return {
1678
- title: typeof props?.texts?.title === 'string'
1679
- ? props?.texts?.title
1680
- : props?.texts?.title?.contain,
1681
- ndTitle: typeof props?.texts?.addressTitle === 'string'
1682
- ? props?.texts?.addressTitle
1683
- : props?.texts?.addressTitle?.contain,
1684
- rdTitle: typeof props?.texts?.linksTitle === 'string'
1685
- ? props?.texts?.linksTitle
1686
- : props?.texts?.linksTitle?.contain,
1687
- thTitle: typeof props?.texts?.locationTitle === 'string'
1688
- ? props?.texts?.locationTitle
1689
- : (props?.texts?.locationTitle?.contain ??
1690
- (typeof props?.texts?.newsletterTitle === 'string'
1691
- ? props?.texts?.newsletterTitle
1692
- : props?.texts?.newsletterTitle?.contain)),
1693
- fifthTitle: typeof props?.texts?.additionalFooterTitle === 'string'
1694
- ? props?.texts?.additionalFooterTitle
1695
- : props?.texts?.additionalFooterTitle?.contain,
1696
- tags: {
1697
- title: props?.texts?.title?.tag,
1698
- ndtitle: props?.texts?.addressTitle?.tag,
1699
- rdtitle: props?.texts?.linksTitle?.tag,
1700
- thtitle: props?.texts?.locationTitle?.tag ??
1701
- props?.texts?.newsletterTitle?.tag,
1702
- fifthtitle: props?.texts?.additionalFooterTitle?.tag,
1703
- copyright: props?.texts?.copyright?.tag,
1704
- },
1705
- frameUrl: !!props?.texts?.frameUrl
1706
- ? props.texts.frameUrl
1707
- : undefined,
1708
- contactInfo: Utils.mapButtons(props?.links?.contact?.[0]),
1709
- contactLinks: Utils.mapButtons(props?.links?.contactLinks?.[0]),
1710
- footerLinks: Utils.mapButtons(props?.links?.footerLinks?.[0]),
1711
- address: Array.isArray(props?.address)
1712
- ? props.address.map((address) => ({
1713
- id: address.id,
1714
- name: address.name,
1715
- address: address.address,
1716
- city: address.city,
1717
- province: address.province,
1718
- country: address.country,
1719
- cp: address.cp,
1720
- url: address.link,
1721
- full_address: address.fullAddress,
1722
- }))
1723
- : [],
1724
- addressHotels: Array.isArray(props?.addressHotels)
1725
- ? props.addressHotels.map((address) => ({
1726
- id: address.id,
1727
- name: address.name,
1728
- address: address.address,
1729
- city: address.city,
1730
- province: address.province,
1731
- country: address.country,
1732
- cp: address.cp,
1733
- url: address.link,
1734
- phone: address.phone,
1735
- email: address.email,
1736
- full_address: address.fullAddress,
1737
- }))
1738
- : undefined,
1739
- socialMedia: props?.socialMedia?.map((link) => ({
1740
- icon: `babylon-${link.name?.toLowerCase()}`,
1741
- url: link.url,
1742
- })),
1743
- copyright: typeof props?.texts?.copyright === 'string'
1744
- ? props?.texts?.copyright
1745
- : props?.texts?.copyright?.contain,
1746
- nav: props?.nav?.map((nav) => ({
1747
- label: nav.name,
1748
- url: nav.url,
1749
- })),
1750
- img: {
1751
- src: this.getImageResponsive(props?.multimedia?.background?.[0]),
1752
- alt: props?.multimedia?.background?.title,
1753
- },
1754
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
1755
- // input: props?.texts?.newsletterDescription,
1756
- input: {
1757
- name: 'newsletter',
1758
- placeholder: props?.texts?.inputHolder,
1759
- valid: true,
1760
- value: '',
1761
- error: props?.texts?.newsErrorEmail,
1762
- },
1763
- legalAdvise: props?.texts?.subscriber,
1764
- additionalLinks: Utils.mapButtons(props?.links?.additionalFooterLinks?.[0]),
1765
- };
1766
- }
1767
- mapGallery(props) {
1768
- return {
1769
- pretitle: typeof props?.texts?.pretitle === 'string'
1770
- ? props?.texts?.pretitle
1771
- : props?.texts?.pretitle?.contain,
1772
- title: typeof props?.texts?.title === 'string'
1773
- ? props?.texts?.title
1774
- : props?.texts?.title?.contain,
1775
- tags: {
1776
- pretitle: props?.texts?.pretitle?.tag,
1777
- title: props?.texts?.title?.tag,
1778
- },
1779
- roomsBtn: {
1780
- label: props?.texts?.filterRooms,
1781
- },
1782
- filtersBtn: {
1783
- label: props?.texts?.filterCategories,
1784
- },
1785
- filters: props.filters?.map((item, index) => ({
1786
- id: index,
1787
- all: item.all,
1788
- room: item.room,
1789
- rooms: item.rooms,
1790
- text: item.name,
1791
- })),
1792
- images: props?.filters
1793
- ?.reduce((acc, filter, filterIndex) => {
1794
- if (filter.multimedia) {
1795
- const multimediaWithFilter = filter.multimedia.map((item) => ({
1796
- ...item,
1797
- filter: filterIndex,
1798
- }));
1799
- return [
1800
- ...acc,
1801
- {
1802
- multimedia: multimediaWithFilter,
1803
- filterIndex,
1804
- },
1805
- ];
1806
- }
1807
- return acc;
1808
- }, [])
1809
- .flatMap(({ multimedia }) => multimedia)
1810
- .map((img) => ({
1811
- title: img.title,
1812
- img: this.getImageResponsive(img, false),
1813
- filter: img?.filter,
1814
- })),
1815
- };
1816
- }
1817
- mapLanguageModal(props) {
1818
- return {
1819
- title: props?.texts?.title,
1820
- subtitle: props?.texts?.subtitle,
1821
- items: props?.languages,
1822
- selected: props.languages.find((lng) => lng.id === this.siteSvc.selectedLanguageInstant?.id),
1823
- };
1824
- }
1825
- mapEngine(props) {
1826
- return {
1827
- onlyAdults: props?.onlyAdults,
1828
- defaultButton: props?.defaultInternalButton,
1829
- button: { label: props?.texts?.motorSubmit, url: props?.url },
1830
- datepickerData: {
1831
- placeholder: props?.texts?.motorDateTitle,
1832
- },
1833
- guestsInput: {
1834
- placeholder: props?.texts?.motorGuestsInputHolder,
1835
- },
1836
- promoInput: {
1837
- placeholder: props?.texts?.motorPromoHolder,
1838
- },
1839
- guests: {
1840
- btn: { label: props?.texts?.motorApply },
1841
- adultsDropdown: {
1842
- title: props?.texts?.motorAdultsTitle,
1843
- options: this.generateAgesOptions(props?.maxAdults, 1),
1844
- },
1845
- kidsDropdown: {
1846
- title: props?.texts?.motorKidsTitle,
1847
- smallTitle: props?.texts?.motorKidsSmallLabel,
1848
- options: this.generateAgesOptions(props?.maxChildren),
1849
- },
1850
- babiesDropdown: props?.maxBabies > 0
1851
- ? {
1852
- title: props?.texts?.motorBabiesTitle,
1853
- smallTitle: props?.texts?.motorBabiesSmallTitle,
1854
- options: this.generateAgesOptions(props?.maxBabies),
1855
- }
1856
- : undefined,
1857
- agesDropdown: {
1858
- options: this.generateAgesOptions(props?.maxAgeChildren, props?.maxAgeBabies + 1),
1859
- },
1860
- agesLabel: props?.texts?.motorAgesTitle,
1861
- kidsLabel: props?.texts?.motorKidLabel,
1862
- },
1863
- title: props?.texts?.motorTitle,
1864
- subtitle: props?.texts?.motorSubtitle,
1865
- url: props?.url,
1866
- hotel: props?.hotels?.[0],
1867
- codigo: props?.codigo ? props?.codigo : 'demo_c2t_clientes',
1868
- glValue: props?.glValue,
1869
- hotelsInput: props?.texts?.motorDropDownName,
1870
- hotelsPlaceholder: props?.texts?.motorDropDownHolder,
1871
- hotels: {
1872
- options: props?.hotels?.map((hotel) => ({
1873
- name: hotel?.name,
1874
- ticker: hotel?.ticker,
1875
- url: hotel?.url,
1876
- id: hotel?.id,
1877
- })),
1878
- },
1879
- };
1880
- }
1881
- mapSlider3Items(props) {
1882
- return {
1883
- title: props?.texts?.title,
1884
- pretitle: props?.texts?.pretitle,
1885
- items: props?.multimedia?.imagenes?.map((item) => ({
1886
- pretitle: item.pretitle,
1887
- title: item.title,
1888
- img: this.getImageResponsive(item, false),
1889
- link: Utils.mapButtons(item?.links)?.[0],
1890
- })),
1891
- };
1892
- }
1893
- mapHotelsSlider(props) {
1894
- return {
1895
- title: props?.texts?.title,
1896
- subtitle: props?.texts?.pretitle,
1897
- hotels: props?.hotels?.map((item) => ({
1898
- pretitle: item.texts.additional1,
1899
- title: item.texts.name,
1900
- img: {
1901
- src: this.getImageResponsive(item.multimedia?.[0]),
1902
- alt: item.multimedia?.[0]?.alt,
1903
- },
1904
- link: Utils.mapButtons(item.links),
1905
- button: Utils.mapButtons(item.buttons),
1906
- })),
1907
- };
1908
- }
1909
- mapHotelsList(props) {
1910
- // TODO: Revisar mappeo de imágenes
1911
- return {
1912
- title: props?.texts?.title,
1913
- pretitle: props?.texts?.pretitle,
1914
- hotels: props?.hotels?.map((item) => ({
1915
- pretitle: item?.texts?.additional1,
1916
- title: item?.texts?.name,
1917
- text: item?.texts?.description,
1918
- textMore: item?.texts?.additional2,
1919
- img: {
1920
- src: this.getImageResponsive(item?.multimedia?.[0]),
1921
- alt: item?.multimedia?.[0]?.alt,
1922
- },
1923
- link: Utils.mapButtons(item?.links),
1924
- button: Utils.mapButtons(item?.buttons),
1925
- price: item?.price,
1926
- fTitle: props?.texts?.footerTitle,
1927
- fSubtitle: props?.texts?.footerPretitle,
1928
- services: item?.servicesList?.map((item) => ({
1929
- name: item?.name,
1930
- icon: `icon-${item?.class}`,
1931
- })),
1932
- btnLess: item?.texts?.additional3,
1933
- btnMore: item?.texts?.additional4,
1934
- })),
1935
- };
1936
- }
1937
- mapInfo4Img(props) {
1938
- return {
1939
- pretitle: props?.texts?.pretitle,
1940
- title: props?.texts?.title,
1941
- text: props?.texts?.description,
1942
- button: Utils.mapButtons(props?.buttons)?.[0],
1943
- image1: this.getImageResponsive(props?.multimedia?.imagenes[0], false),
1944
- image2: this.getImageResponsive(props?.multimedia?.imagenes[1], false),
1945
- image3: this.getImageResponsive(props?.multimedia?.imagenes[2], false),
1946
- image4: this.getImageResponsive(props?.multimedia?.imagenes[3], false),
1947
- };
1948
- }
1949
- mapServicesSlider(props) {
1950
- const advent = props?.servicesService ?? props?.Ventajas;
1951
- return {
1952
- pretitle: typeof props?.texts?.pretitle === 'string'
1953
- ? props?.texts?.pretitle
1954
- : props?.texts?.pretitle?.contain,
1955
- title: typeof props?.texts?.title === 'string'
1956
- ? props?.texts?.title
1957
- : props?.texts?.title?.contain,
1958
- tags: {
1959
- pretitle: props?.texts?.pretitle?.tag,
1960
- title: props?.texts?.title?.tag,
1961
- },
1962
- advantages: advent?.map((item) => ({
1963
- title: item.name ?? item.title,
1964
- text: item.text,
1965
- icon: `icon-${item.class ?? item.icon}`,
1966
- })),
1967
- };
1968
- }
1969
- mapAdvantages(props) {
1970
- return {
1971
- title: typeof props?.texts?.title === 'string'
1972
- ? props?.texts?.title
1973
- : props?.texts?.title?.contain,
1974
- advantages: props?.Ventajas?.map((item) => ({
1975
- title: item.title,
1976
- icon: `icon-${item.icon}`,
1977
- text: item.text,
1978
- })),
1979
- tags: {
1980
- title: props?.texts?.title?.tag,
1981
- },
1982
- textColors: {
1983
- title: props?.texts?.title?.color?.trim(),
1984
- },
1985
- seeMore: props?.texts?.advantagesseemore,
1986
- seeLess: props?.texts?.advantagesseeless,
1987
- image: this.getImageResponsive(props?.multimedia?.advantagesimage?.[0], false),
1988
- };
1989
- }
1990
- mapInfoBig(props) {
1991
- return {
1992
- pretitle: props?.multimedia?.imagenes?.[0]?.pretitle,
1993
- title: props?.multimedia?.imagenes?.[0]?.title,
1994
- text: props?.multimedia?.imagenes?.[0]?.description,
1995
- button: Utils.mapButtons(props?.multimedia?.imagenes?.[0]?.buttons)?.[0],
1996
- img: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
1997
- imgSmall: this.getImageResponsive(props?.multimedia?.imagenes?.[1] ??
1998
- props?.multimedia?.ndimage?.[0], false),
1999
- };
2000
- }
2001
- mapInfoZigZagV2(props) {
2002
- const [image] = props?.multimedia?.image || props?.multimedia?.imagenes || [];
2003
- const [image2] = props?.multimedia?.image2 || props?.multimedia?.imagessmall || [];
2004
- return {
2005
- items: [
2006
- {
2007
- buttons: Utils.mapButtons(image?.buttons),
2008
- features: undefined,
2009
- image: this.getImageResponsive(image, false),
2010
- pretitle: image?.pretitle,
2011
- title: image?.title,
2012
- text: image?.description,
2013
- },
2014
- {
2015
- buttons: Utils.mapButtons(image2?.buttons),
2016
- image: this.getImageResponsive(image2, false),
2017
- pretitle: image2?.pretitle,
2018
- title: image2?.title,
2019
- text: image2?.description,
2020
- features: props?.Ventajas?.map((item) => ({
2021
- title: item.title,
2022
- text: item.text,
2023
- icon: `icon-${item.icon}`,
2024
- })),
2025
- },
2026
- ],
2027
- };
2028
- }
2029
- mapFooterContact(props) {
2030
- return {
2031
- title: props?.texts?.title,
2032
- text: props?.texts?.text,
2033
- extraTxt: props?.texts?.additionalText1,
2034
- button: Utils.mapButtons(props?.buttons)?.[0],
2035
- img: {
2036
- src: this.getImageResponsive(props?.multimedia?.imagenes?.[0]),
2037
- alt: props?.multimedia?.imagenes?.[0]?.alt,
2038
- },
2039
- advantages: props?.Ventajas?.map((item) => ({
2040
- title: item.title,
2041
- text: item.text,
2042
- icon: `icon-${item.icon}`,
2043
- })),
2044
- links: Utils.mapButtons(props?.links?.contactLinks?.[0]),
2045
- address: {
2046
- locality: props?.hotelAddress?.locality,
2047
- city: props?.hotelAddress?.city,
2048
- province: props?.hotelAddress?.province,
2049
- country: props?.hotelAddress?.country,
2050
- cp: props?.hotelAddress?.cp,
2051
- address: props?.hotelAddress?.address,
2052
- lat: props?.hotelAddress?.lat,
2053
- lon: props?.hotelAddress?.lon,
2054
- phone: props?.hotelAddress?.phone,
2055
- email: props?.hotelAddress?.email,
2056
- },
2057
- };
2058
- }
2059
- mapInfo2ImgBig(props) {
2060
- return {
2061
- pretitle: typeof props?.texts?.pretitle === 'string'
2062
- ? props?.texts?.pretitle
2063
- : props?.texts?.pretitle?.contain,
2064
- title: typeof props?.texts?.title === 'string'
2065
- ? props?.texts?.title
2066
- : props?.texts?.title?.contain,
2067
- tags: {
2068
- pretitle: props?.texts?.pretitle?.tag,
2069
- title: props?.texts?.title?.tag,
2070
- },
2071
- text: props?.texts?.description,
2072
- pretitle2: props?.texts?.ndPretitle,
2073
- title2: props?.texts?.ndTitle,
2074
- text2: props?.texts?.ndDescription,
2075
- button: Utils.mapButtons(props?.buttons)?.[0],
2076
- button2: Utils.mapButtons(props?.buttons)?.[1],
2077
- img: {
2078
- src: this.getImageResponsive(props?.multimedia?.imagenes?.[0] ??
2079
- props?.multimedia?.image?.[0]),
2080
- alt: props?.multimedia?.imagenes?.[0]?.alt ??
2081
- props?.multimedia?.image?.[0].alt,
2082
- },
2083
- imgSmall: {
2084
- src: this.getImageResponsive(props?.multimedia?.ndimagenes?.[0] ??
2085
- props?.multimedia?.ndimage?.[0]),
2086
- alt: props?.multimedia?.ndimagenes?.[0]?.alt,
2087
- },
2088
- };
2089
- }
2090
- mapFooterLogos(props) {
2091
- return {
2092
- texts: props?.texts,
2093
- buttons: Utils.mapButtons(props?.buttons),
2094
- logos: props?.multimedia?.logos?.map((logo) => ({
2095
- img: this.getImageResponsive(logo, false),
2096
- link: Utils.mapButtons(logo?.links?.[0]),
2097
- })),
2098
- };
2099
- }
2100
- mapFooterLinks(props) {
2101
- return {
2102
- copyright: props?.texts?.copyright,
2103
- year: props?.texts?.year,
2104
- buttons: Utils.mapButtons(props?.buttons),
2105
- };
2106
- }
2107
- mapFooterSocials(props) {
2108
- const filteredLinks = (props?.socialMedia || []).filter((link) => link !== null &&
2109
- link !== undefined &&
2110
- link.url !== '' &&
2111
- link.icon !== '');
2112
- return {
2113
- title: props?.texts?.title,
2114
- text: props?.texts?.text,
2115
- links: filteredLinks.map((link) => ({
2116
- icon: `babylon-${link.name?.toLowerCase()}`,
2117
- url: link.url,
2118
- label: link.name,
2119
- })),
2120
- };
2121
- }
2122
- mapSlider2items(props) {
2123
- return {
2124
- title: props?.texts?.title,
2125
- text: props?.texts?.text,
2126
- items: props?.rooms?.map((item) => ({
2127
- pretitle: item?.texts?.description,
2128
- title: item?.texts?.name,
2129
- img: {
2130
- src: this.getImageResponsive(item?.multimedia?.[0]),
2131
- alt: item?.multimedia?.[0]?.alt,
2132
- },
2133
- // link:
2134
- buttons: Utils.mapButtons(item?.buttons),
2135
- services: item?.services?.map((item) => ({
2136
- name: item.name,
2137
- icon: `icon-${item.class}`,
2138
- })),
2139
- })),
2140
- };
2141
- }
2142
- mapStaticFooterv2(props) {
2143
- return {
2144
- title: props?.texts?.title,
2145
- ndTitle: props?.texts?.addressTitle,
2146
- rdTitle: props?.texts?.linksTitle,
2147
- thTitle: props?.texts?.locationTitle,
2148
- frameUrl: props?.texts?.frameUrl,
2149
- imgUrl: props?.multimedia?.footerimg?.[0]?.links?.[0]?.linkValue,
2150
- contactInfo: Utils.mapButtons(props?.links?.contact?.[0]),
2151
- contactLinks: Utils.mapButtons(props?.links?.contactLinks?.[0]),
2152
- footerLinks: Utils.mapButtons(props?.links?.footerLinks?.[0]),
2153
- address: Array.isArray(props?.address)
2154
- ? props.address.map((address) => ({
2155
- id: address?.id,
2156
- name: address?.name,
2157
- address: address?.address,
2158
- city: address?.city,
2159
- province: address?.province,
2160
- country: address?.country,
2161
- cp: address?.cp,
2162
- }))
2163
- : [],
2164
- socialMedia: [
2165
- {
2166
- url: props?.socialMedia?.[0]?.url,
2167
- label: props?.texts?.instagramTitle,
2168
- },
2169
- ],
2170
- copyright: props?.texts?.copyright,
2171
- nav: props?.nav?.map((nav) => ({
2172
- label: nav?.name,
2173
- url: nav?.url,
2174
- })),
2175
- img: this.getImageResponsive(props?.multimedia?.footerimg?.[0], false),
2176
- };
2177
- }
2178
- mapListGrid(props) {
2179
- const { imagenes } = props?.multimedia || [];
2180
- return {
2181
- button: Utils.mapButtons(props?.buttons)?.[0],
2182
- labels: {
2183
- pretitle: props?.texts?.pretitle,
2184
- title: props?.texts?.title,
2185
- },
2186
- items: imagenes?.map((item) => ({
2187
- button: Utils.mapButtons(item?.buttons),
2188
- links: Utils.mapButtons(item?.links),
2189
- image: this.getImageResponsive(item),
2190
- title: item.title,
2191
- subtitle: item.subtitle,
2192
- services: [], //TODO: pte back,
2193
- })),
2194
- };
2195
- }
2196
- mapNewsletterModal(props) {
2197
- return {
2198
- conditions: props?.texts?.conditions,
2199
- title: props?.texts?.title,
2200
- subtitle: props?.texts?.subtitle,
2201
- button: Utils.mapButtons(props?.buttons)?.[0],
2202
- input: {
2203
- name: 'mail',
2204
- placeholder: props?.texts?.inputHolder,
2205
- valid: true,
2206
- value: '',
2207
- error: props?.texts?.newsErrorEmail,
2208
- },
2209
- img: this.getImageResponsive(props?.multimedia?.imagebackground?.[0], false),
2210
- };
2211
- }
2212
- mapGlobalModal(props) {
2213
- return {
2214
- title: props?.texts?.title,
2215
- subtitle: props?.texts?.subtitle,
2216
- description: props?.texts?.description,
2217
- buttons: Utils.mapButtons(props?.buttons.filter((btn) => !!btn?.linkValue)),
2218
- image: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
2219
- iframe: props?.texts?.iframe,
2220
- // img: this.getImageResponsive(props?.multimedia?.imagenes?.[0]),
2221
- };
2222
- }
2223
- mapOfferBannerV2(props) {
2224
- let offerData;
2225
- if (props.offers?.length > 0) {
2226
- const offer = props.offers?.[0];
2227
- offerData = {
2228
- texts: {
2229
- title: offer?.texts?.title,
2230
- subtitle: offer?.texts?.subtitle,
2231
- description: offer?.texts?.description,
2232
- additional1: offer?.texts?.additional1,
2233
- additional2: offer?.texts?.additional2,
2234
- additional3: offer?.texts?.additional3,
2235
- additional4: offer?.texts?.additional4,
2236
- },
2237
- button: Utils.mapButtons(offer?.buttons)?.[0],
2238
- image: this.getImageResponsive(offer?.multimedia?.length > 1
2239
- ? (offer?.multimedia?.find((img) => img.cover) ??
2240
- offer?.multimedia?.[0])
2241
- : (offer?.multimedia?.[0] ??
2242
- props?.multimedia?.defaultimagenes?.[0]), false),
2243
- discount: offer?.discount,
2244
- price: offer?.price,
2245
- currency: offer?.currency,
2246
- };
2247
- }
2248
- return offerData ?? offerData;
2249
- }
2250
- mapHeadIntro(props, component) {
2251
- return {
2252
- pretitle: typeof props?.texts?.pretitle === 'string'
2253
- ? props?.texts?.pretitle
2254
- : props?.texts?.pretitle?.contain,
2255
- title: typeof props?.texts?.title === 'string'
2256
- ? props?.texts?.title
2257
- : props?.texts?.title?.contain,
2258
- text: typeof props?.texts?.text === 'string'
2259
- ? props?.texts?.text
2260
- : props?.texts?.text?.contain,
2261
- buttons: Utils.mapButtons(props?.buttons?.filter((btn) => btn?.linkValue !== null)),
2262
- tags: {
2263
- pretitle: props?.texts?.pretitle?.tag,
2264
- title: props?.texts?.title?.tag,
2265
- text: props?.texts?.text?.tag,
2266
- },
2267
- textColors: {
2268
- pretitle: props?.texts?.pretitle?.color?.trim() ??
2269
- component?.textcolor,
2270
- title: props?.texts?.title?.color?.trim() ?? component?.textcolor,
2271
- categoriesTitle: props?.texts?.categories?.color?.trim() ??
2272
- component?.textcolor,
2273
- latestPostsTitle: props?.texts?.latestEntries?.color?.trim() ??
2274
- component?.textcolor,
2275
- },
2276
- };
2277
- }
2278
- mapExternalScript(props) {
2279
- return {
2280
- script: props?.texts?.Container,
2281
- msg_loading: props?.texts?.loading ?? 'Cargando...',
2282
- };
2283
- }
2284
- mapBlogList(props) {
2285
- let posts = props?.blog?.posts?.map((post) => ({
2286
- id: post?.id,
2287
- title: post?.texts?.title,
2288
- subtitle: post?.texts?.subtitle,
2289
- description: post?.texts?.description,
2290
- additional1: post?.texts?.additional1,
2291
- img: this.getImageResponsive(post?.multimedia?.[0], false),
2292
- buttons: Utils.mapButtons(post?.buttons),
2293
- postUrl: Utils.mapButtons(post?.buttons)?.[0],
2294
- category: post?.category,
2295
- date: post?.date ? new Date(post.date) : undefined,
2296
- active: post?.active,
2297
- }));
2298
- posts = posts.sort((a, b) => {
2299
- if (a.date && b.date)
2300
- return b.date - a.date; // ambos con fecha
2301
- if (a.date && !b.date)
2302
- return -1; // a tiene fecha, b no
2303
- if (!a.date && b.date)
2304
- return 1; // b tiene fecha, a no
2305
- return 0; // ninguno tiene fecha
2306
- });
2307
- // Obtener los 4 posts más recientes
2308
- posts =
2309
- posts?.filter((post) => post.active) ??
2310
- posts ??
2311
- [];
2312
- const latestPosts = posts?.slice(0, 4);
2313
- return {
2314
- pretitle: typeof props?.texts?.pretitle === 'string'
2315
- ? props?.texts?.pretitle
2316
- : props?.texts?.pretitle?.contain,
2317
- title: typeof props?.texts?.title === 'string'
2318
- ? props?.texts?.title
2319
- : props?.texts?.title?.contain,
2320
- tags: {
2321
- pretitle: props?.texts?.pretitle?.tag,
2322
- title: props?.texts?.title?.tag,
2323
- categoriesTitle: props?.texts?.categories?.tag,
2324
- latestPostsTitle: props?.texts?.latestEntries?.tag,
2325
- },
2326
- textColors: {
2327
- pretitle: props?.texts?.pretitle?.color?.trim(),
2328
- title: props?.texts?.title?.color?.trim(),
2329
- categoriesTitle: props?.texts?.categories?.color?.trim(),
2330
- latestPostsTitle: props?.texts?.latestEntries?.color?.trim(),
2331
- },
2332
- searchPlaceHolder: props?.texts?.searchPlaceHolder,
2333
- notfoundText: props?.texts?.searchNotFound,
2334
- posts: posts,
2335
- categoriesTitle: typeof props?.texts?.categories === 'string'
2336
- ? props?.texts?.categories
2337
- : props?.texts?.categories?.contain,
2338
- categories: props?.postCategories?.map((category) => ({
2339
- id: category?.id,
2340
- title: category?.name,
2341
- posts: category?.totalPosts,
2342
- })),
2343
- latestPostsTitle: typeof props?.texts?.latestEntries === 'string'
2344
- ? props?.texts?.latestEntries
2345
- : props?.texts?.latestEntries?.contain,
2346
- latestPosts: latestPosts,
2347
- anterior: props?.texts?.anterior,
2348
- siguiente: props?.texts?.siguiente,
2349
- };
2350
- }
2351
- mapBlogDetail(props) {
2352
- const currentPostId = props?.post?.id;
2353
- const posts = props?.relatedPosts?.map((post) => ({
2354
- id: post?.id,
2355
- title: post?.texts?.title,
2356
- subtitle: post?.texts?.subtitle,
2357
- description: post?.texts?.description,
2358
- img: this.getImageResponsive(post?.multimedia?.imagenes?.[0], false),
2359
- buttons: Utils.mapButtons(post?.buttons),
2360
- postUrl: Utils.mapButtons(post?.buttons)?.[0],
2361
- category: post?.category,
2362
- date: post?.date ? new Date(post.date) : undefined,
2363
- }));
2364
- const candidates = (posts || []).filter((p) => p?.id !== currentPostId);
2365
- let relatedPostsConst = candidates
2366
- .filter((p) => p?.date)
2367
- .sort((a, b) => b.date - a.date)
2368
- .slice(0, 4) || [];
2369
- if (relatedPostsConst.length < 4) {
2370
- const withoutDate = candidates.filter((p) => !p?.date);
2371
- relatedPostsConst = relatedPostsConst.concat(withoutDate.slice(0, 4 - relatedPostsConst.length));
2372
- }
2373
- return {
2374
- title: props?.post?.texts?.title,
2375
- subtitle: props?.post?.texts?.subtitle,
2376
- description: props?.post?.texts?.description,
2377
- additional1: props?.post?.texts?.additional1,
2378
- additional2: props?.post?.texts?.additional2,
2379
- additional3: props?.post?.texts?.additional3,
2380
- additional4: props?.post?.texts?.additional4,
2381
- date: props?.post?.date ? new Date(props?.post?.date) : undefined,
2382
- category: props?.post?.category,
2383
- tags: {
2384
- pretitle: props?.texts?.pretitle?.tag,
2385
- title: props?.texts?.title?.tag,
2386
- categoriesTitle: props?.texts?.categories?.tag,
2387
- latestPostsTitle: props?.texts?.latestEntries?.tag,
2388
- },
2389
- textColors: {
2390
- pretitle: props?.texts?.pretitle?.color?.trim(),
2391
- title: props?.texts?.title?.color?.trim(),
2392
- categoriesTitle: props?.texts?.categories?.color?.trim(),
2393
- latestPostsTitle: props?.texts?.latestEntries?.color?.trim(),
2394
- },
2395
- searchPlaceHolder: props?.texts?.searchPlaceHolder,
2396
- categoriesTitle: typeof props?.texts?.categories === 'string'
2397
- ? props?.texts?.categories
2398
- : props?.texts?.categories?.contain,
2399
- categories: props?.postCategories?.map((category) => ({
2400
- id: category?.id,
2401
- title: category?.name,
2402
- posts: category?.totalPosts,
2403
- })),
2404
- relatedPostsTitle: typeof props?.texts?.latestEntries === 'string'
2405
- ? props?.texts?.latestEntries
2406
- : props?.texts?.latestEntries?.contain,
2407
- relatedPosts: relatedPostsConst,
2408
- button: Utils.mapButtons(props?.buttons)?.[0],
2409
- share: props?.texts?.share,
2410
- img: this.getImageResponsive(props?.post?.multimedia?.imagenes?.[0], false),
2411
- };
2412
- }
2413
- mapModalMultipleMotors(props) {
2414
- return {
2415
- logo: this.getImageResponsive(props?.multimedia?.imagenes?.[0], false),
2416
- pretitle: props?.texts?.pretitle,
2417
- title: props?.texts?.title,
2418
- buttons: Utils.mapButtons(props?.buttons?.filter((btn) => btn?.linkValue !== null)),
2419
- };
2420
- }
2421
- mapOfferBanner(props) {
2422
- let offerData;
2423
- if (props.offers?.length > 0) {
2424
- const offer = props.offers?.[0];
2425
- offerData = {
2426
- texts: {
2427
- title: offer?.texts?.title,
2428
- subtitle: offer?.texts?.subtitle,
2429
- description: offer?.texts?.description,
2430
- additional1: offer?.texts?.additional1,
2431
- additional2: offer?.texts?.additional2,
2432
- additional3: offer?.texts?.additional3,
2433
- additional4: offer?.texts?.additional4,
2434
- },
2435
- button: Utils.mapButtons(offer?.buttons)?.[0],
2436
- image: this.getImageResponsive(offer?.multimedia?.length > 1
2437
- ? (offer?.multimedia?.find((img) => img.cover) ??
2438
- offer?.multimedia?.[0])
2439
- : (offer?.multimedia?.[0] ??
2440
- props?.multimedia?.defaultimagenes?.[0]), false),
2441
- additionalButtons: Utils.mapButtons(props?.buttons?.filter((btn) => btn?.linkValue !== null)),
2442
- };
2443
- }
2444
- return offerData ?? offerData;
2445
- }
2446
- mapModalPopup(props) {
2447
- return {
2448
- title: props?.texts?.title,
2449
- subtitle: props?.texts?.subtitle,
2450
- placeholder: props?.texts?.inputHolder,
2451
- options: props?.multimedia?.imagenes?.map((option) => ({
2452
- label: option?.title,
2453
- value: option?.subtitle,
2454
- title: option?.title,
2455
- description: option?.description,
2456
- image: this.getImageResponsive(option, false),
2457
- })),
2458
- image: this.getImageResponsive(props?.multimedia?.modalimage?.[0], false),
2459
- };
2460
- }
2461
- mapPressList(props) {
2462
- return {
2463
- title: props?.texts?.title,
2464
- description: props?.texts?.description,
2465
- items: props?.multimedia?.imagenes?.map((item) => ({
2466
- title: item?.title,
2467
- subtitle: item?.subtitle,
2468
- image: this.getImageResponsive(item, false),
2469
- link: Utils.mapButtons(item?.links)?.[0],
2470
- })),
2471
- buttons: Utils.mapButtons(props?.buttons),
2472
- };
2473
- }
2474
- mapActionBanner(props) {
2475
- return {
2476
- image: this.getImageResponsive(props?.multimedia?.actionbannerimage?.[0], false),
2477
- image2: this.getImageResponsive(props?.multimedia?.actionbannerimage2?.[0], false),
2478
- button: Utils.mapButtons(props?.buttons)?.[0],
2479
- table: props?.texts?.table,
2480
- sala1: props?.texts?.sala1,
2481
- sala2: props?.texts?.sala2,
2482
- };
2483
- }
2484
- mapInfoZigZagCounter(props) {
2485
- let images = [];
2486
- let texts, tags;
2487
- const dateStart = props?.texts?.datestart;
2488
- const dateFinish = props?.texts?.datefinish;
2489
- if (props?.multimedia?.imagenes) {
2490
- images = this.getArrayImageResponsive(props?.multimedia?.imagenes, false);
2491
- texts = {
2492
- pretitle: props?.texts?.pretitle?.contain ??
2493
- (typeof props?.texts?.pretitle == 'string'
2494
- ? props?.texts?.pretitle
2495
- : undefined),
2496
- title: props?.texts?.title?.contain ??
2497
- (typeof props?.texts?.title == 'string'
2498
- ? props?.texts?.title
2499
- : undefined),
2500
- contenttitle: props?.texts?.contenttitle?.contain ??
2501
- props?.texts?.contenttitle,
2502
- contentsubtitle: props?.texts?.contentsubtitle?.contain ??
2503
- props?.texts?.contentsubtitle,
2504
- contentdescription: props?.texts?.contentdescription?.contain ??
2505
- props?.texts?.contentdescription,
2506
- logo: this.getImageResponsive(props?.multimedia?.logo?.[0], false),
2507
- icons: props?.Ventajas?.filter((item) => item?.title || item?.text)?.map((item) => ({
2508
- title: item.title,
2509
- text: item.text,
2510
- icon: `icon-${item.icon}`,
2511
- })),
2512
- iconTitle: props?.texts?.icontitle?.contain ?? props?.texts?.icontitle,
2513
- daysText: props?.texts?.daystext,
2514
- hoursText: props?.texts?.hourstext,
2515
- minutesText: props?.texts?.minutestext,
2516
- };
2517
- tags = {
2518
- pretitle: props?.texts?.pretitle?.tag,
2519
- title: props?.texts?.title?.tag,
2520
- contenttitle: props?.texts?.contenttitle?.tag,
2521
- contentsubtitle: props?.texts?.contentsubtitle?.tag,
2522
- contentdescription: props?.texts?.contentdescription?.tag,
2523
- iconTitle: props?.texts?.icontitle?.tag,
2524
- };
2525
- }
2526
- return {
2527
- buttons: Utils.mapButtons(props?.buttons.filter((btn) => !!btn?.linkValue)),
2528
- texts,
2529
- images,
2530
- tags,
2531
- dateStart,
2532
- dateFinish,
2533
- };
2534
- }
2535
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MapperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2536
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MapperService, providedIn: 'root' }); }
2537
- }
2538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MapperService, decorators: [{
2539
- type: Injectable,
2540
- args: [{
2541
- providedIn: 'root',
2542
- }]
2543
- }] });
2544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvc2VydmljZXMvbWFwcGVyL21hcHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLEVBRVgsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWtHNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWFsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBS25FLE1BQU0sT0FBTyxhQUFhO0lBSDFCO1FBSXFCLFlBQU8sR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBTTFELGtCQUFhLEdBQUcsTUFBTSxDQUFxQyxTQUFTLENBQUMsQ0FBQztRQUV0RSxXQUFNLEdBQW1CLFFBQVEsQ0FDN0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQzlDLENBQUM7UUFJTSxlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBNjNHNUM7SUF6NEdHLElBQUksc0JBQXNCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcs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LEtBQUssRUFBRSxTQUFTO2dCQUMvRCxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRO2dCQUNoQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTO2dCQUNsQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXO2FBQ3pDLENBQUM7WUFDRixJQUFJLEdBQUc7Z0JBQ0gsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUc7Z0JBQ3JDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHO2dCQUMvQixZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRztnQkFDN0MsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUc7Z0JBQ25ELGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRztnQkFDekQsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUc7YUFDMUMsQ0FBQztTQUNMO1FBQ0QsT0FBTztZQUNILE9BQU8sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUNyQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FDeEQ7WUFDRCxLQUFLO1lBQ0wsTUFBTTtZQUNOLElBQUk7WUFDSixTQUFTO1lBQ1QsVUFBVTtTQUNnQixDQUFDO0lBQ25DLENBQUM7K0dBNTRHUSxhQUFhO21IQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgU2lnbmFsLFxuICAgIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCYWJ5bG9uNDA0SSxcbiAgICBCYWJ5bG9uQWN0aW9uQmFubmVySSxcbiAgICBCYWJ5bG9uQWRkcmVzc0l0ZW0sXG4gICAgQmFieWxvbkFkdmFudGFnZXNJLFxuICAgIEJhYnlsb25CYW5uZXJHYWxsZXJ5SSxcbiAgICBCYWJ5bG9uQmFubmVySW5mb0ksXG4gICAgQmFieWxvbkJsb2dEZXRhaWxzSSxcbiAgICBCYWJ5bG9uQmxvZ0xpc3RJLFxuICAgIEJhYnlsb25CcmVhZGNydW1iSSxcbiAgICBCYWJ5bG9uQ29taW5nU29vbkksXG4gICAgQmFieWxvbkNvbnRhY3RBZGRyZXNzSSxcbiAgICBCYWJ5bG9uQ29udGFjdEZvcm1JLFxuICAgIEJhYnlsb25Db250YWN0SG93SSxcbiAgICBCYWJ5bG9uQ29udGFjdE1hcGFJLFxuICAgIEJhYnlsb25Db250YWN0TWFwSXRlbSxcbiAgICBCYWJ5bG9uRW5naW5lSSxcbiAgICBCYWJ5bG9uRW5naW5lTW9kYWxJLFxuICAgIEJhYnlsb25FcXVpcG1lbnRJdGVtLFxuICAgIEJhYnlsb25FeHRlcm5hbFNjcmlwdEksXG4gICAgQmFieWxvbkZhcUksXG4gICAgQmFieWxvbkZhcUl0ZW0sXG4gICAgQmFieWxvbkZlYXR1cmVzU2xpZGVySSxcbiAgICBCYWJ5bG9uRmVhdHVyZXNTbGlkZXJJdGVtLFxuICAgIEJhYnlsb25GbG9hdGluZ0J1dHRvbnNJLFxuICAgIEJhYnlsb25Gb290ZXJDb250YWN0SSxcbiAgICBCYWJ5bG9uRm9vdGVyTGlua3NJLFxuICAgIEJhYnlsb25Gb290ZXJMb2dvc0ksXG4gICAgQmFieWxvbkZvb3RlclNvY2lhbEksXG4gICAgQmFieWxvbkdhbGxlcnlGaWx0ZXIsXG4gICAgQmFieWxvbkdhbGxlcnlJLFxuICAgIEJhYnlsb25HYWxsZXJ5SXRlbSxcbiAgICBCYWJ5bG9uSGVhZGVyQm9va1Nob3dJLFxuICAgIEJhYnlsb25IZWFkZXJDbGVhckksXG4gICAgQmFieWxvbkhlYWRlck1lbnVDZW50ZXJJLFxuICAgIEJhYnlsb25IZWFkZXJNZW51TG9nb0NlbnRlckksXG4gICAgQmFieWxvbkhlYWRlck1lbnVTaG93SSxcbiAgICBCYWJ5bG9uSGVhZEludHJvSSxcbiAgICBCYWJ5bG9uSG90ZWxzTGlzdEksXG4gICAgQmFieWxvbkhvdGVsc1NsaWRlckksXG4gICAgQmFieWxvbkluZm8yQ29sSW1nSSxcbiAgICBCYWJ5bG9uSW5mbzJpbWdCaWdJLFxuICAgIEJhYnlsb25JbmZvMmltZ0ksXG4gICAgQmFieWxvbkluZm80aW1nSSxcbiAgICBCYWJ5bG9uSW5mb0JpZ0ksXG4gICAgQmFieWxvbkluZm9HcmlkSSxcbiAgICBCYWJ5bG9uSW5mb0dyaWRJdGVtSSxcbiAgICBCYWJ5bG9uSW5mb0ltZ0ksXG4gICAgQmFieWxvbkluZm9JbWdTbGlkZXJJLFxuICAgIEJhYnlsb25JbmZvSW1nU2xpZGVySXRlbUksXG4gICAgQmFieWxvbkluZm9JbnRyb0ksXG4gICAgQmFieWxvbkluZm9aaWdaYWdDb3VudGVySSxcbiAgICBCYWJ5bG9uSW5mb1ppZ3phZ1YySSxcbiAgICBCYWJ5bG9uSW5mb1ppZ3phZ1YySXRlbSxcbiAgICBCYWJ5bG9uSXRlbXNHcmlkSSxcbiAgICBCYWJ5bG9uTGFuZ3VhZ2VNb2RhbEksXG4gICAgQmFieWxvbkxlZ2FsSSxcbiAgICBCYWJ5bG9uTW9kYWxNdWx0aXBsZU1vdG9yc0ksXG4gICAgQmFieWxvbk5ld3NsZXR0ZXJJLFxuICAgIEJhYnlsb25PZmZlckRldGFpbEksXG4gICAgQmFieWxvbk9mZmVySSxcbiAgICBCYWJ5bG9uT2ZmZXJQb3B1cEksXG4gICAgQmFieWxvbk9mZmVyUG9wdXBWMkksXG4gICAgQmFieWxvbk9mZmVyU2xpZGVySSxcbiAgICBCYWJ5bG9uT2ZmZXJzTGlzdEksXG4gICAgQmFieWxvbk9mZmVyc0xpc3RJdGVtLFxuICAgIEJhYnlsb25QcmVzc0xpc3RJLFxuICAgIEJhYnlsb25Sb29tRGV0YWlsSSxcbiAgICBCYWJ5bG9uUm9vbUluZm9JLFxuICAgIEJhYnlsb25Sb29tc0NvbHNJLFxuICAgIEJhYnlsb25Sb29tc0dyaWRJLFxuICAgIEJhYnlsb25Sb29tc0xpc3RFcXVpcG1lbnQsXG4gICAgQmFieWxvblJvb21zTGlzdEksXG4gICAgQmFieWxvblJvb21zTGlzdEl0ZW0sXG4gICAgQmFieWxvblJvb21zU2xpZGVySSxcbiAgICBCYWJ5bG9uU2VydmljZXNTbGlkZXJJLFxuICAgIEJhYnlsb25TbGlkZXIyQ29sSXRlbUksXG4gICAgQmFieWxvblNsaWRlcjJpdGVtc0ksXG4gICAgQmFieWxvblNsaWRlcjNJdGVtc0ksXG4gICAgQmFieWxvblNsaWRlcjRjb2xMYWJlbHMsXG4gICAgQmFieWxvblNsaWRlckl0ZW0sXG4gICAgQmFieWxvblN0YXRpY0Zvb3RlckksXG4gICAgQmFieWxvblN1Ym1lbnVJLFxuICAgIEJhYnlsb25UaGFua3NJLFxuICAgIEJhYnlsb25Ub3BTbGlkZXJJLFxuICAgIEJhYnlsb25Ub3BTbGlkZXJJdGVtLFxuICAgIEJhYnlsb25Ub3BTbGlkZXJUaHVtYnNJLFxuICAgIEJhYnlsb25Ub3BTbGlkZXJWMkksXG4gICAgQmFieWxvblRvcFNsaWRlclZpZGVvSSxcbiAgICBCYWJ5bG9uV2VibWFwSSxcbiAgICBEcm9wZG93bk9wdGlvbixcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEJhYnlsb25HbG9iYWxNb2RhbEkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvcmUvYmFieWxvbi1nbG9iYWwtbW9kYWwnO1xuaW1wb3J0IHsgQmFieWxvbkl0ZW1HcmlkSSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWxpc3QtZ3JpZC9iYWJ5bG9uLWxpc3QtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFieWxvbkxpc3RHcmlkSSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWxpc3QtZ3JpZC9iYWJ5bG9uLWxpc3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFieWxvbk1vZGFsUG9wdXBJIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb3JlL2JhYnlsb24tbW9kYWwtcG9wdXAnO1xuaW1wb3J0IHsgQmFieWxvblN0YXRpY0Zvb3RlclYySSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLXN0YXRpYy1mb290ZXItdjIvYmFieWxvbi1zdGF0aWMtZm9vdGVyLXYyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSb29tU2VydmljZVR5cGUgfSBmcm9tICcuLi8uLi9FbnVtL3NlcnZpY2VzLmVudW0nO1xuaW1wb3J0IHsgVmlld3NUeXBlIH0gZnJvbSAnLi4vLi4vRW51bS92aWV3cy5lbnVtJztcbmltcG9ydCB7XG4gICAgQmFieWxvbkJ1dHRvbkksXG4gICAgQmFieWxvbkRyb3Bkb3duSSxcbiAgICBCYWJ5bG9uSW1hZ2VJLFxuICAgIEJhYnlsb25JbnB1dEksXG4gICAgQmFieWxvbk1lbnVCdXR0b25JLFxuICAgIEJhYnlsb25NZW51SW5mb0ksXG4gICAgQmFieWxvblRleHRJbmZvSSxcbiAgICBCb2R5Q29tcG9uZW50LFxuICAgIENPTVBPTkVOVFNfRVhUUkEsXG4gICAgQ29uc3VsdFR5cGVJLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgU2NyZWVuU2l6ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2NyZWVuLXNpemVyJztcbmltcG9ydCB7IFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuL21hcHBlci5zZXJ2aWNlLnRva2VuJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWFwcGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzaXRlU3ZjID0gaW5qZWN0KFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NyZWVuU2l6ZXIgPSBpbmplY3QoU2NyZWVuU2l6ZXJTZXJ2aWNlKTtcblxuICAgIGdldCBpc01pbkZ1bGxUYWJsZXRJbnN0YW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5TaXplci5taW5GdWxsVGFibGV0SW5zdGFudCgpO1xuICAgIH1cblxuICAgIGhlYWRlckJ1dHRvbnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHNpdGVJZDogU2lnbmFsPG51bWJlcj4gPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5zaXRlU3ZjLndlYkNvbmZpZ0luc3RhbnQ/LnNpdGVJRFxuICAgICk7XG5cbiAgICBmbG9hdGluZ0J1dHRvbnM/OiBCYWJ5bG9uRmxvYXRpbmdCdXR0b25zSTtcblxuICAgIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgICBnZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgIGltYWdlOiBJbWFnZVJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICAgICAgICBpc0ZpZ3VyZSA9IHRydWVcbiAgICApOiBzdHJpbmcgfCBCYWJ5bG9uSW1hZ2VJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkSW1hZ2U7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JlZW5TaXplci5tb2JpbGUoKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW1hZ2UgPSBpbWFnZT8udGh1bWJuYWlscz8uWzM3NV0/LndlYnA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NyZWVuU2l6ZXIuaXNTbWFsbFRhYmxldEluc3RhbnQoKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW1hZ2UgPSBpbWFnZT8udGh1bWJuYWlscz8uWzU0MF0/LndlYnA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NyZWVuU2l6ZXIuaXNNZWRpdW1UYWJsZXRJbnN0YW50KCkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEltYWdlID0gaW1hZ2U/LnRodW1ibmFpbHM/Lls3NjhdPy53ZWJwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcmVlblNpemVyLmlzRnVsbFRhYmxldEluc3RhbnQoKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW1hZ2UgPSBpbWFnZT8udGh1bWJuYWlscz8uWzEwMjRdPy53ZWJwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcmVlblNpemVyLmlzU21hbGxEZXNrdG9wSW5zdGFudCgpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbWFnZSA9IGltYWdlPy50aHVtYm5haWxzPy5bMTI4MF0/LndlYnA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NyZWVuU2l6ZXIubWluTWVkaXVtRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbWFnZSA9IGltYWdlPy5wYXRoPy53ZWJwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEltYWdlID0gaW1hZ2U/LnRodW1ibmFpbHM/LlsxMzY2XT8ud2VicDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbWFnZVxuICAgICAgICAgICAgPyBpc0ZpZ3VyZVxuICAgICAgICAgICAgICAgID8gYCR7dGhpcy5zaXRlU3ZjLmNkbkltYWdlc0luc3RhbnR9JHtzZWxlY3RlZEltYWdlfWBcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzcmM6IGAke3RoaXMuc2l0ZVN2Yy5jZG5JbWFnZXNJbnN0YW50fSR7c2VsZWN0ZWRJbWFnZX1gLFxuICAgICAgICAgICAgICAgICAgICAgIGFsdDogaW1hZ2U/LmFsdCxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldEFycmF5SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICBpbWFnZXM6IEltYWdlUmVzcG9uc2VbXSB8IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGaWd1cmUgPSB0cnVlXG4gICAgKTogKHN0cmluZyB8IEJhYnlsb25JbWFnZUkpW10gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gaW1hZ2VzPy5tYXAoKGltZykgPT4gdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaW1nLCBpc0ZpZ3VyZSkhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQWdlc09wdGlvbnMoXG4gICAgICAgIG1heExlbmd0aDogbnVtYmVyLFxuICAgICAgICBtaW5MZW5ndGggPSAwXG4gICAgKTogRHJvcGRvd25PcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IERyb3Bkb3duT3B0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1pbkxlbmd0aDsgaSA8PSBtYXhMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHsgY29kZTogaSwgbmFtZTogaSA8IDEwID8gYDAke2l9YCA6IGAke2l9YCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBtYXBCb2R5RXh0cmEoXG4gICAgICAgIGJvZHk6IGFueVtdIHwgdW5kZWZpbmVkXG4gICAgKTogQm9keUNvbXBvbmVudDxDT01QT05FTlRTX0VYVFJBPltdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYm9keU1hcHBlZDogQm9keUNvbXBvbmVudDxDT01QT05FTlRTX0VYVFJBPltdIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGJvZHk/Lm1hcCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50TWFwcGVkOiBCb2R5Q29tcG9uZW50PENPTVBPTkVOVFNfRVhUUkE+ID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZT8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGNvbXBvbmVudC5vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHt9LFxuICAgICAgICAgICAgICAgIH0gYXMgQm9keUNvbXBvbmVudDxDT01QT05FTlRTX0VYVFJBPjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudC5uYW1lPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBTdWJtZW51KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBCYWJ5bG9uU3VibWVudUk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQubmFtZSA9ICdtZW51JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRNYXBwZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYm9keU1hcHBlZDtcbiAgICB9XG5cbiAgICBtYXBTdWJtZW51KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uU3VibWVudUkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHByb3BzPy5pdGVtcz8uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnNlbGVjdGVkKTtcbiAgICAgICAgY29uc3Qgc3VibWVudSA9IHtcbiAgICAgICAgICAgIC8vIGhvdGVsOiBwcm9wcz8uaG90ZWwsXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/Lml0ZW1zXG4gICAgICAgICAgICAgICAgPy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5hY3RpdmUpXG4gICAgICAgICAgICAgICAgPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChsaW5rOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsaW5rPy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbGluaz8ubGlua1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtUeXBlOiAnaW50ZXJuYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogc2VsZWN0ZWQ/Lm5hbWUsXG4gICAgICAgICAgICAgICAgdXJsOiBzZWxlY3RlZD8ubGlua1ZhbHVlLFxuICAgICAgICAgICAgfSBhcyBCYWJ5bG9uQnV0dG9uSSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uU3VibWVudUk7XG5cbiAgICAgICAgcmV0dXJuIHN1Ym1lbnU7XG4gICAgfVxuXG4gICAgbWFwQ29tcG9uZW50czxUPihcbiAgICAgICAgYm9keTogYW55W10sXG4gICAgICAgIGFkZG9ucz86IENvbXBvbmVudHNBZGRvbnNcbiAgICApOiBCb2R5Q29tcG9uZW50PFQ+W10ge1xuICAgICAgICBpZiAoIWJvZHkgfHwgIWJvZHkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW10gYXMgQm9keUNvbXBvbmVudDxUPltdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvZHlNYXBwZWQ6IEJvZHlDb21wb25lbnQ8VD5bXSA9IGJvZHlcbiAgICAgICAgICAgID8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjb21wb25lbnQpID0+IGNvbXBvbmVudCAhPT0gbnVsbCAmJiBjb21wb25lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgPy5tYXAoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudE1hcHBlZDogQm9keUNvbXBvbmVudDxUPiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29tcG9uZW50Lm5hbWU/LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBjb21wb25lbnQub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgYWxpYXM6IGNvbXBvbmVudC5hbGlhcyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yOiBjb21wb25lbnQudGV4dGNvbG9yLFxuICAgICAgICAgICAgICAgIH0gYXMgQm9keUNvbXBvbmVudDxUPjtcblxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQucHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9JdCBpcyBuZWNlc3NhcnksIG90aGVyd2lzZSBpdCBnaXZlcyBhbiBlcnJvciBhbmQgZG9lcyBub3Qgc2hvdyBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudC5uYW1lPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kdWxlNDA0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXA0MDQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLSBMQVlPVVQgQ09NUE9ORU5UUyAtLS0tLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0b3BzbGlkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFRvcFNsaWRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcHNsaWRlcnZpZGVvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBUb3BTbGlkZXJWaWRlbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9wc2xpZGVydjJsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0b3BzbGlkZXJ2MnJpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBUb3BTbGlkZXJWMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5uYW1lID09PSAndG9wc2xpZGVydjJyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvaW1nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvaW1ncmlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm9pbWdsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBJbmZvSW1nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLm5hbWUgPT09ICdpbmZvaW1ncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnRleHRjb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm9pbWdzbGlkZXJyaWdodCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mb2ltZ3NsaWRlcmxlZnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm9JbWdTbGlkZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQubmFtZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5mb2ltZ3NsaWRlcnJpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm9pbnRybyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwSW5mb0ludHJvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mbzJpbWdsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvMmltZ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBJbmZvMmltZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5uYW1lID09PSAnaW5mbzJpbWdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvMmNvbGltZ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBJbmZvMmNvbGltZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5uYW1lID09PSAnaW5mbzJjb2xpbWdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvMmNvbGltZ2xlZnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm8yY29saW1nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLm5hbWUgPT09ICdpbmZvMmNvbGltZ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mbzNpbWcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm9JbWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC50ZXh0Y29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvemlnemFnbGVmdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mb3ppZ3phZ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBaaWd6YWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQubmFtZSA9PT0gJ2luZm96aWd6YWdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvZ3JpZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwSW5mb0dyaWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzbGlkZXIyY29sbGVmdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2xpZGVyMmNvbHJpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBTbGlkZXJDb2xsMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5uYW1lID09PSAnc2xpZGVyMmNvbHJpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NsaWRlcjNjb2wnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFNsaWRlckNvbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzbGlkZXI0Y29sJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBTbGlkZXJDb2xsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaXRlbXNncmlkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBJdGVtc0dyaWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb29tc3NsaWRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwUm9vbXNTbGlkZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb29tc2dyaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFJvb21zR3JpZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jhbm5lcmdhbGxlcnknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEJhbm5lckdhbGxlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdncmlkZ2FsbGVyeSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwR3JpZEdhbGxlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiYW5uZXJuZXdzbGV0dGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQmFubmVyTmV3c2xldHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2ZmZXJzc2xpZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBPZmZlclNsaWRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLSBMQVlPVVQgQ09NUE9ORU5UUyBFTkQtLS0tLy9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RoYW5rcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwVGhhbmtzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250YWN0Zm9ybSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwQ29udGFjdEZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRvbnM/LmNvbnRhY3RPZmZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRvbnM/LmNvbnN1bHRUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250YWN0aG93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBDb250YWN0SG93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd3ZWJtYXAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFdlYm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29udGFjdG1hcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwQ29udGFjdE1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGVnYWwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcExlZ2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb29tc2NvbHMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFJvb21zQ29scyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncm9vbWRldGFpbHMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFJvb21EZXRhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcHNsaWRlcnRodW1icyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwVG9wU2xpZGVyVGh1bWJzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmZWF0dXJlc3NsaWRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwRmVhdHVyZXNTbGlkZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jhbm5lcmluZm8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEJhbm5lckluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jvb21zbGlzdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwUm9vbXNMaXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb21pbmdzb29uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBDb21pbmdTb29uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvZmZlcmRldGFpbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwT2ZmZXJEZXRhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29mZmVyc2xpc3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcE9mZmVyc0xpc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZhcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwRmFxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGF0aWNmb290ZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFN0YXRpY0Zvb3RlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ2FsbGVyeSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwR2FsbGVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmF2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBNZW51KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkb25zPy5tZW51U29jaWFsTWVkaWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhbmd1YWdlc21vZGFsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBMYW5ndWFnZU1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzbGlkZXIzaXRlbXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFNsaWRlcjNJdGVtcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG90ZWxzc2xpZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBIb3RlbHNTbGlkZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvdGVsc2xpc3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEhvdGVsc0xpc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm80aW1nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBJbmZvNEltZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2VydmljZXNzbGlkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFNlcnZpY2VzU2xpZGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250YWN0YWRkcmVzcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwQ29udGFjdEFkZHJlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkdmFudGFnZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEFkdmFudGFnZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm9iaWcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm9CaWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm96aWd6YWd2MmxlZnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm9aaWdaYWdWMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mb3ppZ3phZ3YycmlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm9aaWdaYWdWMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyY29udGFjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwRm9vdGVyQ29udGFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5mbzJpbWdiaWcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEluZm8ySW1nQmlnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb290ZXJsaW5rcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwRm9vdGVyTGlua3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Zvb3RlcmxvZ29zJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBGb290ZXJMb2dvcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2ZmZXJzbGlkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcE9mZmVyU2xpZGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb290ZXJzb2NpYWxzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBGb290ZXJTb2NpYWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzbGlkZXIyaXRlbXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFNsaWRlcjJpdGVtcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhdGljZm9vdGVydjInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcFN0YXRpY0Zvb3RlcnYyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsaXN0Z3JpZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwTGlzdEdyaWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25ld3NsZXR0ZXJtb2RhbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwTmV3c2xldHRlck1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdoZWFkaW50cm8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEhlYWRJbnRybyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnJlYWRjcnVtYnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEJyZWFkY3J1bWJzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2ZmZXJiYW5uZXJ2Mic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwT2ZmZXJCYW5uZXJWMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dsb2JhbG1vZGFsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdnbG9iYWxtb2RhbDInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEdsb2JhbE1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWVudSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwU3VibWVudShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWxvcGlhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBFeHRlcm5hbFNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2dsaXN0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBCbG9nTGlzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2dkZXRhaWwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRNYXBwZWQucHJvcHMgPSB0aGlzLm1hcEJsb2dEZXRhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvZmZlcmJhbm5lcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwT2ZmZXJCYW5uZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb2RhbG11bHRpcGxlbW90b3JzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwTW9kYWxNdWx0aXBsZU1vdG9ycyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kYWxwb3B1cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwTW9kYWxQb3B1cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncHJlc3NsaXN0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TWFwcGVkLnByb3BzID0gdGhpcy5tYXBQcmVzc0xpc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FjdGlvbmJhbm5lcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9IHRoaXMubWFwQWN0aW9uQmFubmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbmZvemlnemFnY291bnRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE1hcHBlZC5wcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEluZm9aaWdaYWdDb3VudGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50TWFwcGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBib2R5TWFwcGVkO1xuICAgIH1cblxuICAgIG1hcDQwNChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbjQwNEkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzLnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy50ZXh0cz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzdWJ0aXRsZTogcHJvcHMudGV4dHM/LnN1YnRpdGxlLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzLmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgIH0gYXMgQmFieWxvbjQwNEk7XG4gICAgfVxuXG4gICAgLy8tLS0tIExBWU9VVCBDT01QT05FTlRTIC0tLS0vL1xuICAgIG1hcFRvcFNsaWRlcihwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblRvcFNsaWRlckkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyksXG4gICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3MpLFxuICAgICAgICAgICAgaXRlbXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKChpdGVtOiBJbWFnZVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtPy50aXRsZSxcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaXRlbT8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgaW1nOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpdGVtLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5idXR0b25zKSxcbiAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBpdGVtc01vYmlsZTogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzbW9iaWxlPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbT8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaXRlbT8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKGl0ZW0sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25Ub3BTbGlkZXJJdGVtXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbG9nbzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUocHJvcHM/Lm11bHRpbWVkaWE/LmxvZ28/LlswXSwgZmFsc2UpLFxuICAgICAgICAgICAgbG9nb1RpdGxlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8ubG9nb3RpdGxlPy5bMF0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB2aWRlb0RhdGE6IHtcbiAgICAgICAgICAgICAgICAvLyB0aXRsZTogcHJvcHM/LnZpZGVvPy50aXRsZSxcbiAgICAgICAgICAgICAgICBzcmM6IHByb3BzPy50ZXh0cz8udmlkZW8sXG4gICAgICAgICAgICAgICAgdHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9IGFzIEJhYnlsb25Ub3BTbGlkZXJJO1xuICAgIH1cblxuICAgIG1hcFRvcFNsaWRlclZpZGVvKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkXG4gICAgKTogQmFieWxvblRvcFNsaWRlclZpZGVvSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2aWRlb0RhdGE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnZpZGVvPy50aXRsZSxcbiAgICAgICAgICAgICAgICBzcmM6IHByb3BzPy52aWRlbz8uc3JjLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd2aWRlby9tcDQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNtYWxsVmlkZW9EYXRhOiBwcm9wcz8udmlkZW8/Lm1vYmlsZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udmlkZW8/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIHNyYzogcHJvcHM/LnZpZGVvPy5tb2JpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsYWJlbEluZm9zOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW1vYmlsZT8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICB9IGFzIEJhYnlsb25Ub3BTbGlkZXJWaWRlb0k7XG4gICAgfVxuXG4gICAgbWFwVG9wU2xpZGVyVjIoXG4gICAgICAgIHByb3BzOiBhbnkgfCB1bmRlZmluZWQsXG4gICAgICAgIHJpZ2h0U2lkZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogQmFieWxvblRvcFNsaWRlclYySSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBwcm9wc1xuICAgICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICAgICAgcmlnaHRTaWRlOiByaWdodFNpZGUsXG4gICAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChpdGVtOiBJbWFnZVJlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaXRlbS5wcmV0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25TbGlkZXI0Y29sTGFiZWxzXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnRleHQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9IGFzIEJhYnlsb25Ub3BTbGlkZXJWMkkpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtYXBJbmZvSW1nKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkLFxuICAgICAgICByaWdodFNpZGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgICAgdGV4dENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICApOiBCYWJ5bG9uSW5mb0ltZ0kgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlnaHRTaWRlOiByaWdodFNpZGUsXG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgYnV0dG9uczogcHJvcHM/LmJ1dHRvbnNcbiAgICAgICAgICAgICAgICA/IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHM/LmJ1dHRvbnM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbms6IGFueSkgPT4gbGluaz8ubGlua1ZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbnRhaW4sXG4gICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnN1YnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8uc3VidGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnN1YnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgbmR0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5uZHRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ubmR0aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ubmR0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIGxlc3NCdG46IHByb3BzPy50ZXh0cz8uc2VlTGVzcyxcbiAgICAgICAgICAgIG1vcmVCdG46IHByb3BzPy50ZXh0cz8uc2VlTW9yZSxcbiAgICAgICAgICAgIGltYWdlczogdGhpcy5nZXRBcnJheUltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXMsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBhZHZhbnRhZ2VzOiBwcm9wcz8uVmVudGFqYXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy50aXRsZSB8fCBpdGVtPy50ZXh0XG4gICAgICAgICAgICApPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgaWNvbjogaXRlbS5pY29uID8gYGljb24tJHtpdGVtLmljb259YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGxvZ286IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKHByb3BzPy5tdWx0aW1lZGlhPy5sb2dvPy5bMF0sIGZhbHNlKSxcbiAgICAgICAgICAgIGFkdlRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRleHQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50ZXh0XG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50ZXh0Py5jb250YWluLFxuICAgICAgICAgICAgdG9wQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy50b3BiZz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYm90dG9tQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5ib3R0b21iZz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdG9wQ29sb3I6IHByb3BzPy50ZXh0cz8udG9wQ29sb3IsXG4gICAgICAgICAgICBib3R0b21Db2xvcjogcHJvcHM/LnRleHRzPy5Cb3R0b21Db2xvcixcbiAgICAgICAgICAgIHRleHRDb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnN1YnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LnRhZyxcbiAgICAgICAgICAgICAgICBuZHRpdGxlOiBwcm9wcz8udGV4dHM/Lm5kdGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBhZHZUaXRsZTogcHJvcHM/LnRleHRzPy50ZXh0Py50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGV4dENvbG9yczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgICAgIHRleHQ6IHByb3BzPy50ZXh0cz8uc3VidGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvSW1nSTtcbiAgICB9XG5cbiAgICBtYXBJbmZvSW1nU2xpZGVyKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkLFxuICAgICAgICByaWdodFNpZGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IEJhYnlsb25JbmZvSW1nU2xpZGVySSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIC8vIFRPRE86IGFkZCB0b3BCRywgYm90dG9tQkdcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZ2h0U2lkZTogcmlnaHRTaWRlLFxuICAgICAgICAgICAgdG9wQ29sb3I6IHByb3BzPy50ZXh0cz8udG9wQ29sb3IsXG4gICAgICAgICAgICBib3R0b21Db2xvcjogcHJvcHM/LnRleHRzPy5ib3R0b21Db2xvcixcbiAgICAgICAgICAgIGxlc3NCdG46IHByb3BzPy50ZXh0cz8uc2VlTGVzcyxcbiAgICAgICAgICAgIG1vcmVCdG46IHByb3BzPy50ZXh0cz8uc2VlTW9yZSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/Lm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0/LnByZXRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IGl0ZW0/LnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmR0aXRsZTogaXRlbT8ubmRfdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5idXR0b25zKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmxpbmtzKSxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkluZm9JbWdTbGlkZXJJdGVtSVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uSW5mb0ltZ1NsaWRlckk7XG4gICAgfVxuXG4gICAgbWFwSW5mb0ludHJvKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uSW5mb0ludHJvSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbnRhaW4sXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgICAgICBpbWFnZXM6IHRoaXMuZ2V0QXJyYXlJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdG9wQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy50b3BiZz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYm90dG9tQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5ib3R0b21iZz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdG9wQ29sb3I6IHByb3BzPy50ZXh0cz8udG9wQ29sb3IsXG4gICAgICAgICAgICBib3R0b21Db2xvcjogcHJvcHM/LnRleHRzPy5Cb3R0b21Db2xvcixcbiAgICAgICAgICAgIGxvZ286IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKHByb3BzPy5tdWx0aW1lZGlhPy5sb2dvPy5bMF0sIGZhbHNlKSxcbiAgICAgICAgICAgIGxvZ28yOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8ubG9nbzI/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0Q29sb3JzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uTW9kYWw6IHByb3BzPy50ZXh0cz8ucG9wdXBtb2RhbCxcbiAgICAgICAgfSBhcyBCYWJ5bG9uSW5mb0ludHJvSTtcbiAgICB9XG5cbiAgICBtYXBIZWFkZXIoXG4gICAgICAgIHByb3BzOiBhbnkgfCB1bmRlZmluZWQsXG4gICAgICAgIG1lbnU6IGFueVxuICAgICk6XG4gICAgICAgIHwgQmFieWxvbkhlYWRlckJvb2tTaG93SVxuICAgICAgICB8IEJhYnlsb25IZWFkZXJDbGVhcklcbiAgICAgICAgfCBCYWJ5bG9uSGVhZGVyTWVudUNlbnRlcklcbiAgICAgICAgfCBCYWJ5bG9uSGVhZGVyTWVudUxvZ29DZW50ZXJJXG4gICAgICAgIHwgQmFieWxvbkhlYWRlck1lbnVTaG93SSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBtZW51LmxpbmtzPy5sb2dvTGluaz8uZmxhdCgpPy5bMF07XG4gICAgICAgIGNvbnN0IGhlYWRlckJ1dHRvbnMgPSBwcm9wcztcblxuICAgICAgICBpZiAoaGVhZGVyQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5mbG9hdGluZ0J1dHRvbnMgPSB7XG4gICAgICAgICAgICAgICAgdGV4dHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYGJhYnlsb24tJHtoZWFkZXJCdXR0b25zLnRleHRzPy50cmFuc2Zlckljb259YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBoZWFkZXJCdXR0b25zPy50ZXh0cz8udHJhbnNmZXIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGBiYWJ5bG9uLSR7aGVhZGVyQnV0dG9ucy50ZXh0cz8uY2hlY2tpbkljb259YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBoZWFkZXJCdXR0b25zPy50ZXh0cz8uY2hlY2tpbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYGJhYnlsb24tJHtoZWFkZXJCdXR0b25zLnRleHRzPy53aGF0c2FwcH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhlYWRlckJ1dHRvbnM/LnRleHRzPy53aGF0c2FwcCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGhlYWRlckJ1dHRvbnM/LmxpbmtzKSxcbiAgICAgICAgICAgIH0gYXMgQmFieWxvbkZsb2F0aW5nQnV0dG9uc0k7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmxvYXRpbmdCdXR0b25zOiB0aGlzLmZsb2F0aW5nQnV0dG9ucyxcbiAgICAgICAgICAgIGxhbmc6IHRoaXMuc2l0ZVN2Yy5zZWxlY3RlZExhbmd1YWdlSW5zdGFudD8ubG9jYXRlPy50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgYnRuQm9vazogeyBsYWJlbDogaGVhZGVyQnV0dG9ucz8udGV4dHM/LmJvb2tOb3cgfSxcbiAgICAgICAgICAgIHNob3A6IGhlYWRlckJ1dHRvbnM/LnRleHRzPy5zaG9wXG4gICAgICAgICAgICAgICAgPyBgaWNvbi0ke2hlYWRlckJ1dHRvbnM/LnRleHRzPy5zaG9wfWBcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGhlYWRlckJ1dHRvbnM/LmxpbmtzKSxcbiAgICAgICAgICAgIGxpbmtMb2dvOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGxpbms/LmxhYmVsLFxuICAgICAgICAgICAgICAgIHVybDogbGluaz8ubGlua1ZhbHVlLFxuICAgICAgICAgICAgICAgIGxpbmtUeXBlOiBsaW5rPy5saW5rVHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZW51OiBtZW51Py5uYXY/Lm1hcChcbiAgICAgICAgICAgICAgICAobWVudTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbWVudT8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVudT8ubGlua1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlua1R5cGU6IG1lbnU/LmxpbmtUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG1lbnU/LnRyYW5zbGF0aW9ucz8uWzBdPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtZW51Py50cmFuc2xhdGlvbnM/LlswXT8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWVudT8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBtZW51Py5jaGlsZHJlbj8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGlsZDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2hpbGQ/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGNoaWxkPy5saW5rVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rVHlwZTogY2hpbGQ/LmxpbmtUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNoaWxkPy50cmFuc2xhdGlvbnM/LlswXT8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQ/LnRyYW5zbGF0aW9ucz8uWzBdPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGlsZD8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25NZW51QnV0dG9uSVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1lbnVJbmZvOiB0aGlzLm1hcE1lbnUobWVudSwgdW5kZWZpbmVkKSxcbiAgICAgICAgfSBhc1xuICAgICAgICAgICAgfCBCYWJ5bG9uSGVhZGVyQm9va1Nob3dJXG4gICAgICAgICAgICB8IEJhYnlsb25IZWFkZXJDbGVhcklcbiAgICAgICAgICAgIHwgQmFieWxvbkhlYWRlck1lbnVDZW50ZXJJXG4gICAgICAgICAgICB8IEJhYnlsb25IZWFkZXJNZW51TG9nb0NlbnRlcklcbiAgICAgICAgICAgIHwgQmFieWxvbkhlYWRlck1lbnVTaG93STtcbiAgICB9XG5cbiAgICAvL1RPRE86IFdhaXQgZm9yIGJhY2sgaW5mb1xuICAgIG1hcE1lbnUoXG4gICAgICAgIHByb3BzOiBhbnkgfCB1bmRlZmluZWQsXG4gICAgICAgIHNvY2lhbE1lZGlhOiBhbnkgfCB1bmRlZmluZWRcbiAgICApOiBCYWJ5bG9uTWVudUluZm9JIHtcbiAgICAgICAgY29uc3QgbGlua3MgPSBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgcHJvcHM/Lm5hdj8ubWFwKChsaW5rOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ubGluayxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGluay50cmFuc2xhdGlvbnM/LlswXT8ubmFtZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhY3QgPSAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3ID0gVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3M/LmNvbnRhY3Q/LlswXSk7IC8vIHAuZWouIFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3LmZpbHRlcihCb29sZWFuKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgY29uc3QgcmF3VGl0bGUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmNvbnRhY3RUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcy50ZXh0cy5jb250YWN0VGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LmNvbnRhY3RUaXRsZT8uY29udGFpbjtcblxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByYXdUaXRsZSA9PT0gJ3N0cmluZycgJiYgcmF3VGl0bGUudHJpbSgpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHJhd1RpdGxlLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKCFsaW5rcz8ubGVuZ3RoICYmICF0aXRsZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi4obGlua3M/Lmxlbmd0aCA/IHsgbGlua3MgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICAuLi4odGl0bGUgPyB7IHRpdGxlIH0gOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rczogbGlua3M/LnNsaWNlKDAsIDYpLFxuICAgICAgICAgICAgYm90dG9tTGlua3M6IGxpbmtzPy5zbGljZSg2KSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBwcm9wcz8uYWRkcmVzcz8uWzBdPy5hZGRyZXNzLFxuICAgICAgICAgICAgICAgIGNpdHk6IHByb3BzPy5hZGRyZXNzPy5bMF0/LmNpdHksXG4gICAgICAgICAgICAgICAgY291bnRyeTogcHJvcHM/LmFkZHJlc3M/LlswXT8uY291bnRyeSxcbiAgICAgICAgICAgICAgICBjcDogcHJvcHM/LmFkZHJlc3M/LlswXT8uY3AsXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmFkZHJlc3NUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgcHJvdmluY2U6IHByb3BzPy5hZGRyZXNzPy5bMF0/LnByb3ZpbmNlLFxuICAgICAgICAgICAgICAgIHVybDogcHJvcHM/LmFkZHJlc3M/LlswXT8ubGluayxcbiAgICAgICAgICAgICAgICBsaW5rczoge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IHByb3BzPy5hZGRyZXNzPy5bMF0/LmxpbmssXG4gICAgICAgICAgICAgICAgICAgIGxpbmtUeXBlOiAnZXh0ZXJuYWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFjdDogY29udGFjdCxcbiAgICAgICAgICAgIHNvY2lhbE1lZGlhOiBzb2NpYWxNZWRpYT8ubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgYmFieWxvbi0ke2l0ZW0ubmFtZT8udG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnVybCxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW4/LlswXSwgZmFsc2UpLFxuICAgICAgICAgICAgaW1nQmFja2dyb3VuZDogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmJhY2tncm91bmQ/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGxpbmtMb2dvOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBwcm9wcz8ubGlua3M/LmxvZ29MaW5rPy5bMF0/LmxpbmtWYWx1ZSxcbiAgICAgICAgICAgICAgICBsaW5rVHlwZTogcHJvcHM/LmxpbmtzPy5sb2dvTGluaz8uWzBdPy5saW5rVHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgY29udGFjdFRpdGxlOiBwcm9wcz8udGV4dHM/LmNvbnRhY3RUaXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIGFkZHJlc3NUaXRsZTogcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0Q29sb3JzOiB7XG4gICAgICAgICAgICAgICAgY29udGFjdFRpdGxlOiBwcm9wcz8udGV4dHM/LmNvbnRhY3RUaXRsZT8uY29sb3I/LnRyaW0oKSxcbiAgICAgICAgICAgICAgICBhZGRyZXNzVGl0bGU6IHByb3BzPy50ZXh0cz8uYWRkcmVzc1RpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uTWVudUluZm9JO1xuICAgIH1cblxuICAgIG1hcEluZm8yaW1nKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkLFxuICAgICAgICByaWdodFNpZGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IEJhYnlsb25JbmZvMmltZ0kgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlnaHRTaWRlOiByaWdodFNpZGUsXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZT8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHRzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdGV4dDogcHJvcHM/LnRleHRzPy50ZXh0LFxuICAgICAgICAgICAgICAgIGl0ZW0xOiBwcm9wcz8udGV4dHM/Lml0ZW0xLFxuICAgICAgICAgICAgICAgIGl0ZW0xVGV4dDogcHJvcHM/LnRleHRzPy5pdGVtMVRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKSxcbiAgICAgICAgICAgIGltYWdlczogdGhpcy5nZXRBcnJheUltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXMsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpbWFnZXNzbWFsbDogdGhpcy5nZXRBcnJheUltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2Vzc21hbGwsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBhZHZhbnRhZ2VzOiBwcm9wcz8uVmVudGFqYXM/Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uaWNvbn1gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvMmltZ0k7XG4gICAgfVxuXG4gICAgbWFwSW5mbzJjb2xpbWcoXG4gICAgICAgIHByb3BzOiBhbnkgfCB1bmRlZmluZWQsXG4gICAgICAgIHJpZ2h0U2lkZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogQmFieWxvbkluZm8yQ29sSW1nSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWdodFNpZGU6IHJpZ2h0U2lkZSxcbiAgICAgICAgICAgIHRleHQ6IHByb3BzPy50ZXh0cz8udGV4dCxcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlLFxuICAgICAgICAgICAgc3VidGl0bGU6IHByb3BzPy50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHNtYWxsaW1hZ2U6IHRoaXMuZ2V0QXJyYXlJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LnNtYWxsaW1hZ2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbT8udGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8uYnV0dG9ucyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm8yQ29sSW1nSTtcbiAgICB9XG5cbiAgICBtYXBaaWd6YWcoXG4gICAgICAgIHByb3BzOiBhbnkgfCB1bmRlZmluZWQsXG4gICAgICAgIHJpZ2h0U2lkZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogQmFieWxvbkluZm8yaW1nSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBpbWFnZXM6IChzdHJpbmcgfCBCYWJ5bG9uSW1hZ2VJKVtdIHwgdW5kZWZpbmVkID0gW107XG4gICAgICAgIGxldCB0ZXh0cywgdGFncztcbiAgICAgICAgaWYgKHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcykge1xuICAgICAgICAgICAgaW1hZ2VzID0gdGhpcy5nZXRBcnJheUltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXMsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0ZXh0cyA9IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbiA/P1xuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHByb3BzPy50ZXh0cz8ucHJldGl0bGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5wcmV0aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluID8/XG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY29udGVudHRpdGxlOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LmNvbnRlbnR0aXRsZT8uY29udGFpbiA/P1xuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LmNvbnRlbnR0aXRsZSxcbiAgICAgICAgICAgICAgICBjb250ZW50c3VidGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8uY29udGVudHN1YnRpdGxlPy5jb250YWluID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8uY29udGVudHN1YnRpdGxlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5jb250ZW50ZGVzY3JpcHRpb24/LmNvbnRhaW4gPz9cbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5jb250ZW50ZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgbG9nbzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5sb2dvPy5bMF0sXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpY29uczogcHJvcHM/LlZlbnRhamFzPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/LnRpdGxlIHx8IGl0ZW0/LnRleHRcbiAgICAgICAgICAgICAgICApPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogYGljb24tJHtpdGVtLmljb259YCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgaWNvblRpdGxlOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/Lmljb250aXRsZT8uY29udGFpbiA/PyBwcm9wcz8udGV4dHM/Lmljb250aXRsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWdzID0ge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBjb250ZW50dGl0bGU6IHByb3BzPy50ZXh0cz8uY29udGVudHRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgY29udGVudHN1YnRpdGxlOiBwcm9wcz8udGV4dHM/LmNvbnRlbnRzdWJ0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRkZXNjcmlwdGlvbjogcHJvcHM/LnRleHRzPy5jb250ZW50ZGVzY3JpcHRpb24/LnRhZyxcbiAgICAgICAgICAgICAgICBpY29uVGl0bGU6IHByb3BzPy50ZXh0cz8uaWNvbnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWdodFNpZGU6IHJpZ2h0U2lkZSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgcHJvcHM/LmJ1dHRvbnMuZmlsdGVyKChidG46IGFueSkgPT4gISFidG4/LmxpbmtWYWx1ZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0ZXh0cyxcbiAgICAgICAgICAgIGltYWdlcyxcbiAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm8yaW1nSTtcbiAgICB9XG5cbiAgICBtYXBHcmlkR2FsbGVyeShwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkluZm9JbWdJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgaXNJbkVudW0gPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgZW51bU9iajogVCxcbiAgICAgICAgICAgIHZhbHVlOiBhbnlcbiAgICAgICAgKTogdmFsdWUgaXMgVFtrZXlvZiBUXSA9PiBPYmplY3QudmFsdWVzKGVudW1PYmopLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlLFxuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnRleHQsXG4gICAgICAgICAgICBob3ZlcjogcHJvcHM/LnRleHRzPy5ob3ZlcixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwcm9wcz8udGV4dHM/LnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKSxcbiAgICAgICAgICAgIHZpZXc6IGlzSW5FbnVtKFZpZXdzVHlwZSwgcHJvcHM/Lm11bHRpbWVkaWE/LnZpZXcpXG4gICAgICAgICAgICAgICAgPyBwcm9wcy5tdWx0aW1lZGlhPy52aWV3XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpbWFnZXM6IHRoaXMuZ2V0QXJyYXlJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvSW1nSTtcbiAgICB9XG5cbiAgICBtYXBJbmZvR3JpZChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkluZm9HcmlkSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnRleHQsXG4gICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgIHByb3BzPy5idXR0b25zLmZpbHRlcigoYnRuOiBhbnkpID0+ICEhYnRuPy5saW5rVmFsdWUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXRlbXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV0aXRsZTogaXRlbT8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbT8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpdGVtLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogaXRlbS5saW5rc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpbmtzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbms6IGFueSkgPT4gbGluaz8ubGlua1ZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8uWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25JbmZvR3JpZEl0ZW1JXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvR3JpZEk7XG4gICAgfVxuXG4gICAgbWFwQmFubmVyR2FsbGVyeShcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25CYW5uZXJHYWxsZXJ5SSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3ZlcjogcHJvcHM/LnRleHRzPy5ob3ZlcixcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyksXG4gICAgICAgICAgICBpbWFnZXM6IHRoaXMuZ2V0QXJyYXlJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25CYW5uZXJHYWxsZXJ5STtcbiAgICB9XG5cbiAgICBtYXBCYW5uZXJOZXdzbGV0dGVyKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uSW5mb0ltZ0kgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHRleHQ6IHByb3BzPy50ZXh0cz8udGV4dCxcbiAgICAgICAgICAgIGhvdmVyOiBwcm9wcz8udGV4dHM/LmhvdmVyLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmJ1dHRvbnMpLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZT8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvSW1nSTtcbiAgICB9XG5cbiAgICBtYXBTbGlkZXJDb2xsMihcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZCxcbiAgICAgICAgcmlnaHRTaWRlOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBCYWJ5bG9uVG9wU2xpZGVyVjJJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHByb3BzXG4gICAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgICAgICByaWdodFNpZGU6IHJpZ2h0U2lkZSxcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgICAgICAgICAgICBpbWFnZXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChpdGVtOiBJbWFnZVJlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpdGVtLnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKGl0ZW0sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmxpbmtzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvblNsaWRlcjJDb2xJdGVtSVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5wcmV0aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9IGFzIEJhYnlsb25Ub3BTbGlkZXJWMkkpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtYXBTbGlkZXJDb2xsKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uVG9wU2xpZGVyVjJJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGltYWdlczogKHN0cmluZyB8IEJhYnlsb25JbWFnZUkpW10gfCB1bmRlZmluZWQgPSBbXTtcbiAgICAgICAgaWYgKHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcykge1xuICAgICAgICAgICAgaW1hZ2VzID0gcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5tYXAoKGl0ZW06IEltYWdlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOiBpdGVtPy5wcmV0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaXRlbT8uc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc3JjOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGltYWdlUmVzcG9uc2UgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbWFnZVJlc3BvbnNlLnNyY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1hZ2VSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgYWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGltYWdlUmVzcG9uc2UgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbWFnZVJlc3BvbnNlLmFsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uYnV0dG9ucz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidG46IGFueSkgPT4gYnRuPy5saW5rVmFsdWUgIT09IG51bGwgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubGlua3M/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnRuOiBhbnkpID0+IGJ0bi5saW5rVmFsdWUgIT09IG51bGwgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSBhcyBCYWJ5bG9uSW1hZ2VJO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZXMpIHtcbiAgICAgICAgICAgIGltYWdlcyA9IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZXM/Lm1hcCgoaXRlbTogSW1hZ2VSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlUmVzcG9uc2UgPSB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpdGVtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0/LnByZXRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbT8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpdGVtPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBzcmM6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW1hZ2VSZXNwb25zZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlUmVzcG9uc2Uuc3JjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWFnZVJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBhbHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW1hZ2VSZXNwb25zZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlUmVzcG9uc2UuYWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5idXR0b25zPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ0bjogYW55KSA9PiBidG4/LmxpbmtWYWx1ZSAhPT0gbnVsbCB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgbGlua3M6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5idXR0b25zPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ0bjogYW55KSA9PiBidG4/LmxpbmtWYWx1ZSAhPT0gbnVsbCB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9IGFzIEJhYnlsb25JbWFnZUk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgICAgIGltYWdlczogaW1hZ2VzLFxuICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdG9wQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy50b3BiZz8uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgYm90dG9tQkc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5ib3R0b21iZz8uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdG9wQ29sb3I6IHByb3BzPy50ZXh0cz8udG9wQ29sb3IsXG4gICAgICAgICAgICAgICAgICBib3R0b21Db2xvcjogcHJvcHM/LnRleHRzPy5Cb3R0b21Db2xvcixcbiAgICAgICAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9IGFzIEJhYnlsb25Ub3BTbGlkZXJWMkkpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtYXBJdGVtc0dyaWQocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25JdGVtc0dyaWRJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHByb3BzXG4gICAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgICAgICBpbWFnZXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChpdGVtOiBJbWFnZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlUmVzcG9uc2UgPSB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0/LnByZXRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IGl0ZW0/LnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbWFnZVJlc3BvbnNlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlUmVzcG9uc2Uuc3JjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1hZ2VSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW1hZ2VSZXNwb25zZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbWFnZVJlc3BvbnNlLmFsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uYnV0dG9ucz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnRuOiBhbnkpID0+IGJ0bj8ubGlua1ZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmxpbmtzPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidG46IGFueSkgPT4gYnRuLmxpbmtWYWx1ZSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgQmFieWxvbkltYWdlSTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wcz8uYnV0dG9ucz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYnRuOiBhbnkpID0+IGJ0bj8ubGlua1ZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSBhcyBCYWJ5bG9uSXRlbXNHcmlkSSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG1hcFJvb20ocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25JbmZvMmltZ0kgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKSxcbiAgICAgICAgICAgIHRleHRzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vbXM6IHByb3BzPy5yb29tcz8ubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IGl0ZW0ubXVsdGltZWRpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uZmlsdGVyKChpbWc6IEltYWdlUmVzcG9uc2UpID0+IGltZy5jb3ZlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltZzogSW1hZ2VSZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGltZy5wcmV0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaW1nLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpbWcuc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpbWcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkltYWdlSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0udGV4dHM/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwxOiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMjogaXRlbS50ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDM6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWw0OiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlczogaXRlbT8uc2VydmljZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IHN0cmluZykgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoUm9vbVNlcnZpY2VUeXBlLmNoYXJhY3RlcmlzdGljcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uY2xhc3N9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25Sb29tSW5mb0lcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm8yaW1nSTtcbiAgICB9XG5cbiAgICBtYXBSb29tc0dyaWQocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25Sb29tc0dyaWRJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IHJvb21zID0gcHJvcHM/LnJvb21zXG4gICAgICAgICAgICA/Lm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5idXR0b25zPy5maWx0ZXIoKGJ0bjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4/LmxpbmtUeXBlPy5pbmNsdWRlcygnaW50ZXJuYWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogaXRlbT8ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IGl0ZW0ubXVsdGltZWRpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uZmlsdGVyKChpbWc6IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy50YWdzPy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhZykgPT4gdGFnLm5hbWUgPT09ICdSb29tc0dyaWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbWc6IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOiBpbWcucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGltZy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaW1nLnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy50YWdzPy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhZykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcubmFtZSA9PT0gJ1Jvb21zR3JpZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IGltZy50YWdzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFnOiBhbnkpID0+IHRhZz8uZmlsdGVyYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uSW1hZ2VJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uc2xpY2UoMCwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0udGV4dHM/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwxOiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMjogaXRlbS50ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDM6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWw0OiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlczogaXRlbT8uc2VydmljZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IHN0cmluZykgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoUm9vbVNlcnZpY2VUeXBlLmNoYXJhY3RlcmlzdGljcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uY2xhc3N9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25Sb29tSW5mb0lcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KChhOiBCYWJ5bG9uUm9vbXNMaXN0SXRlbSwgYjogQmFieWxvblJvb21zTGlzdEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vbXM6IHByb3BzPy5idXR0b25zID8gcm9vbXMuc2xpY2UoMCwgNSkgOiByb29tcyxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9IGFzIEJhYnlsb25Sb29tc0dyaWRJO1xuICAgIH1cblxuICAgIG1hcFJvb21zU2xpZGVyKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uUm9vbXNTbGlkZXJJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyksXG4gICAgICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlQ29udGFpbjoge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRpdGxlQ29udGFpbjoge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvb21zOiBwcm9wcz8ucm9vbXNcbiAgICAgICAgICAgICAgICA/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uYnV0dG9ucz8uc2xpY2UoKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmxpbmtzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5tdWx0aW1lZGlhPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbWc6IGFueSkgPT4gaW1nPy5jb3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCBpdGVtPy5tdWx0aW1lZGlhPy5bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS50ZXh0cz8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMTogaXRlbS50ZXh0cz8uYWRkaXRpb25hbDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwyOiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDM6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsNDogaXRlbS50ZXh0cz8uYWRkaXRpb25hbDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogaXRlbT8ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uc2VydmljZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uZmlsdGVyKChzdmM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHN2Yy50eXBlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzdmMudHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NoYXJhY3RlcmlzdGljID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb29tU2VydmljZVR5cGUuY2hhcmFjdGVyaXN0aWNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ2xhc3MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXN2Yy5jbGFzcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmMuY2xhc3MudG9TdHJpbmcoKS50cmltKCkgIT09ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYXJhY3RlcmlzdGljICYmIGhhc0NsYXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubWFwKChzdmM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdmMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke3N2Yy5jbGFzc31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvblJvb21JbmZvSVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogQmFieWxvblJvb21zTGlzdEl0ZW0sIGI6IEJhYnlsb25Sb29tc0xpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICB9IGFzIEJhYnlsb25Sb29tc1NsaWRlckk7XG4gICAgfVxuXG4gICAgbWFwT2ZmZXJTbGlkZXIocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25PZmZlclNsaWRlckkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmJhY2tncm91bmRpbWFnZW5lcz8uWzBdIHx8XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5iYWNrZ3JvdW5kaW1hZ2U/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG9mZmVyczogcHJvcHM/Lm9mZmVycz8ubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkZyb206IGl0ZW0/LmFwcGxpY2F0aW9uRnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uVG86IGl0ZW0/LmFwcGxpY2F0aW9uVG8sXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogaXRlbT8uY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbT8uZGlzY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogaXRlbT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LlswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaXRlbS50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwxOiBpdGVtLnRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMjogaXRlbS50ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDM6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IGl0ZW0udGV4dHM/LmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnRleHRzPy5yZXNlcnZhdGlvblVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgQmFieWxvblRleHRJbmZvSSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbT8udXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUZyb206IGl0ZW0/LnZpc2libGVGcm9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVRvOiBpdGVtPy52aXNpYmxlVG8sXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25PZmZlcklcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbk9mZmVyU2xpZGVySTtcbiAgICB9XG4gICAgLy8tLS0tIExBWU9VVCBDT01QT05FTlRTIEVORC0tLS0vL1xuXG4gICAgbWFwVGhhbmtzKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uVGhhbmtzSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHMudGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHMuYnV0dG9ucyk/LlswXSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uVGhhbmtzSTtcbiAgICB9XG5cbiAgICBtYXBDb250YWN0Rm9ybShcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZCxcbiAgICAgICAgbmRQcm9wczogYW55IHwgdW5kZWZpbmVkLFxuICAgICAgICBuZFByb3BzQ29uc3VsdDogYW55IHwgdW5kZWZpbmVkXG4gICAgKTogQmFieWxvbkNvbnRhY3RGb3JtSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbnRhaW4sXG4gICAgICAgICAgICBzdWJ0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5zdWJ0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnN1YnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5zdWJ0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LnRhZyxcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogcHJvcHM/LnRleHRzPy5zdWJ0aXRsZT8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIHRleHRhcmVhOiB7XG4gICAgICAgICAgICAgICAgaWQ6ICdtZW5zYWplJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy5pbnB1dE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgbmFtZTogVXRpbHMubm9ybWFsaXplVGV4dChwcm9wcz8udGV4dHM/LmlucHV0TWVzc2FnZSksXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8uaW5wdXRNZXNzYWdlUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcHJvcHM/LnRleHRzPy5lcnJvclJlcXVpcmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHByb3BzPy50ZXh0cz8uY29uZGl0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbnMyOiBwcm9wcz8udGV4dHM/LmNvbmRpdGlvbnMyLFxuICAgICAgICAgICAgZHJvcGRvd246IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy5kcm9wZG93blRpdGxlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG5kUHJvcHNDb25zdWx0Py5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwcm9wOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bHRUeXBlSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuY29uc3VsdF90eXBlX2lkID8/IHByb3AuY29uc3VsdFR5cGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBwcm9wLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIERyb3Bkb3duT3B0aW9uXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5kcm9wZG93blBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgIGVycm9yOiBwcm9wcz8udGV4dHM/LmVycm9yUmVxdWlyZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG90ZWxEcm9wOlxuICAgICAgICAgICAgICAgIHByb3BzPy5ob3RlbHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LmhvdGVsRHJvcFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcz8uaG90ZWxzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IHByb3AuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBEcm9wZG93bk9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5ob3RlbERyb3BQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHByb3BzPy50ZXh0cz8uZXJyb3JSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdub21icmUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy5pbnB1dE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFV0aWxzLm5vcm1hbGl6ZVRleHQocHJvcHM/LnRleHRzPy5pbnB1dE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5pbnB1dE5hbWVQbGFjZUhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBwcm9wcz8udGV4dHM/LmVycm9yUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnc3VybmFtZScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LmlucHV0U3VybmFtZXMsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFV0aWxzLm5vcm1hbGl6ZVRleHQocHJvcHM/LnRleHRzPy5pbnB1dFN1cm5hbWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8uaW5wdXRTdXJuYW1lc1BsYWNlSG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHByb3BzPy50ZXh0cz8uZXJyb3JSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LmlucHV0RW1haWwsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFV0aWxzLm5vcm1hbGl6ZVRleHQocHJvcHM/LnRleHRzPy5pbnB1dEVtYWlsKSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8uaW5wdXRFbWFpbFBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHByb3BzPy50ZXh0cz8uZXJyb3JFbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMuZW1haWwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdwaG9uZScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LmlucHV0UGhvbmUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFV0aWxzLm5vcm1hbGl6ZVRleHQocHJvcHM/LnRleHRzPy5pbnB1dFBob25lKSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8uaW5wdXRQaG9uZVBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZWwnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogcHJvcHM/LnRleHRzPy5lcnJvclBob25lLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdIGFzIEJhYnlsb25JbnB1dElbXSxcbiAgICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdpY29uLScgKyBuZFByb3BzPy50ZXh0cz8uYWRkcmVzc0ljb24sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBuZFByb3BzPy50ZXh0cz8uYWRkcmVzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBuZFByb3BzPy5saW5rcz8uYWRkcmVzcz8uWzBdPy5bMF0/LmxhYmVsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ljb24tJyArIG5kUHJvcHM/LnRleHRzPy5lbWFpbEljb24sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBuZFByb3BzPy50ZXh0cz8uZW1haWxUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgbGlua3M6IFV0aWxzLm1hcEJ1dHRvbnMobmRQcm9wcz8ubGlua3M/LmVtYWlsPy5bMF0pPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnRuKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmJ0bixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgbWFpbHRvOiR7YnRuPy51cmx9bGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBob25lOiB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdpY29uLScgKyBuZFByb3BzPy50ZXh0cz8ucGhvbmVJY29uLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbmRQcm9wcz8udGV4dHM/LnBob25lVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKG5kUHJvcHM/LmxpbmtzPy5waG9uZT8uWzBdKT8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ0bikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5idG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYHBob25lOiR7YnRuPy51cmx9bGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uQ29udGFjdEZvcm1JO1xuICAgIH1cblxuICAgIG1hcENvbnRhY3RBZGRyZXNzKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkXG4gICAgKTogQmFieWxvbkNvbnRhY3RBZGRyZXNzSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NTb3VyY2UgPSBwcm9wcz8uaG90ZWxBZGRyZXNzID8/IHByb3BzPy5hZGRyZXNzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnaWNvbi0nICsgcHJvcHM/LnRleHRzPy5hZGRyZXNzSWNvbixcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LmFkZHJlc3NUaXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NTb3VyY2U/LmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWRkcmVzc1NvdXJjZT8uY3AsIGFkZHJlc3NTb3VyY2U/LmNpdHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzU291cmNlPy5sb2NhbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFthZGRyZXNzU291cmNlPy5wcm92aW5jZSwgYWRkcmVzc1NvdXJjZT8uY291bnRyeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHBhcnQsIGlkeCwgYXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gMCkgcmV0dXJuIHBhcnQgKyAnPGJyPic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gMSAmJiBhcnJbMl0pIHJldHVybiBwYXJ0ICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSAxKSByZXR1cm4gcGFydCArICc8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSAyKSByZXR1cm4gcGFydCArICc8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJyksXG4gICAgICAgICAgICAgICAgICAgIGxpbmtzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBhZGRyZXNzU291cmNlPy5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtUeXBlOiAnZXh0ZXJuYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhZGRyZXNzU291cmNlPy5hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSBhcyAoeyBzbWFsbFRleHQ/OiBzdHJpbmcgfSAmIEJhYnlsb25CdXR0b25JKVtdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ljb24tJyArIHByb3BzPy50ZXh0cz8uZW1haWxJY29uLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmVtYWlsVGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LmVtYWlsVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uZW1haWxUaXRsZT8uY29udGFpbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NvdXJjZT8uZW1haWwsXG4gICAgICAgICAgICAgICAgICAgIGxpbmtzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgbWFpbHRvOiR7YWRkcmVzc1NvdXJjZT8uZW1haWx9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rVHlwZTogJ2V4dGVybmFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYWRkcmVzc1NvdXJjZT8uZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUZXh0OiBhZGRyZXNzU291cmNlPy5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgKHsgc21hbGxUZXh0Pzogc3RyaW5nIH0gJiBCYWJ5bG9uQnV0dG9uSSlbXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBob25lOiB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdpY29uLScgKyBwcm9wcz8udGV4dHM/LnJlc2VydmF0aW9uc0ljb24sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ucmVzZXJ2YXRpb25zVGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnJlc2VydmF0aW9uc1RpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnJlc2VydmF0aW9uc1RpdGxlPy5jb250YWluIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzU291cmNlPy5waG9uZSxcbiAgICAgICAgICAgICAgICAgICAgbGlua3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGB0ZWw6JHthZGRyZXNzU291cmNlPy5waG9uZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtUeXBlOiAnZXh0ZXJuYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhZGRyZXNzU291cmNlPy5waG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRleHQ6IGFkZHJlc3NTb3VyY2U/LnBob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSBhcyAoeyBzbWFsbFRleHQ/OiBzdHJpbmcgfSAmIEJhYnlsb25CdXR0b25JKVtdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1hcENvbnRhY3RNYXAocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25Db250YWN0TWFwYUkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudFVybDogcHJvcHM/LnRleHRzPy5waG9uZUljb24sXG4gICAgICAgICAgICBtYXBJbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgICAgICBtYXBJbWFnZU1vYmlsZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzbW9iaWxlPy5bMF0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbkNvbnRhY3RNYXBhSTtcbiAgICB9XG5cbiAgICBtYXBDb250YWN0SG93KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uQ29udGFjdEhvd0kgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8uVmVudGFqYXM/Lm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYGljb24tJHtpdGVtLmljb259YCxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkNvbnRhY3RNYXBJdGVtXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25Db250YWN0SG93STtcbiAgICB9XG5cbiAgICBtYXBXZWJtYXAocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25XZWJtYXBJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmtzOiAoXG4gICAgICAgICAgICAgICAgcHJvcHM/LnBhZ2VzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChsaW5rOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsaW5rLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaW5rLnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rVHlwZTogJ2ludGVybmFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25CdXR0b25JXG4gICAgICAgICAgICAgICAgKSBhcyBCYWJ5bG9uQnV0dG9uSVtdXG4gICAgICAgICAgICApLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobGluaykgPT5cbiAgICAgICAgICAgICAgICAgICAgbGluay51cmw/LnNwbGl0KCcvJylbMV0gPT09XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2l0ZVN2Yy5zZWxlY3RlZExhbmd1YWdlSW5zdGFudD8ubG9jYXRlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZT8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtYXBMZWdhbChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkxlZ2FsSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24/LmNvbnRhaW4sXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvbj8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHRDb2xvcnM6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29sb3I/LnRyaW0oKSxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZT8uY29sb3I/LnRyaW0oKSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvbj8uY29sb3I/LnRyaW0oKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgQmFieWxvbkxlZ2FsSTtcbiAgICB9XG5cbiAgICBtYXBCcmVhZGNydW1icyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkJyZWFkY3J1bWJJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmtzOiAocHJvcHM/Lml0ZW1zIGFzIGFueVtdKVxuICAgICAgICAgICAgICAgID8uc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICAgICAgICAgICAgPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbT8ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1R5cGU6ICdpbnRlcm5hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtPy51cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtPy51cmw/LmNoYXJBdChpdGVtPy51cmw/Lmxlbmd0aCAtIDEpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtPy51cmw/LnNsaWNlKDAsIC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy51cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uQnV0dG9uSVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbkJyZWFkY3J1bWJJO1xuICAgIH1cblxuICAgIG1hcFJvb21zQ29scyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblJvb21zQ29sc0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsdGVyczogcHJvcHM/LmZpbHRlcnM/Lm1hcCgoZmlsdGVyOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZpbHRlcj8udmFsdWVzPy5tYXAoKG9wdGlvbjogc3RyaW5nKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbixcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgdGl0bGU6IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgICAgIHNtYWxsdGl0bGU6IGZpbHRlci5zbWFsbHRpdGxlLFxuICAgICAgICAgICAgICAgIGZpbHRlcklkOiBmaWx0ZXIuZmlsdGVySWQsXG4gICAgICAgICAgICB9KSkgYXMgQmFieWxvbkRyb3Bkb3duSVtdLFxuICAgICAgICAgICAgc3RGaWx0ZXJzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBuZEZpbHRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZT8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8ucm9vbXNcbiAgICAgICAgICAgICAgICA/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVkcm9vbUZpbHRlcklkOiBpdGVtPy50ZXh0cz8uYmVkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3NGaWx0ZXJJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtLmxpbmtzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGV4dHM/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBpdGVtPy5wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZVRleHQ6IGl0ZW0udGV4dHM/LmFkZGl0aW9uYWwyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpdGVtPy5vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVpcG1lbnQ6IGl0ZW0/LnNlcnZpY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uZmlsdGVyKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb21TZXJ2aWNlVHlwZS5jaGFyYWN0ZXJpc3RpY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGBpY29uLSR7aXRlbS5jbGFzc31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25Sb29tc0xpc3RFcXVpcG1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm11bHRpbWVkaWE/LmZpbmQoKGltZzogSW1hZ2VSZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy50YWdzPy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWcpID0+IHRhZy5uYW1lID09PSAnUm9vbXNDb2xzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA/PyBpdGVtLm11bHRpbWVkaWE/LlswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlczogdGhpcy5nZXRBcnJheUltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tdWx0aW1lZGlhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uUm9vbXNMaXN0SXRlbVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogQmFieWxvblJvb21zTGlzdEl0ZW0sIGI6IEJhYnlsb25Sb29tc0xpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICB9IGFzIEJhYnlsb25Sb29tc0NvbHNJO1xuICAgIH1cblxuICAgIG1hcEZlYXR1cmVzU2xpZGVyKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkXG4gICAgKTogQmFieWxvbkZlYXR1cmVzU2xpZGVySSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/LlZlbnRhamFzPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGBpY29uLSR7aXRlbS5pY29ufWAsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25GZWF0dXJlc1NsaWRlckl0ZW1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgIH0gYXMgQmFieWxvbkZlYXR1cmVzU2xpZGVySTtcbiAgICB9XG5cbiAgICBtYXBCYW5uZXJJbmZvKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uQmFubmVySW5mb0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdPy50aXRsZSxcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8ucHJldGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdmlkZW86IHByb3BzPy50ZXh0cz8uWydWaWRlby1saW5rJ10sXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmJ1dHRvbnMpLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25CYW5uZXJJbmZvSTtcbiAgICB9XG5cbiAgICBtYXBSb29tRGV0YWlsKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uUm9vbURldGFpbEkgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXByb3BzPy5yb29tKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGV4dHMsIG11bHRpbWVkaWEsIGJ1dHRvbnMgfSA9IHByb3BzPy5yb29tO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHRleHRzPy5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgdGV4dHM/LmFkZGl0aW9uYWw0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0ZXh0cz8uYWRkaXRpb25hbDQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0ZXh0cz8uYWRkaXRpb25hbDQgIT09ICcnXG4gICAgICAgICAgICAgICAgICAgID8gdGV4dHM/LmFkZGl0aW9uYWw0XG4gICAgICAgICAgICAgICAgICAgIDogdGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcHJldGl0bGU6IHRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgIGVxdWlwbWVudFRpdGxlOiB0ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMoYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcy5yb29tPy5zZXJ2aWNlc1xuICAgICAgICAgICAgICAgID8uZmlsdGVyKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhSb29tU2VydmljZVR5cGUuRXF1aXBtZW50KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtPy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0/LmNsYXNzfWAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB9KSkgYXMgQmFieWxvbkVxdWlwbWVudEl0ZW1bXSxcbiAgICAgICAgICAgIHNob3dMZXNzOiBwcm9wcz8udGV4dHM/LnNob3dMZXNzLFxuICAgICAgICAgICAgc2hvd01vcmU6IHByb3BzPy50ZXh0cz8uc2hvd01vcmUsXG4gICAgICAgIH0gYXMgQmFieWxvblJvb21EZXRhaWxJO1xuICAgIH1cblxuICAgIG1hcFRvcFNsaWRlclRodW1icyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblRvcFNsaWRlclRodW1ic0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBmcm9tOiBwcm9wcz8udGV4dHM/LmZyb20sXG4gICAgICAgICAgICBwcmljZTogcHJvcHM/LnRleHRzPy5wcmljZSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBwcm9wcz8udGV4dHM/LmN1cnJlbmN5LFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzLmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgICAgICBpbWFnZTogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbj8ubWFwKChpdGVtOiBJbWFnZVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0gYXMgQmFieWxvblRvcFNsaWRlclRodW1ic0k7XG4gICAgfVxuXG4gICAgbWFwUm9vbXNMaXN0KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uUm9vbXNMaXN0SSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdEZpbHRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5kRmlsdGVyczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8ucm9vbXNcbiAgICAgICAgICAgICAgICA/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVkcm9vbUZpbHRlcklkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcmlzdGljc0ZpbHRlcklkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmxpbmtzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5idXR0b25zPy5zbGljZSgpLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRleHRzPy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOiBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogaXRlbT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VUZXh0OiBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50OiBpdGVtPy5zZXJ2aWNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8udHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IHN0cmluZykgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb29tU2VydmljZVR5cGUuY2hhcmFjdGVyaXN0aWNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uY2xhc3N9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uUm9vbXNMaXN0RXF1aXBtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tdWx0aW1lZGlhPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltZzogYW55KSA9PiBpbWc/LmNvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgaXRlbT8ubXVsdGltZWRpYT8uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzOiB0aGlzLmdldEFycmF5SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm11bHRpbWVkaWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogaXRlbT8ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uUm9vbXNMaXN0SXRlbVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogQmFieWxvblJvb21zTGlzdEl0ZW0sIGI6IEJhYnlsb25Sb29tc0xpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICB9IGFzIEJhYnlsb25Sb29tc0NvbHNJO1xuICAgIH1cblxuICAgIG1hcENvbWluZ1Nvb24ocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25Db21pbmdTb29uSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbWFnZXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKFxuICAgICAgICAgICAgICAgIChpbWc6IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKGltZyksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25JbWFnZUlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBsb2dvOiBwcm9wcz8ubXVsdGltZWRpYT8ubG9nbz8ubWFwKFxuICAgICAgICAgICAgICAgIChpbWc6IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKGltZyksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25JbWFnZUlcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICB0ZXh0czogcHJvcHM/LnRleHRzLFxuICAgICAgICAgICAgc29jaWFsTWVkaWE6IHByb3BzPy5zb2NpYWxNZWRpYSxcbiAgICAgICAgICAgIGxpbms6IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmxpbmtzKT8uWzBdLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICB9IGFzIEJhYnlsb25Db21pbmdTb29uSTtcbiAgICB9XG5cbiAgICBtYXBPZmZlckRldGFpbChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbk9mZmVyRGV0YWlsSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/Lm9mZmVyPy5bMF0/LnRleHRzPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8ub2ZmZXI/LlswXT8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy5vZmZlcj8uWzBdPy50ZXh0cz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBuZFRpdGxlOiBwcm9wcz8ub2ZmZXI/LlswXT8udGV4dHM/LmFkZGl0aW9uYWwxLFxuICAgICAgICAgICAgbGFiZWxEaXNjb3VudDogcHJvcHM/Lm9mZmVyPy5bMF0/LnRleHRzPy5hZGRpdGlvbmFsMixcbiAgICAgICAgICAgIGxhYmVsRnJvbTogcHJvcHM/Lm9mZmVyPy5bMF0/LnRleHRzPy5hZGRpdGlvbmFsMyxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBwcm9wcz8ub2ZmZXI/LlswXT8uY3VycmVuY3ksXG4gICAgICAgICAgICBwcmljZTogcHJvcHM/Lm9mZmVyPy5bMF0/LnByaWNlLFxuICAgICAgICAgICAgZGlzY291bnQ6IHByb3BzPy5vZmZlcj8uWzBdPy5kaXNjb3VudCxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHByb3BzPy5vZmZlcj8uWzBdPy50ZXh0cz8uY29uZGl0aW9ucyxcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ub2ZmZXI/LlswXT8ubXVsdGltZWRpYT8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbGluazogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3MpPy5bMF0sXG4gICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/Lm9mZmVyPy5bMF0/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgIH0gYXMgQmFieWxvbk9mZmVyRGV0YWlsSTtcbiAgICB9XG5cbiAgICBtYXBPZmZlcnNMaXN0KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uT2ZmZXJzTGlzdEkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8ub2ZmZXJzPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOiBpdGVtPy50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbT8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0/LnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IGl0ZW0/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnQ6IGl0ZW0/LmRpc2NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpdGVtPy5tdWx0aW1lZGlhPy5bMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogaXRlbT8ubXVsdGltZWRpYT8uWzBdPy5hbHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZUJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VlT2ZmZXJCdXR0b246IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8ubGlua3MpPy5bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEZyb206IGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRGlzY291bnQ6IGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbWU6IGl0ZW0/LnNpdGVzPy5bMF0/LmhvbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cDogaXRlbT8uc2l0ZXM/LlswXT8ucG9wdXAsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25PZmZlcnNMaXN0SXRlbVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVySW1nOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGV4dENvbG9yczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uT2ZmZXJzTGlzdEk7XG4gICAgfVxuXG4gICAgbWFwRmFxKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uRmFxSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/LmxvY2F0aW9uSG93XG4gICAgICAgICAgICAgICAgPyBwcm9wcz8ubG9jYXRpb25Ib3c/Lml0ZW1zPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgKGZhcTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZhcS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmYXEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25GYXFJdGVtXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBwcm9wcz8uaXRlbXM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAoZmFxOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmFxLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZhcS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uRmFxSXRlbVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGltZzogcHJvcHM/LmxvY2F0aW9uTWFwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wcz8ubG9jYXRpb25NYXA/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25GYXFJO1xuICAgIH1cblxuICAgIG1hcFN0YXRpY0Zvb3Rlcihwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblN0YXRpY0Zvb3Rlckkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICBuZFRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmFkZHJlc3NUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LmFkZHJlc3NUaXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8uYWRkcmVzc1RpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgcmRUaXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5saW5rc1RpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ubGlua3NUaXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ubGlua3NUaXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRoVGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ubG9jYXRpb25UaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LmxvY2F0aW9uVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiAocHJvcHM/LnRleHRzPy5sb2NhdGlvblRpdGxlPy5jb250YWluID8/XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBwcm9wcz8udGV4dHM/Lm5ld3NsZXR0ZXJUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/Lm5ld3NsZXR0ZXJUaXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ubmV3c2xldHRlclRpdGxlPy5jb250YWluKSksXG5cbiAgICAgICAgICAgIGZpZnRoVGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uYWRkaXRpb25hbEZvb3RlclRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8uYWRkaXRpb25hbEZvb3RlclRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5hZGRpdGlvbmFsRm9vdGVyVGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBuZHRpdGxlOiBwcm9wcz8udGV4dHM/LmFkZHJlc3NUaXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHJkdGl0bGU6IHByb3BzPy50ZXh0cz8ubGlua3NUaXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRodGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8ubG9jYXRpb25UaXRsZT8udGFnID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8ubmV3c2xldHRlclRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgZmlmdGh0aXRsZTogcHJvcHM/LnRleHRzPy5hZGRpdGlvbmFsRm9vdGVyVGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBjb3B5cmlnaHQ6IHByb3BzPy50ZXh0cz8uY29weXJpZ2h0Py50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJhbWVVcmw6ICEhcHJvcHM/LnRleHRzPy5mcmFtZVVybFxuICAgICAgICAgICAgICAgID8gcHJvcHMudGV4dHMuZnJhbWVVcmxcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbnRhY3RJbmZvOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5saW5rcz8uY29udGFjdD8uWzBdKSxcbiAgICAgICAgICAgIGNvbnRhY3RMaW5rczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3M/LmNvbnRhY3RMaW5rcz8uWzBdKSxcbiAgICAgICAgICAgIGZvb3RlckxpbmtzOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5saW5rcz8uZm9vdGVyTGlua3M/LlswXSksXG4gICAgICAgICAgICBhZGRyZXNzOiBBcnJheS5pc0FycmF5KHByb3BzPy5hZGRyZXNzKVxuICAgICAgICAgICAgICAgID8gcHJvcHMuYWRkcmVzcy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3M6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYWRkcmVzcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogYWRkcmVzcy5hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2l0eTogYWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmluY2U6IGFkZHJlc3MucHJvdmluY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiBhZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcDogYWRkcmVzcy5jcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYWRkcmVzcy5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9hZGRyZXNzOiBhZGRyZXNzLmZ1bGxBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uQWRkcmVzc0l0ZW1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgYWRkcmVzc0hvdGVsczogQXJyYXkuaXNBcnJheShwcm9wcz8uYWRkcmVzc0hvdGVscylcbiAgICAgICAgICAgICAgICA/IHByb3BzLmFkZHJlc3NIb3RlbHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogYWRkcmVzcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFkZHJlc3MubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBhZGRyZXNzLnByb3ZpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeTogYWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3A6IGFkZHJlc3MuY3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFkZHJlc3MubGluayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lOiBhZGRyZXNzLnBob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6IGFkZHJlc3MuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2FkZHJlc3M6IGFkZHJlc3MuZnVsbEFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25BZGRyZXNzSXRlbVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc29jaWFsTWVkaWE6IHByb3BzPy5zb2NpYWxNZWRpYT8ubWFwKFxuICAgICAgICAgICAgICAgIChsaW5rOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgYmFieWxvbi0ke2xpbmsubmFtZT8udG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaW5rLnVybCxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkJ1dHRvbklcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb3B5cmlnaHQ6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8uY29weXJpZ2h0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8uY29weXJpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5jb3B5cmlnaHQ/LmNvbnRhaW4sXG4gICAgICAgICAgICBuYXY6IHByb3BzPy5uYXY/Lm1hcChcbiAgICAgICAgICAgICAgICAobmF2OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbmF2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG5hdi51cmwsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25CdXR0b25JXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaW1nOiB7XG4gICAgICAgICAgICAgICAgc3JjOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmJhY2tncm91bmQ/LlswXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYWx0OiBwcm9wcz8ubXVsdGltZWRpYT8uYmFja2dyb3VuZD8udGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nbzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUocHJvcHM/Lm11bHRpbWVkaWE/LmxvZ28/LlswXSwgZmFsc2UpLFxuICAgICAgICAgICAgLy8gaW5wdXQ6IHByb3BzPy50ZXh0cz8ubmV3c2xldHRlckRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmV3c2xldHRlcicsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8uaW5wdXRIb2xkZXIsXG4gICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBwcm9wcz8udGV4dHM/Lm5ld3NFcnJvckVtYWlsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsQWR2aXNlOiBwcm9wcz8udGV4dHM/LnN1YnNjcmliZXIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsTGlua3M6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgcHJvcHM/LmxpbmtzPy5hZGRpdGlvbmFsRm9vdGVyTGlua3M/LlswXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uU3RhdGljRm9vdGVySTtcbiAgICB9XG5cbiAgICBtYXBHYWxsZXJ5KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uR2FsbGVyeUkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ucHJldGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5wcmV0aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vbXNCdG46IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHM/LnRleHRzPy5maWx0ZXJSb29tcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzQnRuOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzPy50ZXh0cz8uZmlsdGVyQ2F0ZWdvcmllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzOiBwcm9wcy5maWx0ZXJzPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbDogaXRlbS5hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByb29tOiBpdGVtLnJvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICByb29tczogaXRlbS5yb29tcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkdhbGxlcnlGaWx0ZXJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpbWFnZXM6IHByb3BzPy5maWx0ZXJzXG4gICAgICAgICAgICAgICAgPy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYzogeyBtdWx0aW1lZGlhOiBhbnlbXTsgZmlsdGVySW5kZXg6IG51bWJlciB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckluZGV4OiBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLm11bHRpbWVkaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1lZGlhV2l0aEZpbHRlciA9IGZpbHRlci5tdWx0aW1lZGlhLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlckluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aW1lZGlhOiBtdWx0aW1lZGlhV2l0aEZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoeyBtdWx0aW1lZGlhIH06IGFueSkgPT4gbXVsdGltZWRpYSlcbiAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAoaW1nOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpbWcudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpbWcsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGltZz8uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvbkdhbGxlcnlJdGVtXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uR2FsbGVyeUk7XG4gICAgfVxuXG4gICAgbWFwTGFuZ3VhZ2VNb2RhbChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkxhbmd1YWdlTW9kYWxJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgc3VidGl0bGU6IHByb3BzPy50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/Lmxhbmd1YWdlcyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBwcm9wcy5sYW5ndWFnZXMuZmluZChcbiAgICAgICAgICAgICAgICAobG5nOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIGxuZy5pZCA9PT0gdGhpcy5zaXRlU3ZjLnNlbGVjdGVkTGFuZ3VhZ2VJbnN0YW50Py5pZFxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uTGFuZ3VhZ2VNb2RhbEk7XG4gICAgfVxuXG4gICAgbWFwRW5naW5lKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uRW5naW5lSSB8IEJhYnlsb25FbmdpbmVNb2RhbEkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb25seUFkdWx0czogcHJvcHM/Lm9ubHlBZHVsdHMsXG4gICAgICAgICAgICBkZWZhdWx0QnV0dG9uOiBwcm9wcz8uZGVmYXVsdEludGVybmFsQnV0dG9uLFxuICAgICAgICAgICAgYnV0dG9uOiB7IGxhYmVsOiBwcm9wcz8udGV4dHM/Lm1vdG9yU3VibWl0LCB1cmw6IHByb3BzPy51cmwgfSxcbiAgICAgICAgICAgIGRhdGVwaWNrZXJEYXRhOiB7XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BzPy50ZXh0cz8ubW90b3JEYXRlVGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ3Vlc3RzSW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5tb3Rvckd1ZXN0c0lucHV0SG9sZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb21vSW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5tb3RvclByb21vSG9sZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGd1ZXN0czoge1xuICAgICAgICAgICAgICAgIGJ0bjogeyBsYWJlbDogcHJvcHM/LnRleHRzPy5tb3RvckFwcGx5IH0sXG4gICAgICAgICAgICAgICAgYWR1bHRzRHJvcGRvd246IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8ubW90b3JBZHVsdHNUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5nZW5lcmF0ZUFnZXNPcHRpb25zKHByb3BzPy5tYXhBZHVsdHMsIDEpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAga2lkc0Ryb3Bkb3duOiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/Lm1vdG9yS2lkc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRpdGxlOiBwcm9wcz8udGV4dHM/Lm1vdG9yS2lkc1NtYWxsTGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZ2VuZXJhdGVBZ2VzT3B0aW9ucyhwcm9wcz8ubWF4Q2hpbGRyZW4pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmFiaWVzRHJvcGRvd246XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tYXhCYWJpZXMgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/Lm1vdG9yQmFiaWVzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRpdGxlOiBwcm9wcz8udGV4dHM/Lm1vdG9yQmFiaWVzU21hbGxUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZ2VuZXJhdGVBZ2VzT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcz8ubWF4QmFiaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhZ2VzRHJvcGRvd246IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5nZW5lcmF0ZUFnZXNPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM/Lm1heEFnZUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM/Lm1heEFnZUJhYmllcyArIDFcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFnZXNMYWJlbDogcHJvcHM/LnRleHRzPy5tb3RvckFnZXNUaXRsZSxcbiAgICAgICAgICAgICAgICBraWRzTGFiZWw6IHByb3BzPy50ZXh0cz8ubW90b3JLaWRMYWJlbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy5tb3RvclRpdGxlLFxuICAgICAgICAgICAgc3VidGl0bGU6IHByb3BzPy50ZXh0cz8ubW90b3JTdWJ0aXRsZSxcbiAgICAgICAgICAgIHVybDogcHJvcHM/LnVybCxcbiAgICAgICAgICAgIGhvdGVsOiBwcm9wcz8uaG90ZWxzPy5bMF0sXG4gICAgICAgICAgICBjb2RpZ286IHByb3BzPy5jb2RpZ28gPyBwcm9wcz8uY29kaWdvIDogJ2RlbW9fYzJ0X2NsaWVudGVzJywgLy90byBjaGFuZ2UsIGRvbnQgY29tZSBmcm9tIGJhY2tcbiAgICAgICAgICAgIGdsVmFsdWU6IHByb3BzPy5nbFZhbHVlLFxuICAgICAgICAgICAgaG90ZWxzSW5wdXQ6IHByb3BzPy50ZXh0cz8ubW90b3JEcm9wRG93bk5hbWUsXG4gICAgICAgICAgICBob3RlbHNQbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5tb3RvckRyb3BEb3duSG9sZGVyLFxuICAgICAgICAgICAgaG90ZWxzOiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogcHJvcHM/LmhvdGVscz8ubWFwKChob3RlbDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBob3RlbD8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGlja2VyOiBob3RlbD8udGlja2VyLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGhvdGVsPy51cmwsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBob3RlbD8uaWQsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uRW5naW5lTW9kYWxJIHwgQmFieWxvbkVuZ2luZUk7XG4gICAgfVxuICAgIG1hcFNsaWRlcjNJdGVtcyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblNsaWRlcjNJdGVtc0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZSxcbiAgICAgICAgICAgIGl0ZW1zOiBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/Lm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGl0ZW0ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluazogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyk/LlswXSxcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgQmFieWxvblNsaWRlckl0ZW1cbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvblNsaWRlcjNJdGVtc0k7XG4gICAgfVxuXG4gICAgbWFwSG90ZWxzU2xpZGVyKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uSG90ZWxzU2xpZGVySSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlLFxuICAgICAgICAgICAgaG90ZWxzOiBwcm9wcz8uaG90ZWxzPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXRpdGxlOiBpdGVtLnRleHRzLmFkZGl0aW9uYWwxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGV4dHMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbS5tdWx0aW1lZGlhPy5bMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogaXRlbS5tdWx0aW1lZGlhPy5bMF0/LmFsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0ubGlua3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25TbGlkZXJJdGVtXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25Ib3RlbHNTbGlkZXJJO1xuICAgIH1cblxuICAgIG1hcEhvdGVsc0xpc3QocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25Ib3RlbHNMaXN0SSB7XG4gICAgICAgIC8vIFRPRE86IFJldmlzYXIgbWFwcGVvIGRlIGltw6FnZW5lc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZSxcbiAgICAgICAgICAgIGhvdGVsczogcHJvcHM/LmhvdGVscz8ubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV0aXRsZTogaXRlbT8udGV4dHM/LmFkZGl0aW9uYWwxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRleHRzPy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbT8udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1vcmU6IGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbT8ubXVsdGltZWRpYT8uWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IGl0ZW0/Lm11bHRpbWVkaWE/LlswXT8uYWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbms6IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8ubGlua3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmJ1dHRvbnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0/LnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZlRpdGxlOiBwcm9wcz8udGV4dHM/LmZvb3RlclRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZlN1YnRpdGxlOiBwcm9wcz8udGV4dHM/LmZvb3RlclByZXRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXM6IGl0ZW0/LnNlcnZpY2VzTGlzdD8ubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbT8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0/LmNsYXNzfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBidG5MZXNzOiBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDMsXG4gICAgICAgICAgICAgICAgICAgICAgICBidG5Nb3JlOiBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDQsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25TbGlkZXJJdGVtXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25Ib3RlbHNMaXN0STtcbiAgICB9XG5cbiAgICBtYXBJbmZvNEltZyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkluZm80aW1nSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZSxcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgdGV4dDogcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIGltYWdlMTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaW1hZ2UyOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXNbMV0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpbWFnZTM6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lc1syXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGltYWdlNDogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzWzNdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25JbmZvNGltZ0k7XG4gICAgfVxuXG4gICAgbWFwU2VydmljZXNTbGlkZXIocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25TZXJ2aWNlc1NsaWRlckkge1xuICAgICAgICBjb25zdCBhZHZlbnQgPSBwcm9wcz8uc2VydmljZXNTZXJ2aWNlID8/IHByb3BzPy5WZW50YWphcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZT8udGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkdmFudGFnZXM6IGFkdmVudD8ubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSA/PyBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uY2xhc3MgPz8gaXRlbS5pY29ufWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0gYXMgQmFieWxvblNlcnZpY2VzU2xpZGVySTtcbiAgICB9XG5cbiAgICBtYXBBZHZhbnRhZ2VzKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uQWR2YW50YWdlc0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICBhZHZhbnRhZ2VzOiBwcm9wcz8uVmVudGFqYXM/Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgICAgIGljb246IGBpY29uLSR7aXRlbS5pY29ufWAsXG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGV4dENvbG9yczoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZU1vcmU6IHByb3BzPy50ZXh0cz8uYWR2YW50YWdlc3NlZW1vcmUsXG4gICAgICAgICAgICBzZWVMZXNzOiBwcm9wcz8udGV4dHM/LmFkdmFudGFnZXNzZWVsZXNzLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5hZHZhbnRhZ2VzaW1hZ2U/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uQWR2YW50YWdlc0k7XG4gICAgfVxuXG4gICAgbWFwSW5mb0JpZyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkluZm9CaWdJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8ucHJldGl0bGUsXG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LnRpdGxlLFxuICAgICAgICAgICAgdGV4dDogcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdPy5idXR0b25zXG4gICAgICAgICAgICApPy5bMF0sXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaW1nU21hbGw6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzFdID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5uZGltYWdlPy5bMF0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm9CaWdJO1xuICAgIH1cblxuICAgIG1hcEluZm9aaWdaYWdWMihwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkluZm9aaWd6YWdWMkkge1xuICAgICAgICBjb25zdCBbaW1hZ2VdID1cbiAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZSB8fCBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXMgfHwgW107XG4gICAgICAgIGNvbnN0IFtpbWFnZTJdID1cbiAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZTIgfHwgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlc3NtYWxsIHx8IFtdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoaW1hZ2U/LmJ1dHRvbnMpLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaW1hZ2UsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGltYWdlPy5wcmV0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGltYWdlPy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaW1hZ2U/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKGltYWdlMj8uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpbWFnZTIsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgcHJldGl0bGU6IGltYWdlMj8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpbWFnZTI/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpbWFnZTI/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlczogcHJvcHM/LlZlbnRhamFzPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYGljb24tJHtpdGVtLmljb259YCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdIGFzIEJhYnlsb25JbmZvWmlnemFnVjJJdGVtW10sXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm9aaWd6YWdWMkk7XG4gICAgfVxuXG4gICAgbWFwRm9vdGVyQ29udGFjdChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkZvb3RlckNvbnRhY3RJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgdGV4dDogcHJvcHM/LnRleHRzPy50ZXh0LFxuICAgICAgICAgICAgZXh0cmFUeHQ6IHByb3BzPy50ZXh0cz8uYWRkaXRpb25hbFRleHQxLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgaW1nOiB7XG4gICAgICAgICAgICAgICAgc3JjOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXSksXG4gICAgICAgICAgICAgICAgYWx0OiBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8uYWx0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkdmFudGFnZXM6IHByb3BzPy5WZW50YWphcz8ubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgIGljb246IGBpY29uLSR7aXRlbS5pY29ufWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3M/LmNvbnRhY3RMaW5rcz8uWzBdKSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBsb2NhbGl0eTogcHJvcHM/LmhvdGVsQWRkcmVzcz8ubG9jYWxpdHksXG4gICAgICAgICAgICAgICAgY2l0eTogcHJvcHM/LmhvdGVsQWRkcmVzcz8uY2l0eSxcbiAgICAgICAgICAgICAgICBwcm92aW5jZTogcHJvcHM/LmhvdGVsQWRkcmVzcz8ucHJvdmluY2UsXG4gICAgICAgICAgICAgICAgY291bnRyeTogcHJvcHM/LmhvdGVsQWRkcmVzcz8uY291bnRyeSxcbiAgICAgICAgICAgICAgICBjcDogcHJvcHM/LmhvdGVsQWRkcmVzcz8uY3AsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogcHJvcHM/LmhvdGVsQWRkcmVzcz8uYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBsYXQ6IHByb3BzPy5ob3RlbEFkZHJlc3M/LmxhdCxcbiAgICAgICAgICAgICAgICBsb246IHByb3BzPy5ob3RlbEFkZHJlc3M/LmxvbixcbiAgICAgICAgICAgICAgICBwaG9uZTogcHJvcHM/LmhvdGVsQWRkcmVzcz8ucGhvbmUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHByb3BzPy5ob3RlbEFkZHJlc3M/LmVtYWlsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uRm9vdGVyQ29udGFjdEk7XG4gICAgfVxuXG4gICAgbWFwSW5mbzJJbWdCaWcocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25JbmZvMmltZ0JpZ0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ucHJldGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5wcmV0aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGV4dDogcHJvcHM/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHByZXRpdGxlMjogcHJvcHM/LnRleHRzPy5uZFByZXRpdGxlLFxuICAgICAgICAgICAgdGl0bGUyOiBwcm9wcz8udGV4dHM/Lm5kVGl0bGUsXG4gICAgICAgICAgICB0ZXh0MjogcHJvcHM/LnRleHRzPy5uZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgYnV0dG9uMjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyk/LlsxXSxcbiAgICAgICAgICAgIGltZzoge1xuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2U/LlswXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYWx0OlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXT8uYWx0ID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZT8uWzBdLmFsdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbWdTbWFsbDoge1xuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5uZGltYWdlbmVzPy5bMF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5uZGltYWdlPy5bMF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGFsdDogcHJvcHM/Lm11bHRpbWVkaWE/Lm5kaW1hZ2VuZXM/LlswXT8uYWx0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uSW5mbzJpbWdCaWdJO1xuICAgIH1cblxuICAgIG1hcEZvb3RlckxvZ29zKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uRm9vdGVyTG9nb3NJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHRzOiBwcm9wcz8udGV4dHMsXG4gICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKSxcbiAgICAgICAgICAgIGxvZ29zOiBwcm9wcz8ubXVsdGltZWRpYT8ubG9nb3M/Lm1hcCgobG9nbzogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUobG9nbywgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGxpbms6IFV0aWxzLm1hcEJ1dHRvbnMobG9nbz8ubGlua3M/LlswXSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0gYXMgQmFieWxvbkZvb3RlckxvZ29zSTtcbiAgICB9XG5cbiAgICBtYXBGb290ZXJMaW5rcyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkZvb3RlckxpbmtzSSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3B5cmlnaHQ6IHByb3BzPy50ZXh0cz8uY29weXJpZ2h0LFxuICAgICAgICAgICAgeWVhcjogcHJvcHM/LnRleHRzPy55ZWFyLFxuICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyksXG4gICAgICAgIH0gYXMgQmFieWxvbkZvb3RlckxpbmtzSTtcbiAgICB9XG5cbiAgICBtYXBGb290ZXJTb2NpYWxzKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uRm9vdGVyU29jaWFsSSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkTGlua3MgPSAocHJvcHM/LnNvY2lhbE1lZGlhIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAobGluazogYW55KSA9PlxuICAgICAgICAgICAgICAgIGxpbmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBsaW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBsaW5rLnVybCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBsaW5rLmljb24gIT09ICcnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHRleHQ6IHByb3BzPy50ZXh0cz8udGV4dCxcbiAgICAgICAgICAgIGxpbmtzOiBmaWx0ZXJlZExpbmtzLm1hcCgobGluazogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGljb246IGBiYWJ5bG9uLSR7bGluay5uYW1lPy50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICAgICAgICAgICAgdXJsOiBsaW5rLnVybCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGluay5uYW1lLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIEJhYnlsb25Gb290ZXJTb2NpYWxJO1xuICAgIH1cblxuICAgIG1hcFNsaWRlcjJpdGVtcyhwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvblNsaWRlcjJpdGVtc0kge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnRleHQsXG4gICAgICAgICAgICBpdGVtczogcHJvcHM/LnJvb21zPy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogaXRlbT8udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtPy50ZXh0cz8ubmFtZSxcbiAgICAgICAgICAgICAgICBpbWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShpdGVtPy5tdWx0aW1lZGlhPy5bMF0pLFxuICAgICAgICAgICAgICAgICAgICBhbHQ6IGl0ZW0/Lm11bHRpbWVkaWE/LlswXT8uYWx0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gbGluazpcbiAgICAgICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKGl0ZW0/LmJ1dHRvbnMpLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VzOiBpdGVtPy5zZXJ2aWNlcz8ubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogYGljb24tJHtpdGVtLmNsYXNzfWAsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIEJhYnlsb25TbGlkZXIyaXRlbXNJO1xuICAgIH1cblxuICAgIG1hcFN0YXRpY0Zvb3RlcnYyKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uU3RhdGljRm9vdGVyVjJJIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgbmRUaXRsZTogcHJvcHM/LnRleHRzPy5hZGRyZXNzVGl0bGUsXG4gICAgICAgICAgICByZFRpdGxlOiBwcm9wcz8udGV4dHM/LmxpbmtzVGl0bGUsXG4gICAgICAgICAgICB0aFRpdGxlOiBwcm9wcz8udGV4dHM/LmxvY2F0aW9uVGl0bGUsXG4gICAgICAgICAgICBmcmFtZVVybDogcHJvcHM/LnRleHRzPy5mcmFtZVVybCxcbiAgICAgICAgICAgIGltZ1VybDogcHJvcHM/Lm11bHRpbWVkaWE/LmZvb3RlcmltZz8uWzBdPy5saW5rcz8uWzBdPy5saW5rVmFsdWUsXG4gICAgICAgICAgICBjb250YWN0SW5mbzogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3M/LmNvbnRhY3Q/LlswXSksXG4gICAgICAgICAgICBjb250YWN0TGlua3M6IFV0aWxzLm1hcEJ1dHRvbnMocHJvcHM/LmxpbmtzPy5jb250YWN0TGlua3M/LlswXSksXG4gICAgICAgICAgICBmb290ZXJMaW5rczogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8ubGlua3M/LmZvb3RlckxpbmtzPy5bMF0pLFxuICAgICAgICAgICAgYWRkcmVzczogQXJyYXkuaXNBcnJheShwcm9wcz8uYWRkcmVzcylcbiAgICAgICAgICAgICAgICA/IHByb3BzLmFkZHJlc3MubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogYWRkcmVzcz8uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhZGRyZXNzPy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogYWRkcmVzcz8uYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IGFkZHJlc3M/LmNpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jZTogYWRkcmVzcz8ucHJvdmluY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiBhZGRyZXNzPy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3A6IGFkZHJlc3M/LmNwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uQWRkcmVzc0l0ZW1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgc29jaWFsTWVkaWE6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogcHJvcHM/LnNvY2lhbE1lZGlhPy5bMF0/LnVybCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzPy50ZXh0cz8uaW5zdGFncmFtVGl0bGUsXG4gICAgICAgICAgICAgICAgfSBhcyBCYWJ5bG9uQnV0dG9uSSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb3B5cmlnaHQ6IHByb3BzPy50ZXh0cz8uY29weXJpZ2h0LFxuICAgICAgICAgICAgbmF2OiBwcm9wcz8ubmF2Py5tYXAoXG4gICAgICAgICAgICAgICAgKG5hdjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5hdj8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbmF2Py51cmwsXG4gICAgICAgICAgICAgICAgICAgIH0pIGFzIEJhYnlsb25CdXR0b25JXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaW1nOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uZm9vdGVyaW1nPy5bMF0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvblN0YXRpY0Zvb3RlclYySTtcbiAgICB9XG5cbiAgICBtYXBMaXN0R3JpZChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkxpc3RHcmlkSSB7XG4gICAgICAgIGNvbnN0IHsgaW1hZ2VuZXMgfSA9IHByb3BzPy5tdWx0aW1lZGlhIHx8IFtdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbXM6IGltYWdlbmVzPy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEltYWdlUmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b246IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8uYnV0dG9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rczogVXRpbHMubWFwQnV0dG9ucyhpdGVtPy5saW5rcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpdGVtLnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXM6IFtdLCAvL1RPRE86IHB0ZSBiYWNrLFxuICAgICAgICAgICAgICAgICAgICB9KSBhcyBCYWJ5bG9uSXRlbUdyaWRJXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25MaXN0R3JpZEk7XG4gICAgfVxuXG4gICAgbWFwTmV3c2xldHRlck1vZGFsKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uTmV3c2xldHRlckkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uczogcHJvcHM/LnRleHRzPy5jb25kaXRpb25zLFxuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBzdWJ0aXRsZTogcHJvcHM/LnRleHRzPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhwcm9wcz8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21haWwnLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwcm9wcz8udGV4dHM/LmlucHV0SG9sZGVyLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogcHJvcHM/LnRleHRzPy5uZXdzRXJyb3JFbWFpbCxcbiAgICAgICAgICAgIH0gYXMgQmFieWxvbklucHV0SSxcbiAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlYmFja2dyb3VuZD8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25OZXdzbGV0dGVySTtcbiAgICB9XG5cbiAgICBtYXBHbG9iYWxNb2RhbChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbkdsb2JhbE1vZGFsSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBwcm9wcz8udGV4dHM/LnN1YnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgIHByb3BzPy5idXR0b25zLmZpbHRlcigoYnRuOiBhbnkpID0+ICEhYnRuPy5saW5rVmFsdWUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaWZyYW1lOiBwcm9wcz8udGV4dHM/LmlmcmFtZSxcbiAgICAgICAgICAgIC8vIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUocHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF0pLFxuICAgICAgICB9IGFzIEJhYnlsb25HbG9iYWxNb2RhbEk7XG4gICAgfVxuXG4gICAgbWFwT2ZmZXJCYW5uZXJWMihwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbk9mZmVyUG9wdXBWMkkgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgb2ZmZXJEYXRhO1xuICAgICAgICBpZiAocHJvcHMub2ZmZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZlciA9IHByb3BzLm9mZmVycz8uWzBdO1xuICAgICAgICAgICAgb2ZmZXJEYXRhID0ge1xuICAgICAgICAgICAgICAgIHRleHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvZmZlcj8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogb2ZmZXI/LnRleHRzPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG9mZmVyPy50ZXh0cz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwxOiBvZmZlcj8udGV4dHM/LmFkZGl0aW9uYWwxLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMjogb2ZmZXI/LnRleHRzPy5hZGRpdGlvbmFsMixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDM6IG9mZmVyPy50ZXh0cz8uYWRkaXRpb25hbDMsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWw0OiBvZmZlcj8udGV4dHM/LmFkZGl0aW9uYWw0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKG9mZmVyPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXI/Lm11bHRpbWVkaWE/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKG9mZmVyPy5tdWx0aW1lZGlhPy5maW5kKChpbWc6IGFueSkgPT4gaW1nLmNvdmVyKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmZXI/Lm11bHRpbWVkaWE/LlswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKG9mZmVyPy5tdWx0aW1lZGlhPy5bMF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5kZWZhdWx0aW1hZ2VuZXM/LlswXSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogb2ZmZXI/LmRpc2NvdW50LFxuICAgICAgICAgICAgICAgIHByaWNlOiBvZmZlcj8ucHJpY2UsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IG9mZmVyPy5jdXJyZW5jeSxcbiAgICAgICAgICAgIH0gYXMgQmFieWxvbk9mZmVyUG9wdXBWMkk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZmVyRGF0YSA/PyBvZmZlckRhdGE7XG4gICAgfVxuXG4gICAgbWFwSGVhZEludHJvKFxuICAgICAgICBwcm9wczogYW55IHwgdW5kZWZpbmVkLFxuICAgICAgICBjb21wb25lbnQ6IGFueSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25IZWFkSW50cm9JIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnByZXRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ucHJldGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8udGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LnRleHQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy50ZXh0XG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50ZXh0Py5jb250YWluLFxuICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICBwcm9wcz8uYnV0dG9ucz8uZmlsdGVyKChidG46IGFueSkgPT4gYnRuPy5saW5rVmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFnczoge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBwcm9wcz8udGV4dHM/LnRleHQ/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0Q29sb3JzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbG9yPy50cmltKCkgPz9cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Py50ZXh0Y29sb3IsXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbG9yPy50cmltKCkgPz8gY29tcG9uZW50Py50ZXh0Y29sb3IsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXM/LmNvbG9yPy50cmltKCkgPz9cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Py50ZXh0Y29sb3IsXG4gICAgICAgICAgICAgICAgbGF0ZXN0UG9zdHNUaXRsZTpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5sYXRlc3RFbnRyaWVzPy5jb2xvcj8udHJpbSgpID8/XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD8udGV4dGNvbG9yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uSGVhZEludHJvSTtcbiAgICB9XG5cbiAgICBtYXBFeHRlcm5hbFNjcmlwdChcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25FeHRlcm5hbFNjcmlwdEkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NyaXB0OiBwcm9wcz8udGV4dHM/LkNvbnRhaW5lcixcbiAgICAgICAgICAgIG1zZ19sb2FkaW5nOiBwcm9wcz8udGV4dHM/LmxvYWRpbmcgPz8gJ0NhcmdhbmRvLi4uJyxcbiAgICAgICAgfSBhcyBCYWJ5bG9uRXh0ZXJuYWxTY3JpcHRJO1xuICAgIH1cblxuICAgIG1hcEJsb2dMaXN0KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uQmxvZ0xpc3RJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IHBvc3RzID0gcHJvcHM/LmJsb2c/LnBvc3RzPy5tYXAoKHBvc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBwb3N0Py5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBwb3N0Py50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBzdWJ0aXRsZTogcG9zdD8udGV4dHM/LnN1YnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHBvc3Q/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGFkZGl0aW9uYWwxOiBwb3N0Py50ZXh0cz8uYWRkaXRpb25hbDEsXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKHBvc3Q/Lm11bHRpbWVkaWE/LlswXSwgZmFsc2UpLFxuICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhwb3N0Py5idXR0b25zKSxcbiAgICAgICAgICAgIHBvc3RVcmw6IFV0aWxzLm1hcEJ1dHRvbnMocG9zdD8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBwb3N0Py5jYXRlZ29yeSxcbiAgICAgICAgICAgIGRhdGU6IHBvc3Q/LmRhdGUgPyBuZXcgRGF0ZShwb3N0LmRhdGUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWN0aXZlOiBwb3N0Py5hY3RpdmUsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBwb3N0cyA9IHBvc3RzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoYS5kYXRlICYmIGIuZGF0ZSkgcmV0dXJuIGIuZGF0ZSAtIGEuZGF0ZTsgLy8gYW1ib3MgY29uIGZlY2hhXG4gICAgICAgICAgICBpZiAoYS5kYXRlICYmICFiLmRhdGUpIHJldHVybiAtMTsgLy8gYSB0aWVuZSBmZWNoYSwgYiBub1xuICAgICAgICAgICAgaWYgKCFhLmRhdGUgJiYgYi5kYXRlKSByZXR1cm4gMTsgLy8gYiB0aWVuZSBmZWNoYSwgYSBub1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIG5pbmd1bm8gdGllbmUgZmVjaGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBsb3MgNCBwb3N0cyBtw6FzIHJlY2llbnRlc1xuICAgICAgICBwb3N0cyA9XG4gICAgICAgICAgICBwb3N0cz8uZmlsdGVyKChwb3N0OiB7IGFjdGl2ZTogYm9vbGVhbiB9KSA9PiBwb3N0LmFjdGl2ZSkgPz9cbiAgICAgICAgICAgIHBvc3RzID8/XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBjb25zdCBsYXRlc3RQb3N0cyA9IHBvc3RzPy5zbGljZSgwLCA0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ucHJldGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5wcmV0aXRsZVxuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbnRhaW4sXG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy50aXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy50aXRsZT8uY29udGFpbixcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXM/LnRhZyxcbiAgICAgICAgICAgICAgICBsYXRlc3RQb3N0c1RpdGxlOiBwcm9wcz8udGV4dHM/LmxhdGVzdEVudHJpZXM/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0Q29sb3JzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXM/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgbGF0ZXN0UG9zdHNUaXRsZTogcHJvcHM/LnRleHRzPy5sYXRlc3RFbnRyaWVzPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlSG9sZGVyOiBwcm9wcz8udGV4dHM/LnNlYXJjaFBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgbm90Zm91bmRUZXh0OiBwcm9wcz8udGV4dHM/LnNlYXJjaE5vdEZvdW5kLFxuICAgICAgICAgICAgcG9zdHM6IHBvc3RzLFxuICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5jYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5jYXRlZ29yaWVzPy5jb250YWluLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogcHJvcHM/LnBvc3RDYXRlZ29yaWVzPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5Py5pZCxcbiAgICAgICAgICAgICAgICB0aXRsZTogY2F0ZWdvcnk/Lm5hbWUsXG4gICAgICAgICAgICAgICAgcG9zdHM6IGNhdGVnb3J5Py50b3RhbFBvc3RzLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgbGF0ZXN0UG9zdHNUaXRsZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcHM/LnRleHRzPy5sYXRlc3RFbnRyaWVzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8ubGF0ZXN0RW50cmllc1xuICAgICAgICAgICAgICAgICAgICA6IHByb3BzPy50ZXh0cz8ubGF0ZXN0RW50cmllcz8uY29udGFpbixcbiAgICAgICAgICAgIGxhdGVzdFBvc3RzOiBsYXRlc3RQb3N0cyxcbiAgICAgICAgICAgIGFudGVyaW9yOiBwcm9wcz8udGV4dHM/LmFudGVyaW9yLFxuICAgICAgICAgICAgc2lndWllbnRlOiBwcm9wcz8udGV4dHM/LnNpZ3VpZW50ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtYXBCbG9nRGV0YWlsKHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uQmxvZ0RldGFpbHNJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBvc3RJZCA9IHByb3BzPy5wb3N0Py5pZDtcbiAgICAgICAgY29uc3QgcG9zdHMgPSBwcm9wcz8ucmVsYXRlZFBvc3RzPy5tYXAoKHBvc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBwb3N0Py5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBwb3N0Py50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBzdWJ0aXRsZTogcG9zdD8udGV4dHM/LnN1YnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHBvc3Q/LnRleHRzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGltZzogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcG9zdD8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMocG9zdD8uYnV0dG9ucyksXG4gICAgICAgICAgICBwb3N0VXJsOiBVdGlscy5tYXBCdXR0b25zKHBvc3Q/LmJ1dHRvbnMpPy5bMF0sXG4gICAgICAgICAgICBjYXRlZ29yeTogcG9zdD8uY2F0ZWdvcnksXG4gICAgICAgICAgICBkYXRlOiBwb3N0Py5kYXRlID8gbmV3IERhdGUocG9zdC5kYXRlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSAocG9zdHMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgICAgIChwOiBhbnkpID0+IHA/LmlkICE9PSBjdXJyZW50UG9zdElkXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHJlbGF0ZWRQb3N0c0NvbnN0ID1cbiAgICAgICAgICAgIGNhbmRpZGF0ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwOiBhbnkpID0+IHA/LmRhdGUpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiAoYi5kYXRlIGFzIGFueSkgLSAoYS5kYXRlIGFzIGFueSkpXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIDQpIHx8IFtdO1xuICAgICAgICBpZiAocmVsYXRlZFBvc3RzQ29uc3QubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgY29uc3Qgd2l0aG91dERhdGUgPSBjYW5kaWRhdGVzLmZpbHRlcigocDogYW55KSA9PiAhcD8uZGF0ZSk7XG4gICAgICAgICAgICByZWxhdGVkUG9zdHNDb25zdCA9IHJlbGF0ZWRQb3N0c0NvbnN0LmNvbmNhdChcbiAgICAgICAgICAgICAgICB3aXRob3V0RGF0ZS5zbGljZSgwLCA0IC0gcmVsYXRlZFBvc3RzQ29uc3QubGVuZ3RoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnBvc3Q/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBwcm9wcz8ucG9zdD8udGV4dHM/LnN1YnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzPy5wb3N0Py50ZXh0cz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhZGRpdGlvbmFsMTogcHJvcHM/LnBvc3Q/LnRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWwyOiBwcm9wcz8ucG9zdD8udGV4dHM/LmFkZGl0aW9uYWwyLFxuICAgICAgICAgICAgYWRkaXRpb25hbDM6IHByb3BzPy5wb3N0Py50ZXh0cz8uYWRkaXRpb25hbDMsXG4gICAgICAgICAgICBhZGRpdGlvbmFsNDogcHJvcHM/LnBvc3Q/LnRleHRzPy5hZGRpdGlvbmFsNCxcbiAgICAgICAgICAgIGRhdGU6IHByb3BzPy5wb3N0Py5kYXRlID8gbmV3IERhdGUocHJvcHM/LnBvc3Q/LmRhdGUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHByb3BzPy5wb3N0Py5jYXRlZ29yeSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXM/LnRhZyxcbiAgICAgICAgICAgICAgICBsYXRlc3RQb3N0c1RpdGxlOiBwcm9wcz8udGV4dHM/LmxhdGVzdEVudHJpZXM/LnRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0Q29sb3JzOiB7XG4gICAgICAgICAgICAgICAgcHJldGl0bGU6IHByb3BzPy50ZXh0cz8ucHJldGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXM/LmNvbG9yPy50cmltKCksXG4gICAgICAgICAgICAgICAgbGF0ZXN0UG9zdHNUaXRsZTogcHJvcHM/LnRleHRzPy5sYXRlc3RFbnRyaWVzPy5jb2xvcj8udHJpbSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlSG9sZGVyOiBwcm9wcz8udGV4dHM/LnNlYXJjaFBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgY2F0ZWdvcmllc1RpdGxlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcz8udGV4dHM/LmNhdGVnb3JpZXMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHM/LnRleHRzPy5jYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcHM/LnRleHRzPy5jYXRlZ29yaWVzPy5jb250YWluLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogcHJvcHM/LnBvc3RDYXRlZ29yaWVzPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5Py5pZCxcbiAgICAgICAgICAgICAgICB0aXRsZTogY2F0ZWdvcnk/Lm5hbWUsXG4gICAgICAgICAgICAgICAgcG9zdHM6IGNhdGVnb3J5Py50b3RhbFBvc3RzLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgcmVsYXRlZFBvc3RzVGl0bGU6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3BzPy50ZXh0cz8ubGF0ZXN0RW50cmllcyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LmxhdGVzdEVudHJpZXNcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9wcz8udGV4dHM/LmxhdGVzdEVudHJpZXM/LmNvbnRhaW4sXG4gICAgICAgICAgICByZWxhdGVkUG9zdHM6IHJlbGF0ZWRQb3N0c0NvbnN0LFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgc2hhcmU6IHByb3BzPy50ZXh0cz8uc2hhcmUsXG4gICAgICAgICAgICBpbWc6IHRoaXMuZ2V0SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5wb3N0Py5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICB9IGFzIEJhYnlsb25CbG9nRGV0YWlsc0k7XG4gICAgfVxuXG4gICAgbWFwTW9kYWxNdWx0aXBsZU1vdG9ycyhcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25Nb2RhbE11bHRpcGxlTW90b3JzSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2dvOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHByZXRpdGxlOiBwcm9wcz8udGV4dHM/LnByZXRpdGxlLFxuICAgICAgICAgICAgdGl0bGU6IHByb3BzPy50ZXh0cz8udGl0bGUsXG4gICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKFxuICAgICAgICAgICAgICAgIHByb3BzPy5idXR0b25zPy5maWx0ZXIoKGJ0bjogYW55KSA9PiBidG4/LmxpbmtWYWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICAgICksXG4gICAgICAgIH0gYXMgQmFieWxvbk1vZGFsTXVsdGlwbGVNb3RvcnNJO1xuICAgIH1cbiAgICBtYXBPZmZlckJhbm5lcihwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbk9mZmVyUG9wdXBJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IG9mZmVyRGF0YTtcbiAgICAgICAgaWYgKHByb3BzLm9mZmVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb2ZmZXIgPSBwcm9wcy5vZmZlcnM/LlswXTtcbiAgICAgICAgICAgIG9mZmVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogb2ZmZXI/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IG9mZmVyPy50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBvZmZlcj8udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsMTogb2ZmZXI/LnRleHRzPy5hZGRpdGlvbmFsMSxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDI6IG9mZmVyPy50ZXh0cz8uYWRkaXRpb25hbDIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwzOiBvZmZlcj8udGV4dHM/LmFkZGl0aW9uYWwzLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsNDogb2ZmZXI/LnRleHRzPy5hZGRpdGlvbmFsNCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJ1dHRvbjogVXRpbHMubWFwQnV0dG9ucyhvZmZlcj8uYnV0dG9ucyk/LlswXSxcbiAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyPy5tdWx0aW1lZGlhPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChvZmZlcj8ubXVsdGltZWRpYT8uZmluZCgoaW1nOiBhbnkpID0+IGltZy5jb3ZlcikgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZmVyPy5tdWx0aW1lZGlhPy5bMF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChvZmZlcj8ubXVsdGltZWRpYT8uWzBdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uZGVmYXVsdGltYWdlbmVzPy5bMF0pLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEJ1dHRvbnM6IFV0aWxzLm1hcEJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy5idXR0b25zPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnRuOiBhbnkpID0+IGJ0bj8ubGlua1ZhbHVlICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSBhcyBCYWJ5bG9uT2ZmZXJQb3B1cEk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZmVyRGF0YSA/PyBvZmZlckRhdGE7XG4gICAgfVxuXG4gICAgbWFwTW9kYWxQb3B1cChwcm9wczogYW55IHwgdW5kZWZpbmVkKTogQmFieWxvbk1vZGFsUG9wdXBJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlLFxuICAgICAgICAgICAgc3VidGl0bGU6IHByb3BzPy50ZXh0cz8uc3VidGl0bGUsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogcHJvcHM/LnRleHRzPy5pbnB1dEhvbGRlcixcbiAgICAgICAgICAgIG9wdGlvbnM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKChvcHRpb246IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uPy50aXRsZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9uPy50aXRsZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9uPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUob3B0aW9uLCBmYWxzZSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/Lm1vZGFsaW1hZ2U/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uTW9kYWxQb3B1cEk7XG4gICAgfVxuXG4gICAgbWFwUHJlc3NMaXN0KHByb3BzOiBhbnkgfCB1bmRlZmluZWQpOiBCYWJ5bG9uUHJlc3NMaXN0SSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZTogcHJvcHM/LnRleHRzPy50aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcz8udGV4dHM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaXRlbXM6IHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8ubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0/LnRpdGxlLFxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpdGVtPy5zdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoaXRlbSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGxpbms6IFV0aWxzLm1hcEJ1dHRvbnMoaXRlbT8ubGlua3MpPy5bMF0sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBidXR0b25zOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKSxcbiAgICAgICAgfSBhcyBCYWJ5bG9uUHJlc3NMaXN0STtcbiAgICB9XG5cbiAgICBtYXBBY3Rpb25CYW5uZXIocHJvcHM6IGFueSB8IHVuZGVmaW5lZCk6IEJhYnlsb25BY3Rpb25CYW5uZXJJIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICBwcm9wcz8ubXVsdGltZWRpYT8uYWN0aW9uYmFubmVyaW1hZ2U/LlswXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGltYWdlMjogdGhpcy5nZXRJbWFnZVJlc3BvbnNpdmUoXG4gICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmFjdGlvbmJhbm5lcmltYWdlMj8uWzBdLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYnV0dG9uOiBVdGlscy5tYXBCdXR0b25zKHByb3BzPy5idXR0b25zKT8uWzBdLFxuICAgICAgICAgICAgdGFibGU6IHByb3BzPy50ZXh0cz8udGFibGUsXG4gICAgICAgICAgICBzYWxhMTogcHJvcHM/LnRleHRzPy5zYWxhMSxcbiAgICAgICAgICAgIHNhbGEyOiBwcm9wcz8udGV4dHM/LnNhbGEyLFxuICAgICAgICB9IGFzIEJhYnlsb25BY3Rpb25CYW5uZXJJO1xuICAgIH1cbiAgICBtYXBJbmZvWmlnWmFnQ291bnRlcihcbiAgICAgICAgcHJvcHM6IGFueSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25JbmZvWmlnWmFnQ291bnRlckkgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgaW1hZ2VzOiAoc3RyaW5nIHwgQmFieWxvbkltYWdlSSlbXSB8IHVuZGVmaW5lZCA9IFtdO1xuICAgICAgICBsZXQgdGV4dHMsIHRhZ3M7XG4gICAgICAgIGNvbnN0IGRhdGVTdGFydCA9IHByb3BzPy50ZXh0cz8uZGF0ZXN0YXJ0O1xuICAgICAgICBjb25zdCBkYXRlRmluaXNoID0gcHJvcHM/LnRleHRzPy5kYXRlZmluaXNoO1xuICAgICAgICBpZiAocHJvcHM/Lm11bHRpbWVkaWE/LmltYWdlbmVzKSB7XG4gICAgICAgICAgICBpbWFnZXMgPSB0aGlzLmdldEFycmF5SW1hZ2VSZXNwb25zaXZlKFxuICAgICAgICAgICAgICAgIHByb3BzPy5tdWx0aW1lZGlhPy5pbWFnZW5lcyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRleHRzID0ge1xuICAgICAgICAgICAgICAgIHByZXRpdGxlOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LnByZXRpdGxlPy5jb250YWluID8/XG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcHJvcHM/LnRleHRzPy5wcmV0aXRsZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcz8udGV4dHM/LnByZXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8udGl0bGU/LmNvbnRhaW4gPz9cbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBwcm9wcz8udGV4dHM/LnRpdGxlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByb3BzPy50ZXh0cz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjb250ZW50dGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8uY29udGVudHRpdGxlPy5jb250YWluID8/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8uY29udGVudHRpdGxlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRzdWJ0aXRsZTpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5jb250ZW50c3VidGl0bGU/LmNvbnRhaW4gPz9cbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/LnRleHRzPy5jb250ZW50c3VidGl0bGUsXG4gICAgICAgICAgICAgICAgY29udGVudGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LmNvbnRlbnRkZXNjcmlwdGlvbj8uY29udGFpbiA/P1xuICAgICAgICAgICAgICAgICAgICBwcm9wcz8udGV4dHM/LmNvbnRlbnRkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBsb2dvOiB0aGlzLmdldEltYWdlUmVzcG9uc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM/Lm11bHRpbWVkaWE/LmxvZ28/LlswXSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGljb25zOiBwcm9wcz8uVmVudGFqYXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8udGl0bGUgfHwgaXRlbT8udGV4dFxuICAgICAgICAgICAgICAgICk/Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBgaWNvbi0ke2l0ZW0uaWNvbn1gLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBpY29uVGl0bGU6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzPy50ZXh0cz8uaWNvbnRpdGxlPy5jb250YWluID8/IHByb3BzPy50ZXh0cz8uaWNvbnRpdGxlLFxuICAgICAgICAgICAgICAgIGRheXNUZXh0OiBwcm9wcz8udGV4dHM/LmRheXN0ZXh0LFxuICAgICAgICAgICAgICAgIGhvdXJzVGV4dDogcHJvcHM/LnRleHRzPy5ob3Vyc3RleHQsXG4gICAgICAgICAgICAgICAgbWludXRlc1RleHQ6IHByb3BzPy50ZXh0cz8ubWludXRlc3RleHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFncyA9IHtcbiAgICAgICAgICAgICAgICBwcmV0aXRsZTogcHJvcHM/LnRleHRzPy5wcmV0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wcz8udGV4dHM/LnRpdGxlPy50YWcsXG4gICAgICAgICAgICAgICAgY29udGVudHRpdGxlOiBwcm9wcz8udGV4dHM/LmNvbnRlbnR0aXRsZT8udGFnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRzdWJ0aXRsZTogcHJvcHM/LnRleHRzPy5jb250ZW50c3VidGl0bGU/LnRhZyxcbiAgICAgICAgICAgICAgICBjb250ZW50ZGVzY3JpcHRpb246IHByb3BzPy50ZXh0cz8uY29udGVudGRlc2NyaXB0aW9uPy50YWcsXG4gICAgICAgICAgICAgICAgaWNvblRpdGxlOiBwcm9wcz8udGV4dHM/Lmljb250aXRsZT8udGFnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnV0dG9uczogVXRpbHMubWFwQnV0dG9ucyhcbiAgICAgICAgICAgICAgICBwcm9wcz8uYnV0dG9ucy5maWx0ZXIoKGJ0bjogYW55KSA9PiAhIWJ0bj8ubGlua1ZhbHVlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRleHRzLFxuICAgICAgICAgICAgaW1hZ2VzLFxuICAgICAgICAgICAgdGFncyxcbiAgICAgICAgICAgIGRhdGVTdGFydCxcbiAgICAgICAgICAgIGRhdGVGaW5pc2gsXG4gICAgICAgIH0gYXMgQmFieWxvbkluZm9aaWdaYWdDb3VudGVySTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VSZXNwb25zZSB7XG4gICAgcGF0aDogSW1hZ2VSZXNwb25zZVBhdGg7XG4gICAgdGh1bWJuYWlsczoge1xuICAgICAgICAzNzU6IEltYWdlUmVzcG9uc2VQYXRoO1xuICAgICAgICA1NDA6IEltYWdlUmVzcG9uc2VQYXRoO1xuICAgICAgICA3Njg6IEltYWdlUmVzcG9uc2VQYXRoO1xuICAgICAgICA4MDA6IEltYWdlUmVzcG9uc2VQYXRoO1xuICAgICAgICAxMDI0OiBJbWFnZVJlc3BvbnNlUGF0aDtcbiAgICAgICAgMTI4MDogSW1hZ2VSZXNwb25zZVBhdGg7XG4gICAgICAgIDEzNjY6IEltYWdlUmVzcG9uc2VQYXRoO1xuICAgIH07XG4gICAgY292ZXI6IG51bWJlcjtcbiAgICB0YWdzPzogYW55W107XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJldGl0bGU/OiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgbmRUaXRsZT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBsaW5rcz86IGFueVtdO1xuICAgIGJ1dHRvbnM/OiBhbnlbXTtcbiAgICBhbHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VSZXNwb25zZVBhdGgge1xuICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgd2VicDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudHNBZGRvbnMge1xuICAgIGNvbnRhY3RPZmZpY2U/OiBhbnk7XG4gICAgbWVudVNvY2lhbE1lZGlhPzogeyBbazogc3RyaW5nXTogc3RyaW5nIH1bXTtcbiAgICBjb25zdWx0VHlwZT86IENvbnN1bHRUeXBlSTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xuICAgIGlkPzogbnVtYmVyO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgY2hpbGRyZW4/OiBGaWx0ZXJPcHRpb247XG59XG4iXX0=