@norwegian/core-components 7.17.2 → 8.0.1

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 (622) hide show
  1. package/README.md +3 -3
  2. package/assets/documentation/accordion/accordion.md +1 -1
  3. package/assets/documentation/airport-select/airport-select.md +1 -0
  4. package/assets/documentation/alert/alert.md +1 -0
  5. package/assets/documentation/autocomplete/autocomplete.md +1 -1
  6. package/assets/documentation/backdrop/backdrop.md +1 -0
  7. package/assets/documentation/box/box.md +1 -1
  8. package/assets/documentation/button/button.md +1 -10
  9. package/assets/documentation/checkbox/checkbox.md +1 -7
  10. package/assets/documentation/container/container.md +1 -1
  11. package/assets/documentation/continue/continue.md +2 -1
  12. package/assets/documentation/cover/cover.md +1 -1
  13. package/assets/documentation/datepicker/datepicker.md +1 -3
  14. package/assets/documentation/datepicker-combo/datepicker-combo.md +2 -1
  15. package/assets/documentation/divider/divider.md +1 -1
  16. package/assets/documentation/dropdown/dropdown.md +1 -3
  17. package/assets/documentation/filter/filter.md +1 -0
  18. package/assets/documentation/grid/grid.md +1 -1
  19. package/assets/documentation/icon/icon.md +1 -1
  20. package/assets/documentation/icon-list/icon-list.md +1 -1
  21. package/assets/documentation/input/input.md +1 -1
  22. package/assets/documentation/journey/journey.md +2 -1
  23. package/assets/documentation/journey-availability/journey-availability.md +1 -3
  24. package/assets/documentation/journey-availability-list/journey-availability-list.md +1 -9
  25. package/assets/documentation/journey-selection/journey-selection.md +1 -1
  26. package/assets/documentation/journey-stopover/journey-stopover.md +2 -1
  27. package/assets/documentation/list/list.md +1 -1
  28. package/assets/documentation/micro-button/micro-button.md +2 -0
  29. package/assets/documentation/modal/modal.md +1 -0
  30. package/assets/documentation/number-field/number-field.md +1 -1
  31. package/assets/documentation/page-footer/page-footer.md +1 -1
  32. package/assets/documentation/page-header/page-header.md +1 -1
  33. package/assets/documentation/passenger-select/passenger-select.md +1 -1
  34. package/assets/documentation/phone-number/phone-number.md +1 -2
  35. package/assets/documentation/premium-toggle/premium-toggle.md +1 -9
  36. package/assets/documentation/radio/radio.md +1 -7
  37. package/assets/documentation/ribbon-banner/ribbon-banner.md +2 -1
  38. package/assets/documentation/select/select.md +1 -1
  39. package/assets/documentation/simple-list/simple-list.md +1 -1
  40. package/assets/documentation/slide-toggle/slide-toggle.md +1 -1
  41. package/assets/documentation/slider/slider.md +1 -1
  42. package/assets/documentation/sort/sort.md +1 -1
  43. package/assets/documentation/spinner/spinner.md +1 -1
  44. package/assets/documentation/status-box/status-box.md +2 -1
  45. package/assets/documentation/suggestions/suggestions.md +2 -1
  46. package/assets/documentation/tab-group/tab-group.md +1 -1
  47. package/assets/documentation/table/table.md +1 -8
  48. package/assets/documentation/tag/tag.md +1 -0
  49. package/assets/documentation/textarea/textarea.md +1 -1
  50. package/assets/documentation/toggle/toggle.md +1 -5
  51. package/assets/documentation/tooltip/tooltip.md +1 -0
  52. package/assets/documentation/trip-summary/trip-summary.md +1 -2
  53. package/fesm2022/norwegian-core-components.mjs +13636 -13565
  54. package/fesm2022/norwegian-core-components.mjs.map +1 -1
  55. package/index.d.ts +9449 -5
  56. package/package.json +14 -8
  57. package/styles/1__settings/_colors.scss +9 -9
  58. package/styles/1__settings/_mixins.scss +67 -40
  59. package/styles/1__settings/_type.scss +18 -6
  60. package/styles/1__settings/_vars.scss +7 -4
  61. package/styles/2__generic/_fonts.scss +7 -5
  62. package/styles/3__base/_animations.scss +84 -84
  63. package/styles/3__base/_body.scss +10 -8
  64. package/styles/3__base/_fixes.scss +1 -1
  65. package/styles/3__base/_form.scss +5 -3
  66. package/styles/3__base/_heading.scss +21 -12
  67. package/styles/3__base/_hr.scss +4 -0
  68. package/styles/3__base/_input.scss +5 -1
  69. package/styles/3__base/_link.scss +3 -0
  70. package/styles/3__base/_table.scss +8 -4
  71. package/styles/3__base/_type.scss +17 -13
  72. package/styles/_helpers.scss +4 -4
  73. package/styles/_index.scss +13 -13
  74. package/assets/documentation/campaign-header/campaign-header.md +0 -0
  75. package/assets/documentation/chip/chip.md +0 -1
  76. package/assets/documentation/info/info.md +0 -1
  77. package/assets/icons/small/info--light--light.svg +0 -4
  78. package/assets/images/logo--mobile.svg +0 -50
  79. package/assets/images/logo-reward.svg +0 -140
  80. package/assets/images/logo.svg +0 -135
  81. package/esm2022/lib/components/accordion/accordion.component.mjs +0 -163
  82. package/esm2022/lib/components/accordion/accordion.module.mjs +0 -20
  83. package/esm2022/lib/components/accordion/index.mjs +0 -3
  84. package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +0 -622
  85. package/esm2022/lib/components/airport-select/airport-select.component.mjs +0 -498
  86. package/esm2022/lib/components/airport-select/airport-select.module.mjs +0 -42
  87. package/esm2022/lib/components/airport-select/index.mjs +0 -7
  88. package/esm2022/lib/components/airport-select/models/airport-select-event.model.mjs +0 -2
  89. package/esm2022/lib/components/airport-select/models/airport-select-state.model.mjs +0 -2
  90. package/esm2022/lib/components/airport-select/models/airport.model.mjs +0 -2
  91. package/esm2022/lib/components/airport-select/models/results-labels.model.mjs +0 -3
  92. package/esm2022/lib/components/airport-select/services/airport-select-dropdown.service.mjs +0 -35
  93. package/esm2022/lib/components/airport-select/services/airport-select.service.mjs +0 -38
  94. package/esm2022/lib/components/alert/alert.component.mjs +0 -169
  95. package/esm2022/lib/components/alert/alert.module.mjs +0 -22
  96. package/esm2022/lib/components/alert/index.mjs +0 -4
  97. package/esm2022/lib/components/alert/models/alert.model.mjs +0 -2
  98. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +0 -318
  99. package/esm2022/lib/components/autocomplete/autocomplete.module.mjs +0 -43
  100. package/esm2022/lib/components/autocomplete/index.mjs +0 -4
  101. package/esm2022/lib/components/autocomplete/models/autocomplete.model.mjs +0 -2
  102. package/esm2022/lib/components/backdrop/backdrop.component.mjs +0 -58
  103. package/esm2022/lib/components/backdrop/backdrop.module.mjs +0 -19
  104. package/esm2022/lib/components/backdrop/index.mjs +0 -3
  105. package/esm2022/lib/components/box/box.component.mjs +0 -66
  106. package/esm2022/lib/components/box/box.module.mjs +0 -19
  107. package/esm2022/lib/components/box/index.mjs +0 -3
  108. package/esm2022/lib/components/button/button.component.mjs +0 -192
  109. package/esm2022/lib/components/button/button.module.mjs +0 -21
  110. package/esm2022/lib/components/button/index.mjs +0 -3
  111. package/esm2022/lib/components/campaign-header/campaign-header.component.mjs +0 -51
  112. package/esm2022/lib/components/campaign-header/campaign-header.module.mjs +0 -20
  113. package/esm2022/lib/components/campaign-header/index.mjs +0 -3
  114. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -163
  115. package/esm2022/lib/components/checkbox/checkbox.module.mjs +0 -20
  116. package/esm2022/lib/components/checkbox/index.mjs +0 -3
  117. package/esm2022/lib/components/chip/chip.component.mjs +0 -48
  118. package/esm2022/lib/components/chip/chip.module.mjs +0 -19
  119. package/esm2022/lib/components/chip/index.mjs +0 -3
  120. package/esm2022/lib/components/container/container.component.mjs +0 -50
  121. package/esm2022/lib/components/container/container.module.mjs +0 -19
  122. package/esm2022/lib/components/container/index.mjs +0 -3
  123. package/esm2022/lib/components/continue/continue.component.mjs +0 -199
  124. package/esm2022/lib/components/continue/continue.module.mjs +0 -23
  125. package/esm2022/lib/components/continue/index.mjs +0 -3
  126. package/esm2022/lib/components/cover/cover.component.mjs +0 -75
  127. package/esm2022/lib/components/cover/cover.module.mjs +0 -21
  128. package/esm2022/lib/components/cover/index.mjs +0 -3
  129. package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +0 -606
  130. package/esm2022/lib/components/datepicker/calendar/enums/week-start.enum.mjs +0 -6
  131. package/esm2022/lib/components/datepicker/calendar/models/calendar-date.model.mjs +0 -2
  132. package/esm2022/lib/components/datepicker/calendar/models/calendar.model.mjs +0 -2
  133. package/esm2022/lib/components/datepicker/calendar/models/day.model.mjs +0 -2
  134. package/esm2022/lib/components/datepicker/calendar/models/select-option.model.mjs +0 -2
  135. package/esm2022/lib/components/datepicker/calendar/models/week.model.mjs +0 -2
  136. package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -613
  137. package/esm2022/lib/components/datepicker/datepicker.module.mjs +0 -55
  138. package/esm2022/lib/components/datepicker/index.mjs +0 -9
  139. package/esm2022/lib/components/datepicker/services/calendar.service.mjs +0 -215
  140. package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +0 -417
  141. package/esm2022/lib/components/datepicker-combo/datepicker-combo.module.mjs +0 -31
  142. package/esm2022/lib/components/datepicker-combo/index.mjs +0 -3
  143. package/esm2022/lib/components/divider/divider.component.mjs +0 -59
  144. package/esm2022/lib/components/divider/divider.module.mjs +0 -28
  145. package/esm2022/lib/components/divider/index.mjs +0 -3
  146. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -170
  147. package/esm2022/lib/components/dropdown/dropdown.module.mjs +0 -21
  148. package/esm2022/lib/components/dropdown/index.mjs +0 -3
  149. package/esm2022/lib/components/filter/enums/trip-type.enum.mjs +0 -8
  150. package/esm2022/lib/components/filter/filter.component.mjs +0 -1445
  151. package/esm2022/lib/components/filter/filter.module.mjs +0 -81
  152. package/esm2022/lib/components/filter/index.mjs +0 -4
  153. package/esm2022/lib/components/grid/col/col.component.mjs +0 -49
  154. package/esm2022/lib/components/grid/grid.component.mjs +0 -72
  155. package/esm2022/lib/components/grid/grid.module.mjs +0 -20
  156. package/esm2022/lib/components/grid/index.mjs +0 -4
  157. package/esm2022/lib/components/icon/icon.component.mjs +0 -44
  158. package/esm2022/lib/components/icon/icon.module.mjs +0 -19
  159. package/esm2022/lib/components/icon/index.mjs +0 -3
  160. package/esm2022/lib/components/icon-list/icon-list.component.mjs +0 -50
  161. package/esm2022/lib/components/icon-list/icon-list.module.mjs +0 -20
  162. package/esm2022/lib/components/icon-list/index.mjs +0 -4
  163. package/esm2022/lib/components/icon-list/models/icon-list.model.mjs +0 -2
  164. package/esm2022/lib/components/index.mjs +0 -68
  165. package/esm2022/lib/components/info/index.mjs +0 -4
  166. package/esm2022/lib/components/info/info.component.mjs +0 -116
  167. package/esm2022/lib/components/info/info.module.mjs +0 -36
  168. package/esm2022/lib/components/info/models/info.model.mjs +0 -2
  169. package/esm2022/lib/components/input/index.mjs +0 -3
  170. package/esm2022/lib/components/input/input.component.mjs +0 -228
  171. package/esm2022/lib/components/input/input.module.mjs +0 -35
  172. package/esm2022/lib/components/journey/index.mjs +0 -6
  173. package/esm2022/lib/components/journey/journey.component.mjs +0 -137
  174. package/esm2022/lib/components/journey/journey.module.mjs +0 -21
  175. package/esm2022/lib/components/journey/models/journey-flight.model.mjs +0 -2
  176. package/esm2022/lib/components/journey/models/journey.model.mjs +0 -2
  177. package/esm2022/lib/components/journey/models/marketing-carrier.enum.mjs +0 -8
  178. package/esm2022/lib/components/journey-availability/index.mjs +0 -3
  179. package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +0 -128
  180. package/esm2022/lib/components/journey-availability/journey-availability.module.mjs +0 -39
  181. package/esm2022/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs +0 -7
  182. package/esm2022/lib/components/journey-availability-list/index.mjs +0 -4
  183. package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +0 -182
  184. package/esm2022/lib/components/journey-availability-list/journey-availability-list.module.mjs +0 -36
  185. package/esm2022/lib/components/journey-selection/index.mjs +0 -7
  186. package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +0 -120
  187. package/esm2022/lib/components/journey-selection/journey-selection.module.mjs +0 -24
  188. package/esm2022/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs +0 -2
  189. package/esm2022/lib/components/journey-selection/models/journey-selection-common.model.mjs +0 -2
  190. package/esm2022/lib/components/journey-selection/models/journey-selection-expanded.model.mjs +0 -2
  191. package/esm2022/lib/components/journey-selection/models/journey-selection.model.mjs +0 -2
  192. package/esm2022/lib/components/journey-stopover/index.mjs +0 -4
  193. package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +0 -150
  194. package/esm2022/lib/components/journey-stopover/journey-stopover.module.mjs +0 -21
  195. package/esm2022/lib/components/journey-stopover/models/stopover-time.model.mjs +0 -2
  196. package/esm2022/lib/components/list/index.mjs +0 -4
  197. package/esm2022/lib/components/list/list-item/list-item.component.mjs +0 -52
  198. package/esm2022/lib/components/list/list.component.mjs +0 -78
  199. package/esm2022/lib/components/list/list.module.mjs +0 -20
  200. package/esm2022/lib/components/micro-button/index.mjs +0 -3
  201. package/esm2022/lib/components/micro-button/micro-button.component.mjs +0 -101
  202. package/esm2022/lib/components/micro-button/micro-button.module.mjs +0 -20
  203. package/esm2022/lib/components/modal/index.mjs +0 -3
  204. package/esm2022/lib/components/modal/modal.component.mjs +0 -156
  205. package/esm2022/lib/components/modal/modal.module.mjs +0 -38
  206. package/esm2022/lib/components/number-field/index.mjs +0 -4
  207. package/esm2022/lib/components/number-field/models/number-field.model.mjs +0 -2
  208. package/esm2022/lib/components/number-field/number-field.component.mjs +0 -162
  209. package/esm2022/lib/components/number-field/number-field.module.mjs +0 -39
  210. package/esm2022/lib/components/page-footer/index.mjs +0 -3
  211. package/esm2022/lib/components/page-footer/page-footer.component.mjs +0 -52
  212. package/esm2022/lib/components/page-footer/page-footer.module.mjs +0 -21
  213. package/esm2022/lib/components/page-header/hamburger/hamburger.component.mjs +0 -22
  214. package/esm2022/lib/components/page-header/index.mjs +0 -6
  215. package/esm2022/lib/components/page-header/models/wallet.model.mjs +0 -2
  216. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -171
  217. package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
  218. package/esm2022/lib/components/page-header/search/search.component.mjs +0 -49
  219. package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +0 -57
  220. package/esm2022/lib/components/passenger-select/enums/passenger-type.enum.mjs +0 -9
  221. package/esm2022/lib/components/passenger-select/index.mjs +0 -5
  222. package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +0 -2
  223. package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +0 -423
  224. package/esm2022/lib/components/passenger-select/passenger-select.module.mjs +0 -28
  225. package/esm2022/lib/components/phone-number/index.mjs +0 -3
  226. package/esm2022/lib/components/phone-number/phone-number.component.mjs +0 -182
  227. package/esm2022/lib/components/phone-number/phone-number.module.mjs +0 -44
  228. package/esm2022/lib/components/premium-toggle/index.mjs +0 -3
  229. package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +0 -68
  230. package/esm2022/lib/components/premium-toggle/premium-toggle.module.mjs +0 -20
  231. package/esm2022/lib/components/radio/index.mjs +0 -3
  232. package/esm2022/lib/components/radio/radio.component.mjs +0 -109
  233. package/esm2022/lib/components/radio/radio.module.mjs +0 -20
  234. package/esm2022/lib/components/ribbon-banner/index.mjs +0 -3
  235. package/esm2022/lib/components/ribbon-banner/ribbon-banner.component.mjs +0 -89
  236. package/esm2022/lib/components/ribbon-banner/ribbon-banner.module.mjs +0 -40
  237. package/esm2022/lib/components/select/index.mjs +0 -6
  238. package/esm2022/lib/components/select/models/select-option.model.mjs +0 -2
  239. package/esm2022/lib/components/select/optgroup/optgroup.component.mjs +0 -29
  240. package/esm2022/lib/components/select/option/option.component.mjs +0 -26
  241. package/esm2022/lib/components/select/select.component.mjs +0 -407
  242. package/esm2022/lib/components/select/select.module.mjs +0 -23
  243. package/esm2022/lib/components/select-new/index.mjs +0 -5
  244. package/esm2022/lib/components/select-new/models/select-option.model.mjs +0 -2
  245. package/esm2022/lib/components/select-new/optgroup/optgroup-new.component.mjs +0 -23
  246. package/esm2022/lib/components/select-new/option/option-new.component.mjs +0 -41
  247. package/esm2022/lib/components/select-new/select-new.component.mjs +0 -271
  248. package/esm2022/lib/components/select-new/select-new.module.mjs +0 -26
  249. package/esm2022/lib/components/select-new/services/select-new.service.mjs +0 -40
  250. package/esm2022/lib/components/simple-list/index.mjs +0 -3
  251. package/esm2022/lib/components/simple-list/simple-list.component.mjs +0 -48
  252. package/esm2022/lib/components/simple-list/simple-list.module.mjs +0 -19
  253. package/esm2022/lib/components/slide-toggle/index.mjs +0 -3
  254. package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -121
  255. package/esm2022/lib/components/slide-toggle/slide-toggle.module.mjs +0 -20
  256. package/esm2022/lib/components/slider/index.mjs +0 -3
  257. package/esm2022/lib/components/slider/slider.component.mjs +0 -515
  258. package/esm2022/lib/components/slider/slider.module.mjs +0 -20
  259. package/esm2022/lib/components/sort/index.mjs +0 -3
  260. package/esm2022/lib/components/sort/sort.component.mjs +0 -98
  261. package/esm2022/lib/components/sort/sort.module.mjs +0 -36
  262. package/esm2022/lib/components/spinner/index.mjs +0 -3
  263. package/esm2022/lib/components/spinner/spinner.component.mjs +0 -127
  264. package/esm2022/lib/components/spinner/spinner.module.mjs +0 -19
  265. package/esm2022/lib/components/status-box/index.mjs +0 -4
  266. package/esm2022/lib/components/status-box/models/status-box.model.mjs +0 -2
  267. package/esm2022/lib/components/status-box/status-box.component.mjs +0 -109
  268. package/esm2022/lib/components/status-box/status-box.module.mjs +0 -21
  269. package/esm2022/lib/components/suggestions/index.mjs +0 -3
  270. package/esm2022/lib/components/suggestions/suggestions.component.mjs +0 -44
  271. package/esm2022/lib/components/suggestions/suggestions.module.mjs +0 -20
  272. package/esm2022/lib/components/tab-group/index.mjs +0 -4
  273. package/esm2022/lib/components/tab-group/tab/tab.component.mjs +0 -140
  274. package/esm2022/lib/components/tab-group/tab-group.component.mjs +0 -91
  275. package/esm2022/lib/components/tab-group/tab-group.module.mjs +0 -21
  276. package/esm2022/lib/components/table/column/column.component.mjs +0 -16
  277. package/esm2022/lib/components/table/column-group/column-group.component.mjs +0 -30
  278. package/esm2022/lib/components/table/index.mjs +0 -11
  279. package/esm2022/lib/components/table/services/table.service.mjs +0 -24
  280. package/esm2022/lib/components/table/table-body/table-body.component.mjs +0 -23
  281. package/esm2022/lib/components/table/table-foot/table-foot.component.mjs +0 -23
  282. package/esm2022/lib/components/table/table-head/table-head.component.mjs +0 -23
  283. package/esm2022/lib/components/table/table-row/table-data/table-data.component.mjs +0 -15
  284. package/esm2022/lib/components/table/table-row/table-header/table-header.component.mjs +0 -15
  285. package/esm2022/lib/components/table/table-row/table-row.component.mjs +0 -23
  286. package/esm2022/lib/components/table/table.component.mjs +0 -27
  287. package/esm2022/lib/components/table/table.module.mjs +0 -63
  288. package/esm2022/lib/components/tag/index.mjs +0 -3
  289. package/esm2022/lib/components/tag/tag.component.mjs +0 -71
  290. package/esm2022/lib/components/tag/tag.module.mjs +0 -28
  291. package/esm2022/lib/components/textarea/index.mjs +0 -3
  292. package/esm2022/lib/components/textarea/textarea.component.mjs +0 -139
  293. package/esm2022/lib/components/textarea/textarea.module.mjs +0 -21
  294. package/esm2022/lib/components/toggle/index.mjs +0 -3
  295. package/esm2022/lib/components/toggle/models/options.model.mjs +0 -3
  296. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -102
  297. package/esm2022/lib/components/toggle/toggle.module.mjs +0 -35
  298. package/esm2022/lib/components/tooltip/index.mjs +0 -3
  299. package/esm2022/lib/components/tooltip/tooltip.component.mjs +0 -170
  300. package/esm2022/lib/components/tooltip/tooltip.module.mjs +0 -30
  301. package/esm2022/lib/components/trip-summary/index.mjs +0 -3
  302. package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +0 -167
  303. package/esm2022/lib/components/trip-summary/trip-summary.module.mjs +0 -36
  304. package/esm2022/lib/core/base/nas-component.base.mjs +0 -48
  305. package/esm2022/lib/core/decorators/debounce.decorator.mjs +0 -12
  306. package/esm2022/lib/core/directives/index.mjs +0 -3
  307. package/esm2022/lib/core/directives/nas-class/nas-class.directive.mjs +0 -80
  308. package/esm2022/lib/core/directives/nas-class/nas-class.module.mjs +0 -20
  309. package/esm2022/lib/core/extensions/html-element.extension.mjs +0 -31
  310. package/esm2022/lib/core/index.mjs +0 -5
  311. package/esm2022/lib/core/models/abandoned-basket-item.model.mjs +0 -2
  312. package/esm2022/lib/core/models/animate.model.mjs +0 -2
  313. package/esm2022/lib/core/models/class.model.mjs +0 -2
  314. package/esm2022/lib/core/models/index.mjs +0 -7
  315. package/esm2022/lib/core/models/link.model.mjs +0 -2
  316. package/esm2022/lib/core/models/position.model.mjs +0 -2
  317. package/esm2022/lib/core/models/utc-date.model.mjs +0 -40
  318. package/esm2022/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +0 -61
  319. package/esm2022/lib/core/services/animate-helper/animate-helper.service.mjs +0 -49
  320. package/esm2022/lib/core/services/bem-helper/bem-helper.service.mjs +0 -44
  321. package/esm2022/lib/core/services/date/date-compare.enum.mjs +0 -7
  322. package/esm2022/lib/core/services/date/date-helper.service.mjs +0 -199
  323. package/esm2022/lib/core/services/device/device-helper.service.mjs +0 -46
  324. package/esm2022/lib/core/services/geolocation/geolocation-state.enum.mjs +0 -8
  325. package/esm2022/lib/core/services/geolocation/geolocation.service.mjs +0 -66
  326. package/esm2022/lib/core/services/index.mjs +0 -10
  327. package/esm2022/lib/core/services/language/language-helper.service.mjs +0 -114
  328. package/esm2022/lib/core/services/sort/sort.service.mjs +0 -25
  329. package/esm2022/lib/core/services/viewport/viewport.service.mjs +0 -36
  330. package/esm2022/lib/index.mjs +0 -5
  331. package/esm2022/lib/services/get-position.service.mjs +0 -23
  332. package/esm2022/lib/services/index.mjs +0 -2
  333. package/esm2022/lib/shared/index.mjs +0 -2
  334. package/esm2022/lib/shared/models/flight-details.mjs +0 -3
  335. package/esm2022/lib/shared/models/index.mjs +0 -6
  336. package/esm2022/lib/shared/models/journey-availability-sort.model.mjs +0 -2
  337. package/esm2022/lib/shared/models/journey-availability.model.mjs +0 -2
  338. package/esm2022/lib/shared/models/journey-details.model.mjs +0 -2
  339. package/esm2022/lib/shared/models/journey-duration.model.mjs +0 -2
  340. package/esm2022/lib/shared/models/journey-stopover.model.mjs +0 -2
  341. package/esm2022/lib/shared/models/journey-transit-info.model.mjs +0 -2
  342. package/esm2022/lib/shared/models/operating-carrier.model.mjs +0 -2
  343. package/esm2022/lib/shared/models/sort-option.model.mjs +0 -2
  344. package/esm2022/lib/shared/models/sort.model.mjs +0 -2
  345. package/esm2022/lib/shared/models/trip-item-details.model.mjs +0 -2
  346. package/esm2022/lib/shared/models/trip-summary-details.model.mjs +0 -2
  347. package/esm2022/lib/shared/models/trip-summary.model.mjs +0 -2
  348. package/esm2022/norwegian-core-components.mjs +0 -5
  349. package/esm2022/public_api.mjs +0 -2
  350. package/lib/components/accordion/accordion.component.d.ts +0 -241
  351. package/lib/components/accordion/accordion.module.d.ts +0 -10
  352. package/lib/components/accordion/index.d.ts +0 -2
  353. package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -100
  354. package/lib/components/airport-select/airport-select.component.d.ts +0 -330
  355. package/lib/components/airport-select/airport-select.module.d.ts +0 -13
  356. package/lib/components/airport-select/index.d.ts +0 -6
  357. package/lib/components/airport-select/models/airport-select-event.model.d.ts +0 -4
  358. package/lib/components/airport-select/models/airport-select-state.model.d.ts +0 -5
  359. package/lib/components/airport-select/models/airport.model.d.ts +0 -11
  360. package/lib/components/airport-select/models/results-labels.model.d.ts +0 -8
  361. package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +0 -10
  362. package/lib/components/airport-select/services/airport-select.service.d.ts +0 -8
  363. package/lib/components/alert/alert.component.d.ts +0 -129
  364. package/lib/components/alert/alert.module.d.ts +0 -12
  365. package/lib/components/alert/index.d.ts +0 -3
  366. package/lib/components/alert/models/alert.model.d.ts +0 -10
  367. package/lib/components/autocomplete/autocomplete.component.d.ts +0 -135
  368. package/lib/components/autocomplete/autocomplete.module.d.ts +0 -13
  369. package/lib/components/autocomplete/index.d.ts +0 -3
  370. package/lib/components/autocomplete/models/autocomplete.model.d.ts +0 -5
  371. package/lib/components/backdrop/backdrop.component.d.ts +0 -38
  372. package/lib/components/backdrop/backdrop.module.d.ts +0 -9
  373. package/lib/components/backdrop/index.d.ts +0 -2
  374. package/lib/components/box/box.component.d.ts +0 -78
  375. package/lib/components/box/box.module.d.ts +0 -9
  376. package/lib/components/box/index.d.ts +0 -2
  377. package/lib/components/button/button.component.d.ts +0 -294
  378. package/lib/components/button/button.module.d.ts +0 -11
  379. package/lib/components/button/index.d.ts +0 -2
  380. package/lib/components/campaign-header/campaign-header.component.d.ts +0 -58
  381. package/lib/components/campaign-header/campaign-header.module.d.ts +0 -10
  382. package/lib/components/campaign-header/index.d.ts +0 -2
  383. package/lib/components/checkbox/checkbox.component.d.ts +0 -151
  384. package/lib/components/checkbox/checkbox.module.d.ts +0 -10
  385. package/lib/components/checkbox/index.d.ts +0 -2
  386. package/lib/components/chip/chip.component.d.ts +0 -48
  387. package/lib/components/chip/chip.module.d.ts +0 -9
  388. package/lib/components/chip/index.d.ts +0 -2
  389. package/lib/components/container/container.component.d.ts +0 -52
  390. package/lib/components/container/container.module.d.ts +0 -9
  391. package/lib/components/container/index.d.ts +0 -2
  392. package/lib/components/continue/continue.component.d.ts +0 -171
  393. package/lib/components/continue/continue.module.d.ts +0 -11
  394. package/lib/components/continue/index.d.ts +0 -2
  395. package/lib/components/cover/cover.component.d.ts +0 -125
  396. package/lib/components/cover/cover.module.d.ts +0 -11
  397. package/lib/components/cover/index.d.ts +0 -2
  398. package/lib/components/datepicker/calendar/calendar.component.d.ts +0 -169
  399. package/lib/components/datepicker/calendar/enums/week-start.enum.d.ts +0 -4
  400. package/lib/components/datepicker/calendar/models/calendar-date.model.d.ts +0 -5
  401. package/lib/components/datepicker/calendar/models/calendar.model.d.ts +0 -4
  402. package/lib/components/datepicker/calendar/models/day.model.d.ts +0 -10
  403. package/lib/components/datepicker/calendar/models/select-option.model.d.ts +0 -4
  404. package/lib/components/datepicker/calendar/models/week.model.d.ts +0 -5
  405. package/lib/components/datepicker/datepicker.component.d.ts +0 -289
  406. package/lib/components/datepicker/datepicker.module.d.ts +0 -16
  407. package/lib/components/datepicker/index.d.ts +0 -8
  408. package/lib/components/datepicker/services/calendar.service.d.ts +0 -27
  409. package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +0 -329
  410. package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +0 -10
  411. package/lib/components/datepicker-combo/index.d.ts +0 -2
  412. package/lib/components/divider/divider.component.d.ts +0 -68
  413. package/lib/components/divider/divider.module.d.ts +0 -10
  414. package/lib/components/divider/index.d.ts +0 -2
  415. package/lib/components/dropdown/dropdown.component.d.ts +0 -80
  416. package/lib/components/dropdown/dropdown.module.d.ts +0 -11
  417. package/lib/components/dropdown/index.d.ts +0 -2
  418. package/lib/components/filter/enums/trip-type.enum.d.ts +0 -6
  419. package/lib/components/filter/filter.component.d.ts +0 -942
  420. package/lib/components/filter/filter.module.d.ts +0 -22
  421. package/lib/components/filter/index.d.ts +0 -3
  422. package/lib/components/grid/col/col.component.d.ts +0 -45
  423. package/lib/components/grid/grid.component.d.ts +0 -92
  424. package/lib/components/grid/grid.module.d.ts +0 -10
  425. package/lib/components/grid/index.d.ts +0 -3
  426. package/lib/components/icon/icon.component.d.ts +0 -53
  427. package/lib/components/icon/icon.module.d.ts +0 -9
  428. package/lib/components/icon/index.d.ts +0 -2
  429. package/lib/components/icon-list/icon-list.component.d.ts +0 -49
  430. package/lib/components/icon-list/icon-list.module.d.ts +0 -10
  431. package/lib/components/icon-list/index.d.ts +0 -3
  432. package/lib/components/icon-list/models/icon-list.model.d.ts +0 -8
  433. package/lib/components/index.d.ts +0 -67
  434. package/lib/components/info/index.d.ts +0 -3
  435. package/lib/components/info/info.component.d.ts +0 -108
  436. package/lib/components/info/info.module.d.ts +0 -12
  437. package/lib/components/info/models/info.model.d.ts +0 -9
  438. package/lib/components/input/index.d.ts +0 -2
  439. package/lib/components/input/input.component.d.ts +0 -214
  440. package/lib/components/input/input.module.d.ts +0 -11
  441. package/lib/components/journey/index.d.ts +0 -5
  442. package/lib/components/journey/journey.component.d.ts +0 -102
  443. package/lib/components/journey/journey.module.d.ts +0 -11
  444. package/lib/components/journey/models/journey-flight.model.d.ts +0 -13
  445. package/lib/components/journey/models/journey.model.d.ts +0 -5
  446. package/lib/components/journey/models/marketing-carrier.enum.d.ts +0 -6
  447. package/lib/components/journey-availability/index.d.ts +0 -2
  448. package/lib/components/journey-availability/journey-availability.component.d.ts +0 -93
  449. package/lib/components/journey-availability/journey-availability.module.d.ts +0 -12
  450. package/lib/components/journey-availability-list/enums/availability-sort-option.enum.d.ts +0 -5
  451. package/lib/components/journey-availability-list/index.d.ts +0 -3
  452. package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +0 -114
  453. package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +0 -12
  454. package/lib/components/journey-selection/index.d.ts +0 -6
  455. package/lib/components/journey-selection/journey-selection.component.d.ts +0 -84
  456. package/lib/components/journey-selection/journey-selection.module.d.ts +0 -11
  457. package/lib/components/journey-selection/models/journey-selection-collapsed.model.d.ts +0 -11
  458. package/lib/components/journey-selection/models/journey-selection-common.model.d.ts +0 -7
  459. package/lib/components/journey-selection/models/journey-selection-expanded.model.d.ts +0 -5
  460. package/lib/components/journey-selection/models/journey-selection.model.d.ts +0 -14
  461. package/lib/components/journey-stopover/index.d.ts +0 -3
  462. package/lib/components/journey-stopover/journey-stopover.component.d.ts +0 -131
  463. package/lib/components/journey-stopover/journey-stopover.module.d.ts +0 -11
  464. package/lib/components/journey-stopover/models/stopover-time.model.d.ts +0 -4
  465. package/lib/components/list/index.d.ts +0 -3
  466. package/lib/components/list/list-item/list-item.component.d.ts +0 -35
  467. package/lib/components/list/list.component.d.ts +0 -76
  468. package/lib/components/list/list.module.d.ts +0 -10
  469. package/lib/components/micro-button/index.d.ts +0 -2
  470. package/lib/components/micro-button/micro-button.component.d.ts +0 -139
  471. package/lib/components/micro-button/micro-button.module.d.ts +0 -10
  472. package/lib/components/modal/index.d.ts +0 -2
  473. package/lib/components/modal/modal.component.d.ts +0 -119
  474. package/lib/components/modal/modal.module.d.ts +0 -12
  475. package/lib/components/number-field/index.d.ts +0 -3
  476. package/lib/components/number-field/models/number-field.model.d.ts +0 -5
  477. package/lib/components/number-field/number-field.component.d.ts +0 -124
  478. package/lib/components/number-field/number-field.module.d.ts +0 -12
  479. package/lib/components/page-footer/index.d.ts +0 -2
  480. package/lib/components/page-footer/page-footer.component.d.ts +0 -53
  481. package/lib/components/page-footer/page-footer.module.d.ts +0 -11
  482. package/lib/components/page-header/hamburger/hamburger.component.d.ts +0 -12
  483. package/lib/components/page-header/index.d.ts +0 -5
  484. package/lib/components/page-header/models/wallet.model.d.ts +0 -21
  485. package/lib/components/page-header/page-header.component.d.ts +0 -127
  486. package/lib/components/page-header/page-header.module.d.ts +0 -17
  487. package/lib/components/page-header/search/search.component.d.ts +0 -26
  488. package/lib/components/page-header/wallet/wallet.component.d.ts +0 -23
  489. package/lib/components/passenger-select/enums/passenger-type.enum.d.ts +0 -7
  490. package/lib/components/passenger-select/index.d.ts +0 -4
  491. package/lib/components/passenger-select/models/passengers.model.d.ts +0 -11
  492. package/lib/components/passenger-select/passenger-select.component.d.ts +0 -141
  493. package/lib/components/passenger-select/passenger-select.module.d.ts +0 -10
  494. package/lib/components/phone-number/index.d.ts +0 -2
  495. package/lib/components/phone-number/phone-number.component.d.ts +0 -263
  496. package/lib/components/phone-number/phone-number.module.d.ts +0 -13
  497. package/lib/components/premium-toggle/index.d.ts +0 -2
  498. package/lib/components/premium-toggle/premium-toggle.component.d.ts +0 -50
  499. package/lib/components/premium-toggle/premium-toggle.module.d.ts +0 -10
  500. package/lib/components/radio/index.d.ts +0 -2
  501. package/lib/components/radio/radio.component.d.ts +0 -137
  502. package/lib/components/radio/radio.module.d.ts +0 -10
  503. package/lib/components/ribbon-banner/index.d.ts +0 -2
  504. package/lib/components/ribbon-banner/ribbon-banner.component.d.ts +0 -66
  505. package/lib/components/ribbon-banner/ribbon-banner.module.d.ts +0 -13
  506. package/lib/components/select/index.d.ts +0 -5
  507. package/lib/components/select/models/select-option.model.d.ts +0 -4
  508. package/lib/components/select/optgroup/optgroup.component.d.ts +0 -25
  509. package/lib/components/select/option/option.component.d.ts +0 -24
  510. package/lib/components/select/select.component.d.ts +0 -204
  511. package/lib/components/select/select.module.d.ts +0 -13
  512. package/lib/components/select-new/index.d.ts +0 -4
  513. package/lib/components/select-new/models/select-option.model.d.ts +0 -6
  514. package/lib/components/select-new/optgroup/optgroup-new.component.d.ts +0 -8
  515. package/lib/components/select-new/option/option-new.component.d.ts +0 -16
  516. package/lib/components/select-new/select-new.component.d.ts +0 -173
  517. package/lib/components/select-new/select-new.module.d.ts +0 -14
  518. package/lib/components/select-new/services/select-new.service.d.ts +0 -10
  519. package/lib/components/simple-list/index.d.ts +0 -2
  520. package/lib/components/simple-list/simple-list.component.d.ts +0 -60
  521. package/lib/components/simple-list/simple-list.module.d.ts +0 -9
  522. package/lib/components/slide-toggle/index.d.ts +0 -2
  523. package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -70
  524. package/lib/components/slide-toggle/slide-toggle.module.d.ts +0 -10
  525. package/lib/components/slider/index.d.ts +0 -2
  526. package/lib/components/slider/slider.component.d.ts +0 -216
  527. package/lib/components/slider/slider.module.d.ts +0 -10
  528. package/lib/components/sort/index.d.ts +0 -2
  529. package/lib/components/sort/sort.component.d.ts +0 -55
  530. package/lib/components/sort/sort.module.d.ts +0 -12
  531. package/lib/components/spinner/index.d.ts +0 -2
  532. package/lib/components/spinner/spinner.component.d.ts +0 -104
  533. package/lib/components/spinner/spinner.module.d.ts +0 -9
  534. package/lib/components/status-box/index.d.ts +0 -3
  535. package/lib/components/status-box/models/status-box.model.d.ts +0 -5
  536. package/lib/components/status-box/status-box.component.d.ts +0 -92
  537. package/lib/components/status-box/status-box.module.d.ts +0 -11
  538. package/lib/components/suggestions/index.d.ts +0 -2
  539. package/lib/components/suggestions/suggestions.component.d.ts +0 -36
  540. package/lib/components/suggestions/suggestions.module.d.ts +0 -10
  541. package/lib/components/tab-group/index.d.ts +0 -3
  542. package/lib/components/tab-group/tab/tab.component.d.ts +0 -97
  543. package/lib/components/tab-group/tab-group.component.d.ts +0 -42
  544. package/lib/components/tab-group/tab-group.module.d.ts +0 -11
  545. package/lib/components/table/column/column.component.d.ts +0 -6
  546. package/lib/components/table/column-group/column-group.component.d.ts +0 -15
  547. package/lib/components/table/index.d.ts +0 -10
  548. package/lib/components/table/services/table.service.d.ts +0 -8
  549. package/lib/components/table/table-body/table-body.component.d.ts +0 -15
  550. package/lib/components/table/table-foot/table-foot.component.d.ts +0 -15
  551. package/lib/components/table/table-head/table-head.component.d.ts +0 -15
  552. package/lib/components/table/table-row/table-data/table-data.component.d.ts +0 -5
  553. package/lib/components/table/table-row/table-header/table-header.component.d.ts +0 -5
  554. package/lib/components/table/table-row/table-row.component.d.ts +0 -15
  555. package/lib/components/table/table.component.d.ts +0 -19
  556. package/lib/components/table/table.module.d.ts +0 -17
  557. package/lib/components/tag/index.d.ts +0 -2
  558. package/lib/components/tag/tag.component.d.ts +0 -71
  559. package/lib/components/tag/tag.module.d.ts +0 -10
  560. package/lib/components/textarea/index.d.ts +0 -2
  561. package/lib/components/textarea/textarea.component.d.ts +0 -156
  562. package/lib/components/textarea/textarea.module.d.ts +0 -11
  563. package/lib/components/toggle/index.d.ts +0 -2
  564. package/lib/components/toggle/models/options.model.d.ts +0 -7
  565. package/lib/components/toggle/toggle.component.d.ts +0 -159
  566. package/lib/components/toggle/toggle.module.d.ts +0 -11
  567. package/lib/components/tooltip/index.d.ts +0 -2
  568. package/lib/components/tooltip/tooltip.component.d.ts +0 -63
  569. package/lib/components/tooltip/tooltip.module.d.ts +0 -10
  570. package/lib/components/trip-summary/index.d.ts +0 -2
  571. package/lib/components/trip-summary/trip-summary.component.d.ts +0 -162
  572. package/lib/components/trip-summary/trip-summary.module.d.ts +0 -12
  573. package/lib/core/base/nas-component.base.d.ts +0 -11
  574. package/lib/core/decorators/debounce.decorator.d.ts +0 -1
  575. package/lib/core/directives/index.d.ts +0 -2
  576. package/lib/core/directives/nas-class/nas-class.directive.d.ts +0 -14
  577. package/lib/core/directives/nas-class/nas-class.module.d.ts +0 -8
  578. package/lib/core/extensions/html-element.extension.d.ts +0 -6
  579. package/lib/core/index.d.ts +0 -4
  580. package/lib/core/models/abandoned-basket-item.model.d.ts +0 -14
  581. package/lib/core/models/animate.model.d.ts +0 -6
  582. package/lib/core/models/class.model.d.ts +0 -7
  583. package/lib/core/models/index.d.ts +0 -6
  584. package/lib/core/models/link.model.d.ts +0 -5
  585. package/lib/core/models/position.model.d.ts +0 -4
  586. package/lib/core/models/utc-date.model.d.ts +0 -13
  587. package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +0 -10
  588. package/lib/core/services/animate-helper/animate-helper.service.d.ts +0 -9
  589. package/lib/core/services/bem-helper/bem-helper.service.d.ts +0 -7
  590. package/lib/core/services/date/date-compare.enum.d.ts +0 -5
  591. package/lib/core/services/date/date-helper.service.d.ts +0 -22
  592. package/lib/core/services/device/device-helper.service.d.ts +0 -16
  593. package/lib/core/services/geolocation/geolocation-state.enum.d.ts +0 -6
  594. package/lib/core/services/geolocation/geolocation.service.d.ts +0 -9
  595. package/lib/core/services/index.d.ts +0 -9
  596. package/lib/core/services/language/language-helper.service.d.ts +0 -12
  597. package/lib/core/services/sort/sort.service.d.ts +0 -6
  598. package/lib/core/services/viewport/viewport.service.d.ts +0 -11
  599. package/lib/index.d.ts +0 -4
  600. package/lib/services/get-position.service.d.ts +0 -9
  601. package/lib/services/index.d.ts +0 -1
  602. package/lib/shared/index.d.ts +0 -1
  603. package/lib/shared/models/flight-details.d.ts +0 -22
  604. package/lib/shared/models/index.d.ts +0 -5
  605. package/lib/shared/models/journey-availability-sort.model.d.ts +0 -8
  606. package/lib/shared/models/journey-availability.model.d.ts +0 -25
  607. package/lib/shared/models/journey-details.model.d.ts +0 -8
  608. package/lib/shared/models/journey-duration.model.d.ts +0 -7
  609. package/lib/shared/models/journey-stopover.model.d.ts +0 -15
  610. package/lib/shared/models/journey-transit-info.model.d.ts +0 -5
  611. package/lib/shared/models/operating-carrier.model.d.ts +0 -4
  612. package/lib/shared/models/sort-option.model.d.ts +0 -11
  613. package/lib/shared/models/sort.model.d.ts +0 -10
  614. package/lib/shared/models/trip-item-details.model.d.ts +0 -12
  615. package/lib/shared/models/trip-summary-details.model.d.ts +0 -5
  616. package/lib/shared/models/trip-summary.model.d.ts +0 -4
  617. package/public_api.d.ts +0 -1
  618. /package/assets/icons/{icon-chevron-left--light.svg → medium/chevron-left--light.svg} +0 -0
  619. /package/assets/icons/{icon-chevron-left.svg → medium/chevron-left.svg} +0 -0
  620. /package/assets/icons/{icon-chevron-right--light.svg → medium/chevron-right--light.svg} +0 -0
  621. /package/assets/icons/{icon-chevron-right.svg → medium/chevron-right.svg} +0 -0
  622. /package/assets/images/{cloud-1.svg → cloud.svg} +0 -0
@@ -1,1445 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Norwegian Air Shuttle. All Rights Reserved.
4
- */
5
- import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
6
- import { BehaviorSubject } from 'rxjs';
7
- import { TripType } from './enums/trip-type.enum';
8
- import { NasComponentBase } from '../../core/base/nas-component.base';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../core/services/device/device-helper.service";
11
- import * as i2 from "../../core/services/sort/sort.service";
12
- import * as i3 from "../../core/services/abandoned-basket/abandoned-basket.service";
13
- import * as i4 from "../../core/services/date/date-helper.service";
14
- import * as i5 from "@angular/common";
15
- import * as i6 from "../../core/directives/nas-class/nas-class.directive";
16
- import * as i7 from "../airport-select/airport-select.component";
17
- import * as i8 from "../passenger-select/passenger-select.component";
18
- import * as i9 from "../accordion/accordion.component";
19
- import * as i10 from "../icon/icon.component";
20
- import * as i11 from "@angular/forms";
21
- import * as i12 from "../button/button.component";
22
- import * as i13 from "../suggestions/suggestions.component";
23
- import * as i14 from "../datepicker-combo/datepicker-combo.component";
24
- import * as i15 from "../radio/radio.component";
25
- import * as i16 from "../backdrop/backdrop.component";
26
- let nextId = 0;
27
- /**
28
- * @description
29
- * Norwegian Filter Component | Functional | New design
30
- */
31
- export class FilterComponent extends NasComponentBase {
32
- get outboundOpen() {
33
- return this.outboundOpenValue;
34
- }
35
- set outboundOpen(value) {
36
- if (this.outboundOpenValue === value) {
37
- return;
38
- }
39
- if (value) {
40
- this.closeDropdowns();
41
- if (this.airportSelect) {
42
- this.airportSelect.originOpen = false;
43
- this.airportSelect.destinationOpen = false;
44
- }
45
- }
46
- this.outboundOpenValue = value;
47
- this.outboundOpenChange.emit(value);
48
- }
49
- get inboundOpen() {
50
- return this.inboundOpenValue;
51
- }
52
- set inboundOpen(value) {
53
- if (this.inboundOpenValue === value) {
54
- return;
55
- }
56
- if (value) {
57
- this.closeDropdowns();
58
- if (this.airportSelect) {
59
- this.airportSelect.originOpen = false;
60
- this.airportSelect.destinationOpen = false;
61
- }
62
- }
63
- clearTimeout(this.inboundOpenTimeout);
64
- this.inboundOpenTimeout = setTimeout(() => {
65
- this.inboundOpenValue = value;
66
- });
67
- this.inboundOpenChange.emit(value);
68
- }
69
- /**
70
- * @property Input
71
- * @description
72
- * An array of different passenger types that will be displayed.
73
- */
74
- get passengers() {
75
- return this.passengersValue;
76
- }
77
- set passengers(value) {
78
- if (!value) {
79
- return;
80
- }
81
- this.passengersValue = value;
82
- this.passengersChange.emit(value);
83
- }
84
- /**
85
- * @property Input
86
- * @description
87
- * Indicates if the edit search of accordion should be expended on mobile screen sizes.
88
- */
89
- get expandedAccordionMobile() {
90
- return this.expandedAccordionMobileValue;
91
- }
92
- set expandedAccordionMobile(value) {
93
- if (value === this.expandedAccordionMobileValue) {
94
- return;
95
- }
96
- this.expandedAccordionMobileValue = value;
97
- }
98
- get closestAirports() {
99
- return this.closestAirportsValue;
100
- }
101
- set closestAirports(airports) {
102
- if (!airports || airports.length < 1) {
103
- return;
104
- }
105
- this.closestAirportsValue = airports;
106
- if (this.exists(this.overrideOrigin)) {
107
- this.originAirportCode = airports[0].code;
108
- }
109
- }
110
- /**
111
- * @property Input
112
- * @required
113
- * @description
114
- * All airports that will be populated into the dropdown lists.
115
- * If displayLatestSearches is true, it will try to get the latest searches from the abandoned basket.
116
- */
117
- get airports() {
118
- return this.airportsValue;
119
- }
120
- set airports(airports) {
121
- this.airportsValue = airports;
122
- if (this.exists(this.displayLatestSearches)) {
123
- const abandonedBasket = this.abandonedBasketService.getAll();
124
- this.setLatestSearches(abandonedBasket, this.airports);
125
- }
126
- }
127
- /**
128
- * @property Input
129
- * @description
130
- * Sets and gets the selected trip type.
131
- */
132
- get tripType() {
133
- return this.tripTypeValue;
134
- }
135
- set tripType(tripType) {
136
- if (tripType === this.tripTypeValue) {
137
- return;
138
- }
139
- this.tripTypeValue = tripType;
140
- this.tripTypeChange.emit(this.tripType);
141
- }
142
- /**
143
- * @property Input
144
- * @description
145
- * Sets and gets whether the selected transit type is direct only or not.
146
- */
147
- get directOnly() {
148
- return this.directOnlyValue;
149
- }
150
- set directOnly(directOnly) {
151
- if (directOnly === this.directOnlyValue) {
152
- return;
153
- }
154
- this.directOnlyValue = directOnly;
155
- this.directOnlyChange.emit(this.directOnly);
156
- }
157
- /**
158
- * @property Input
159
- * @description
160
- * Selected datefor outbound calendar.
161
- */
162
- get outboundSelectedDate() {
163
- return this.outboundSelectedDateValue;
164
- }
165
- set outboundSelectedDate(date) {
166
- if (!date) {
167
- return;
168
- }
169
- setTimeout(() => {
170
- this.outboundSelectedDateValue = date;
171
- this.outboundSelectedDateChange.emit(date);
172
- });
173
- }
174
- /**
175
- * @property Input
176
- * @description
177
- * Selected datefor inbound calendar.
178
- */
179
- get inboundSelectedDate() {
180
- return this.inboundSelectedDateValue;
181
- }
182
- set inboundSelectedDate(date) {
183
- if (!date) {
184
- return;
185
- }
186
- setTimeout(() => {
187
- this.inboundSelectedDateValue = date;
188
- this.inboundSelectedDateChange.emit(date);
189
- });
190
- }
191
- get inboundSelectedMonth() {
192
- return this.inboundSelectedMonthValue;
193
- }
194
- set inboundSelectedMonth(month) {
195
- if (this.dateService.isSameMonth(month, this.inboundSelectedMonthValue)) {
196
- return;
197
- }
198
- setTimeout(() => {
199
- this.inboundMonthChange.emit(month);
200
- this.inboundSelectedMonthValue = month;
201
- });
202
- }
203
- get passengerSelectInputId() {
204
- return this.passengerSelectId ? this.passengerSelectId : `nas-filter__passenger-select-${this.componentId}`;
205
- }
206
- get tripTypeInputId() {
207
- return this.tripTypeId ? this.tripTypeId : `nas-filter__trip-type-${this.componentId}`;
208
- }
209
- get transitTypeInputId() {
210
- return this.transitTypeId ? this.transitTypeId : `nas-filter__transit-type-${this.componentId}`;
211
- }
212
- constructor(deviceHelper, sortService, abandonedBasketService, dateService, elementRef, changeDetector) {
213
- super('nas-filter');
214
- this.deviceHelper = deviceHelper;
215
- this.sortService = sortService;
216
- this.abandonedBasketService = abandonedBasketService;
217
- this.dateService = dateService;
218
- this.elementRef = elementRef;
219
- this.changeDetector = changeDetector;
220
- this.displaySummary = true;
221
- this.containerWidth = new BehaviorSubject(0);
222
- this.maximize = false;
223
- this.isNasGroupValid = false;
224
- this.inlineFlex = 0;
225
- this.openPassengerSelect = false;
226
- this.openTransitTypeSelect = false;
227
- this.onFocusInboundIgnored = false;
228
- /**
229
- * @property Input
230
- * @description
231
- * A separator for the filter summary that is dispayed if minimizeOnMobile is true.
232
- *
233
- * ### Example
234
- * 1 traveller, round trip and direct/transit
235
- */
236
- this.defaultSummarySeparator = '';
237
- /**
238
- * A separator for the filter summary is are dispayed if minimizeOnMobile is true.
239
- *
240
- * ### Example
241
- * 1 traveller, round trip and direct/transit
242
- */
243
- this.lastSummarySeparator = '';
244
- /**
245
- * @property Input
246
- * @description
247
- * A placeholder that will appear on the origin airport input field.
248
- */
249
- this.placeholderOrigin = '';
250
- /**
251
- * @property Input
252
- * @description
253
- * A placeholder that will appear on the destination airport input field.
254
- */
255
- this.placeholderDestination = '';
256
- /**
257
- * @property Output
258
- * @description
259
- * An event that is fired every time the origin dropdown selector opens or closes.
260
- */
261
- this.originOpenChange = new EventEmitter();
262
- /**
263
- * @property Output
264
- * @description
265
- * An event that is fired every time the origin dropdown selector opens or closes.
266
- */
267
- this.destinationOpenChange = new EventEmitter();
268
- /**
269
- * @property Output
270
- * @description
271
- * An event that is fired every time the origin2 dropdown selector opens or closes.
272
- */
273
- this.origin2OpenChange = new EventEmitter();
274
- /**
275
- * @property Output
276
- * @description
277
- * An event that is fired every time the origin dropdown selector opens or closes.
278
- */
279
- this.destination2OpenChange = new EventEmitter();
280
- /**
281
- * @property Output
282
- * @description
283
- * An event that is fired every time the passenger select dropdown opens or closes.
284
- */
285
- this.passengerSelectOpenChange = new EventEmitter();
286
- /**
287
- * @property Output
288
- * @description
289
- * An event that is fired every time the selected origin airport changes.
290
- */
291
- this.originChange = new EventEmitter();
292
- /**
293
- * @property Output
294
- * @description
295
- * An event that is fired every time the selected destination airport changes.
296
- */
297
- this.destinationChange = new EventEmitter();
298
- /**
299
- * @property Output
300
- * @description
301
- * An event that is fired every time the selected origin2 airport changes.
302
- */
303
- this.origin2Change = new EventEmitter();
304
- /**
305
- * @property Output
306
- * @description
307
- * An event that is fired every time the selected destination airport changes.
308
- */
309
- this.destination2Change = new EventEmitter();
310
- /**
311
- * @property Output
312
- * @description
313
- * An event that is fired every time a passenger selection change is performed.
314
- */
315
- this.passengersChange = new EventEmitter();
316
- /**
317
- * @property Output
318
- * @description
319
- * Sets and gets the selected trip type.
320
- */
321
- this.tripTypeChange = new EventEmitter();
322
- /**
323
- * @property Output
324
- * @description
325
- * Sets and gets whether the selected transit type is direct only or not.
326
- */
327
- this.directOnlyChange = new EventEmitter();
328
- /**
329
- * @property Input
330
- * @description
331
- * The display format of the date when user has selected the date and it is being shown in the input box for the date picker.
332
- * Please look at the angular Date pipe for valid formats and variations.
333
- */
334
- this.dateDisplayFormat = 'EEE d, MMM';
335
- /**
336
- * @property Input
337
- * @description
338
- * The time display format.
339
- */
340
- this.timeDisplayFormat = 'HH:mm';
341
- /**
342
- * @property Input
343
- * @description
344
- * A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
345
- * This requires that registerLocaleData is called with the respective locale.
346
- */
347
- this.locale = 'en-GB';
348
- /**
349
- * @property Input
350
- * @description
351
- * Will display the destination input, set this to false to remove it. It's true by default.
352
- */
353
- this.enableDestinationSelect = true;
354
- /**
355
- * @property Input
356
- * @description
357
- * Will display passenger select, set this to false to remove it. It's true by default.
358
- */
359
- this.enablePassengersSelect = true;
360
- /**
361
- * @property Input
362
- * @description
363
- * Will display the trip switch, set this to false to remove it. It's true by default.
364
- */
365
- this.enableTripSwitch = true;
366
- /**
367
- * @property Input
368
- * @description
369
- * Will display the transit switch, set this to false to remove it. It's true by default.
370
- */
371
- this.enableTransitSwitch = true;
372
- /**
373
- * @property Input
374
- * @description
375
- * Outbound and inbound dates will break horizontally.
376
- */
377
- this.datePickerComboInlineFlex = true;
378
- /**
379
- * @property Output
380
- * @description
381
- * When selected datehas been changed on the outbound calendar.
382
- */
383
- this.outboundSelectedDateChange = new EventEmitter();
384
- /**
385
- * @property Output
386
- * @description
387
- * When selected datehas been changed on the inbound calendar.
388
- */
389
- this.inboundSelectedDateChange = new EventEmitter();
390
- /**
391
- * @property Output
392
- * @description
393
- * Outbound datepicker is open or closed.
394
- */
395
- this.outboundOpenChange = new EventEmitter();
396
- /**
397
- * @property Output
398
- * @description
399
- * Inbound datepicker is open or closed.
400
- */
401
- this.inboundOpenChange = new EventEmitter();
402
- /**
403
- * @property Output
404
- * @description
405
- * Outbound calendar changes month.
406
- */
407
- this.outboundMonthChange = new EventEmitter();
408
- /**
409
- * @property Output
410
- * @description
411
- * Inbound calendar changes month.
412
- */
413
- this.inboundMonthChange = new EventEmitter();
414
- /**
415
- * @property Output
416
- * @description
417
- * When a user has actively changed the date.
418
- */
419
- this.focusOnNextChange = new EventEmitter();
420
- /**
421
- * @property Output
422
- * @description
423
- * The geolocation of the user. Will be emitted if 'enableSuggestions' is true.
424
- */
425
- this.positionChange = new EventEmitter();
426
- this.outboundOpenValue = false;
427
- this.inboundOpenValue = false;
428
- this.passengersValue = new Array();
429
- this.nativeElement = elementRef.nativeElement;
430
- this.componentId = nextId++;
431
- }
432
- ngOnInit() {
433
- if (this.enableTripSwitch) {
434
- this.tripType = this.tripType !== TripType.oneWay && this.tripType !== TripType.twoWayReturn ? TripType.twoWayReturn : this.tripType;
435
- if (this.nasFormControlNameTripType) {
436
- const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
437
- if (tripTypeControl) {
438
- tripTypeControl.patchValue(this.tripType);
439
- }
440
- }
441
- }
442
- if (this.tripType == TripType.twoWayOpen) {
443
- this.showSwitch = false;
444
- }
445
- else {
446
- this.showSwitch = this.exists(this.useSwitch);
447
- }
448
- if (!this.nasFormGroup) {
449
- return;
450
- }
451
- this.nasFormGroup.statusChanges.subscribe((x) => {
452
- setTimeout(() => {
453
- this.isNasGroupValid = /true/i.test(x);
454
- });
455
- });
456
- if (this.nasFormControlNameDirectOnly) {
457
- const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
458
- if (directOnlyControl) {
459
- this.directOnly = directOnlyControl.value;
460
- }
461
- }
462
- if (this.nasFormControlNameTripType) {
463
- const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
464
- if (tripTypeControl) {
465
- this.tripType = tripTypeControl.value;
466
- this.inboundDisabled = tripTypeControl.value === TripType.oneWay;
467
- if (this.nasFormControlNameInbound) {
468
- const inboundControl = this.nasFormGroup.get(this.nasFormControlNameInbound);
469
- if (inboundControl && this.inboundDisabled) {
470
- inboundControl.disable();
471
- }
472
- }
473
- tripTypeControl.valueChanges.subscribe((value) => {
474
- this.inboundDisabled = value === TripType.oneWay;
475
- this.tripType = value;
476
- });
477
- }
478
- }
479
- if (this.nasFormControlNameDirectOnly) {
480
- const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
481
- if (directOnlyControl) {
482
- directOnlyControl.valueChanges.subscribe((value) => {
483
- this.directOnly = value;
484
- });
485
- }
486
- }
487
- }
488
- ngAfterViewInit() {
489
- this.displaySummary = !this.expandedAccordionMobile;
490
- this.changeDetector.detectChanges();
491
- }
492
- ngAfterViewChecked() {
493
- this.containerWidth.next(this.container.nativeElement.offsetWidth);
494
- window.onresize = () => {
495
- this.containerWidth.next(this.container.nativeElement.offsetWidth);
496
- };
497
- }
498
- getClosestAirports(position) {
499
- this.positionChange.emit(position);
500
- }
501
- getFilterClass(element, modifiersInput) {
502
- let modifiers = modifiersInput || new Array();
503
- if (typeof modifiersInput === 'string' ||
504
- modifiersInput instanceof String) {
505
- modifiers = [modifiersInput];
506
- }
507
- const widths = [];
508
- if (this.deviceHelper.isWidthTablet(this.containerWidth.getValue())) {
509
- widths.push('md');
510
- }
511
- if (this.deviceHelper.isWidthDesktop(this.containerWidth.getValue())) {
512
- widths.push('lg');
513
- }
514
- modifiers = [...modifiers, ...widths];
515
- return this.getClass(element, modifiers);
516
- }
517
- getAirportSelectClass() {
518
- return this.getClass('airport-select', [
519
- this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
520
- this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
521
- this.exists(this.enableDatepickers) && 'no-border',
522
- ]);
523
- }
524
- getSuggestions() {
525
- const suggestions = Array.from(new Set([
526
- ...(this.latestSearchesOrigin
527
- ? this.latestSearchesOrigin.filter((x) => x.code !== this.originAirportCode)
528
- : []),
529
- ...(this.closestAirports
530
- ? this.closestAirports.filter((x) => x.code !== this.originAirportCode)
531
- : []),
532
- ]));
533
- return suggestions.slice(0, 3);
534
- }
535
- getDatePickersClass() {
536
- return this.getFilterClass('date-combo', [
537
- this.exists(this.minimize) && 'minimized',
538
- this.containerWidth.getValue() > 500 && 'side-by-side',
539
- ]);
540
- }
541
- getTravelDetailsClass(element, modifiersInput) {
542
- let modifiers = modifiersInput || new Array();
543
- if (typeof modifiersInput === 'string' ||
544
- modifiersInput instanceof String) {
545
- modifiers = [modifiersInput];
546
- }
547
- const widths = [
548
- this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
549
- this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
550
- ];
551
- modifiers = [...modifiers, ...widths];
552
- const travelDetailsBase = new NasComponentBase('travel-details');
553
- return travelDetailsBase.getClass(element, modifiers);
554
- }
555
- onInboundMonthChange(month) {
556
- this.inboundMonthChange.emit(month);
557
- }
558
- onOutboundMonthChange(month) {
559
- this.outboundMonthChange.emit(month);
560
- }
561
- onPassengersSelectFocusOnPrevious() {
562
- this.openPassengerSelect = false;
563
- if (this.exists(this.enableDatepickers)) {
564
- setTimeout(() => {
565
- if (this.datepickerCombo) {
566
- this.outboundOpen = true;
567
- this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
568
- }
569
- });
570
- return;
571
- }
572
- this.focusOnAirportSelectBackwards();
573
- }
574
- passengerKeyDown(event) {
575
- switch (event.key) {
576
- case 'Tab':
577
- if (event.shiftKey) {
578
- if (this.isMobileDisplay() || this.isTabletDisplay()) {
579
- break;
580
- }
581
- this.focusOnAirportSelectBackwards();
582
- break;
583
- }
584
- break;
585
- case 'Enter':
586
- if (event.shiftKey || this.isMobileDisplay()) {
587
- break;
588
- }
589
- break;
590
- case 'Escape':
591
- this.onPassengerSelectOpen();
592
- event.preventDefault();
593
- break;
594
- }
595
- }
596
- onTripSwitchKeyDown(event) {
597
- switch (event.key) {
598
- case 'ArrowRight':
599
- if (document.activeElement === this.tripTypeRoundTrip.nativeElement) {
600
- this.tripTypeOneway.nativeElement.focus();
601
- }
602
- break;
603
- case 'ArrowLeft':
604
- if (document.activeElement === this.tripTypeOneway.nativeElement) {
605
- this.tripTypeRoundTrip.nativeElement.focus();
606
- }
607
- break;
608
- case 'Tab':
609
- case 'Enter':
610
- if (!this.exists(this.enableDatepickers)) {
611
- this.setFocusOnNativeElement(this.passengerSelectDropdown);
612
- }
613
- else {
614
- if (this.exists(this.enableMultiCity) && this.tripType == TripType.twoWayOpen) {
615
- this.onFocusInboundIgnored = true;
616
- }
617
- this.setFocusOnNativeElement(this.datepickerCombo?.datepickerOutbound?.input);
618
- }
619
- break;
620
- case 'Escape':
621
- this.onTripSwitchOpen(false);
622
- this.setFocusOnNativeElement(this.tripSwitch.toggleElement);
623
- break;
624
- }
625
- }
626
- onFocusInboundDateKeyDown(event) {
627
- if (event.key == 'Tab' || event.key == 'Enter') {
628
- if (!this.exists(this.enableDatepickers)) {
629
- this.setFocusOnNativeElement(this.passengerSelectDropdown);
630
- return;
631
- }
632
- this.onFocusInboundIgnored = false;
633
- this.setFocusOnNativeElement(this.datepickerCombo.datepickerInbound.input);
634
- }
635
- }
636
- onTripSwitchFocusNext(event) {
637
- if (event.key == 'Tab') {
638
- if (!this.exists(this.enableDatepickers)) {
639
- if (event.shiftKey) {
640
- event.preventDefault();
641
- this.setFocusOnNativeElement(this.transitSwitch.button);
642
- return;
643
- }
644
- this.focusOnNextChange.emit(event);
645
- }
646
- }
647
- }
648
- transitKeyDown(event) {
649
- event.preventDefault();
650
- switch (event.key) {
651
- case 'ArrowUp':
652
- if (document.activeElement === this.transitTypeTransit.nativeElement) {
653
- this.directOnly = true;
654
- if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
655
- const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
656
- tripTypeControl.patchValue(this.directOnly);
657
- }
658
- this.transitTypeDirectOnly.nativeElement.focus();
659
- }
660
- break;
661
- case 'ArrowDown':
662
- if (document.activeElement === this.transitTypeDirectOnly.nativeElement) {
663
- this.directOnly = false;
664
- if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
665
- const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
666
- tripTypeControl.patchValue(this.directOnly);
667
- }
668
- this.transitTypeTransit.nativeElement.focus();
669
- }
670
- break;
671
- case 'Tab':
672
- case 'Enter':
673
- this.openTransitTypeSelect = false;
674
- if (event.shiftKey) {
675
- this.onTransitSwitchFocusOnPrevious();
676
- return;
677
- }
678
- if (!this.exists(this.enableDatepickers)) {
679
- this.setFocusOnNativeElement(this.tripTypeSelection.radioElement);
680
- }
681
- if (event.key === 'Tab') {
682
- event.preventDefault();
683
- }
684
- this.focusOnNextChange.emit(event);
685
- break;
686
- case 'Escape':
687
- this.onTransitSwitchOpen(false);
688
- event.preventDefault();
689
- this.setFocusOnNativeElement(this.transitSwitch.button);
690
- break;
691
- }
692
- }
693
- onPassengersSelectFocusOnNext() {
694
- this.openPassengerSelect = false;
695
- if (this.enableTransitSwitch) {
696
- if (this.transitSwitch) {
697
- this.setFocusOnNativeElement(this.transitSwitch.button);
698
- }
699
- }
700
- }
701
- focusAsync(refElement) {
702
- clearTimeout(this.focusAsyncTimout);
703
- this.focusAsyncTimout = setTimeout(() => this.setFocusOnNativeElement(refElement));
704
- }
705
- onTransitSwitchFocusNext(event) {
706
- if (event.key == 'Tab') {
707
- if (event.shiftKey) {
708
- this.onTransitSwitchFocusOnPrevious();
709
- return;
710
- }
711
- if (!this.exists(this.enableDatepickers)) {
712
- event.preventDefault();
713
- this.setFocusOnNativeElement(this.tripTypeSelection.radioElement);
714
- return;
715
- }
716
- }
717
- this.focusOnNextChange.emit(event);
718
- }
719
- onTransitSwitchFocusOnPrevious() {
720
- if (this.enablePassengersSelect) {
721
- setTimeout(() => {
722
- this.setFocusOnNativeElement(this.passengerSelectDropdown);
723
- });
724
- return;
725
- }
726
- if (this.exists(this.enableDatepickers)) {
727
- setTimeout(() => {
728
- if (this.datepickerCombo) {
729
- this.outboundOpen = true;
730
- this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
731
- }
732
- });
733
- return;
734
- }
735
- if (this.airportSelect) {
736
- if (this.exists(this.airportSelect.combo)) {
737
- this.airportSelect.onDestinationOpen(true);
738
- if (this.airportSelect.airportSelectDropdownDestination) {
739
- this.focusAsync(this.airportSelect.airportSelectDropdownDestination.input);
740
- }
741
- }
742
- }
743
- }
744
- onDatepickerFocusOnPrevious(event) {
745
- event.preventDefault();
746
- if (this.exists(this.enableMultiCity)) {
747
- if (this.tripType == TripType.twoWayOpen) {
748
- setTimeout(() => {
749
- this.setFocusOnNativeElement(this.airportSelect.airportSelectDropdownOrigin.input);
750
- });
751
- return;
752
- }
753
- setTimeout(() => {
754
- this.setFocusOnNativeElement(this.airportSelect.airportSelectDropdownDestination.input);
755
- });
756
- return;
757
- }
758
- this.focusOnAirportSelectBackwards();
759
- }
760
- onFocusOnNextChange(event) {
761
- event.preventDefault();
762
- if (this.exists(this.enableMultiCity) && this.tripType == TripType.twoWayOpen) {
763
- if (this.onFocusInboundIgnored) {
764
- this.setFocusOnNativeElement(this.airportSelect2.airportSelectDropdownOrigin.input);
765
- return;
766
- }
767
- }
768
- if (event.key == 'Tab' || event.key == 'Enter') {
769
- if (this.passengerSelectDropdown) {
770
- this.setFocusOnNativeElement(this.passengerSelectDropdown);
771
- return;
772
- }
773
- if (this.transitSwitch) {
774
- this.setFocusOnNativeElement(this.transitSwitch.button);
775
- return;
776
- }
777
- this.focusOnNextChange.emit(event);
778
- }
779
- }
780
- isMobileDisplay() {
781
- return this.deviceHelper.isWidthMobile(this.containerWidth.getValue());
782
- }
783
- isTabletDisplay() {
784
- return this.deviceHelper.isWidthTablet(this.containerWidth.getValue());
785
- }
786
- onOriginOpen(open) {
787
- if (this.tripSwitch) {
788
- this.tripSwitch.open = false;
789
- }
790
- if (this.transitSwitch) {
791
- this.openTransitTypeSelect = false;
792
- }
793
- if (this.datepickerCombo) {
794
- this.datepickerCombo.inboundOpen = false;
795
- this.datepickerCombo.outboundOpen = false;
796
- }
797
- if (this.airportSelect && !this.airportSelect.originOpen) {
798
- this.updateMaximize();
799
- }
800
- this.originOpenChange.emit(open);
801
- this.changeDetector.detectChanges();
802
- }
803
- onOrigin2Open(open) {
804
- if (this.tripSwitch) {
805
- this.tripSwitch.open = false;
806
- }
807
- if (this.transitSwitch) {
808
- this.openTransitTypeSelect = false;
809
- }
810
- if (this.datepickerCombo) {
811
- this.datepickerCombo.inboundOpen = false;
812
- this.datepickerCombo.outboundOpen = false;
813
- }
814
- if (this.airportSelect && !this.airportSelect.originOpen) {
815
- this.updateMaximize();
816
- }
817
- this.origin2OpenChange.emit(open);
818
- this.changeDetector.detectChanges();
819
- }
820
- validateAirportValues() {
821
- if (!this.airportSelect) {
822
- return false;
823
- }
824
- const originSnapshot = this.airportSelect.origin;
825
- const destinationSnapshot = this.airportSelect.destination;
826
- if (originSnapshot &&
827
- destinationSnapshot &&
828
- originSnapshot.code &&
829
- originSnapshot.code.length &&
830
- destinationSnapshot.code &&
831
- destinationSnapshot.code.length) {
832
- return true;
833
- }
834
- return false;
835
- }
836
- updateMaximize() {
837
- setTimeout(() => {
838
- this.maximize = this.validateAirportValues();
839
- });
840
- }
841
- onDestinationOpen(open) {
842
- if (this.tripSwitch) {
843
- this.tripSwitch.open = false;
844
- }
845
- if (this.transitSwitch) {
846
- this.openTransitTypeSelect = false;
847
- }
848
- if (this.datepickerCombo) {
849
- this.datepickerCombo.inboundOpen = false;
850
- this.datepickerCombo.outboundOpen = false;
851
- }
852
- if (this.airportSelect && !this.airportSelect.destinationOpen) {
853
- this.updateMaximize();
854
- }
855
- this.destinationOpenChange.emit(open);
856
- }
857
- onDestination2Open(open) {
858
- if (this.tripSwitch) {
859
- this.tripSwitch.open = false;
860
- }
861
- if (this.transitSwitch) {
862
- this.openTransitTypeSelect = false;
863
- }
864
- if (this.datepickerCombo) {
865
- this.datepickerCombo.inboundOpen = false;
866
- this.datepickerCombo.outboundOpen = false;
867
- }
868
- if (this.airportSelect && !this.airportSelect.destinationOpen) {
869
- this.updateMaximize();
870
- }
871
- this.destination2OpenChange.emit(open);
872
- }
873
- onPassengerBackdropChange(value) {
874
- this.openPassengerSelect = value;
875
- this.passengerSelectOpenChange.emit(this.openPassengerSelect);
876
- }
877
- onPassengerSelectOpen() {
878
- this.openPassengerSelect = !this.openPassengerSelect;
879
- if (this.airportSelect) {
880
- this.airportSelect.originOpen = false;
881
- this.airportSelect.destinationOpen = false;
882
- }
883
- if (this.tripSwitch) {
884
- this.tripSwitch.open = false;
885
- }
886
- if (this.transitSwitch) {
887
- this.openTransitTypeSelect = false;
888
- }
889
- if (this.datepickerCombo) {
890
- if (this.datepickerCombo.inboundOpen) {
891
- this.datepickerCombo.inboundOpen = false;
892
- }
893
- if (this.datepickerCombo.outboundOpen) {
894
- this.datepickerCombo.outboundOpen = false;
895
- }
896
- }
897
- this.passengerSelectOpenChange.emit(this.openPassengerSelect);
898
- if (this.openPassengerSelect) {
899
- setTimeout(() => {
900
- if (this.passengerSelect?.numberFields.first) {
901
- this.passengerSelect.numberFields.first.input.nativeElement.focus();
902
- }
903
- });
904
- }
905
- }
906
- onTripSwitchOpen(open) {
907
- clearTimeout(this.tripSwitchFocusTimeout);
908
- if (this.transitSwitch) {
909
- this.openTransitTypeSelect = false;
910
- }
911
- if (this.airportSelect) {
912
- this.airportSelect.originOpen = false;
913
- this.airportSelect.destinationOpen = false;
914
- }
915
- if (this.datepickerCombo) {
916
- this.datepickerCombo.inboundOpen = false;
917
- this.datepickerCombo.outboundOpen = false;
918
- }
919
- if (open) {
920
- this.tripSwitchFocusTimeout = setTimeout(() => {
921
- this.tripTypeSelection?.radioElement?.nativeElement?.focus();
922
- }, 200);
923
- }
924
- }
925
- onTransitSwitchOpen(open) {
926
- this.openTransitTypeSelect = !this.openTransitTypeSelect;
927
- clearTimeout(this.transitSwitchFocusTimeout);
928
- if (this.tripSwitch) {
929
- this.tripSwitch.open = false;
930
- }
931
- if (this.airportSelect) {
932
- this.airportSelect.originOpen = false;
933
- this.airportSelect.destinationOpen = false;
934
- }
935
- if (this.datepickerCombo) {
936
- this.datepickerCombo.inboundOpen = false;
937
- this.datepickerCombo.outboundOpen = false;
938
- }
939
- if (this.transitSwitch) {
940
- this.openTransitTypeSelect = open;
941
- }
942
- if (open) {
943
- this.transitSwitchFocusTimeout = setTimeout(() => {
944
- this.transitTypeTransit.nativeElement.focus();
945
- }, 200);
946
- }
947
- }
948
- onOriginChange(airport) {
949
- this.originChange.emit(airport);
950
- }
951
- onOrigin2Change(airport) {
952
- this.origin2Change.emit(airport);
953
- }
954
- setSelectedOriginAirport(airport) {
955
- if (!airport) {
956
- return;
957
- }
958
- this.onOriginChange(airport);
959
- if (this.originAirportCode === airport.code) {
960
- return;
961
- }
962
- this.originAirportCode = airport.code;
963
- this.changeDetector.detectChanges();
964
- }
965
- setSelectedOrigin2Airport(airport) {
966
- if (!airport) {
967
- return;
968
- }
969
- this.onOrigin2Change(airport);
970
- if (this.origin2AirportCode === airport.code) {
971
- return;
972
- }
973
- this.origin2AirportCode = airport.code;
974
- this.changeDetector.detectChanges();
975
- }
976
- onDestinationChange(airport) {
977
- this.destinationChange.emit(airport);
978
- }
979
- onDestination2Change(airport) {
980
- this.destination2Change.emit(airport);
981
- }
982
- setFocusOnPassengerSelect(event) {
983
- if (this.isMobileDisplay()) {
984
- if (this.datepickerCombo) {
985
- event.preventDefault();
986
- this.outboundOpen = true;
987
- this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
988
- }
989
- else if (this.tripSwitch) {
990
- event.preventDefault();
991
- this.onTripSwitchOpen(true);
992
- this.focusAsync(this.tripSwitch.toggleElement);
993
- }
994
- }
995
- else if (this.isTabletDisplay() && this.datepickerCombo) {
996
- setTimeout(() => {
997
- this.outboundOpen = true;
998
- });
999
- }
1000
- else {
1001
- if (this.passengerSelectDropdown) {
1002
- this.onPassengerSelectOpen();
1003
- }
1004
- else if (this.tripSwitch) {
1005
- this.onTripSwitchOpen(true);
1006
- this.tripSwitch.toggleElement.nativeElement.focus();
1007
- }
1008
- }
1009
- }
1010
- setFocusOnNativeElement(element) {
1011
- element?.nativeElement.focus();
1012
- }
1013
- onTripTypeChange(tripType) {
1014
- setTimeout(() => {
1015
- if (this.tripSwitch) {
1016
- this.tripSwitch.open = false;
1017
- }
1018
- });
1019
- this.tripType = tripType;
1020
- if (this.nasFormGroup && this.nasFormControlNameTripType) {
1021
- const tripSwitchControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
1022
- tripSwitchControl.patchValue(this.tripType);
1023
- }
1024
- if (this.tripType == TripType.twoWayOpen) {
1025
- this.showSwitch = false;
1026
- }
1027
- else {
1028
- this.showSwitch = this.exists(this.useSwitch);
1029
- }
1030
- }
1031
- onTransitChange(directOnly) {
1032
- setTimeout(() => {
1033
- if (this.transitSwitch) {
1034
- this.openTransitTypeSelect = false;
1035
- }
1036
- });
1037
- this.directOnly = directOnly;
1038
- if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
1039
- const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
1040
- tripTypeControl.patchValue(directOnly);
1041
- }
1042
- this.openTransitTypeSelect = !this.openTransitTypeSelect;
1043
- }
1044
- getTravelDetailsTripSwitchIconClass(modifiers) {
1045
- const iconMediumBase = new NasComponentBase('icon-medium');
1046
- return [
1047
- iconMediumBase.getClass('', modifiers),
1048
- this.getTravelDetailsClass('icon'),
1049
- ];
1050
- }
1051
- getTripSwitchLabel() {
1052
- return this.tripType === TripType.twoWayReturn
1053
- ? this.tripSwitchRoundTripLabel
1054
- : this.tripSwitchOneWayLabel;
1055
- }
1056
- getTransitLabel() {
1057
- return this.directOnly ? this.directOnlyLabel : this.directTransitLabel;
1058
- }
1059
- onAccordionToggleChange(expanded) {
1060
- this.displaySummary = !expanded;
1061
- }
1062
- getSummary() {
1063
- return (`${this.passengerSelectLabel}${this.defaultSummarySeparator}` +
1064
- `${this.getTripSwitchLabel().toLowerCase()}${this.lastSummarySeparator}${this.getTransitLabel().toLowerCase()}`);
1065
- }
1066
- shouldMaximize() {
1067
- if (this.exists(this.enableMultiCity)) {
1068
- return true;
1069
- }
1070
- if (!this.exists(this.minimize)) {
1071
- return true;
1072
- }
1073
- else if (this.airportSelect &&
1074
- this.enableDestinationSelect &&
1075
- this.airportSelect.origin &&
1076
- this.airportSelect.origin.code &&
1077
- this.airportSelect.destination &&
1078
- this.airportSelect.destination.code) {
1079
- return true;
1080
- }
1081
- else if (this.airportSelect &&
1082
- !this.enableDestinationSelect &&
1083
- this.airportSelect.origin &&
1084
- this.airportSelect.origin.code) {
1085
- return true;
1086
- }
1087
- else if (this.airportSelect &&
1088
- (this.airportSelect.originOpen || this.airportSelect.destinationOpen)) {
1089
- return this.maximize;
1090
- }
1091
- else if (this.exists(this.minimize)) {
1092
- if (this.maximize) {
1093
- if (this.nasFormGroup) {
1094
- return this.isNasGroupValid;
1095
- }
1096
- return true;
1097
- }
1098
- else {
1099
- return false;
1100
- }
1101
- }
1102
- }
1103
- focusOnAirportSelectBackwards() {
1104
- if (this.exists(this.airportSelect.combo)) {
1105
- this.airportSelect.onDestinationOpen(true);
1106
- setTimeout(() => {
1107
- this.airportSelect.airportSelectDropdownDestination.input.nativeElement.focus();
1108
- }, 100);
1109
- }
1110
- else {
1111
- this.airportSelect.onOriginOpen(true);
1112
- this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
1113
- }
1114
- }
1115
- setLatestSearches(abandonedBasket, airports) {
1116
- if (!abandonedBasket || !airports) {
1117
- return;
1118
- }
1119
- const unique = new Array();
1120
- for (const item of abandonedBasket) {
1121
- if (!unique.some((x) => x.destinationCode === item.destinationCode)) {
1122
- unique.push(item);
1123
- }
1124
- }
1125
- const originCodes = unique.map((x) => x.originCode);
1126
- const destinationCodes = unique.map((x) => x.destinationCode);
1127
- const latestSearchesOrigin = airports.filter((airport) => unique.some((x) => x.originCode.toLowerCase() === airport.code.toLowerCase()));
1128
- const latestSearchesDestination = airports.filter((airport) => unique.some((x) => x.destinationCode.toLowerCase() === airport.code.toLowerCase()));
1129
- const code = 'code';
1130
- this.latestSearchesOrigin = this.sortService
1131
- .sortByObject(latestSearchesOrigin, originCodes, code)
1132
- .slice(0, 3);
1133
- if (this.latestSearchesOrigin && this.latestSearchesOrigin.length > 0 &&
1134
- this.exists(this.overrideOrigin)) {
1135
- this.originAirportCode = this.latestSearchesOrigin[0].code;
1136
- }
1137
- this.latestSearchesDestination = this.sortService
1138
- .sortByObject(latestSearchesDestination, destinationCodes, code)
1139
- .slice(0, 3);
1140
- }
1141
- closeDropdowns() {
1142
- if (this.tripSwitch) {
1143
- this.tripSwitch.open = false;
1144
- }
1145
- if (this.transitSwitch) {
1146
- this.openTransitTypeSelect = false;
1147
- }
1148
- }
1149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, deps: [{ token: i1.DeviceHelper }, { token: i2.SortService }, { token: i3.AbandonedBasketService }, { token: i4.DateHelper }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", origin2AirportCode: "origin2AirportCode", destination2AirportCode: "destination2AirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", tripSwitchMultiCityLabel: "tripSwitchMultiCityLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", inlineOnDesktop: "inlineOnDesktop", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectYouthsLabel: "passengerSelectYouthsLabel", passengerSelectYoungAdultsLabel: "passengerSelectYoungAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", noAirportsLabel: "noAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameOrigin2: "nasFormControlNameOrigin2", nasFormControlNameDestination2: "nasFormControlNameDestination2", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", passengersTitleLabel: "passengersTitleLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch", datePickerComboInlineFlex: "datePickerComboInlineFlex", airportSelectOutboundId: "airportSelectOutboundId", airportSelectInboundId: "airportSelectInboundId", passengerSelectId: "passengerSelectId", datePickerOutboundId: "datePickerOutboundId", datePickerInboundId: "datePickerInboundId", tripTypeId: "tripTypeId", transitTypeId: "transitTypeId", enableMultiCity: "enableMultiCity" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", origin2OpenChange: "origin2OpenChange", destination2OpenChange: "destination2OpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", origin2Change: "origin2Change", destination2Change: "destination2Change", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "airportSelect2", first: true, predicate: ["airportSelect2"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "tripTypeSelection", first: true, predicate: ["radio"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline', exists(enableMultiCity) && 'multi-city', tripType == 3 && 'multi-city-mode'])\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n <nas-radio *ngIf=\"exists(enableMultiCity)\" #radio [id]=\"tripTypeInputId + '__multi-city'\" [name]=\"'tripType'\" [value]=\"3\" (checkedChange)=\"onTripTypeChange(3)\" [checked]=\"tripType === 3\">\n {{tripSwitchMultiCityLabel}}\n </nas-radio>\n </form>\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect) && tripType == 3\" #airportSelect2 combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin2\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination2\" [useSwitch]=\"false\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"origin2AirportCode\" [destinationAirportCode]=\"destination2AirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOrigin2Airport($event)\"\n (destinationChange)=\"onDestination2Change($event)\" (focusOnNext)=\"onFocusInboundDateKeyDown($event)\"\n (originOpenChange)=\"onOrigin2Open($event)\" (destinationOpenChange)=\"onDestination2Open($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions) && tripType !== 3\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\" [ignoreOnFocusInboundDate]=\"tripType === 3\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__filters{display:flex;flex-direction:column;gap:8px}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:12px 0}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters.nas-filter__filters--multi-city{display:flex;flex-wrap:wrap;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__airport-select{order:1}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__suggestions{order:2}.nas-filter__filters.nas-filter__filters--multi-city-mode{display:grid;grid-template-columns:1fr;grid-template-rows:auto}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(1){grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(2){grid-row:4}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker{position:relative}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:\"\";display:block;height:2px;width:100%;background-color:#e9e7e4;margin:16px 0 9px}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__passengers{margin-top:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg{grid-template-columns:2fr 1fr;grid-template-rows:auto auto}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__radio{grid-row:1}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(1),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(1){grid-column:1;grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(2),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(2){grid-column:1;grid-row:3}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo{grid-column:2;grid-row:2/span 2;display:grid}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:flex;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker:after,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:unset;margin:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__dropdown-wrapper{grid-row:4;grid-column:1/-1}.nas-filter__filters.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--lg{flex-direction:row}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%;z-index:2}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["outboundId", "inboundId", "airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "noAirportsLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "labelOutside", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "youthsLabel", "youngAdultsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i9.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "titleDescription", "description", "badge", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "warning", "badgeInfo", "badgeSuccess", "badgeWarning", "badgeError", "cssClass", "cssStyle", "htag"], outputs: ["toggleChange"] }, { kind: "component", type: i10.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i12.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "tertiary", "link", "light", "large", "block", "flex", "compact", "right", "spaceless", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target", "icon", "iconLeft", "iconType", "buttonlink"], outputs: ["clickChange", "focusOnNext"] }, { kind: "component", type: i13.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }, { kind: "component", type: i14.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["outboundId", "inboundId", "ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "timepickerLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset", "inlineFlex", "ignoreOnFocusInboundDate"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i15.RadioComponent, selector: "nas-radio", inputs: ["id", "value", "name", "error", "disabled", "strong", "block", "spaceless", "tabIndex", "required", "aria-label", "aria-describedby", "aria-labelledby", "checked", "nasFormControlName", "nasFormGroup"], outputs: ["checkedChange"] }, { kind: "component", type: i16.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }] }); }
1151
- }
1152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, decorators: [{
1153
- type: Component,
1154
- args: [{ selector: 'nas-filter', template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\" simple\n containerOnToggle transparent [expanded]=\"expandedAccordionMobile\" [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\" *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}\n</div>\n\n<ng-template #filterTemplate>\n <div #container [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', exists(inlineOnDesktop) && 'inline', exists(enableMultiCity) && 'multi-city', tripType == 3 && 'multi-city-mode'])\">\n <form *ngIf=\"enableTripSwitch\" [nasClass]=\"getClass('radio')\" (keydown)=\"onTripSwitchFocusNext($event)\">\n <nas-radio #radio [id]=\"tripTypeInputId + '__round-trip'\" [name]=\"'tripType'\" [value]=\"2\" (checkedChange)=\"onTripTypeChange(2)\" [checked]=\"tripType === 2\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio>\n <nas-radio #radio [id]=\"tripTypeInputId + '__one-way'\" [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\" [checked]=\"tripType === 1\">\n {{tripSwitchOneWayLabel}}\n </nas-radio>\n <nas-radio *ngIf=\"exists(enableMultiCity)\" #radio [id]=\"tripTypeInputId + '__multi-city'\" [name]=\"'tripType'\" [value]=\"3\" (checkedChange)=\"onTripTypeChange(3)\" [checked]=\"tripType === 3\">\n {{tripSwitchMultiCityLabel}}\n </nas-radio>\n </form>\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\" #airportSelect combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\" [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect) && tripType == 3\" #airportSelect2 combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\" \n [outboundId]=\"airportSelectOutboundId\" [inboundId]=\"airportSelectInboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin2\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination2\" [useSwitch]=\"false\"\n [nasClass]=\"getAirportSelectClass()\" [airports]=\"airports\" [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\" [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"origin2AirportCode\" [destinationAirportCode]=\"destination2AirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\" [geolocationBlockedLabel]=\"geolocationBlockedLabel\" \n [noAirportsLabel]=\"noAirportsLabel\" [placeholderDestination]=\"placeholderDestination\" [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\" (originChange)=\"setSelectedOrigin2Airport($event)\"\n (destinationChange)=\"onDestination2Change($event)\" (focusOnNext)=\"onFocusInboundDateKeyDown($event)\"\n (originOpenChange)=\"onOrigin2Open($event)\" (destinationOpenChange)=\"onDestination2Open($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\" #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [outboundId]=\"airportSelectOutboundId\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\" [useSwitch]=\"showSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\" [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\" [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\" [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\" [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\" [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\" [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\" [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\" [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\" [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\" (focusOnNext)=\"onTripSwitchKeyDown($event)\"\n (originOpenChange)=\"onOriginOpen($event)\" (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions) && tripType !== 3\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\" [suggestions]=\"getSuggestions()\" [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div *ngIf=\"exists(enableDatepickers)\" [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo compact \n [outboundId]=\"datePickerOutboundId\" [inboundId]=\"datePickerInboundId\" [inlineFlex]=\"inlineFlex\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\" [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\" [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\" [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\" [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\" [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\" [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\" [times]=\"times\" [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\" [outboundOnly]=\"tripType === 1\" [ignoreOnFocusInboundDate]=\"tripType === 3\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\" (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\" (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\" [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\" [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"enablePassengersSelect || enableTransitSwitch\" [nasClass]=\"getClass('dropdown-wrapper')\">\n <div *ngIf=\"enablePassengersSelect\" [nasClass]=\"getClass('passengers')\">\n <button #passengerSelectDropdown (click)=\"onPassengerSelectOpen($event)\" [id]=\"passengerSelectId\"\n [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\"\n [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-passenger-select #passengerSelect [ariaLabelAdd]=\"ariaLabelAdd\" [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\" [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\" [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\" [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\" [title]=\"passengerSelectTitle\" [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\" [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\" (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [showBackdrop]=\"openPassengerSelect\" (showBackdropChange)=\"onPassengerBackdropChange($event)\"></nas-backdrop>\n </div>\n </div>\n <div *ngIf=\"enableTransitSwitch\" [nasClass]=\"getClass('transit-type')\">\n <nas-button *ngIf=\"directOnlyLabel && directTransitLabel\" #transitSwitch block light\n [id]=\"transitTypeInputId\" [iconType]=\"'chevron-down'\" [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\" (click)=\"onTransitSwitchOpen($event)\" (focusOnNext)=\"onTransitSwitchFocusNext($event)\">{{ getTransitLabel() }}\n </nas-button>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\" (keydown)=\"transitKeyDown($event)\">\n <button [id]=\"transitTypeInputId + '__direct'\" [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\" type=\"button\"\n #transitTypeDirectOnly (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button [id]=\"transitTypeInputId + '__transit'\" type=\"button\" #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{position:relative;z-index:6}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light{border:2px solid #15273F;margin-top:8px}.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:hover,.nas-filter ::ng-deep .nas-filter__transit .nas-button--light:focus{background-color:#fff}.nas-filter ::ng-deep .nas-filter__transit .nas-button__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button__icon{transform:rotate(180deg)}.nas-filter ::ng-deep .nas-filter__transit--active .nas-button{background-color:#ebf4ff!important;border:2px solid #15273F;z-index:5}.nas-filter__title{margin-top:24px;font-size:32px;line-height:40px}@media (max-width: 639px){.nas-filter__title{font-size:24px;line-height:32px}}.nas-filter__radio{display:flex;gap:24px;padding:12px}.nas-filter__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273F;padding:9px 14px;width:100%;height:67px}.nas-filter__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter__passengers-button:focus-visible{outline:2px solid #0978E8;outline-offset:2px}.nas-filter__label{flex-direction:column;text-align:left;display:flex;justify-content:center}.nas-filter__label p{margin:0}.nas-filter__button-title{font-weight:700;font-size:14px}.nas-filter__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter__transit-type-selection{z-index:4;position:absolute;width:100%;border-left:2px solid #15273F;border-right:2px solid #15273F;border-bottom:2px solid #15273F}.nas-filter__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter__filters{display:flex;flex-direction:column;gap:8px}.nas-filter__filters .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md,.nas-filter__filters--lg{display:flex;flex-wrap:wrap;flex-direction:row;gap:8px}.nas-filter__filters--md .nas-filter__airport-select,.nas-filter__filters--lg .nas-filter__airport-select{flex:0 0 100%}.nas-filter__filters--md .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:48%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__suggestions,.nas-filter__filters--lg .nas-filter__suggestions{flex:0 0 100%}.nas-filter__filters--md .nas-filter__suggestions ::ng-deep .nas-suggestions,.nas-filter__filters--lg .nas-filter__suggestions ::ng-deep .nas-suggestions{margin:0}.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters--lg .nas-filter__dropdown-wrapper{display:flex;gap:8px;flex:1 1 49%}.nas-filter__filters--md .nas-filter__passengers,.nas-filter__filters--lg .nas-filter__passengers{margin-top:0;position:relative;flex:1 1 24.5%}.nas-filter__filters--md .nas-filter__passengers .nas-filter__passengers-button,.nas-filter__filters--lg .nas-filter__passengers .nas-filter__passengers-button{height:67px}.nas-filter__filters--md .nas-filter__transit-type,.nas-filter__filters--lg .nas-filter__transit-type{flex:1 1 24.4%;position:relative}.nas-filter__filters--md .nas-filter__transit-type ::ng-deep .nas-button,.nas-filter__filters--lg .nas-filter__transit-type ::ng-deep .nas-button{height:67px;margin:0}.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters--lg .nas-filter__date-combo{flex:1 1 49%}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls--active{border-left:2px solid currentColor}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker__date-picker-wrapper,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker .nas-datepicker--compact{position:relative}.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:8px}.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters--lg .nas-filter__radio{flex:0 0 100%;padding:12px 0}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo{flex-direction:row}.nas-filter__filters--md ::ng-deep .nas-airport-select-combo__switcher,.nas-filter__filters--lg ::ng-deep .nas-airport-select-combo__switcher{top:20%;left:46.5%;transform:rotate(90deg)}.nas-filter__filters--md .nas-filter__passengers ::ng-deep .nas-passenger-select__list{width:100%;min-width:250px}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select{order:0;flex:1}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__airport-select ::ng-deep .nas-airport-select-combo__switcher{left:46%}.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__date-combo,.nas-filter__filters--lg.nas-filter__filters--inline .nas-filter__dropdown-wrapper{order:0;flex:1}.nas-filter__filters.nas-filter__filters--multi-city{display:flex;flex-wrap:wrap;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__airport-select{order:1}.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city .nas-filter__suggestions{order:2}.nas-filter__filters.nas-filter__filters--multi-city-mode{display:grid;grid-template-columns:1fr;grid-template-rows:auto}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(1){grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__airport-select:nth-of-type(2){grid-row:4}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker{position:relative}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:contents}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound .nas-datepicker__date-picker-wrapper .nas-datepicker__controls{border-left:2px solid currentColor}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:\"\";display:block;height:2px;width:100%;background-color:#e9e7e4;margin:16px 0 9px}.nas-filter__filters.nas-filter__filters--multi-city-mode .nas-filter__passengers{margin-top:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg{grid-template-columns:2fr 1fr;grid-template-rows:auto auto}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__radio,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__radio{grid-row:1}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(1),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(1){grid-column:1;grid-row:2}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__airport-select:nth-of-type(2),.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__airport-select:nth-of-type(2){grid-column:1;grid-row:3}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo{grid-column:2;grid-row:2/span 2;display:grid}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo{display:flex;flex-direction:column;gap:8px}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker-combo__date-picker--inbound{margin-left:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__date-combo ::ng-deep .nas-datepicker:after,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__date-combo ::ng-deep .nas-datepicker:after{content:unset;margin:0}.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--md .nas-filter__dropdown-wrapper,.nas-filter__filters.nas-filter__filters--multi-city-mode.nas-filter__filters--lg .nas-filter__dropdown-wrapper{grid-row:4;grid-column:1/-1}.nas-filter__filters.nas-filter__filters--md,.nas-filter__filters.nas-filter__filters--lg{flex-direction:row}.nas-filter__suggestions{flex-basis:100%;position:relative}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__toggler{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;font-size:18px;line-height:24px;color:#15273f;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #E9E7E4}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:24px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:24px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f1f1f1}.travel-details__action--border{border-bottom:2px #E9E7E4}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #E9E7E4}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-passenger-select__title{padding:8px 16px 0}::ng-deep .nas-filter__filters .nas-passenger-select__list{position:absolute!important;width:100%;z-index:2}::ng-deep .nas-filter__filters .nas-passenger-select__list-item{padding:8px 16px!important}::ng-deep .nas-filter__filters .nas-radio{margin:0!important}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important;position:unset}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker--compact{position:unset;margin-bottom:0}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #E9E7E4;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"] }]
1155
- }], ctorParameters: function () { return [{ type: i1.DeviceHelper }, { type: i2.SortService }, { type: i3.AbandonedBasketService }, { type: i4.DateHelper }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { passengerSelectDropdown: [{
1156
- type: ViewChild,
1157
- args: ['passengerSelectDropdown']
1158
- }], passengerSelect: [{
1159
- type: ViewChild,
1160
- args: ['passengerSelect']
1161
- }], tripSwitch: [{
1162
- type: ViewChild,
1163
- args: ['tripSwitch']
1164
- }], transitSwitch: [{
1165
- type: ViewChild,
1166
- args: ['transitSwitch']
1167
- }], airportSelect: [{
1168
- type: ViewChild,
1169
- args: ['airportSelect']
1170
- }], airportSelect2: [{
1171
- type: ViewChild,
1172
- args: ['airportSelect2']
1173
- }], datepickerCombo: [{
1174
- type: ViewChild,
1175
- args: ['datepickerCombo']
1176
- }], container: [{
1177
- type: ViewChild,
1178
- args: ['container']
1179
- }], tripTypeOneway: [{
1180
- type: ViewChild,
1181
- args: ['tripTypeOneway']
1182
- }], tripTypeRoundTrip: [{
1183
- type: ViewChild,
1184
- args: ['tripTypeRoundTrip']
1185
- }], transitTypeDirectOnly: [{
1186
- type: ViewChild,
1187
- args: ['transitTypeDirectOnly']
1188
- }], transitTypeTransit: [{
1189
- type: ViewChild,
1190
- args: ['transitTypeTransit']
1191
- }], tripTypeSelection: [{
1192
- type: ViewChild,
1193
- args: ['radio']
1194
- }], airportRelations: [{
1195
- type: Input
1196
- }], ariaLabelClear: [{
1197
- type: Input
1198
- }], ariaLabelSubtract: [{
1199
- type: Input
1200
- }], ariaLabelBackdrop: [{
1201
- type: Input
1202
- }], ariaLabelAdd: [{
1203
- type: Input
1204
- }], allowedOriginAirports: [{
1205
- type: Input
1206
- }], allowedDestinationAirports: [{
1207
- type: Input
1208
- }], displayLatestSearches: [{
1209
- type: Input
1210
- }], useSwitch: [{
1211
- type: Input
1212
- }], displayClosestAirports: [{
1213
- type: Input
1214
- }], originAirportCode: [{
1215
- type: Input
1216
- }], destinationAirportCode: [{
1217
- type: Input
1218
- }], origin2AirportCode: [{
1219
- type: Input
1220
- }], destination2AirportCode: [{
1221
- type: Input
1222
- }], passengerSelectLabel: [{
1223
- type: Input
1224
- }], maxPaxCount: [{
1225
- type: Input
1226
- }], passengers: [{
1227
- type: Input
1228
- }], minAdultCount: [{
1229
- type: Input
1230
- }], tripSwitchRoundTripLabel: [{
1231
- type: Input
1232
- }], tripSwitchOneWayLabel: [{
1233
- type: Input
1234
- }], tripSwitchMultiCityLabel: [{
1235
- type: Input
1236
- }], directOnlyLabel: [{
1237
- type: Input
1238
- }], directTransitLabel: [{
1239
- type: Input
1240
- }], minimizeOnMobile: [{
1241
- type: Input
1242
- }], inlineOnDesktop: [{
1243
- type: Input
1244
- }], expandedAccordionMobile: [{
1245
- type: Input
1246
- }], defaultSummarySeparator: [{
1247
- type: Input
1248
- }], lastSummarySeparator: [{
1249
- type: Input
1250
- }], passengerSelectTitle: [{
1251
- type: Input
1252
- }], passengerSelectAdultsLabel: [{
1253
- type: Input
1254
- }], passengerSelectYouthsLabel: [{
1255
- type: Input
1256
- }], passengerSelectYoungAdultsLabel: [{
1257
- type: Input
1258
- }], passengerSelectChildrenLabel: [{
1259
- type: Input
1260
- }], passengerSelectInfantsLabel: [{
1261
- type: Input
1262
- }], groupBookingLabel: [{
1263
- type: Input
1264
- }], allAirportsLabel: [{
1265
- type: Input
1266
- }], latestSearchesLabel: [{
1267
- type: Input
1268
- }], closestAirportsLabel: [{
1269
- type: Input
1270
- }], noAirportsLabel: [{
1271
- type: Input
1272
- }], selectOriginFirstLabel: [{
1273
- type: Input
1274
- }], labelOrigin: [{
1275
- type: Input
1276
- }], placeholderOrigin: [{
1277
- type: Input
1278
- }], labelDestination: [{
1279
- type: Input
1280
- }], geolocationLabel: [{
1281
- type: Input
1282
- }], geolocationBlockedLabel: [{
1283
- type: Input
1284
- }], placeholderDestination: [{
1285
- type: Input
1286
- }], keepSelection: [{
1287
- type: Input
1288
- }], editSearchTitle: [{
1289
- type: Input
1290
- }], nasFormGroup: [{
1291
- type: Input
1292
- }], nasFormControlNameOrigin: [{
1293
- type: Input
1294
- }], nasFormControlNameDestination: [{
1295
- type: Input
1296
- }], nasFormControlNameOrigin2: [{
1297
- type: Input
1298
- }], nasFormControlNameDestination2: [{
1299
- type: Input
1300
- }], nasFormControlNameTripType: [{
1301
- type: Input
1302
- }], nasFormControlNameDirectOnly: [{
1303
- type: Input
1304
- }], nasFormControlNameOutbound: [{
1305
- type: Input
1306
- }], nasFormControlNameInbound: [{
1307
- type: Input
1308
- }], nasFormControlGroupBooking: [{
1309
- type: Input
1310
- }], overrideOrigin: [{
1311
- type: Input
1312
- }], enableSuggestions: [{
1313
- type: Input
1314
- }], closestAirports: [{
1315
- type: Input
1316
- }], minimize: [{
1317
- type: Input
1318
- }], airports: [{
1319
- type: Input
1320
- }], tripType: [{
1321
- type: Input
1322
- }], directOnly: [{
1323
- type: Input
1324
- }], groupBookingLimit: [{
1325
- type: Input
1326
- }], ariaLabelPreviousMonth: [{
1327
- type: Input
1328
- }], ariaLabelNextMonth: [{
1329
- type: Input
1330
- }], originOpenChange: [{
1331
- type: Output
1332
- }], destinationOpenChange: [{
1333
- type: Output
1334
- }], origin2OpenChange: [{
1335
- type: Output
1336
- }], destination2OpenChange: [{
1337
- type: Output
1338
- }], passengerSelectOpenChange: [{
1339
- type: Output
1340
- }], originChange: [{
1341
- type: Output
1342
- }], destinationChange: [{
1343
- type: Output
1344
- }], origin2Change: [{
1345
- type: Output
1346
- }], destination2Change: [{
1347
- type: Output
1348
- }], passengersChange: [{
1349
- type: Output
1350
- }], tripTypeChange: [{
1351
- type: Output
1352
- }], directOnlyChange: [{
1353
- type: Output
1354
- }], noAvailableFlightsLabel: [{
1355
- type: Input
1356
- }], availableFlightsLabel: [{
1357
- type: Input
1358
- }], disablePastSelection: [{
1359
- type: Input
1360
- }], outboundLabel: [{
1361
- type: Input
1362
- }], inboundLabel: [{
1363
- type: Input
1364
- }], availability: [{
1365
- type: Input
1366
- }], outboundAvailableDates: [{
1367
- type: Input
1368
- }], inboundAvailableDates: [{
1369
- type: Input
1370
- }], times: [{
1371
- type: Input
1372
- }], dateDisplayFormat: [{
1373
- type: Input
1374
- }], timeDisplayFormat: [{
1375
- type: Input
1376
- }], locale: [{
1377
- type: Input
1378
- }], compact: [{
1379
- type: Input
1380
- }], outboundDisabled: [{
1381
- type: Input
1382
- }], inboundDisabled: [{
1383
- type: Input
1384
- }], enableDatepickers: [{
1385
- type: Input
1386
- }], minimizingLabel: [{
1387
- type: Input
1388
- }], maximizingLabel: [{
1389
- type: Input
1390
- }], directOnlyMobileLabel: [{
1391
- type: Input
1392
- }], orLabel: [{
1393
- type: Input
1394
- }], passengersTitleLabel: [{
1395
- type: Input
1396
- }], invalidDestinationText: [{
1397
- type: Input
1398
- }], outboundSelectedDate: [{
1399
- type: Input
1400
- }], inboundSelectedDate: [{
1401
- type: Input
1402
- }], enableDestinationSelect: [{
1403
- type: Input
1404
- }], enablePassengersSelect: [{
1405
- type: Input
1406
- }], enableTripSwitch: [{
1407
- type: Input
1408
- }], enableTransitSwitch: [{
1409
- type: Input
1410
- }], datePickerComboInlineFlex: [{
1411
- type: Input
1412
- }], airportSelectOutboundId: [{
1413
- type: Input
1414
- }], airportSelectInboundId: [{
1415
- type: Input
1416
- }], passengerSelectId: [{
1417
- type: Input
1418
- }], datePickerOutboundId: [{
1419
- type: Input
1420
- }], datePickerInboundId: [{
1421
- type: Input
1422
- }], tripTypeId: [{
1423
- type: Input
1424
- }], transitTypeId: [{
1425
- type: Input
1426
- }], enableMultiCity: [{
1427
- type: Input
1428
- }], outboundSelectedDateChange: [{
1429
- type: Output
1430
- }], inboundSelectedDateChange: [{
1431
- type: Output
1432
- }], outboundOpenChange: [{
1433
- type: Output
1434
- }], inboundOpenChange: [{
1435
- type: Output
1436
- }], outboundMonthChange: [{
1437
- type: Output
1438
- }], inboundMonthChange: [{
1439
- type: Output
1440
- }], focusOnNextChange: [{
1441
- type: Output
1442
- }], positionChange: [{
1443
- type: Output
1444
- }] } });
1445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCdEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBZ0NuRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFH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QkFBakMsS0FBSztnQkFRRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBUUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQVFHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBUUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUUcsYUFBYTtzQkFBckIsS0FBSztnQkFRRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9JLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFPRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRNb2RlbCB9IGZyb20gJy4uL2FpcnBvcnQtc2VsZWN0L21vZGVscy9haXJwb3J0Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3NlbmdlcnNNb2RlbCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvbW9kZWxzL3Bhc3NlbmdlcnMubW9kZWwnO1xuaW1wb3J0IHsgUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcGFzc2VuZ2VyLXNlbGVjdC9wYXNzZW5nZXItc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tYm9Db21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbWJvL2RhdGVwaWNrZXItY29tYm8uY29tcG9uZW50JztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBGaWx0ZXIgQ29tcG9uZW50IHwgRnVuY3Rpb25hbCB8IE5ldyBkZXNpZ25cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdCcpIHBhc3NlbmdlclNlbGVjdDogUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmlwU3dpdGNoJykgdHJpcFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRTd2l0Y2gnKSB0cmFuc2l0U3dpdGNoOiBCdXR0b25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdhaXJwb3J0U2VsZWN0MicpIGFpcnBvcnRTZWxlY3QyOiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmFkaW8nKSB0cmlwVHlwZVNlbGVjdGlvbjogUmFkaW9Db21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuICBpbmxpbmVGbGV4ID0gMDtcbiAgb3BlblBhc3NlbmdlclNlbGVjdCA9IGZhbHNlO1xuICBvcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuICBleHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlOiBib29sZWFuO1xuICBzaG93U3dpdGNoOiBib29sZWFuO1xuICBvbkZvY3VzSW5ib3VuZElnbm9yZWQgPSBmYWxzZTtcblxuICBnZXQgb3V0Ym91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kT3BlblZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5vdXRib3VuZE9wZW5WYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bnMoKTtcblxuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vdXRib3VuZE9wZW5WYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3V0Ym91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGluYm91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaW5ib3VuZE9wZW5WYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bnMoKTtcblxuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5ib3VuZE9wZW5UaW1lb3V0IGFzIG51bWJlcik7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblRpbWVvdXQ6IGFueTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSByZWNvcmQgY29udGFpbmluZyBrZXlzIHdpdGggYWxsIGFpcnBvcnQgY29kZXMgd2l0aCBjb3JyZXNwb25kaW5nIGFycmF5IG9mIGFpcnBvcnQgY29kZXMgY29ubmVjdGVkIHRvIHRoZSBrZXkuXG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0UmVsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyBvbiB0aGUgY2xlYXIgYnV0dG9uIGluc2lkZSB0aGUgYWlycG9ydCBzZWxlY3QgaW5wdXRzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQ2xlYXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgc3VidHJhY3QgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFN1YnRyYWN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgdG8gdGhlIGJhY2tkcm9wcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIGFkZCBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQWRkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsaXN0IG9mIGFpcnBvcnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JpZ2luIGRyb3Bkb3duLlxuICAgKiBJZiBub3QgaW5jbHVkZWQsIGFsbCBhaXJwb3J0cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWRPcmlnaW5BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBhaXJwb3J0cyB0aGF0IGFyZSByZXN0cmljdGVkIGZvciBkZXN0aW5hdGlvbiBhaXJwb3J0cy4gSXQgd2lsbCBkZWZhdWx0IHRvIGFpcnBvcnRzIGlmIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhaXJwb3J0cyB0aGF0IHRoZSB1c2VyIGFsbHJlYWR5IGhhcyBzZWFyaCBmb3Igc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlMYXRlc3RTZWFyY2hlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IHN3aXRjaCBVSSB0byBpbnRlcmNoYW5nZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSB1c2VTd2l0Y2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgYXJlIGNsb3NlIHRvIHRoZSB1c2VyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBhaXJwb3J0IGNvZGUgb2YgdGhlIG9yaWdpbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgb3JpZ2luIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIG9yaWdpbkFpcnBvcnRDb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIGRlc3RpbmF0aW9uIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGRlc3RpbmF0aW9uQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBvcmlnaW4gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBvcmlnaW4yQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgZGVzdGluYXRpb24yQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRvdGFsIG1heGltdW0gYW1vdW50IG9mIHBhc3NlbmdlcnMgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtYXhQYXhDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGRpZmZlcmVudCBwYXNzZW5nZXIgdHlwZXMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBwYXNzZW5nZXJzKCk6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLnBhc3NlbmdlcnNWYWx1ZTtcbiAgfVxuICBzZXQgcGFzc2VuZ2Vycyh2YWx1ZTogQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlcnNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGFzc2VuZ2Vyc0NoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBhZHVsdHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtaW5BZHVsdENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3Igcm91bmQgdHJpcCBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3Igb25lIHdheSBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaE9uZVdheUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgbXVsdGktY2l0eSBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaE11bHRpQ2l0eUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgZGlyZWN0IG9ubHkgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIGJvdGggZGlyZWN0IGFuZCB0cmFuc2l0IHNlbGVjdGlvbiBpbiB0aGUgdHJhbnNpdCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RUcmFuc2l0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgbWluaW1pemVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZU9uTW9iaWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgYWxsIGlucHV0cyBpbiB0aGUgZmlsdGVyIHNob3VsZCBiZSBmbGV4IGlubGluZS5cbiAgICovXG4gIEBJbnB1dCgpIGlubGluZU9uRGVza3RvcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhdGVzIGlmIHRoZSBlZGl0IHNlYXJjaCBvZiBhY2NvcmRpb24gc2hvdWxkIGJlIGV4cGVuZGVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTtcbiAgfVxuICBzZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBzZXBhcmF0b3IgZm9yIHRoZSBmaWx0ZXIgc3VtbWFyeSB0aGF0IGlzIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IGlzIGFyZSBkaXNwYXllZCBpZiBtaW5pbWl6ZU9uTW9iaWxlIGlzIHRydWUuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqIDEgdHJhdmVsbGVyLCByb3VuZCB0cmlwIGFuZCBkaXJlY3QvdHJhbnNpdFxuICAgKi9cbiAgQElucHV0KCkgbGFzdFN1bW1hcnlTZXBhcmF0b3IgPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRpdGxlIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGFkdWx0cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdEFkdWx0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIHlvdXRocyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFlvdXRoc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIHlvdW5nIGFkdWx0cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdFlvdW5nQWR1bHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgY2hpbGRyZW4gcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RDaGlsZHJlbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGluZmFudHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgd2hlbiB0b3RhbCBudW1iZXIgb2Ygc2VsZWN0ZWQgcGFzc2VuZ2VycyBleGNlZWRzIHRoZSBncm91cCBib29raW5nIGxpbWl0XG4gICAqL1xuICBASW5wdXQoKSBncm91cEJvb2tpbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgYWxsIGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBhbGxBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgY2xvc2VzdCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgY2xvc2VzdEFpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgYXBwZWFyIGluIHRoZSBsaXN0IHRoYXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGFpcnBvcnRzXG4gICAqL1xuICBASW5wdXQoKSBub0FpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGluIHRoZSBhaXJwb3J0IHNlbGVjdCwgaWYgdGhlXG4gICAqIHVzZXIgdHJpZXMgdG8gc2VsZWN0IGEgZGVzdGluYXRpb24gYWlycG9ydCB3aXRob3V0IHNlbGVjdGluZyBhbiBvcmlnaW4gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE9yaWdpbkZpcnN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGFwcGVhciBvbiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlck9yaWdpbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QuXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uLCBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QgaWYgdXNlciBoYXMgZGVuaWVkIGdlb2xvY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckRlc3RpbmF0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIGVkaXQgc2VhcmNoIGFjY29yZGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRTZWFyY2hUaXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgdGhlIHBhcmVudCdzIGZvcm0gZ3JvdXAuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IGlzIHJlcXVpZXJlZCB0byBiZSBmaWxsZWQgaWYgbmFzRm9ybUNvbnRyb2xOYW1lIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW4yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb24yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNYWtlIGxhdGVzdCBzZWFyY2hlcyBhbmQgZ2VvbG9jYXRpb24gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgb3JpZ2luIGFpcnBvcnQgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKSBvdmVycmlkZU9yaWdpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG1ha2UgdGhlIGZpbHRlciBkaXNwbGF5IHN1Z2dlc3RlZCBhaXJwb3J0cyBiYXNlZCBvbiBnZW9sb2NhdGlvbiBhbmQgbGF0ZXN0IHNlYXJjaGVzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU3VnZ2VzdGlvbnM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbG9zZXN0QWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGNsb3Nlc3RBaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIGlmICghYWlycG9ydHMgfHwgYWlycG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnRzWzBdLmNvZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG9ubHkgZGlzcGxheSBhaXJwb3J0IHNlbGVjdGlvbi4gV2hlbiBhIGNpdHkgcGFpciBpcyBzZWxlY3RlZCwgdGhlIHJlc3Qgb2YgdGhlIGZpbHRlciB3aWxsIGJlIHZpc2libGUuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFsbCBhaXJwb3J0cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlIGRyb3Bkb3duIGxpc3RzLlxuICAgKiBJZiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gZ2V0IHRoZSBsYXRlc3Qgc2VhcmNoZXMgZnJvbSB0aGUgYWJhbmRvbmVkIGJhc2tldC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIHRoaXMuYWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSkge1xuICAgICAgY29uc3QgYWJhbmRvbmVkQmFza2V0ID0gdGhpcy5hYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLmdldEFsbCgpO1xuICAgICAgdGhpcy5zZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQsIHRoaXMuYWlycG9ydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgdGhlIHNlbGVjdGVkIHRyaXAgdHlwZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0cmlwVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZVZhbHVlO1xuICB9XG4gIHNldCB0cmlwVHlwZSh0cmlwVHlwZTogVHJpcFR5cGUpIHtcbiAgICBpZiAodHJpcFR5cGUgPT09IHRoaXMudHJpcFR5cGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpcFR5cGVWYWx1ZSA9IHRyaXBUeXBlO1xuICAgIFxuICAgIHRoaXMudHJpcFR5cGVDaGFuZ2UuZW1pdCh0aGlzLnRyaXBUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgd2hldGhlciB0aGUgc2VsZWN0ZWQgdHJhbnNpdCB0eXBlIGlzIGRpcmVjdCBvbmx5IG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXJlY3RPbmx5KCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHlWYWx1ZTtcbiAgfVxuICBzZXQgZGlyZWN0T25seShkaXJlY3RPbmx5OiBib29sZWFuKSB7XG4gICAgaWYgKGRpcmVjdE9ubHkgPT09IHRoaXMuZGlyZWN0T25seVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXJlY3RPbmx5VmFsdWUgPSBkaXJlY3RPbmx5O1xuICAgIHRoaXMuZGlyZWN0T25seUNoYW5nZS5lbWl0KHRoaXMuZGlyZWN0T25seSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbGltaXQgZm9yIHdoZW4gdGhlIHRvdGFsIGFtb3VudCBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdG8gYmUgYSBncm91cCBib29raW5nLlxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgb3JpZ2luIGRyb3Bkb3duIHNlbGVjdG9yIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBvcmlnaW5PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbjIgZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbjJPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb24yT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbjIgYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbjJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb24yQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSBhIHBhc3NlbmdlciBzZWxlY3Rpb24gY2hhbmdlIGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQYXNzZW5nZXJzTW9kZWw+PigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBAT3V0cHV0KCkgdHJpcFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyaXBUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBAT3V0cHV0KCkgZGlyZWN0T25seUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXJzIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSWYgc2V0LCBFbmFibGVzIHRoZSB0aW1lIGRyb3Bkb3duIHNlbGVjdG9yIGFsb25nc2lkZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgdGltZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRSBkLCBNTU0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tR0InO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFuZCBtYXJnaW5zIGFyb3VuZCB0aGUgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3Qgb3V0Ym91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGluYm91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2hvdy9BZGQgZGF0ZSBwaWNrZXIgY29tYm8gaW50byB0aGUgZmlsdGVyIGlmIHNldCB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGF0ZXBpY2tlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1pbmltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1heGltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWF4aW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xpbmcgdHJhbnNpdCB0eXBlIHdoZW4gZmlsdGVyIGlzIG1pbmltaXplZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlNb2JpbGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnb3InIGluIHRoZSBzdWdnZXN0aW9uZWQgYWlycG9ydHMuXG4gICAqL1xuICBASW5wdXQoKSBvckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yICdUcmF2ZWxlcnMnIGluIHRoZSBwYXNzZW5nZXJzIHNlbGVjdCBidXR0b24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJzVGl0bGVMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlIGRlc3RpbmF0aW9ucyBkcm9wZG93biBsaXN0IHdoZW4gb3JpZ2luIGFpcnBvcnQgaXMgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWREZXN0aW5hdGlvblRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIGRlc3RpbmF0aW9uIGlucHV0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSBwYXNzZW5nZXIgc2VsZWN0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmlwIHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyaXBTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSB0aGUgdHJhbnNpdCBzd2l0Y2gsIHNldCB0aGlzIHRvIGZhbHNlIHRvIHJlbW92ZSBpdC4gSXQncyB0cnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVUcmFuc2l0U3dpdGNoID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBhbmQgaW5ib3VuZCBkYXRlcyB3aWxsIGJyZWFrIGhvcml6b250YWxseS5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJDb21ib0lubGluZUZsZXggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBvdXRib3VuZCBBaXJwb3J0IFNlbGVjdCBcbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBpbmJvdW5kIEFpcnBvcnQgU2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0SW5ib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFBhc3NlbmdlciBTZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBvdXRib3VuZCBkYXRlcGlja2VyIElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCBmb3IgRGF0ZSBwaWNrZXJcbiAgICovXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJPdXRib3VuZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBpbmJvdW5kIGRhdGVwaWNrZXIgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBEYXRlIHBpY2tlclxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVBpY2tlckluYm91bmRJZDogc3RyaW5nO1xuXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBJRCBvZiB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgZm9yIFRyaXAgdHlwZVxuICAgKi9cbiAgQElucHV0KCkgdHJpcFR5cGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGZvciBUcmFuc2l0IHR5cGVcbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zaXRUeXBlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVG9nZ2xlIGZvciBlbmFibGluZyBtdWx0aS1jaXR5IGZ1bmN0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlTXVsdGlDaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZ2VvbG9jYXRpb24gb2YgdGhlIHVzZXIuIFdpbGwgYmUgZW1pdHRlZCBpZiAnZW5hYmxlU3VnZ2VzdGlvbnMnIGlzIHRydWUuXG4gICAqL1xuICBAT3V0cHV0KCkgcG9zaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdlb2xvY2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgobW9udGgsIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcGFzc2VuZ2VyU2VsZWN0SW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhc3NlbmdlclNlbGVjdElkID8gdGhpcy5wYXNzZW5nZXJTZWxlY3RJZCA6IGBuYXMtZmlsdGVyX19wYXNzZW5nZXItc2VsZWN0LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG4gIFxuICBnZXQgdHJpcFR5cGVJbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJpcFR5cGVJZCA/IHRoaXMudHJpcFR5cGVJZCA6IGBuYXMtZmlsdGVyX190cmlwLXR5cGUtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgdHJhbnNpdFR5cGVJbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNpdFR5cGVJZCA/IHRoaXMudHJhbnNpdFR5cGVJZCA6IGBuYXMtZmlsdGVyX190cmFuc2l0LXR5cGUtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBwcml2YXRlIG91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSB0cmlwVHlwZVZhbHVlOiBUcmlwVHlwZTtcbiAgcHJpdmF0ZSBkaXJlY3RPbmx5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgY2xvc2VzdEFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgb3V0Ym91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFzc2VuZ2Vyc1ZhbHVlID0gbmV3IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4oKTtcbiAgcHJpdmF0ZSBmb2N1c0FzeW5jVGltb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwdWJsaWMgc29ydFNlcnZpY2U6IFNvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWJhbmRvbmVkQmFza2V0U2VydmljZTogQWJhbmRvbmVkQmFza2V0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoJ25hcy1maWx0ZXInKTtcbiAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5jb21wb25lbnRJZCA9IG5leHRJZCsrO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5lbmFibGVUcmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBUeXBlID0gdGhpcy50cmlwVHlwZSAhPT0gVHJpcFR5cGUub25lV2F5ICYmIHRoaXMudHJpcFR5cGUgIT09IFRyaXBUeXBlLnR3b1dheVJldHVybiA/IFRyaXBUeXBlLnR3b1dheVJldHVybiA6IHRoaXMudHJpcFR5cGU7XG5cbiAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKSB7XG4gICAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKTtcbiAgICAgICAgaWYodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUodGhpcy50cmlwVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLnRyaXBUeXBlID09IFRyaXBUeXBlLnR3b1dheU9wZW4pIHtcbiAgICAgIHRoaXMuc2hvd1N3aXRjaCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dTd2l0Y2ggPSB0aGlzLmV4aXN0cyh0aGlzLnVzZVN3aXRjaCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmFzRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc05hc0dyb3VwVmFsaWQgPSAvdHJ1ZS9pLnRlc3QoeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXJlY3RPbmx5Q29udHJvbCkge1xuICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5Q29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlXG4gICAgICApO1xuXG4gICAgICBpZiAodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdHJpcFR5cGVDb250cm9sLnZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG5cbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZCkge1xuICAgICAgICAgIGNvbnN0IGluYm91bmRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbmJvdW5kQ29udHJvbCAmJiB0aGlzLmluYm91bmREaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5ib3VuZENvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaXBUeXBlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogVHJpcFR5cGUpID0+IHtcbiAgICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCBkaXJlY3RPbmx5Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICApO1xuICAgICAgaWYgKGRpcmVjdE9ubHlDb250cm9sKSB7XG4gICAgICAgIGRpcmVjdE9ubHlDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIXRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KFxuICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgKTtcblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dChcbiAgICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBnZXRDbG9zZXN0QWlycG9ydHMocG9zaXRpb246IEdlb2xvY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBtb2RpZmllcnNJbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nXG4gICAgKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ21kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdsZycpO1xuICAgIH1cblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgZ2V0QWlycG9ydFNlbGVjdENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzKCdhaXJwb3J0LXNlbGVjdCcsIFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsXG4gICAgXSk7XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucygpOiBBcnJheTxBaXJwb3J0TW9kZWw+IHtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uKHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5cbiAgICAgICAgICA/IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4uZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKHRoaXMuY2xvc2VzdEFpcnBvcnRzXG4gICAgICAgICAgPyB0aGlzLmNsb3Nlc3RBaXJwb3J0cy5maWx0ZXIoXG4gICAgICAgICAgICAoeCkgPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlXG4gICAgICAgICAgKVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0RGF0ZVBpY2tlcnNDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJDbGFzcygnZGF0ZS1jb21ibycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnLFxuICAgIF0pO1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1xuICAgICkge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICBdO1xuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIGNvbnN0IHRyYXZlbERldGFpbHNCYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ3RyYXZlbC1kZXRhaWxzJyk7XG4gICAgcmV0dXJuIHRyYXZlbERldGFpbHNCYXNlLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBvbkluYm91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZVxuICAgIGlmKHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VyT3V0Ym91bmQpLmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgfVxuXG4gIHBhc3NlbmdlcktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgdGhpcy5pc1RhYmxldERpc3BsYXkoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaXBUeXBlT25ld2F5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGlmKCF0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZU11bHRpQ2l0eSkgJiYgdGhpcy50cmlwVHlwZSA9PSBUcmlwVHlwZS50d29XYXlPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9jdXNJbmJvdW5kSWdub3JlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMuZGF0ZXBpY2tlckNvbWJvPy5kYXRlcGlja2VyT3V0Ym91bmQ/LmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3BlbihmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzSW5ib3VuZERhdGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYoZXZlbnQua2V5ID09ICdUYWInIHx8IGV2ZW50LmtleSA9PSAnRW50ZXInKSB7XG4gICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pO1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB0aGlzLm9uRm9jdXNJbmJvdW5kSWdub3JlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmRhdGVwaWNrZXJDb21iby5kYXRlcGlja2VySW5ib3VuZC5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmlwU3dpdGNoRm9jdXNOZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYoZXZlbnQua2V5ID09ICdUYWInKSB7XG4gICAgICBpZighdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykpIHtcbiAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2guYnV0dG9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSB0cnVlO1xuXG4gICAgICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5kaXJlY3RPbmx5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICAgICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZGlyZWN0T25seSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoRm9jdXNPblByZXZpb3VzKClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyaXBUeXBlU2VsZWN0aW9uLnJhZGlvRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJhbnNpdFN3aXRjaC5idXR0b24pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZTtcbiAgICBpZih0aGlzLmVuYWJsZVRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmFuc2l0U3dpdGNoLmJ1dHRvbik7XG4gICAgIH1cbiAgICB9XG4gIH1cblxuICBmb2N1c0FzeW5jKHJlZkVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0FzeW5jVGltb3V0KTtcblxuICAgIHRoaXMuZm9jdXNBc3luY1RpbW91dCA9IHNldFRpbWVvdXQoKCkgPT5cbiAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQocmVmRWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoRm9jdXNOZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTp2b2lkIHtcbiAgICBpZihldmVudC5rZXkgPT0gJ1RhYicpIHtcblxuICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaEZvY3VzT25QcmV2aW91cygpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoIXRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmlwVHlwZVNlbGVjdGlvbi5yYWRpb0VsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH0gXG4gICAgfVxuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvblRyYW5zaXRTd2l0Y2hGb2N1c09uUHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYodGhpcy5lbmFibGVQYXNzZW5nZXJzU2VsZWN0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChcbiAgICAgICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vbkRlc3RpbmF0aW9uT3Blbih0cnVlKTtcbiAgICAgICAgaWYgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKFxuICAgICAgICAgICAgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uKS5pbnB1dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGVwaWNrZXJGb2N1c09uUHJldmlvdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICBpZih0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZU11bHRpQ2l0eSkpIHtcbiAgICAgIGlmKHRoaXMudHJpcFR5cGUgPT0gVHJpcFR5cGUudHdvV2F5T3Blbikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luLmlucHV0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24uaW5wdXQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gIH1cblxuICBvbkZvY3VzT25OZXh0Q2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmKHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlTXVsdGlDaXR5KSAmJiB0aGlzLnRyaXBUeXBlID09IFRyaXBUeXBlLnR3b1dheU9wZW4pIHsgIFxuICAgICAgaWYodGhpcy5vbkZvY3VzSW5ib3VuZElnbm9yZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLmFpcnBvcnRTZWxlY3QyLmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbi5pbnB1dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihldmVudC5rZXkgPT0gJ1RhYicgfHwgZXZlbnQua2V5ID09ICdFbnRlcicpIHtcbiAgICAgIGlmKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHsgIFxuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KFxuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd25cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZih0aGlzLnRyYW5zaXRTd2l0Y2gpIHsgIFxuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KFxuICAgICAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5idXR0b25cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH0gXG4gICAgXG4gIH1cblxuICBpc01vYmlsZURpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhNb2JpbGUodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIGlzVGFibGV0RGlzcGxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgb25PcmlnaW5PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gICBvbk9yaWdpbjJPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW4yT3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmIChcbiAgICAgIG9yaWdpblNuYXBzaG90ICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90ICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlLmxlbmd0aCAmJlxuICAgICAgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTWF4aW1pemUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1heGltaXplID0gdGhpcy52YWxpZGF0ZUFpcnBvcnRWYWx1ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gICBvbkRlc3RpbmF0aW9uMk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3Blbikge1xuICAgICAgdGhpcy51cGRhdGVNYXhpbWl6ZSgpO1xuICAgIH1cbiAgICB0aGlzLmRlc3RpbmF0aW9uMk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyQmFja2Ryb3BDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UuZW1pdCh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpO1xuICB9XG5cbiAgb25QYXNzZW5nZXJTZWxlY3RPcGVuKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblBhc3NlbmdlclNlbGVjdCA9ICF0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3Q7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFzc2VuZ2VyU2VsZWN0KTtcblxuICAgIGlmICh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3Q/Lm51bWJlckZpZWxkcy5maXJzdCkge1xuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0Lm51bWJlckZpZWxkcy5maXJzdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpcFN3aXRjaE9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRyaXBTd2l0Y2hGb2N1c1RpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVTZWxlY3Rpb24/LnJhZGlvRWxlbWVudD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSAhdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3Q7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgb25PcmlnaW4yQ2hhbmdlKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMub3JpZ2luMkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkT3JpZ2luMkFpcnBvcnQoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCFhaXJwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbk9yaWdpbjJDaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW4yQWlycG9ydENvZGUgPT09IGFpcnBvcnQuY29kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luMkFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25EZXN0aW5hdGlvbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uQ2hhbmdlLmVtaXQoYWlycG9ydCk7XG4gIH1cblxuICBvbkRlc3RpbmF0aW9uMkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uMkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpICYmIHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRGb2N1c09uTmF0aXZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgZWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZTtcbiAgICBcbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGVcbiAgICAgICk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudHJpcFR5cGUpO1xuICAgIH1cblxuICAgIGlmKHRoaXMudHJpcFR5cGUgPT0gVHJpcFR5cGUudHdvV2F5T3Blbikge1xuICAgICAgdGhpcy5zaG93U3dpdGNoID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1N3aXRjaCA9IHRoaXMuZXhpc3RzKHRoaXMudXNlU3dpdGNoKTtcbiAgICB9XG5cbiAgfVxuXG4gIG9uVHJhbnNpdENoYW5nZShkaXJlY3RPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5O1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldChcbiAgICAgICAgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5XG4gICAgICApO1xuICAgICAgdHJpcFR5cGVDb250cm9sLnBhdGNoVmFsdWUoZGlyZWN0T25seSk7XG4gICAgfVxuICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gIXRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0O1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc1RyaXBTd2l0Y2hJY29uQ2xhc3MobW9kaWZpZXJzPzogYW55KTogQXJyYXk8Q2xhc3NNb2RlbD4ge1xuICAgIGNvbnN0IGljb25NZWRpdW1CYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ2ljb24tbWVkaXVtJyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgaWNvbk1lZGl1bUJhc2UuZ2V0Q2xhc3MoJycsIG1vZGlmaWVycyksXG4gICAgICB0aGlzLmdldFRyYXZlbERldGFpbHNDbGFzcygnaWNvbicpLFxuICAgIF07XG4gIH1cblxuICBnZXRUcmlwU3dpdGNoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZSA9PT0gVHJpcFR5cGUudHdvV2F5UmV0dXJuXG4gICAgICA/IHRoaXMudHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsXG4gICAgICA6IHRoaXMudHJpcFN3aXRjaE9uZVdheUxhYmVsO1xuICB9XG5cbiAgZ2V0VHJhbnNpdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0T25seSA/IHRoaXMuZGlyZWN0T25seUxhYmVsIDogdGhpcy5kaXJlY3RUcmFuc2l0TGFiZWw7XG4gIH1cblxuICBvbkFjY29yZGlvblRvZ2dsZUNoYW5nZShleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheVN1bW1hcnkgPSAhZXhwYW5kZWQ7XG4gIH1cblxuICBnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGAke3RoaXMucGFzc2VuZ2VyU2VsZWN0TGFiZWx9JHt0aGlzLmRlZmF1bHRTdW1tYXJ5U2VwYXJhdG9yfWAgK1xuICAgICAgYCR7dGhpcy5nZXRUcmlwU3dpdGNoTGFiZWwoKS50b0xvd2VyQ2FzZSgpfSR7dGhpcy5sYXN0U3VtbWFyeVNlcGFyYXRvclxuICAgICAgfSR7dGhpcy5nZXRUcmFuc2l0TGFiZWwoKS50b0xvd2VyQ2FzZSgpfWBcbiAgICApO1xuICB9XG5cbiAgc2hvdWxkTWF4aW1pemUoKTogYm9vbGVhbiB7XG4gICAgaWYodGhpcy5leGlzdHModGhpcy5lbmFibGVNdWx0aUNpdHkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0ICYmXG4gICAgICB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGUgJiZcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbiAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICF0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICh0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiB8fCB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4aW1pemU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmV4aXN0cyh0aGlzLm1pbmltaXplKSkge1xuICAgICAgaWYgKHRoaXMubWF4aW1pemUpIHtcbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNOYXNHcm91cFZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vbk9yaWdpbk9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoXG4gICAgICAgICg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pLmlucHV0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TGF0ZXN0U2VhcmNoZXMoYWJhbmRvbmVkQmFza2V0OiBBcnJheTxBYmFuZG9uZWRCYXNrZXRJdGVtTW9kZWw+LCBhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPik6IHZvaWQge1xuICAgIGlmICghYWJhbmRvbmVkQmFza2V0IHx8ICFhaXJwb3J0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXF1ZSA9IG5ldyBBcnJheTxBYmFuZG9uZWRCYXNrZXRJdGVtTW9kZWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJhbmRvbmVkQmFza2V0KSB7XG4gICAgICBpZiAoIXVuaXF1ZS5zb21lKCh4KSA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCgoeCkgPT4geC5vcmlnaW5Db2RlKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkNvZGVzID0gdW5pcXVlLm1hcCgoeCkgPT4geC5kZXN0aW5hdGlvbkNvZGUpO1xuXG4gICAgY29uc3QgbGF0ZXN0U2VhcmNoZXNPcmlnaW4gPSBhaXJwb3J0cy5maWx0ZXIoKGFpcnBvcnQpID0+XG4gICAgICB1bmlxdWUuc29tZShcbiAgICAgICAgKHgpID0+IHgub3JpZ2luQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKChhaXJwb3J0KSA9PlxuICAgICAgdW5pcXVlLnNvbWUoXG4gICAgICAgICh4KSA9PiB4LmRlc3RpbmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBjb2RlID0gJ2NvZGUnO1xuICAgIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4gPSB0aGlzLnNvcnRTZXJ2aWNlXG4gICAgICAuc29ydEJ5T2JqZWN0KGxhdGVzdFNlYXJjaGVzT3JpZ2luLCBvcmlnaW5Db2RlcywgY29kZSlcbiAgICAgIC5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5leGlzdHModGhpcy5vdmVycmlkZU9yaWdpbikpIHtcbiAgICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luWzBdLmNvZGU7XG4gICAgfVxuXG4gICAgdGhpcy5sYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gdGhpcy5zb3J0U2VydmljZVxuICAgICAgLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKVxuICAgICAgLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZURyb3Bkb3ducygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMub3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8bmFzLWFjY29yZGlvbiAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSk7IGVsc2UgZmlsdGVyVGVtcGxhdGVcIiBzaW1wbGVcbiAgY29udGFpbmVyT25Ub2dnbGUgdHJhbnNwYXJlbnQgW2V4cGFuZGVkXT1cImV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlXCIgW3RpdGxlXT1cImVkaXRTZWFyY2hUaXRsZVwiXG4gICh0b2dnbGVDaGFuZ2UpPVwib25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmFzLWFjY29yZGlvbj5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSkgJiYgZGlzcGxheVN1bW1hcnlcIj57e2dldFN1bW1hcnkoKX19XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAjY29udGFpbmVyIFtuYXNDbGFzc109XCJnZXRDb250YWluZXJDbGFzcygpXCI+XG4gICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0RmlsdGVyQ2xhc3MoJ2ZpbHRlcnMnLCBbZXhpc3RzKG1pbmltaXplKSAmJiAnbWluaW1pemVkJywgZXhpc3RzKGlubGluZU9uRGVza3RvcCkgJiYgJ2lubGluZScsIGV4aXN0cyhlbmFibGVNdWx0aUNpdHkpICYmICdtdWx0aS1jaXR5JywgdHJpcFR5cGUgPT0gMyAmJiAnbXVsdGktY2l0eS1tb2RlJ10pXCI+XG4gICAgICA8Zm9ybSAqbmdJZj1cImVuYWJsZVRyaXBTd2l0Y2hcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3JhZGlvJylcIiAoa2V5ZG93bik9XCJvblRyaXBTd2l0Y2hGb2N1c05leHQoJGV2ZW50KVwiPlxuICAgICAgICA8bmFzLXJhZGlvICNyYWRpbyBbaWRdPVwidHJpcFR5cGVJbnB1dElkICsgJ19fcm91bmQtdHJpcCdcIiBbbmFtZV09XCIndHJpcFR5cGUnXCIgW3ZhbHVlXT1cIjJcIiAoY2hlY2tlZENoYW5nZSk9XCJvblRyaXBUeXBlQ2hhbmdlKDIpXCIgW2NoZWNrZWRdPVwidHJpcFR5cGUgPT09IDJcIj5cbiAgICAgICAgICB7e3RyaXBTd2l0Y2hSb3VuZFRyaXBMYWJlbH19XG4gICAgICAgIDwvbmFzLXJhZGlvPlxuICAgICAgICA8bmFzLXJhZGlvICNyYWRpbyBbaWRdPVwidHJpcFR5cGVJbnB1dElkICsgJ19fb25lLXdheSdcIiBbbmFtZV09XCIndHJpcFR5cGUnXCIgW3ZhbHVlXT1cIjFcIiAoY2hlY2tlZENoYW5nZSk9XCJvblRyaXBUeXBlQ2hhbmdlKDEpXCIgW2NoZWNrZWRdPVwidHJpcFR5cGUgPT09IDFcIj5cbiAgICAgICAgICB7e3RyaXBTd2l0Y2hPbmVXYXlMYWJlbH19XG4gICAgICAgIDwvbmFzLXJhZGlvPlxuICAgICAgICA8bmFzLXJhZGlvICpuZ0lmPVwiZXhpc3RzKGVuYWJsZU11bHRpQ2l0eSlcIiAjcmFkaW8gW2lkXT1cInRyaXBUeXBlSW5wdXRJZCArICdfX211bHRpLWNpdHknXCIgW25hbWVdPVwiJ3RyaXBUeXBlJ1wiIFt2YWx1ZV09XCIzXCIgKGNoZWNrZWRDaGFuZ2UpPVwib25UcmlwVHlwZUNoYW5nZSgzKVwiIFtjaGVja2VkXT1cInRyaXBUeXBlID09PSAzXCI+XG4gICAgICAgICAge3t0cmlwU3dpdGNoTXVsdGlDaXR5TGFiZWx9fVxuICAgICAgICA8L25hcy1yYWRpbz5cbiAgICAgIDwvZm9ybT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhaXJwb3J0cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgYWlycG9ydFJlbGF0aW9ucyAmJiAoZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCIgI2FpcnBvcnRTZWxlY3QgY29tYm9cbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiIFxuICAgICAgICAgIFtvdXRib3VuZElkXT1cImFpcnBvcnRTZWxlY3RPdXRib3VuZElkXCIgW2luYm91bmRJZF09XCJhaXJwb3J0U2VsZWN0SW5ib3VuZElkXCIgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCIgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5dPVwibmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb25dPVwibmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb25cIiBbdXNlU3dpdGNoXT1cInNob3dTd2l0Y2hcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRBaXJwb3J0U2VsZWN0Q2xhc3MoKVwiIFthaXJwb3J0c109XCJhaXJwb3J0c1wiIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c109XCJhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c1wiIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiIFtsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXT1cImxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb25cIlxuICAgICAgICAgIFtkaXNwbGF5TGF0ZXN0U2VhcmNoZXNdPVwiZGlzcGxheUxhdGVzdFNlYXJjaGVzXCIgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW29yaWdpbkFpcnBvcnRDb2RlXT1cIm9yaWdpbkFpcnBvcnRDb2RlXCIgW2Rlc3RpbmF0aW9uQWlycG9ydENvZGVdPVwiZGVzdGluYXRpb25BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiIFtsYXRlc3RTZWFyY2hlc0xhYmVsXT1cImxhdGVzdFNlYXJjaGVzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNMYWJlbF09XCJjbG9zZXN0QWlycG9ydHNMYWJlbFwiIFtjbG9zZXN0QWlycG9ydHNdPVwiY2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbc2VsZWN0T3JpZ2luRmlyc3RMYWJlbF09XCJzZWxlY3RPcmlnaW5GaXJzdExhYmVsXCIgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIiBbbGFiZWxEZXN0aW5hdGlvbl09XCJsYWJlbERlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZ2VvbG9jYXRpb25MYWJlbF09XCJnZW9sb2NhdGlvbkxhYmVsXCIgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCIgXG4gICAgICAgICAgW25vQWlycG9ydHNMYWJlbF09XCJub0FpcnBvcnRzTGFiZWxcIiBbcGxhY2Vob2xkZXJEZXN0aW5hdGlvbl09XCJwbGFjZWhvbGRlckRlc3RpbmF0aW9uXCIgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgW2ludmFsaWREZXN0aW5hdGlvblRleHRdPVwiaW52YWxpZERlc3RpbmF0aW9uVGV4dFwiIChvcmlnaW5DaGFuZ2UpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIlxuICAgICAgICAgIChkZXN0aW5hdGlvbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uQ2hhbmdlKCRldmVudClcIiAoZm9jdXNPbk5leHQpPVwib25UcmlwU3dpdGNoS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAob3JpZ2luT3BlbkNoYW5nZSk9XCJvbk9yaWdpbk9wZW4oJGV2ZW50KVwiIChkZXN0aW5hdGlvbk9wZW5DaGFuZ2UpPVwib25EZXN0aW5hdGlvbk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3Q+XG4gICAgICAgIDxuYXMtYWlycG9ydC1zZWxlY3QgKm5nSWY9XCJhaXJwb3J0cyAmJiBhaXJwb3J0UmVsYXRpb25zICYmIChlbmFibGVEZXN0aW5hdGlvblNlbGVjdCkgJiYgdHJpcFR5cGUgPT0gM1wiICNhaXJwb3J0U2VsZWN0MiBjb21ib1xuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2xvd2VyLXotaW5kZXgnOiBvcGVuUGFzc2VuZ2VyU2VsZWN0IHx8IGluYm91bmRPcGVuIHx8IG91dGJvdW5kT3BlbiB9XCIgXG4gICAgICAgICAgW291dGJvdW5kSWRdPVwiYWlycG9ydFNlbGVjdE91dGJvdW5kSWRcIiBbaW5ib3VuZElkXT1cImFpcnBvcnRTZWxlY3RJbmJvdW5kSWRcIiBbYXJpYUxhYmVsQ2xlYXJdPVwiYXJpYUxhYmVsQ2xlYXJcIiBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW4yXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb25dPVwibmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb24yXCIgW3VzZVN3aXRjaF09XCJmYWxzZVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDbGFzcygpXCIgW2FpcnBvcnRzXT1cImFpcnBvcnRzXCIgW2FsbG93ZWRPcmlnaW5BaXBvcnRzXT1cImFsbG93ZWRPcmlnaW5BaXJwb3J0c1wiXG4gICAgICAgICAgW2FsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzXT1cImFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzXCIgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCIgW2xhdGVzdFNlYXJjaGVzRGVzdGluYXRpb25dPVwibGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIiBbZGlzcGxheUNsb3Nlc3RBaXJwb3J0c109XCJkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbb3JpZ2luQWlycG9ydENvZGVdPVwib3JpZ2luMkFpcnBvcnRDb2RlXCIgW2Rlc3RpbmF0aW9uQWlycG9ydENvZGVdPVwiZGVzdGluYXRpb24yQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIiBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCIgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiIFxuICAgICAgICAgIFtub0FpcnBvcnRzTGFiZWxdPVwibm9BaXJwb3J0c0xhYmVsXCIgW3BsYWNlaG9sZGVyRGVzdGluYXRpb25dPVwicGxhY2Vob2xkZXJEZXN0aW5hdGlvblwiIFtrZWVwU2VsZWN0aW9uXT1cImtlZXBTZWxlY3Rpb25cIlxuICAgICAgICAgIFtpbnZhbGlkRGVzdGluYXRpb25UZXh0XT1cImludmFsaWREZXN0aW5hdGlvblRleHRcIiAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luMkFpcnBvcnQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRlc3RpbmF0aW9uQ2hhbmdlKT1cIm9uRGVzdGluYXRpb24yQ2hhbmdlKCRldmVudClcIiAoZm9jdXNPbk5leHQpPVwib25Gb2N1c0luYm91bmREYXRlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAob3JpZ2luT3BlbkNoYW5nZSk9XCJvbk9yaWdpbjJPcGVuKCRldmVudClcIiAoZGVzdGluYXRpb25PcGVuQ2hhbmdlKT1cIm9uRGVzdGluYXRpb24yT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdD5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdCAqbmdJZj1cImFpcnBvcnRzICYmICghZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCIgI2FpcnBvcnRTZWxlY3RcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiXG4gICAgICAgICAgW291dGJvdW5kSWRdPVwiYWlycG9ydFNlbGVjdE91dGJvdW5kSWRcIiBbYXJpYUxhYmVsQ2xlYXJdPVwiYXJpYUxhYmVsQ2xlYXJcIiBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIiBbdXNlU3dpdGNoXT1cInNob3dTd2l0Y2hcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnYWlycG9ydC1vcmlnaW4tc2VsZWN0JylcIiBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIiBbYWlycG9ydFJlbGF0aW9uc109XCJhaXJwb3J0UmVsYXRpb25zXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNPcmlnaW5dPVwibGF0ZXN0U2VhcmNoZXNPcmlnaW5cIiBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiXG4gICAgICAgICAgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiIFtsYXRlc3RTZWFyY2hlc0xhYmVsXT1cImxhdGVzdFNlYXJjaGVzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNMYWJlbF09XCJjbG9zZXN0QWlycG9ydHNMYWJlbFwiIFtjbG9zZXN0QWlycG9ydHNdPVwiY2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbc2VsZWN0T3JpZ2luRmlyc3RMYWJlbF09XCJzZWxlY3RPcmlnaW5GaXJzdExhYmVsXCIgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIiBbZ2VvbG9jYXRpb25MYWJlbF09XCJnZW9sb2NhdGlvbkxhYmVsXCJcbiAgICAgICAgICBbZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxdPVwiZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxcIiBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCJcbiAgICAgICAgICAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCIgKGZvY3VzT25OZXh0KT1cIm9uVHJpcFN3aXRjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIiAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdD5cbiAgICAgICAgPG5hcy1zdWdnZXN0aW9ucyAqbmdJZj1cIihjbG9zZXN0QWlycG9ydHMgfHwgbGF0ZXN0U2VhcmNoZXNPcmlnaW4pICYmIGV4aXN0cyhlbmFibGVTdWdnZXN0aW9ucykgJiYgdHJpcFR5cGUgIT09IDNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2xvd2VyLXotaW5kZXgnOiBvcGVuUGFzc2VuZ2VyU2VsZWN0IHx8IGluYm91bmRPcGVuIHx8IG91dGJvdW5kT3BlbiB9XCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0RmlsdGVyQ2xhc3MoJ3N1Z2dlc3Rpb25zJylcIiBbc3VnZ2VzdGlvbnNdPVwiZ2V0U3VnZ2VzdGlvbnMoKVwiIFtvckxhYmVsXT1cIm9yTGFiZWxcIlxuICAgICAgICAgIChhaXJwb3J0U2VsZWN0KT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCI+PC9uYXMtc3VnZ2VzdGlvbnM+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRNYXhpbWl6ZSgpXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJleGlzdHMoZW5hYmxlRGF0ZXBpY2tlcnMpXCIgW25hc0NsYXNzXT1cImdldERhdGVQaWNrZXJzQ2xhc3MoKVwiPlxuICAgICAgICAgIDxuYXMtZGF0ZXBpY2tlci1jb21ibyAjZGF0ZXBpY2tlckNvbWJvIGNvbXBhY3QgXG4gICAgICAgICAgICBbb3V0Ym91bmRJZF09XCJkYXRlUGlja2VyT3V0Ym91bmRJZFwiIFtpbmJvdW5kSWRdPVwiZGF0ZVBpY2tlckluYm91bmRJZFwiIFtpbmxpbmVGbGV4XT1cImlubGluZUZsZXhcIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRdPVwibmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZUluYm91bmRdPVwibmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZFwiIFthdmFpbGFiaWxpdHldPVwiYXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCIgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJkaXNhYmxlUGFzdFNlbGVjdGlvblwiIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFtub0F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiIFtpbmJvdW5kQXZhaWxhYmxlRGF0ZXNdPVwiaW5ib3VuZEF2YWlsYWJsZURhdGVzXCJcbiAgICAgICAgICAgIFtpbmJvdW5kTGFiZWxdPVwiaW5ib3VuZExhYmVsXCIgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtvdXRib3VuZEF2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIiBbb3V0Ym91bmRMYWJlbF09XCJvdXRib3VuZExhYmVsXCJcbiAgICAgICAgICAgIFt0aW1lRGlzcGxheUZvcm1hdF09XCJ0aW1lRGlzcGxheUZvcm1hdFwiIFt0aW1lc109XCJ0aW1lc1wiIFtvdXRib3VuZERpc2FibGVkXT1cIm91dGJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2luYm91bmREaXNhYmxlZF09XCJpbmJvdW5kRGlzYWJsZWRcIiBbb3V0Ym91bmRPbmx5XT1cInRyaXBUeXBlID09PSAxXCIgW2lnbm9yZU9uRm9jdXNJbmJvdW5kRGF0ZV09XCJ0cmlwVHlwZSA9PT0gM1wiXG4gICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIiBbYXJpYUxhYmVsUHJldmlvdXNNb250aF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCIgKGZvY3VzT25OZXh0Q2hhbmdlKT1cIm9uRm9jdXNPbk5leHRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzQ2hhbmdlKT1cIm9uRGF0ZXBpY2tlckZvY3VzT25QcmV2aW91cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbmJvdW5kTW9udGhDaGFuZ2UpPVwib25JbmJvdW5kTW9udGhDaGFuZ2UoJGV2ZW50KVwiIChvdXRib3VuZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRPcGVuKV09XCJvdXRib3VuZE9wZW5cIiBbKGluYm91bmRPcGVuKV09XCJpbmJvdW5kT3BlblwiXG4gICAgICAgICAgICBbKGluYm91bmRTZWxlY3RlZERhdGUpXT1cImluYm91bmRTZWxlY3RlZERhdGVcIiBbKG91dGJvdW5kU2VsZWN0ZWREYXRlKV09XCJvdXRib3VuZFNlbGVjdGVkRGF0ZVwiPlxuICAgICAgICAgIDwvbmFzLWRhdGVwaWNrZXItY29tYm8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCB8fCBlbmFibGVUcmFuc2l0U3dpdGNoXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdkcm9wZG93bi13cmFwcGVyJylcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygncGFzc2VuZ2VycycpXCI+XG4gICAgICAgICAgICA8YnV0dG9uICNwYXNzZW5nZXJTZWxlY3REcm9wZG93biAoY2xpY2spPVwib25QYXNzZW5nZXJTZWxlY3RPcGVuKCRldmVudClcIiBbaWRdPVwicGFzc2VuZ2VyU2VsZWN0SWRcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMtYnV0dG9uJywgb3BlblBhc3NlbmdlclNlbGVjdCAmJiAnYWN0aXZlJylcIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xhYmVsJylcIj5cbiAgICAgICAgICAgICAgICA8cCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2J1dHRvbi10aXRsZScpXCI+e3twYXNzZW5nZXJzVGl0bGVMYWJlbH19PC9wPlxuICAgICAgICAgICAgICAgIDxwPnt7cGFzc2VuZ2VyU2VsZWN0TGFiZWx9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCd0cmF2ZWxlci1pY29uJylcIj48bmFzLWljb24gW2ljb25dPVwiJ215LXByb2ZpbGUtY29tcGFjdCdcIlxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3NtYWxsJ1wiPjwvbmFzLWljb24+PC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGVuUGFzc2VuZ2VyU2VsZWN0XCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdwYXNzZW5nZXJzLXNlbGVjdGlvbicpXCI+XG4gICAgICAgICAgICAgIDxuYXMtcGFzc2VuZ2VyLXNlbGVjdCAjcGFzc2VuZ2VyU2VsZWN0IFthcmlhTGFiZWxBZGRdPVwiYXJpYUxhYmVsQWRkXCIgW2FyaWFMYWJlbFN1YnRyYWN0XT1cImFyaWFMYWJlbFN1YnRyYWN0XCJcbiAgICAgICAgICAgICAgICBbYWR1bHRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWxcIiBbeW91dGhzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0WW91dGhzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFt5b3VuZ0FkdWx0c0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdFlvdW5nQWR1bHRzTGFiZWxcIiBbY2hpbGRyZW5MYWJlbF09XCJwYXNzZW5nZXJTZWxlY3RDaGlsZHJlbkxhYmVsXCJcbiAgICAgICAgICAgICAgICBbaW5mYW50c0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdEluZmFudHNMYWJlbFwiIFttYXhQYXhDb3VudF09XCJtYXhQYXhDb3VudFwiXG4gICAgICAgICAgICAgICAgW21pbkFkdWx0Q291bnRdPVwibWluQWR1bHRDb3VudFwiIFt0aXRsZV09XCJwYXNzZW5nZXJTZWxlY3RUaXRsZVwiIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmddPVwibmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmdcIiBbZ3JvdXBCb29raW5nTGFiZWxdPVwiZ3JvdXBCb29raW5nTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtncm91cEJvb2tpbmdMaW1pdF09XCJncm91cEJvb2tpbmdMaW1pdFwiIChmb2N1c09uTmV4dCk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzKT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpXCJcbiAgICAgICAgICAgICAgICBbKHBhc3NlbmdlcnMpXT1cInBhc3NlbmdlcnNcIj48L25hcy1wYXNzZW5nZXItc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAgIFtzaG93QmFja2Ryb3BdPVwib3BlblBhc3NlbmdlclNlbGVjdFwiIChzaG93QmFja2Ryb3BDaGFuZ2UpPVwib25QYXNzZW5nZXJCYWNrZHJvcENoYW5nZSgkZXZlbnQpXCI+PC9uYXMtYmFja2Ryb3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW5hYmxlVHJhbnNpdFN3aXRjaFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygndHJhbnNpdC10eXBlJylcIj5cbiAgICAgICAgICAgIDxuYXMtYnV0dG9uICpuZ0lmPVwiZGlyZWN0T25seUxhYmVsICYmIGRpcmVjdFRyYW5zaXRMYWJlbFwiICN0cmFuc2l0U3dpdGNoIGJsb2NrIGxpZ2h0XG4gICAgICAgICAgICAgIFtpZF09XCJ0cmFuc2l0VHlwZUlucHV0SWRcIiBbaWNvblR5cGVdPVwiJ2NoZXZyb24tZG93bidcIiBbbGFiZWxdPVwiZ2V0VHJhbnNpdExhYmVsKClcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYW5zaXQnLCBvcGVuVHJhbnNpdFR5cGVTZWxlY3QgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgKGNsaWNrKT1cIm9uVHJhbnNpdFN3aXRjaE9wZW4oJGV2ZW50KVwiIChmb2N1c09uTmV4dCk9XCJvblRyYW5zaXRTd2l0Y2hGb2N1c05leHQoJGV2ZW50KVwiPnt7IGdldFRyYW5zaXRMYWJlbCgpIH19XG4gICAgICAgICAgICA8L25hcy1idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlblRyYW5zaXRUeXBlU2VsZWN0XCIgW25hc0NsYXNzXT1cImdldENsYXNzKCd0cmFuc2l0LXR5cGUtc2VsZWN0aW9uJylcIiAoa2V5ZG93bik9XCJ0cmFuc2l0S2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cInRyYW5zaXRUeXBlSW5wdXRJZCArICdfX2RpcmVjdCdcIiBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdhY3Rpb24nLCBkaXJlY3RPbmx5ICYmICdhY3RpdmUnKVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICN0cmFuc2l0VHlwZURpcmVjdE9ubHkgKGNsaWNrKT1cIm9uVHJhbnNpdENoYW5nZSh0cnVlKVwiPnt7IGRpcmVjdE9ubHlMYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwidHJhbnNpdFR5cGVJbnB1dElkICsgJ19fdHJhbnNpdCdcIiB0eXBlPVwiYnV0dG9uXCIgI3RyYW5zaXRUeXBlVHJhbnNpdFxuICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsICFkaXJlY3RPbmx5ICYmICdhY3RpdmUnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVHJhbnNpdENoYW5nZShmYWxzZSlcIj57eyBkaXJlY3RUcmFuc2l0TGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxuYXMtYmFja2Ryb3AgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICBbKHNob3dCYWNrZHJvcCldPVwib3BlblRyYW5zaXRUeXBlU2VsZWN0XCI+PC9uYXMtYmFja2Ryb3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==