@norwegian/core-components 5.1.0
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.
- package/README.md +78 -0
- package/assets/documentation/accordion/accordion.md +1 -0
- package/assets/documentation/airport-select/airport-select.md +0 -0
- package/assets/documentation/autocomplete/autocomplete.md +1 -0
- package/assets/documentation/box/box.md +1 -0
- package/assets/documentation/button/button.md +10 -0
- package/assets/documentation/checkbox/checkbox.md +7 -0
- package/assets/documentation/chip/chip.md +1 -0
- package/assets/documentation/container/container.md +1 -0
- package/assets/documentation/continue/continue.md +1 -0
- package/assets/documentation/cover/cover.md +1 -0
- package/assets/documentation/datepicker/calendar/calendar.md +3 -0
- package/assets/documentation/datepicker/datepicker.md +3 -0
- package/assets/documentation/datepicker-combo/datepicker-combo.md +1 -0
- package/assets/documentation/dropdown/dropdown.md +3 -0
- package/assets/documentation/filter/filter.md +0 -0
- package/assets/documentation/grid/grid.md +1 -0
- package/assets/documentation/icon/icon.md +4 -0
- package/assets/documentation/icon-list/icon-list.md +1 -0
- package/assets/documentation/info/info.md +1 -0
- package/assets/documentation/input/input.md +1 -0
- package/assets/documentation/journey/journey.md +1 -0
- package/assets/documentation/journey-availability/journey-availability.md +3 -0
- package/assets/documentation/journey-availability-list/journey-availability-list.md +9 -0
- package/assets/documentation/journey-selection/journey-selection.md +1 -0
- package/assets/documentation/journey-stopover/journey-stopover.md +1 -0
- package/assets/documentation/list/list.md +1 -0
- package/assets/documentation/modal/modal.md +0 -0
- package/assets/documentation/number-field/number-field.md +1 -0
- package/assets/documentation/page-footer/page-footer.md +1 -0
- package/assets/documentation/page-header/page-header.md +1 -0
- package/assets/documentation/passenger-select/passenger-select.md +1 -0
- package/assets/documentation/phone-number/phone-number.md +2 -0
- package/assets/documentation/premium-toggle/premium-toggle.md +9 -0
- package/assets/documentation/radio/radio.md +7 -0
- package/assets/documentation/select/select.md +1 -0
- package/assets/documentation/simple-list/simple-list.md +1 -0
- package/assets/documentation/slide-toggle/slide-toggle.md +1 -0
- package/assets/documentation/slider/slider.md +1 -0
- package/assets/documentation/sort/sort.md +1 -0
- package/assets/documentation/spinner/spinner.md +1 -0
- package/assets/documentation/subsidy-discount/subsidy-discount.md +3 -0
- package/assets/documentation/suggestions/suggestions.md +1 -0
- package/assets/documentation/tab-group/tab-group.md +1 -0
- package/assets/documentation/table/table.md +8 -0
- package/assets/documentation/textarea/textarea.md +1 -0
- package/assets/documentation/toggle/toggle.md +5 -0
- package/assets/documentation/trip-summary/trip-summary.md +2 -0
- package/assets/documentation/weather-icon/weather-icon.md +1 -0
- package/assets/fonts/TiemposHeadlineWeb-Bold.eot +0 -0
- package/assets/fonts/TiemposHeadlineWeb-Bold.woff +0 -0
- package/assets/fonts/TiemposHeadlineWeb-Bold.woff2 +0 -0
- package/assets/fonts/TiemposHeadlineWeb-BoldItalic.eot +0 -0
- package/assets/fonts/TiemposHeadlineWeb-BoldItalic.woff +0 -0
- package/assets/fonts/TiemposHeadlineWeb-BoldItalic.woff2 +0 -0
- package/assets/fonts/TiemposText-Medium.eot +0 -0
- package/assets/fonts/TiemposText-Medium.woff +0 -0
- package/assets/fonts/TiemposText-Medium.woff2 +0 -0
- package/assets/fonts/TiemposTextWeb-Italic.eot +0 -0
- package/assets/fonts/TiemposTextWeb-Italic.woff +0 -0
- package/assets/fonts/TiemposTextWeb-Italic.woff2 +0 -0
- package/assets/fonts/TiemposTextWeb-Regular.eot +0 -0
- package/assets/fonts/TiemposTextWeb-Regular.woff +0 -0
- package/assets/fonts/TiemposTextWeb-Regular.woff2 +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.svg +12420 -0
- package/assets/fonts/apercu_bold_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_bold_italic_pro.otf +0 -0
- package/assets/fonts/apercu_bold_pro-web.eot +0 -0
- package/assets/fonts/apercu_bold_pro-web.svg +10193 -0
- package/assets/fonts/apercu_bold_pro-web.ttf +0 -0
- package/assets/fonts/apercu_bold_pro-web.woff +0 -0
- package/assets/fonts/apercu_bold_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_bold_pro.otf +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.svg +12831 -0
- package/assets/fonts/apercu_light_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_light_pro-web.eot +0 -0
- package/assets/fonts/apercu_light_pro-web.svg +9704 -0
- package/assets/fonts/apercu_light_pro-web.ttf +0 -0
- package/assets/fonts/apercu_light_pro-web.woff +0 -0
- package/assets/fonts/apercu_light_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.svg +12354 -0
- package/assets/fonts/apercu_medium_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_italic_pro.otf +0 -0
- package/assets/fonts/apercu_medium_pro-web.eot +0 -0
- package/assets/fonts/apercu_medium_pro-web.svg +12254 -0
- package/assets/fonts/apercu_medium_pro-web.ttf +0 -0
- package/assets/fonts/apercu_medium_pro-web.woff +0 -0
- package/assets/fonts/apercu_medium_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_pro.otf +0 -0
- package/assets/fonts/apercu_mono_pro-web.eot +0 -0
- package/assets/fonts/apercu_mono_pro-web.svg +538 -0
- package/assets/fonts/apercu_mono_pro-web.ttf +0 -0
- package/assets/fonts/apercu_mono_pro-web.woff +0 -0
- package/assets/fonts/apercu_mono_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.svg +13059 -0
- package/assets/fonts/apercu_regular_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_italic_pro.otf +0 -0
- package/assets/fonts/apercu_regular_pro-web.eot +0 -0
- package/assets/fonts/apercu_regular_pro-web.svg +11356 -0
- package/assets/fonts/apercu_regular_pro-web.ttf +0 -0
- package/assets/fonts/apercu_regular_pro-web.woff +0 -0
- package/assets/fonts/apercu_regular_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_pro.otf +0 -0
- package/assets/icons/flags/ar.svg +20 -0
- package/assets/icons/flags/br.svg +30 -0
- package/assets/icons/flags/ca.svg +18 -0
- package/assets/icons/flags/de.svg +20 -0
- package/assets/icons/flags/dk.svg +20 -0
- package/assets/icons/flags/en.svg +20 -0
- package/assets/icons/flags/es.svg +20 -0
- package/assets/icons/flags/fi.svg +20 -0
- package/assets/icons/flags/fr.svg +20 -0
- package/assets/icons/flags/ie.svg +22 -0
- package/assets/icons/flags/it.svg +20 -0
- package/assets/icons/flags/nl.svg +20 -0
- package/assets/icons/flags/no.svg +20 -0
- package/assets/icons/flags/pl.svg +20 -0
- package/assets/icons/flags/se.svg +20 -0
- package/assets/icons/flags/uk.svg +20 -0
- package/assets/icons/flags/us.svg +20 -0
- package/assets/icons/icon-add--light.svg +11 -0
- package/assets/icons/icon-add.svg +7 -0
- package/assets/icons/icon-arrow-left--light.svg +7 -0
- package/assets/icons/icon-arrow-left.svg +7 -0
- package/assets/icons/icon-arrow-right--light.svg +7 -0
- package/assets/icons/icon-arrow-right.svg +6 -0
- package/assets/icons/icon-check.svg +7 -0
- package/assets/icons/icon-chevron-down.svg +1 -0
- package/assets/icons/icon-chevron-left--light.svg +1 -0
- package/assets/icons/icon-chevron-left-outlined.svg +4 -0
- package/assets/icons/icon-chevron-left.svg +1 -0
- package/assets/icons/icon-chevron-right--light.svg +1 -0
- package/assets/icons/icon-chevron-right-outlined.svg +4 -0
- package/assets/icons/icon-chevron-right.svg +1 -0
- package/assets/icons/icon-dropdown-arrow--disabled.svg +8 -0
- package/assets/icons/icon-dropdown-arrow--light.svg +8 -0
- package/assets/icons/icon-dropdown-arrow.svg +8 -0
- package/assets/icons/icon-error.svg +11 -0
- package/assets/icons/icon-flight-direct.svg +8 -0
- package/assets/icons/icon-flight-one-stop.svg +8 -0
- package/assets/icons/icon-flight-two-stops.svg +9 -0
- package/assets/icons/icon-geolocation--disabled.svg +8 -0
- package/assets/icons/icon-geolocation--light.svg +8 -0
- package/assets/icons/icon-geolocation.svg +8 -0
- package/assets/icons/icon-goto.svg +8 -0
- package/assets/icons/icon-home.svg +1 -0
- package/assets/icons/icon-marker.svg +8 -0
- package/assets/icons/icon-menu--dark.svg +9 -0
- package/assets/icons/icon-menu.svg +9 -0
- package/assets/icons/icon-nav_right--large.svg +7 -0
- package/assets/icons/icon-nav_right--small.svg +7 -0
- package/assets/icons/icon-nav_right.svg +7 -0
- package/assets/icons/icon-negative.svg +11 -0
- package/assets/icons/icon-ol_li.svg +7 -0
- package/assets/icons/icon-one-stop-arrow.svg +8 -0
- package/assets/icons/icon-passenger--children.svg +1 -0
- package/assets/icons/icon-passenger--female.svg +1 -0
- package/assets/icons/icon-passenger--infant.svg +1 -0
- package/assets/icons/icon-passenger--male.svg +1 -0
- package/assets/icons/icon-positive.svg +10 -0
- package/assets/icons/icon-red-circle.svg +7 -0
- package/assets/icons/icon-remove.svg +8 -0
- package/assets/icons/icon-share_facebook.svg +10 -0
- package/assets/icons/icon-share_instagram.svg +12 -0
- package/assets/icons/icon-share_twitter.svg +13 -0
- package/assets/icons/icon-share_youtube.svg +11 -0
- package/assets/icons/icon-star.svg +9 -0
- package/assets/icons/icon-subtract--light.svg +12 -0
- package/assets/icons/icon-subtract.svg +9 -0
- package/assets/icons/icon-switch--secondary.svg +1 -0
- package/assets/icons/icon-switch.svg +1 -0
- package/assets/icons/icon-two-stops-arrow.svg +10 -0
- package/assets/icons/large/baggage-hand-baggage.svg +41 -0
- package/assets/icons/large/baggage.svg +75 -0
- package/assets/icons/large/car-rentals.svg +61 -0
- package/assets/icons/large/cashpoints.svg +92 -0
- package/assets/icons/large/celebration.svg +77 -0
- package/assets/icons/large/central-airports.svg +44 -0
- package/assets/icons/large/customer-service.svg +47 -0
- package/assets/icons/large/destinations.svg +78 -0
- package/assets/icons/large/direct-flights.svg +73 -0
- package/assets/icons/large/entertainment.svg +89 -0
- package/assets/icons/large/family.svg +88 -0
- package/assets/icons/large/fast-track.svg +57 -0
- package/assets/icons/large/food.svg +48 -0
- package/assets/icons/large/from-a-to-b.svg +66 -0
- package/assets/icons/large/hotels.svg +84 -0
- package/assets/icons/large/lounge.svg +67 -0
- package/assets/icons/large/new-aircrafts.svg +60 -0
- package/assets/icons/large/personnel.svg +54 -0
- package/assets/icons/large/premium.svg +49 -0
- package/assets/icons/large/wifi.svg +112 -0
- package/assets/icons/list--journey.svg +207 -0
- package/assets/icons/medium/accommodation--light.svg +16 -0
- package/assets/icons/medium/accommodation.svg +15 -0
- package/assets/icons/medium/alert--error.svg +11 -0
- package/assets/icons/medium/alert--light.svg +10 -0
- package/assets/icons/medium/alert--success.svg +9 -0
- package/assets/icons/medium/alert.svg +11 -0
- package/assets/icons/medium/arrow-down--light.svg +11 -0
- package/assets/icons/medium/arrow-down.svg +11 -0
- package/assets/icons/medium/arrow-left--light.svg +11 -0
- package/assets/icons/medium/arrow-left.svg +11 -0
- package/assets/icons/medium/arrow-right--light.svg +11 -0
- package/assets/icons/medium/arrow-right.svg +11 -0
- package/assets/icons/medium/arrow-up--light.svg +11 -0
- package/assets/icons/medium/arrow-up.svg +11 -0
- package/assets/icons/medium/baggage--light.svg +10 -0
- package/assets/icons/medium/baggage-checked-in--light.svg +19 -0
- package/assets/icons/medium/baggage-checked-in.svg +20 -0
- package/assets/icons/medium/baggage-hand-baggage--light.svg +32 -0
- package/assets/icons/medium/baggage-hand-baggage.svg +36 -0
- package/assets/icons/medium/baggage-special-baggage--light.svg +21 -0
- package/assets/icons/medium/baggage-special-baggage.svg +23 -0
- package/assets/icons/medium/baggage-sports-equipment--light.svg +18 -0
- package/assets/icons/medium/baggage-sports-equipment.svg +21 -0
- package/assets/icons/medium/baggage.svg +11 -0
- package/assets/icons/medium/baggages--light.svg +1 -0
- package/assets/icons/medium/baggages.svg +1 -0
- package/assets/icons/medium/car-rental--light.svg +26 -0
- package/assets/icons/medium/car-rental.svg +26 -0
- package/assets/icons/medium/card--light.svg +18 -0
- package/assets/icons/medium/card.svg +18 -0
- package/assets/icons/medium/cashpoints--light.svg +29 -0
- package/assets/icons/medium/cashpoints.svg +31 -0
- package/assets/icons/medium/central-airports--light.svg +25 -0
- package/assets/icons/medium/central-airports.svg +25 -0
- package/assets/icons/medium/customer-service--light.svg +19 -0
- package/assets/icons/medium/customer-service.svg +22 -0
- package/assets/icons/medium/direct-flights--light.svg +24 -0
- package/assets/icons/medium/direct-flights.svg +25 -0
- package/assets/icons/medium/direct-to-gate--light.svg +18 -0
- package/assets/icons/medium/direct-to-gate.svg +18 -0
- package/assets/icons/medium/docs--light.svg +10 -0
- package/assets/icons/medium/docs.svg +10 -0
- package/assets/icons/medium/entertainment--light.svg +71 -0
- package/assets/icons/medium/entertainment.svg +81 -0
- package/assets/icons/medium/facebook.svg +12 -0
- package/assets/icons/medium/family.svg +29 -0
- package/assets/icons/medium/fast-track--light.svg +19 -0
- package/assets/icons/medium/fast-track.svg +23 -0
- package/assets/icons/medium/flexible-tickets--light.svg +16 -0
- package/assets/icons/medium/flexible-tickets.svg +18 -0
- package/assets/icons/medium/flight-arrival--light.svg +16 -0
- package/assets/icons/medium/flight-arrival.svg +15 -0
- package/assets/icons/medium/flight-departure--light.svg +12 -0
- package/assets/icons/medium/flight-departure.svg +12 -0
- package/assets/icons/medium/flight-oneway--light.svg +12 -0
- package/assets/icons/medium/flight-oneway.svg +13 -0
- package/assets/icons/medium/flight-outbound--light.svg +11 -0
- package/assets/icons/medium/flight-outbound.svg +11 -0
- package/assets/icons/medium/flight-return--light.svg +11 -0
- package/assets/icons/medium/flight-return-trip.svg +13 -0
- package/assets/icons/medium/flight-return.svg +11 -0
- package/assets/icons/medium/flight-tickets--light.svg +22 -0
- package/assets/icons/medium/flight-tickets.svg +21 -0
- package/assets/icons/medium/food--light.svg +16 -0
- package/assets/icons/medium/food.svg +19 -0
- package/assets/icons/medium/frequent-departures--light.svg +16 -0
- package/assets/icons/medium/frequent-departures.svg +16 -0
- package/assets/icons/medium/from-a-to-b--light.svg +17 -0
- package/assets/icons/medium/from-a-to-b.svg +17 -0
- package/assets/icons/medium/in-flight-entertainment--light.svg +20 -0
- package/assets/icons/medium/in-flight-entertainment.svg +21 -0
- package/assets/icons/medium/instagram.svg +14 -0
- package/assets/icons/medium/linkedin.svg +17 -0
- package/assets/icons/medium/lounge--light.svg +19 -0
- package/assets/icons/medium/lounge.svg +21 -0
- package/assets/icons/medium/mobile--light.svg +10 -0
- package/assets/icons/medium/mobile.svg +9 -0
- package/assets/icons/medium/my-profile-female.svg +55 -0
- package/assets/icons/medium/my-profile-male.svg +48 -0
- package/assets/icons/medium/new-airplanes--light.svg +14 -0
- package/assets/icons/medium/new-airplanes.svg +14 -0
- package/assets/icons/medium/personnel--light.svg +19 -0
- package/assets/icons/medium/personnel.svg +27 -0
- package/assets/icons/medium/phone--light.svg +15 -0
- package/assets/icons/medium/phone.svg +15 -0
- package/assets/icons/medium/premium--light.svg +23 -0
- package/assets/icons/medium/premium.svg +23 -0
- package/assets/icons/medium/print--light.svg +14 -0
- package/assets/icons/medium/printer.svg +14 -0
- package/assets/icons/medium/relax--light.svg +27 -0
- package/assets/icons/medium/relax.svg +28 -0
- package/assets/icons/medium/rewards--light.svg +19 -0
- package/assets/icons/medium/rewards-fast-track.svg +17 -0
- package/assets/icons/medium/rewards-luggage.svg +22 -0
- package/assets/icons/medium/rewards-seat.svg +21 -0
- package/assets/icons/medium/rewards.svg +19 -0
- package/assets/icons/medium/route-network--light.svg +28 -0
- package/assets/icons/medium/route-network.svg +28 -0
- package/assets/icons/medium/seat-reservation--light.svg +16 -0
- package/assets/icons/medium/seat-reservation.svg +16 -0
- package/assets/icons/medium/special-needs--light.svg +15 -0
- package/assets/icons/medium/special-needs.svg +15 -0
- package/assets/icons/medium/transit-stop--light.svg +30 -0
- package/assets/icons/medium/transit-stop.svg +33 -0
- package/assets/icons/medium/trash--light.svg +7 -0
- package/assets/icons/medium/trash.svg +7 -0
- package/assets/icons/medium/travel-deals--light.svg +24 -0
- package/assets/icons/medium/travel-deals.svg +24 -0
- package/assets/icons/medium/twitter.svg +17 -0
- package/assets/icons/medium/type-asia--light.svg +19 -0
- package/assets/icons/medium/type-asia.svg +19 -0
- package/assets/icons/medium/type-city-vibes--light.svg +14 -0
- package/assets/icons/medium/type-city-vibes.svg +14 -0
- package/assets/icons/medium/type-greece--light.svg +24 -0
- package/assets/icons/medium/type-greece.svg +28 -0
- package/assets/icons/medium/type-norway--light.svg +18 -0
- package/assets/icons/medium/type-norway.svg +18 -0
- package/assets/icons/medium/type-scandinavia--light.svg +32 -0
- package/assets/icons/medium/type-scandinavia.svg +32 -0
- package/assets/icons/medium/type-shopping--light.svg +20 -0
- package/assets/icons/medium/type-shopping.svg +20 -0
- package/assets/icons/medium/type-skiing--light.svg +32 -0
- package/assets/icons/medium/type-skiing.svg +32 -0
- package/assets/icons/medium/type-spain--light.svg +12 -0
- package/assets/icons/medium/type-spain.svg +12 -0
- package/assets/icons/medium/type-sun-and-sea--light.svg +34 -0
- package/assets/icons/medium/type-sun-and-sea.svg +34 -0
- package/assets/icons/medium/type-usa--light.svg +46 -0
- package/assets/icons/medium/type-usa.svg +46 -0
- package/assets/icons/medium/wifi--light.svg +15 -0
- package/assets/icons/medium/wifi.svg +15 -0
- package/assets/icons/medium/youtube.svg +12 -0
- package/assets/icons/mobile-landscape.svg +12 -0
- package/assets/icons/mobile-portrait.svg +12 -0
- package/assets/icons/small/accommodation--light.svg +15 -0
- package/assets/icons/small/accommodation.svg +21 -0
- package/assets/icons/small/alert--error.svg +7 -0
- package/assets/icons/small/alert--light.svg +10 -0
- package/assets/icons/small/alert.svg +10 -0
- package/assets/icons/small/arrow-down--light.svg +11 -0
- package/assets/icons/small/arrow-down.svg +11 -0
- package/assets/icons/small/arrow-left--light.svg +10 -0
- package/assets/icons/small/arrow-left.svg +10 -0
- package/assets/icons/small/arrow-right--light.svg +11 -0
- package/assets/icons/small/arrow-right.svg +11 -0
- package/assets/icons/small/arrow-up--light.svg +10 -0
- package/assets/icons/small/arrow-up.svg +10 -0
- package/assets/icons/small/baggage--light.svg +8 -0
- package/assets/icons/small/baggage-checked-in--light.svg +16 -0
- package/assets/icons/small/baggage-checked-in.svg +16 -0
- package/assets/icons/small/baggage-hand-baggage--light.svg +11 -0
- package/assets/icons/small/baggage-hand-baggage.svg +11 -0
- package/assets/icons/small/baggage-special-baggage--light.svg +20 -0
- package/assets/icons/small/baggage-special-baggage.svg +20 -0
- package/assets/icons/small/baggage-sports-equipment--light.svg +25 -0
- package/assets/icons/small/baggage-sports-equipment.svg +25 -0
- package/assets/icons/small/baggage.svg +10 -0
- package/assets/icons/small/baggages--light.svg +1 -0
- package/assets/icons/small/baggages.svg +1 -0
- package/assets/icons/small/calendar--disabled.svg +14 -0
- package/assets/icons/small/calendar--light.svg +14 -0
- package/assets/icons/small/calendar.svg +14 -0
- package/assets/icons/small/car-rental--light.svg +14 -0
- package/assets/icons/small/car-rental.svg +14 -0
- package/assets/icons/small/card--light.svg +8 -0
- package/assets/icons/small/card.svg +8 -0
- package/assets/icons/small/cashpoints--light.svg +21 -0
- package/assets/icons/small/cashpoints.svg +21 -0
- package/assets/icons/small/central-airports--light.svg +10 -0
- package/assets/icons/small/central-airports.svg +10 -0
- package/assets/icons/small/check-in--light.svg +11 -0
- package/assets/icons/small/check-in.svg +11 -0
- package/assets/icons/small/customer-service--light.svg +18 -0
- package/assets/icons/small/customer-service.svg +18 -0
- package/assets/icons/small/destination--light.svg +9 -0
- package/assets/icons/small/destination.svg +9 -0
- package/assets/icons/small/direct-flights--light.svg +16 -0
- package/assets/icons/small/direct-flights.svg +16 -0
- package/assets/icons/small/docs--light.svg +10 -0
- package/assets/icons/small/docs.svg +10 -0
- package/assets/icons/small/duty-free.svg +24 -0
- package/assets/icons/small/email.svg +1 -0
- package/assets/icons/small/facebook.svg +12 -0
- package/assets/icons/small/family.svg +24 -0
- package/assets/icons/small/fast-track--light.svg +15 -0
- package/assets/icons/small/fast-track.svg +15 -0
- package/assets/icons/small/flexible-tickets--light.svg +12 -0
- package/assets/icons/small/flexible-tickets.svg +12 -0
- package/assets/icons/small/flight-arrival--light.svg +13 -0
- package/assets/icons/small/flight-arrival.svg +16 -0
- package/assets/icons/small/flight-departure--light.svg +18 -0
- package/assets/icons/small/flight-departure-ground.svg +22 -0
- package/assets/icons/small/flight-departure-left.svg +18 -0
- package/assets/icons/small/flight-departure.svg +18 -0
- package/assets/icons/small/flight-outbound--light.svg +14 -0
- package/assets/icons/small/flight-outbound.svg +14 -0
- package/assets/icons/small/flight-return--light.svg +14 -0
- package/assets/icons/small/flight-return.svg +14 -0
- package/assets/icons/small/flight-tickets--light.svg +17 -0
- package/assets/icons/small/flight-tickets.svg +17 -0
- package/assets/icons/small/food--light.svg +15 -0
- package/assets/icons/small/food.svg +15 -0
- package/assets/icons/small/from-a-to-b--light.svg +21 -0
- package/assets/icons/small/from-a-to-b.svg +23 -0
- package/assets/icons/small/google-plus.svg +1 -0
- package/assets/icons/small/hotel--light.svg +10 -0
- package/assets/icons/small/hotel.svg +11 -0
- package/assets/icons/small/in-flight-entertainment--light.svg +10 -0
- package/assets/icons/small/in-flight-entertainment.svg +10 -0
- package/assets/icons/small/info--light.svg +4 -0
- package/assets/icons/small/info--outlined.svg +4 -0
- package/assets/icons/small/info.svg +4 -0
- package/assets/icons/small/instagram.svg +14 -0
- package/assets/icons/small/linkedin.svg +18 -0
- package/assets/icons/small/lounge--light.svg +18 -0
- package/assets/icons/small/lounge.svg +18 -0
- package/assets/icons/small/mail--light.svg +9 -0
- package/assets/icons/small/mail.svg +9 -0
- package/assets/icons/small/mobile--light.svg +8 -0
- package/assets/icons/small/mobile.svg +8 -0
- package/assets/icons/small/my-profile--light.svg +14 -0
- package/assets/icons/small/my-profile-female--light.svg +49 -0
- package/assets/icons/small/my-profile-female.svg +48 -0
- package/assets/icons/small/my-profile-male--light.svg +49 -0
- package/assets/icons/small/my-profile-male.svg +50 -0
- package/assets/icons/small/my-profile.svg +14 -0
- package/assets/icons/small/new-airplanes--light.svg +14 -0
- package/assets/icons/small/new-airplanes.svg +14 -0
- package/assets/icons/small/personnel--light.svg +14 -0
- package/assets/icons/small/personnel.svg +14 -0
- package/assets/icons/small/pintrest.svg +1 -0
- package/assets/icons/small/premium--light.svg +17 -0
- package/assets/icons/small/premium.svg +17 -0
- package/assets/icons/small/print.svg +14 -0
- package/assets/icons/small/reddit.svg +1 -0
- package/assets/icons/small/rewards--light.svg +19 -0
- package/assets/icons/small/rewards-fast-track.svg +17 -0
- package/assets/icons/small/rewards-luggage.svg +22 -0
- package/assets/icons/small/rewards-seat.svg +22 -0
- package/assets/icons/small/rewards.svg +19 -0
- package/assets/icons/small/route-network--light.svg +25 -0
- package/assets/icons/small/route-network.svg +25 -0
- package/assets/icons/small/search--light.svg +16 -0
- package/assets/icons/small/search.svg +16 -0
- package/assets/icons/small/seat-reservation--light.svg +14 -0
- package/assets/icons/small/seat-reservation.svg +14 -0
- package/assets/icons/small/skis--light.svg +24 -0
- package/assets/icons/small/skis.svg +24 -0
- package/assets/icons/small/special-needs--light.svg +16 -0
- package/assets/icons/small/special-needs.svg +16 -0
- package/assets/icons/small/sun--light.svg +17 -0
- package/assets/icons/small/sun.svg +19 -0
- package/assets/icons/small/transit-stop--light.svg +19 -0
- package/assets/icons/small/transit-stop.svg +21 -0
- package/assets/icons/small/trash--light.svg +7 -0
- package/assets/icons/small/trash.svg +7 -0
- package/assets/icons/small/travel-deals--light.svg +9 -0
- package/assets/icons/small/travel-deals.svg +9 -0
- package/assets/icons/small/twitter.svg +17 -0
- package/assets/icons/small/type-asia--light.svg +20 -0
- package/assets/icons/small/type-asia.svg +20 -0
- package/assets/icons/small/type-city-vibes--light.svg +10 -0
- package/assets/icons/small/type-city-vibes.svg +10 -0
- package/assets/icons/small/type-greece--light.svg +22 -0
- package/assets/icons/small/type-greece.svg +22 -0
- package/assets/icons/small/type-norway--light.svg +15 -0
- package/assets/icons/small/type-norway.svg +15 -0
- package/assets/icons/small/type-scandinavia--light.svg +17 -0
- package/assets/icons/small/type-scandinavia.svg +35 -0
- package/assets/icons/small/type-shopping--light.svg +13 -0
- package/assets/icons/small/type-shopping.svg +13 -0
- package/assets/icons/small/type-skiing--light.svg +18 -0
- package/assets/icons/small/type-skiing.svg +18 -0
- package/assets/icons/small/type-spain--light.svg +12 -0
- package/assets/icons/small/type-spain.svg +12 -0
- package/assets/icons/small/type-sun-and-sea--light.svg +59 -0
- package/assets/icons/small/type-sun-and-sea.svg +59 -0
- package/assets/icons/small/type-usa--light.svg +24 -0
- package/assets/icons/small/type-usa.svg +24 -0
- package/assets/icons/small/wifi--light.svg +17 -0
- package/assets/icons/small/wifi.svg +17 -0
- package/assets/icons/small/youtube.svg +11 -0
- package/assets/icons/tablet-landscape.svg +12 -0
- package/assets/icons/tablet-portrait.svg +12 -0
- package/assets/icons/upgrade.svg +8 -0
- package/assets/icons/weather/humidity.svg +1 -0
- package/assets/icons/weather/sun.svg +1 -0
- package/assets/icons/weather/sunrise.svg +1 -0
- package/assets/icons/weather/sunset.svg +1 -0
- package/assets/icons/weather/temperature.svg +1 -0
- package/assets/icons/weather/weather--cloud.svg +1 -0
- package/assets/icons/weather/weather--rain-sun.svg +1 -0
- package/assets/icons/weather/weather--rain.svg +1 -0
- package/assets/icons/weather/weather--storm.svg +1 -0
- package/assets/icons/weather/weather--sun-cloud.svg +1 -0
- package/assets/icons/weather/weather--sun.svg +1 -0
- package/assets/images/cloud-1.svg +1 -0
- package/assets/images/logo--mobile.svg +50 -0
- package/assets/images/logo.svg +135 -0
- package/assets/images/slider-bar.svg +7 -0
- package/assets/images/slider-thumb-disabled.svg +19 -0
- package/assets/images/slider-thumb.svg +14 -0
- package/bundles/norwegian-core-components.umd.js +11898 -0
- package/bundles/norwegian-core-components.umd.js.map +1 -0
- package/esm2015/lib/components/accordion/accordion.component.js +118 -0
- package/esm2015/lib/components/accordion/accordion.module.js +15 -0
- package/esm2015/lib/components/accordion/index.js +3 -0
- package/esm2015/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.js +583 -0
- package/esm2015/lib/components/airport-select/airport-select.component.js +400 -0
- package/esm2015/lib/components/airport-select/airport-select.module.js +27 -0
- package/esm2015/lib/components/airport-select/index.js +4 -0
- package/esm2015/lib/components/airport-select/models/airport.model.js +2 -0
- package/esm2015/lib/components/airport-select/models/results-labels.model.js +3 -0
- package/esm2015/lib/components/airport-select/services/airport-select-dropdown.service.js +34 -0
- package/esm2015/lib/components/airport-select/services/airport-select.service.js +29 -0
- package/esm2015/lib/components/autocomplete/autocomplete.component.js +265 -0
- package/esm2015/lib/components/autocomplete/autocomplete.module.js +26 -0
- package/esm2015/lib/components/autocomplete/index.js +4 -0
- package/esm2015/lib/components/autocomplete/models/autocomplete.model.js +2 -0
- package/esm2015/lib/components/backdrop/backdrop.component.js +54 -0
- package/esm2015/lib/components/backdrop/backdrop.module.js +17 -0
- package/esm2015/lib/components/backdrop/index.js +3 -0
- package/esm2015/lib/components/box/box.component.js +61 -0
- package/esm2015/lib/components/box/box.module.js +14 -0
- package/esm2015/lib/components/box/index.js +3 -0
- package/esm2015/lib/components/button/button.component.js +140 -0
- package/esm2015/lib/components/button/button.module.js +15 -0
- package/esm2015/lib/components/button/index.js +3 -0
- package/esm2015/lib/components/checkbox/checkbox.component.js +125 -0
- package/esm2015/lib/components/checkbox/checkbox.module.js +15 -0
- package/esm2015/lib/components/checkbox/index.js +3 -0
- package/esm2015/lib/components/chip/chip.component.js +50 -0
- package/esm2015/lib/components/chip/chip.module.js +17 -0
- package/esm2015/lib/components/chip/index.js +3 -0
- package/esm2015/lib/components/container/container.component.js +47 -0
- package/esm2015/lib/components/container/container.module.js +14 -0
- package/esm2015/lib/components/container/index.js +3 -0
- package/esm2015/lib/components/continue/continue.component.js +173 -0
- package/esm2015/lib/components/continue/continue.module.js +23 -0
- package/esm2015/lib/components/continue/index.js +3 -0
- package/esm2015/lib/components/cover/cover.component.js +61 -0
- package/esm2015/lib/components/cover/cover.module.js +16 -0
- package/esm2015/lib/components/cover/index.js +3 -0
- package/esm2015/lib/components/datepicker/calendar/calendar-date.model.js +2 -0
- package/esm2015/lib/components/datepicker/calendar/calendar.component.js +560 -0
- package/esm2015/lib/components/datepicker/calendar/enums/week-start.enum.js +6 -0
- package/esm2015/lib/components/datepicker/calendar/models/day.model.js +2 -0
- package/esm2015/lib/components/datepicker/calendar/models/select-option.model.js +2 -0
- package/esm2015/lib/components/datepicker/calendar/models/week.model.js +2 -0
- package/esm2015/lib/components/datepicker/datepicker.component.js +511 -0
- package/esm2015/lib/components/datepicker/datepicker.module.js +34 -0
- package/esm2015/lib/components/datepicker/index.js +5 -0
- package/esm2015/lib/components/datepicker/services/calendar.service.js +217 -0
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.component.js +306 -0
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.module.js +22 -0
- package/esm2015/lib/components/datepicker-combo/index.js +3 -0
- package/esm2015/lib/components/dropdown/dropdown.component.js +146 -0
- package/esm2015/lib/components/dropdown/dropdown.module.js +21 -0
- package/esm2015/lib/components/dropdown/index.js +3 -0
- package/esm2015/lib/components/filter/enums/trip-type.enum.js +8 -0
- package/esm2015/lib/components/filter/filter.component.js +1100 -0
- package/esm2015/lib/components/filter/filter.module.js +44 -0
- package/esm2015/lib/components/filter/index.js +4 -0
- package/esm2015/lib/components/grid/col/col.component.js +47 -0
- package/esm2015/lib/components/grid/grid.component.js +55 -0
- package/esm2015/lib/components/grid/grid.module.js +15 -0
- package/esm2015/lib/components/grid/index.js +4 -0
- package/esm2015/lib/components/icon/icon.component.js +42 -0
- package/esm2015/lib/components/icon/icon.module.js +17 -0
- package/esm2015/lib/components/icon/index.js +3 -0
- package/esm2015/lib/components/icon-list/icon-list.component.js +46 -0
- package/esm2015/lib/components/icon-list/icon-list.model.js +2 -0
- package/esm2015/lib/components/icon-list/icon-list.module.js +15 -0
- package/esm2015/lib/components/icon-list/index.js +4 -0
- package/esm2015/lib/components/index.js +49 -0
- package/esm2015/lib/components/info/index.js +4 -0
- package/esm2015/lib/components/info/info.component.js +81 -0
- package/esm2015/lib/components/info/info.module.js +21 -0
- package/esm2015/lib/components/info/models/info.model.js +2 -0
- package/esm2015/lib/components/input/index.js +3 -0
- package/esm2015/lib/components/input/input.component.js +139 -0
- package/esm2015/lib/components/input/input.module.js +16 -0
- package/esm2015/lib/components/journey/index.js +3 -0
- package/esm2015/lib/components/journey/journey.component.js +122 -0
- package/esm2015/lib/components/journey/journey.module.js +19 -0
- package/esm2015/lib/components/journey/models/journey-flight.model.js +2 -0
- package/esm2015/lib/components/journey/models/journey.model.js +2 -0
- package/esm2015/lib/components/journey-availability/index.js +3 -0
- package/esm2015/lib/components/journey-availability/journey-availability.component.js +125 -0
- package/esm2015/lib/components/journey-availability/journey-availability.module.js +26 -0
- package/esm2015/lib/components/journey-availability-list/enums/availability-sort-option.enum.js +7 -0
- package/esm2015/lib/components/journey-availability-list/index.js +3 -0
- package/esm2015/lib/components/journey-availability-list/journey-availability-list.component.js +175 -0
- package/esm2015/lib/components/journey-availability-list/journey-availability-list.module.js +23 -0
- package/esm2015/lib/components/journey-selection/index.js +6 -0
- package/esm2015/lib/components/journey-selection/journey-selection.component.js +110 -0
- package/esm2015/lib/components/journey-selection/journey-selection.module.js +24 -0
- package/esm2015/lib/components/journey-selection/models/journey-selection-collapsed.model.js +2 -0
- package/esm2015/lib/components/journey-selection/models/journey-selection-common.model.js +2 -0
- package/esm2015/lib/components/journey-selection/models/journey-selection-expanded.model.js +2 -0
- package/esm2015/lib/components/journey-selection/models/journey-selection.model.js +2 -0
- package/esm2015/lib/components/journey-stopover/index.js +3 -0
- package/esm2015/lib/components/journey-stopover/journey-stopover.component.js +121 -0
- package/esm2015/lib/components/journey-stopover/journey-stopover.module.js +19 -0
- package/esm2015/lib/components/journey-stopover/models/stopover-time.model.js +2 -0
- package/esm2015/lib/components/list/index.js +4 -0
- package/esm2015/lib/components/list/list-item/list-item.component.js +56 -0
- package/esm2015/lib/components/list/list.component.js +75 -0
- package/esm2015/lib/components/list/list.module.js +15 -0
- package/esm2015/lib/components/modal/index.js +3 -0
- package/esm2015/lib/components/modal/modal.component.js +131 -0
- package/esm2015/lib/components/modal/modal.module.js +25 -0
- package/esm2015/lib/components/number-field/index.js +3 -0
- package/esm2015/lib/components/number-field/number-field.component.js +118 -0
- package/esm2015/lib/components/number-field/number-field.module.js +24 -0
- package/esm2015/lib/components/page-footer/index.js +3 -0
- package/esm2015/lib/components/page-footer/page-footer.component.js +49 -0
- package/esm2015/lib/components/page-footer/page-footer.module.js +16 -0
- package/esm2015/lib/components/page-header/hamburger/hamburger.component.js +24 -0
- package/esm2015/lib/components/page-header/index.js +5 -0
- package/esm2015/lib/components/page-header/page-header.component.js +119 -0
- package/esm2015/lib/components/page-header/page-header.module.js +18 -0
- package/esm2015/lib/components/page-header/search/search.component.js +47 -0
- package/esm2015/lib/components/passenger-select/enums/passenger-type.enum.js +7 -0
- package/esm2015/lib/components/passenger-select/index.js +5 -0
- package/esm2015/lib/components/passenger-select/models/passengers.model.js +2 -0
- package/esm2015/lib/components/passenger-select/passenger-select.component.js +204 -0
- package/esm2015/lib/components/passenger-select/passenger-select.module.js +19 -0
- package/esm2015/lib/components/phone-number/index.js +3 -0
- package/esm2015/lib/components/phone-number/phone-number.component.js +115 -0
- package/esm2015/lib/components/phone-number/phone-number.module.js +27 -0
- package/esm2015/lib/components/premium-toggle/index.js +3 -0
- package/esm2015/lib/components/premium-toggle/premium-toggle.component.js +66 -0
- package/esm2015/lib/components/premium-toggle/premium-toggle.module.js +19 -0
- package/esm2015/lib/components/radio/index.js +3 -0
- package/esm2015/lib/components/radio/radio.component.js +79 -0
- package/esm2015/lib/components/radio/radio.module.js +15 -0
- package/esm2015/lib/components/select/index.js +6 -0
- package/esm2015/lib/components/select/models/select-option.model.js +2 -0
- package/esm2015/lib/components/select/optgroup/optgroup.component.js +31 -0
- package/esm2015/lib/components/select/option/option.component.js +29 -0
- package/esm2015/lib/components/select/select.component.js +316 -0
- package/esm2015/lib/components/select/select.module.js +21 -0
- package/esm2015/lib/components/simple-list/index.js +3 -0
- package/esm2015/lib/components/simple-list/simple-list.component.js +42 -0
- package/esm2015/lib/components/simple-list/simple-list.module.js +14 -0
- package/esm2015/lib/components/slide-toggle/index.js +3 -0
- package/esm2015/lib/components/slide-toggle/slide-toggle.component.js +105 -0
- package/esm2015/lib/components/slide-toggle/slide-toggle.module.js +20 -0
- package/esm2015/lib/components/slider/index.js +3 -0
- package/esm2015/lib/components/slider/slider.component.js +447 -0
- package/esm2015/lib/components/slider/slider.module.js +19 -0
- package/esm2015/lib/components/sort/index.js +3 -0
- package/esm2015/lib/components/sort/sort.component.js +87 -0
- package/esm2015/lib/components/sort/sort.module.js +23 -0
- package/esm2015/lib/components/spinner/index.js +3 -0
- package/esm2015/lib/components/spinner/spinner.component.js +57 -0
- package/esm2015/lib/components/spinner/spinner.module.js +14 -0
- package/esm2015/lib/components/subsidy-discount/index.js +4 -0
- package/esm2015/lib/components/subsidy-discount/models/subsidy-discount.model.js +2 -0
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.component.js +101 -0
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.module.js +23 -0
- package/esm2015/lib/components/suggestions/index.js +3 -0
- package/esm2015/lib/components/suggestions/suggestions.component.js +40 -0
- package/esm2015/lib/components/suggestions/suggestions.module.js +19 -0
- package/esm2015/lib/components/tab-group/index.js +4 -0
- package/esm2015/lib/components/tab-group/tab/tab.component.js +123 -0
- package/esm2015/lib/components/tab-group/tab-group.component.js +85 -0
- package/esm2015/lib/components/tab-group/tab-group.module.js +20 -0
- package/esm2015/lib/components/table/column/column.component.js +17 -0
- package/esm2015/lib/components/table/column-group/column-group.component.js +34 -0
- package/esm2015/lib/components/table/index.js +11 -0
- package/esm2015/lib/components/table/services/table.service.js +20 -0
- package/esm2015/lib/components/table/table-body/table-body.component.js +27 -0
- package/esm2015/lib/components/table/table-foot/table-foot.component.js +27 -0
- package/esm2015/lib/components/table/table-head/table-head.component.js +27 -0
- package/esm2015/lib/components/table/table-row/table-data/table-data.component.js +15 -0
- package/esm2015/lib/components/table/table-row/table-header/table-header.component.js +15 -0
- package/esm2015/lib/components/table/table-row/table-row.component.js +27 -0
- package/esm2015/lib/components/table/table.component.js +29 -0
- package/esm2015/lib/components/table/table.module.js +45 -0
- package/esm2015/lib/components/textarea/index.js +3 -0
- package/esm2015/lib/components/textarea/textarea.component.js +73 -0
- package/esm2015/lib/components/textarea/textarea.module.js +20 -0
- package/esm2015/lib/components/toggle/index.js +3 -0
- package/esm2015/lib/components/toggle/models/options.model.js +3 -0
- package/esm2015/lib/components/toggle/toggle.component.js +77 -0
- package/esm2015/lib/components/toggle/toggle.module.js +22 -0
- package/esm2015/lib/components/trip-summary/index.js +3 -0
- package/esm2015/lib/components/trip-summary/trip-summary.component.js +152 -0
- package/esm2015/lib/components/trip-summary/trip-summary.module.js +23 -0
- package/esm2015/lib/components/weather-icon/index.js +3 -0
- package/esm2015/lib/components/weather-icon/weather-icon.component.js +56 -0
- package/esm2015/lib/components/weather-icon/weather-icon.module.js +14 -0
- package/esm2015/lib/core/base/nas-component.base.js +48 -0
- package/esm2015/lib/core/decorators/debounce.decorator.js +12 -0
- package/esm2015/lib/core/directives/index.js +3 -0
- package/esm2015/lib/core/directives/nas-class/nas-class.directive.js +75 -0
- package/esm2015/lib/core/directives/nas-class/nas-class.module.js +17 -0
- package/esm2015/lib/core/extensions/html-element.extension.js +31 -0
- package/esm2015/lib/core/index.js +5 -0
- package/esm2015/lib/core/models/abandoned-basket-item.model.js +2 -0
- package/esm2015/lib/core/models/animate.model.js +2 -0
- package/esm2015/lib/core/models/class.model.js +2 -0
- package/esm2015/lib/core/models/index.js +7 -0
- package/esm2015/lib/core/models/link.model.js +2 -0
- package/esm2015/lib/core/models/position.model.js +2 -0
- package/esm2015/lib/core/models/utc-date.model.js +40 -0
- package/esm2015/lib/core/services/abandoned-basket/abandoned-basket.service.js +55 -0
- package/esm2015/lib/core/services/animate-helper/animate-helper.service.js +47 -0
- package/esm2015/lib/core/services/bem-helper/bem-helper.service.js +41 -0
- package/esm2015/lib/core/services/date/date-compare.enum.js +7 -0
- package/esm2015/lib/core/services/date/date-helper.service.js +196 -0
- package/esm2015/lib/core/services/device/device-helper.service.js +43 -0
- package/esm2015/lib/core/services/geolocation/geolocation-state.enum.js +8 -0
- package/esm2015/lib/core/services/geolocation/geolocation.service.js +60 -0
- package/esm2015/lib/core/services/index.js +10 -0
- package/esm2015/lib/core/services/language/language-helper.service.js +162 -0
- package/esm2015/lib/core/services/sort/sort.service.js +19 -0
- package/esm2015/lib/core/services/viewport/viewport.service.js +29 -0
- package/esm2015/lib/index.js +5 -0
- package/esm2015/lib/services/get-position.service.js +21 -0
- package/esm2015/lib/services/index.js +2 -0
- package/esm2015/lib/shared/index.js +2 -0
- package/esm2015/lib/shared/models/flight-details.js +3 -0
- package/esm2015/lib/shared/models/index.js +5 -0
- package/esm2015/lib/shared/models/journey-availability-sort.model.js +2 -0
- package/esm2015/lib/shared/models/journey-availability.model.js +2 -0
- package/esm2015/lib/shared/models/journey-details.model.js +2 -0
- package/esm2015/lib/shared/models/journey-duration.model.js +2 -0
- package/esm2015/lib/shared/models/journey-stopover.model.js +2 -0
- package/esm2015/lib/shared/models/journey-transit-info.model.js +2 -0
- package/esm2015/lib/shared/models/operating-carrier.model.js +2 -0
- package/esm2015/lib/shared/models/sort-option.model.js +2 -0
- package/esm2015/lib/shared/models/sort.model.js +2 -0
- package/esm2015/lib/shared/models/trip-item-details.model.js +2 -0
- package/esm2015/lib/shared/models/trip-summary-details.model.js +2 -0
- package/esm2015/lib/shared/models/trip-summary.model.js +2 -0
- package/esm2015/norwegian-core-components.js +12 -0
- package/esm2015/public_api.js +2 -0
- package/fesm2015/norwegian-core-components.js +10595 -0
- package/fesm2015/norwegian-core-components.js.map +1 -0
- package/lib/components/accordion/accordion.component.d.ts +205 -0
- package/lib/components/accordion/accordion.module.d.ts +2 -0
- package/lib/components/accordion/index.d.ts +2 -0
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +94 -0
- package/lib/components/airport-select/airport-select.component.d.ts +256 -0
- package/lib/components/airport-select/airport-select.module.d.ts +2 -0
- package/lib/components/airport-select/index.d.ts +3 -0
- package/lib/components/airport-select/models/airport.model.d.ts +10 -0
- package/lib/components/airport-select/models/results-labels.model.d.ts +7 -0
- package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +7 -0
- package/lib/components/airport-select/services/airport-select.service.d.ts +5 -0
- package/lib/components/autocomplete/autocomplete.component.d.ts +115 -0
- package/lib/components/autocomplete/autocomplete.module.d.ts +2 -0
- package/lib/components/autocomplete/index.d.ts +3 -0
- package/lib/components/autocomplete/models/autocomplete.model.d.ts +5 -0
- package/lib/components/backdrop/backdrop.component.d.ts +32 -0
- package/lib/components/backdrop/backdrop.module.d.ts +2 -0
- package/lib/components/backdrop/index.d.ts +2 -0
- package/lib/components/box/box.component.d.ts +69 -0
- package/lib/components/box/box.module.d.ts +2 -0
- package/lib/components/box/index.d.ts +2 -0
- package/lib/components/button/button.component.d.ts +238 -0
- package/lib/components/button/button.module.d.ts +2 -0
- package/lib/components/button/index.d.ts +2 -0
- package/lib/components/checkbox/checkbox.component.d.ts +119 -0
- package/lib/components/checkbox/checkbox.module.d.ts +2 -0
- package/lib/components/checkbox/index.d.ts +2 -0
- package/lib/components/chip/chip.component.d.ts +61 -0
- package/lib/components/chip/chip.module.d.ts +2 -0
- package/lib/components/chip/index.d.ts +2 -0
- package/lib/components/container/container.component.d.ts +47 -0
- package/lib/components/container/container.module.d.ts +2 -0
- package/lib/components/container/index.d.ts +2 -0
- package/lib/components/continue/continue.component.d.ts +154 -0
- package/lib/components/continue/continue.module.d.ts +2 -0
- package/lib/components/continue/index.d.ts +2 -0
- package/lib/components/cover/cover.component.d.ts +112 -0
- package/lib/components/cover/cover.module.d.ts +2 -0
- package/lib/components/cover/index.d.ts +2 -0
- package/lib/components/datepicker/calendar/calendar-date.model.d.ts +5 -0
- package/lib/components/datepicker/calendar/calendar.component.d.ts +156 -0
- package/lib/components/datepicker/calendar/enums/week-start.enum.d.ts +4 -0
- package/lib/components/datepicker/calendar/models/day.model.d.ts +9 -0
- package/lib/components/datepicker/calendar/models/select-option.model.d.ts +4 -0
- package/lib/components/datepicker/calendar/models/week.model.d.ts +5 -0
- package/lib/components/datepicker/datepicker.component.d.ts +235 -0
- package/lib/components/datepicker/datepicker.module.d.ts +2 -0
- package/lib/components/datepicker/index.d.ts +4 -0
- package/lib/components/datepicker/services/calendar.service.d.ts +24 -0
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +246 -0
- package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +2 -0
- package/lib/components/datepicker-combo/index.d.ts +2 -0
- package/lib/components/dropdown/dropdown.component.d.ts +64 -0
- package/lib/components/dropdown/dropdown.module.d.ts +2 -0
- package/lib/components/dropdown/index.d.ts +2 -0
- package/lib/components/filter/enums/trip-type.enum.d.ts +6 -0
- package/lib/components/filter/filter.component.d.ts +693 -0
- package/lib/components/filter/filter.module.d.ts +2 -0
- package/lib/components/filter/index.d.ts +3 -0
- package/lib/components/grid/col/col.component.d.ts +37 -0
- package/lib/components/grid/grid.component.d.ts +61 -0
- package/lib/components/grid/grid.module.d.ts +2 -0
- package/lib/components/grid/index.d.ts +3 -0
- package/lib/components/icon/icon.component.d.ts +57 -0
- package/lib/components/icon/icon.module.d.ts +2 -0
- package/lib/components/icon/index.d.ts +2 -0
- package/lib/components/icon-list/icon-list.component.d.ts +41 -0
- package/lib/components/icon-list/icon-list.model.d.ts +7 -0
- package/lib/components/icon-list/icon-list.module.d.ts +2 -0
- package/lib/components/icon-list/index.d.ts +3 -0
- package/lib/components/index.d.ts +48 -0
- package/lib/components/info/index.d.ts +3 -0
- package/lib/components/info/info.component.d.ts +71 -0
- package/lib/components/info/info.module.d.ts +2 -0
- package/lib/components/info/models/info.model.d.ts +7 -0
- package/lib/components/input/index.d.ts +2 -0
- package/lib/components/input/input.component.d.ts +163 -0
- package/lib/components/input/input.module.d.ts +2 -0
- package/lib/components/journey/index.d.ts +2 -0
- package/lib/components/journey/journey.component.d.ts +119 -0
- package/lib/components/journey/journey.module.d.ts +2 -0
- package/lib/components/journey/models/journey-flight.model.d.ts +10 -0
- package/lib/components/journey/models/journey.model.d.ts +5 -0
- package/lib/components/journey-availability/index.d.ts +2 -0
- package/lib/components/journey-availability/journey-availability.component.d.ts +90 -0
- package/lib/components/journey-availability/journey-availability.module.d.ts +2 -0
- package/lib/components/journey-availability-list/enums/availability-sort-option.enum.d.ts +5 -0
- package/lib/components/journey-availability-list/index.d.ts +2 -0
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +116 -0
- package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +2 -0
- package/lib/components/journey-selection/index.d.ts +5 -0
- package/lib/components/journey-selection/journey-selection.component.d.ts +70 -0
- package/lib/components/journey-selection/journey-selection.module.d.ts +2 -0
- package/lib/components/journey-selection/models/journey-selection-collapsed.model.d.ts +11 -0
- package/lib/components/journey-selection/models/journey-selection-common.model.d.ts +7 -0
- package/lib/components/journey-selection/models/journey-selection-expanded.model.d.ts +5 -0
- package/lib/components/journey-selection/models/journey-selection.model.d.ts +14 -0
- package/lib/components/journey-stopover/index.d.ts +2 -0
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +132 -0
- package/lib/components/journey-stopover/journey-stopover.module.d.ts +2 -0
- package/lib/components/journey-stopover/models/stopover-time.model.d.ts +4 -0
- package/lib/components/list/index.d.ts +3 -0
- package/lib/components/list/list-item/list-item.component.d.ts +32 -0
- package/lib/components/list/list.component.d.ts +65 -0
- package/lib/components/list/list.module.d.ts +2 -0
- package/lib/components/modal/index.d.ts +2 -0
- package/lib/components/modal/modal.component.d.ts +119 -0
- package/lib/components/modal/modal.module.d.ts +2 -0
- package/lib/components/number-field/index.d.ts +2 -0
- package/lib/components/number-field/number-field.component.d.ts +96 -0
- package/lib/components/number-field/number-field.module.d.ts +2 -0
- package/lib/components/page-footer/index.d.ts +2 -0
- package/lib/components/page-footer/page-footer.component.d.ts +57 -0
- package/lib/components/page-footer/page-footer.module.d.ts +2 -0
- package/lib/components/page-header/hamburger/hamburger.component.d.ts +9 -0
- package/lib/components/page-header/index.d.ts +4 -0
- package/lib/components/page-header/page-header.component.d.ts +84 -0
- package/lib/components/page-header/page-header.module.d.ts +2 -0
- package/lib/components/page-header/search/search.component.d.ts +23 -0
- package/lib/components/passenger-select/enums/passenger-type.enum.d.ts +5 -0
- package/lib/components/passenger-select/index.d.ts +4 -0
- package/lib/components/passenger-select/models/passengers.model.d.ts +9 -0
- package/lib/components/passenger-select/passenger-select.component.d.ts +111 -0
- package/lib/components/passenger-select/passenger-select.module.d.ts +2 -0
- package/lib/components/phone-number/index.d.ts +2 -0
- package/lib/components/phone-number/phone-number.component.d.ts +278 -0
- package/lib/components/phone-number/phone-number.module.d.ts +2 -0
- package/lib/components/premium-toggle/index.d.ts +2 -0
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +51 -0
- package/lib/components/premium-toggle/premium-toggle.module.d.ts +2 -0
- package/lib/components/radio/index.d.ts +2 -0
- package/lib/components/radio/radio.component.d.ts +115 -0
- package/lib/components/radio/radio.module.d.ts +2 -0
- package/lib/components/select/index.d.ts +5 -0
- package/lib/components/select/models/select-option.model.d.ts +4 -0
- package/lib/components/select/optgroup/optgroup.component.d.ts +22 -0
- package/lib/components/select/option/option.component.d.ts +21 -0
- package/lib/components/select/select.component.d.ts +156 -0
- package/lib/components/select/select.module.d.ts +2 -0
- package/lib/components/simple-list/index.d.ts +2 -0
- package/lib/components/simple-list/simple-list.component.d.ts +49 -0
- package/lib/components/simple-list/simple-list.module.d.ts +2 -0
- package/lib/components/slide-toggle/index.d.ts +2 -0
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +60 -0
- package/lib/components/slide-toggle/slide-toggle.module.d.ts +2 -0
- package/lib/components/slider/index.d.ts +2 -0
- package/lib/components/slider/slider.component.d.ts +177 -0
- package/lib/components/slider/slider.module.d.ts +2 -0
- package/lib/components/sort/index.d.ts +2 -0
- package/lib/components/sort/sort.component.d.ts +47 -0
- package/lib/components/sort/sort.module.d.ts +2 -0
- package/lib/components/spinner/index.d.ts +2 -0
- package/lib/components/spinner/spinner.component.d.ts +58 -0
- package/lib/components/spinner/spinner.module.d.ts +2 -0
- package/lib/components/subsidy-discount/index.d.ts +3 -0
- package/lib/components/subsidy-discount/models/subsidy-discount.model.d.ts +4 -0
- package/lib/components/subsidy-discount/subsidy-discount.component.d.ts +57 -0
- package/lib/components/subsidy-discount/subsidy-discount.module.d.ts +2 -0
- package/lib/components/suggestions/index.d.ts +2 -0
- package/lib/components/suggestions/suggestions.component.d.ts +30 -0
- package/lib/components/suggestions/suggestions.module.d.ts +2 -0
- package/lib/components/tab-group/index.d.ts +3 -0
- package/lib/components/tab-group/tab/tab.component.d.ts +84 -0
- package/lib/components/tab-group/tab-group.component.d.ts +30 -0
- package/lib/components/tab-group/tab-group.module.d.ts +2 -0
- package/lib/components/table/column/column.component.d.ts +3 -0
- package/lib/components/table/column-group/column-group.component.d.ts +12 -0
- package/lib/components/table/index.d.ts +10 -0
- package/lib/components/table/services/table.service.d.ts +5 -0
- package/lib/components/table/table-body/table-body.component.d.ts +12 -0
- package/lib/components/table/table-foot/table-foot.component.d.ts +12 -0
- package/lib/components/table/table-head/table-head.component.d.ts +12 -0
- package/lib/components/table/table-row/table-data/table-data.component.d.ts +2 -0
- package/lib/components/table/table-row/table-header/table-header.component.d.ts +2 -0
- package/lib/components/table/table-row/table-row.component.d.ts +12 -0
- package/lib/components/table/table.component.d.ts +21 -0
- package/lib/components/table/table.module.d.ts +2 -0
- package/lib/components/textarea/index.d.ts +2 -0
- package/lib/components/textarea/textarea.component.d.ts +121 -0
- package/lib/components/textarea/textarea.module.d.ts +2 -0
- package/lib/components/toggle/index.d.ts +2 -0
- package/lib/components/toggle/models/options.model.d.ts +6 -0
- package/lib/components/toggle/toggle.component.d.ts +183 -0
- package/lib/components/toggle/toggle.module.d.ts +2 -0
- package/lib/components/trip-summary/index.d.ts +2 -0
- package/lib/components/trip-summary/trip-summary.component.d.ts +173 -0
- package/lib/components/trip-summary/trip-summary.module.d.ts +2 -0
- package/lib/components/weather-icon/index.d.ts +2 -0
- package/lib/components/weather-icon/weather-icon.component.d.ts +51 -0
- package/lib/components/weather-icon/weather-icon.module.d.ts +2 -0
- package/lib/core/base/nas-component.base.d.ts +11 -0
- package/lib/core/decorators/debounce.decorator.d.ts +1 -0
- package/lib/core/directives/index.d.ts +2 -0
- package/lib/core/directives/nas-class/nas-class.directive.d.ts +11 -0
- package/lib/core/directives/nas-class/nas-class.module.d.ts +2 -0
- package/lib/core/extensions/html-element.extension.d.ts +6 -0
- package/lib/core/index.d.ts +4 -0
- package/lib/core/models/abandoned-basket-item.model.d.ts +14 -0
- package/lib/core/models/animate.model.d.ts +6 -0
- package/lib/core/models/class.model.d.ts +6 -0
- package/lib/core/models/index.d.ts +6 -0
- package/lib/core/models/link.model.d.ts +4 -0
- package/lib/core/models/position.model.d.ts +4 -0
- package/lib/core/models/utc-date.model.d.ts +13 -0
- package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +7 -0
- package/lib/core/services/animate-helper/animate-helper.service.d.ts +6 -0
- package/lib/core/services/bem-helper/bem-helper.service.d.ts +4 -0
- package/lib/core/services/date/date-compare.enum.d.ts +5 -0
- package/lib/core/services/date/date-helper.service.d.ts +19 -0
- package/lib/core/services/device/device-helper.service.d.ts +13 -0
- package/lib/core/services/geolocation/geolocation-state.enum.d.ts +6 -0
- package/lib/core/services/geolocation/geolocation.service.d.ts +6 -0
- package/lib/core/services/index.d.ts +9 -0
- package/lib/core/services/language/language-helper.service.d.ts +9 -0
- package/lib/core/services/sort/sort.service.d.ts +3 -0
- package/lib/core/services/viewport/viewport.service.d.ts +8 -0
- package/lib/index.d.ts +4 -0
- package/lib/services/get-position.service.d.ts +6 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/shared/index.d.ts +1 -0
- package/lib/shared/models/flight-details.d.ts +22 -0
- package/lib/shared/models/index.d.ts +4 -0
- package/lib/shared/models/journey-availability-sort.model.d.ts +8 -0
- package/lib/shared/models/journey-availability.model.d.ts +25 -0
- package/lib/shared/models/journey-details.model.d.ts +8 -0
- package/lib/shared/models/journey-duration.model.d.ts +7 -0
- package/lib/shared/models/journey-stopover.model.d.ts +11 -0
- package/lib/shared/models/journey-transit-info.model.d.ts +5 -0
- package/lib/shared/models/operating-carrier.model.d.ts +4 -0
- package/lib/shared/models/sort-option.model.d.ts +11 -0
- package/lib/shared/models/sort.model.d.ts +10 -0
- package/lib/shared/models/trip-item-details.model.d.ts +12 -0
- package/lib/shared/models/trip-summary-details.model.d.ts +5 -0
- package/lib/shared/models/trip-summary.model.d.ts +4 -0
- package/norwegian-core-components.d.ts +11 -0
- package/norwegian-core-components.metadata.json +1 -0
- package/package.json +19 -0
- package/public_api.d.ts +1 -0
- package/styles/1__settings/_colors.scss +65 -0
- package/styles/1__settings/_mixins.scss +226 -0
- package/styles/1__settings/_type.scss +53 -0
- package/styles/1__settings/_vars.scss +62 -0
- package/styles/2__generic/_fonts.scss +99 -0
- package/styles/2__generic/_reset.scss +275 -0
- package/styles/3__base/_animations.scss +138 -0
- package/styles/3__base/_body.scss +23 -0
- package/styles/3__base/_fixes.scss +5 -0
- package/styles/3__base/_form.scss +18 -0
- package/styles/3__base/_grid.scss +115 -0
- package/styles/3__base/_heading.scss +110 -0
- package/styles/3__base/_hr.scss +30 -0
- package/styles/3__base/_input.scss +38 -0
- package/styles/3__base/_link.scss +48 -0
- package/styles/3__base/_table.scss +44 -0
- package/styles/3__base/_type.scss +69 -0
- package/styles/_helpers.scss +4 -0
- package/styles/_index.scss +15 -0
|
@@ -0,0 +1,1100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Norwegian Air Shuttle. All Rights Reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, ChangeDetectorRef } 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 { AbandonedBasketService } from '../../core/services/abandoned-basket/abandoned-basket.service';
|
|
10
|
+
import { DateHelper } from '../../core/services/date/date-helper.service';
|
|
11
|
+
import { DeviceHelper } from '../../core/services/device/device-helper.service';
|
|
12
|
+
import { SortService } from '../../core/services/sort/sort.service';
|
|
13
|
+
/**
|
|
14
|
+
* @description
|
|
15
|
+
* Norwegian Filter Component | Functional
|
|
16
|
+
*/
|
|
17
|
+
export class FilterComponent extends NasComponentBase {
|
|
18
|
+
constructor(deviceHelper, sortService, abandonedBasketService, dateService, elementRef, changeDetector) {
|
|
19
|
+
super('nas-filter');
|
|
20
|
+
this.deviceHelper = deviceHelper;
|
|
21
|
+
this.sortService = sortService;
|
|
22
|
+
this.abandonedBasketService = abandonedBasketService;
|
|
23
|
+
this.dateService = dateService;
|
|
24
|
+
this.elementRef = elementRef;
|
|
25
|
+
this.changeDetector = changeDetector;
|
|
26
|
+
this.displaySummary = true;
|
|
27
|
+
this.containerWidth = new BehaviorSubject(0);
|
|
28
|
+
this.maximize = false;
|
|
29
|
+
this.isNasGroupValid = false;
|
|
30
|
+
/**
|
|
31
|
+
* @description
|
|
32
|
+
* A separator for the filter summary that is dispayed if minimizeOnMobile is true.
|
|
33
|
+
*
|
|
34
|
+
* ### Example
|
|
35
|
+
* 1 traveller, round trip and direct/transit
|
|
36
|
+
*/
|
|
37
|
+
this.defaultSummarySeparator = '';
|
|
38
|
+
/**
|
|
39
|
+
* A separator for the filter summary is are dispayed if minimizeOnMobile is true.
|
|
40
|
+
*
|
|
41
|
+
* ### Example
|
|
42
|
+
* 1 traveller, round trip and direct/transit
|
|
43
|
+
*/
|
|
44
|
+
this.lastSummarySeparator = '';
|
|
45
|
+
/**
|
|
46
|
+
* @description
|
|
47
|
+
* A placeholder that will appear on the origin airport input field.
|
|
48
|
+
*/
|
|
49
|
+
this.placeholderOrigin = '';
|
|
50
|
+
/**
|
|
51
|
+
* @description
|
|
52
|
+
* A placeholder that will appear on the destination airport input field.
|
|
53
|
+
*/
|
|
54
|
+
this.placeholderDestination = '';
|
|
55
|
+
/**
|
|
56
|
+
* @description
|
|
57
|
+
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
58
|
+
*/
|
|
59
|
+
this.originOpenChange = new EventEmitter();
|
|
60
|
+
/**
|
|
61
|
+
* @description
|
|
62
|
+
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
63
|
+
*/
|
|
64
|
+
this.destinationOpenChange = new EventEmitter();
|
|
65
|
+
/**
|
|
66
|
+
* @description
|
|
67
|
+
* An event that is fired every time the passenger select dropdown opens or closes.
|
|
68
|
+
*/
|
|
69
|
+
this.passengerSelectOpenChange = new EventEmitter();
|
|
70
|
+
/**
|
|
71
|
+
* @description
|
|
72
|
+
* An event that is fired every time the selected origin airport changes.
|
|
73
|
+
*/
|
|
74
|
+
this.originChange = new EventEmitter();
|
|
75
|
+
/**
|
|
76
|
+
* @description
|
|
77
|
+
* An event that is fired every time the selected destination airport changes.
|
|
78
|
+
*/
|
|
79
|
+
this.destinationChange = new EventEmitter();
|
|
80
|
+
/**
|
|
81
|
+
* @description
|
|
82
|
+
* An event that is fired every time a passenger selection change is performed.
|
|
83
|
+
*/
|
|
84
|
+
this.passengersChange = new EventEmitter();
|
|
85
|
+
/**
|
|
86
|
+
* @description
|
|
87
|
+
* Sets and gets the selected trip type.
|
|
88
|
+
*/
|
|
89
|
+
this.tripTypeChange = new EventEmitter();
|
|
90
|
+
/**
|
|
91
|
+
* @description
|
|
92
|
+
* Sets and gets whether the selected transit type is direct only or not.
|
|
93
|
+
*/
|
|
94
|
+
this.directOnlyChange = new EventEmitter();
|
|
95
|
+
/**
|
|
96
|
+
* @description
|
|
97
|
+
* 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.
|
|
98
|
+
* Please look at the angular Date pipe for valid formats and variations.
|
|
99
|
+
*/
|
|
100
|
+
this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
|
|
101
|
+
/**
|
|
102
|
+
* @description
|
|
103
|
+
* The time display format.
|
|
104
|
+
*/
|
|
105
|
+
this.timeDisplayFormat = 'HH:mm';
|
|
106
|
+
/**
|
|
107
|
+
* @description
|
|
108
|
+
* 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.
|
|
109
|
+
* This requires that registerLocaleData is called with the respective locale.
|
|
110
|
+
*/
|
|
111
|
+
this.locale = 'en-GB';
|
|
112
|
+
/**
|
|
113
|
+
* @description
|
|
114
|
+
* Will display passenger select, set this to false to remove it. It's true by default.
|
|
115
|
+
*/
|
|
116
|
+
this.enablePassengersSelect = true;
|
|
117
|
+
/**
|
|
118
|
+
* @description
|
|
119
|
+
* Will display the trip switch, set this to false to remove it. It's true by default.
|
|
120
|
+
*/
|
|
121
|
+
this.enableTripSwitch = true;
|
|
122
|
+
/**
|
|
123
|
+
* @description
|
|
124
|
+
* Will display the transit switch, set this to false to remove it. It's true by default.
|
|
125
|
+
*/
|
|
126
|
+
this.enableTransitSwitch = true;
|
|
127
|
+
/**
|
|
128
|
+
* @description
|
|
129
|
+
* When selected datehas been changed on the outbound calendar.
|
|
130
|
+
*/
|
|
131
|
+
this.outboundSelectedDateChange = new EventEmitter();
|
|
132
|
+
/**
|
|
133
|
+
* @description
|
|
134
|
+
* When selected datehas been changed on the inbound calendar.
|
|
135
|
+
*/
|
|
136
|
+
this.inboundSelectedDateChange = new EventEmitter();
|
|
137
|
+
/**
|
|
138
|
+
* @description
|
|
139
|
+
* Outbound datepicker is open or closed.
|
|
140
|
+
*/
|
|
141
|
+
this.outboundOpenChange = new EventEmitter();
|
|
142
|
+
/**
|
|
143
|
+
* @description
|
|
144
|
+
* Inbound datepicker is open or closed.
|
|
145
|
+
*/
|
|
146
|
+
this.inboundOpenChange = new EventEmitter();
|
|
147
|
+
/**
|
|
148
|
+
* @description
|
|
149
|
+
* Outbound calendar changes month.
|
|
150
|
+
*/
|
|
151
|
+
this.outboundMonthChange = new EventEmitter();
|
|
152
|
+
/**
|
|
153
|
+
* @description
|
|
154
|
+
* Inbound calendar changes month.
|
|
155
|
+
*/
|
|
156
|
+
this.inboundMonthChange = new EventEmitter();
|
|
157
|
+
/**
|
|
158
|
+
* @description
|
|
159
|
+
* When a user has actively changed the date.
|
|
160
|
+
*/
|
|
161
|
+
this.focusOnNextChange = new EventEmitter();
|
|
162
|
+
/**
|
|
163
|
+
* @description
|
|
164
|
+
* The geolocation of the user. Will be emitted if 'enableSuggestions' is true.
|
|
165
|
+
*/
|
|
166
|
+
this.positionChange = new EventEmitter();
|
|
167
|
+
/**
|
|
168
|
+
* @description
|
|
169
|
+
* An even that is fired every time the info button on the subsidy discount is clicked.
|
|
170
|
+
*/
|
|
171
|
+
this.subsidyDiscountInfoClick = new EventEmitter();
|
|
172
|
+
this.outboundOpenValue = false;
|
|
173
|
+
this.inboundOpenValue = false;
|
|
174
|
+
this.passengersValue = new Array();
|
|
175
|
+
this.nativeElement = elementRef.nativeElement;
|
|
176
|
+
}
|
|
177
|
+
get outboundOpen() {
|
|
178
|
+
return this.outboundOpenValue;
|
|
179
|
+
}
|
|
180
|
+
set outboundOpen(value) {
|
|
181
|
+
if (this.outboundOpenValue === value) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (value) {
|
|
185
|
+
this.closeDropdowns();
|
|
186
|
+
if (this.airportSelect) {
|
|
187
|
+
this.airportSelect.originOpen = false;
|
|
188
|
+
this.airportSelect.destinationOpen = false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
this.outboundOpenValue = value;
|
|
192
|
+
this.outboundOpenChange.emit(value);
|
|
193
|
+
}
|
|
194
|
+
get inboundOpen() {
|
|
195
|
+
return this.inboundOpenValue;
|
|
196
|
+
}
|
|
197
|
+
set inboundOpen(value) {
|
|
198
|
+
if (this.inboundOpenValue === value) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (value) {
|
|
202
|
+
this.closeDropdowns();
|
|
203
|
+
if (this.airportSelect) {
|
|
204
|
+
this.airportSelect.originOpen = false;
|
|
205
|
+
this.airportSelect.destinationOpen = false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
clearTimeout(this.inboundOpenTimeout);
|
|
209
|
+
this.inboundOpenTimeout = setTimeout(() => {
|
|
210
|
+
this.inboundOpenValue = value;
|
|
211
|
+
});
|
|
212
|
+
this.inboundOpenChange.emit(value);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* @description
|
|
216
|
+
* An array of different passenger types that will be displayed.
|
|
217
|
+
*/
|
|
218
|
+
get passengers() {
|
|
219
|
+
return this.passengersValue;
|
|
220
|
+
}
|
|
221
|
+
set passengers(value) {
|
|
222
|
+
if (!value) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
this.passengersValue = value;
|
|
226
|
+
this.passengersChange.emit(value);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* @description
|
|
230
|
+
* Indicates if the edit search of accordion should be expended on mobile screen sizes.
|
|
231
|
+
*/
|
|
232
|
+
get expandedAccordionMobile() {
|
|
233
|
+
return this.expandedAccordionMobileValue;
|
|
234
|
+
}
|
|
235
|
+
set expandedAccordionMobile(value) {
|
|
236
|
+
if (value === this.expandedAccordionMobileValue) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.expandedAccordionMobileValue = value;
|
|
240
|
+
}
|
|
241
|
+
get closestAirports() {
|
|
242
|
+
return this.closestAirportsValue;
|
|
243
|
+
}
|
|
244
|
+
set closestAirports(airports) {
|
|
245
|
+
if (!airports || airports.length < 1) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
this.closestAirportsValue = airports;
|
|
249
|
+
if (this.exists(this.overrideOrigin)) {
|
|
250
|
+
this.originAirportCode = airports[0].code;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* @required
|
|
255
|
+
* @description
|
|
256
|
+
* All airports that will be populated into the dropdown lists.
|
|
257
|
+
* If displayLatestSearches is true, it will try to get the latest searches from the abandoned basket.
|
|
258
|
+
*/
|
|
259
|
+
get airports() {
|
|
260
|
+
return this.airportsValue;
|
|
261
|
+
}
|
|
262
|
+
set airports(airports) {
|
|
263
|
+
this.airportsValue = airports;
|
|
264
|
+
if (this.exists(this.displayLatestSearches)) {
|
|
265
|
+
const abandonedBasket = this.abandonedBasketService.getAll();
|
|
266
|
+
this.setLatestSearches(abandonedBasket, this.airports);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* @description
|
|
271
|
+
* Sets and gets the selected trip type.
|
|
272
|
+
*/
|
|
273
|
+
get tripType() {
|
|
274
|
+
return this.tripTypeValue;
|
|
275
|
+
}
|
|
276
|
+
set tripType(tripType) {
|
|
277
|
+
if (tripType === this.tripTypeValue) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this.tripTypeValue = tripType;
|
|
281
|
+
this.tripTypeChange.emit(this.tripType);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* @description
|
|
285
|
+
* Sets and gets whether the selected transit type is direct only or not.
|
|
286
|
+
*/
|
|
287
|
+
get directOnly() {
|
|
288
|
+
return this.directOnlyValue;
|
|
289
|
+
}
|
|
290
|
+
set directOnly(directOnly) {
|
|
291
|
+
if (directOnly === this.directOnlyValue) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
this.directOnlyValue = directOnly;
|
|
295
|
+
this.directOnlyChange.emit(this.directOnly);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* @description
|
|
299
|
+
* Selected datefor outbound calendar.
|
|
300
|
+
*/
|
|
301
|
+
get outboundSelectedDate() {
|
|
302
|
+
return this.outboundSelectedDateValue;
|
|
303
|
+
}
|
|
304
|
+
set outboundSelectedDate(date) {
|
|
305
|
+
if (!date) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
this.outboundSelectedDateValue = date;
|
|
310
|
+
this.outboundSelectedDateChange.emit(date);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* @description
|
|
315
|
+
* Selected datefor inbound calendar.
|
|
316
|
+
*/
|
|
317
|
+
get inboundSelectedDate() {
|
|
318
|
+
return this.inboundSelectedDateValue;
|
|
319
|
+
}
|
|
320
|
+
set inboundSelectedDate(date) {
|
|
321
|
+
if (!date) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
setTimeout(() => {
|
|
325
|
+
this.inboundSelectedDateValue = date;
|
|
326
|
+
this.inboundSelectedDateChange.emit(date);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
get inboundSelectedMonth() {
|
|
330
|
+
return this.inboundSelectedMonthValue;
|
|
331
|
+
}
|
|
332
|
+
set inboundSelectedMonth(month) {
|
|
333
|
+
if (this.dateService.isSameMonth(month, this.inboundSelectedMonthValue)) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
setTimeout(() => {
|
|
337
|
+
this.inboundMonthChange.emit(month);
|
|
338
|
+
this.inboundSelectedMonthValue = month;
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
ngOnInit() {
|
|
342
|
+
if (!this.nasFormGroup) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
this.nasFormGroup.statusChanges.subscribe(x => {
|
|
346
|
+
setTimeout(() => {
|
|
347
|
+
this.isNasGroupValid = x;
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
if (this.nasFormControlNameDirectOnly) {
|
|
351
|
+
const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
352
|
+
if (directOnlyControl) {
|
|
353
|
+
this.directOnly = directOnlyControl.value;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (this.nasFormControlNameTripType) {
|
|
357
|
+
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
358
|
+
if (tripTypeControl) {
|
|
359
|
+
this.tripType = tripTypeControl.value;
|
|
360
|
+
this.inboundDisabled = tripTypeControl.value === TripType.oneWay;
|
|
361
|
+
if (this.nasFormControlNameInbound) {
|
|
362
|
+
const inboundControl = this.nasFormGroup.get(this.nasFormControlNameInbound);
|
|
363
|
+
if (inboundControl && this.inboundDisabled) {
|
|
364
|
+
inboundControl.disable();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
tripTypeControl.valueChanges.subscribe((value) => {
|
|
368
|
+
this.inboundDisabled = value === TripType.oneWay;
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
ngAfterViewChecked() {
|
|
374
|
+
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
375
|
+
window.onresize = () => {
|
|
376
|
+
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
onSubsidyDiscountInfoClick() {
|
|
380
|
+
this.subsidyDiscountInfoClick.emit();
|
|
381
|
+
}
|
|
382
|
+
onSubsidyDiscountSelectChange(model) {
|
|
383
|
+
if (!this.nasFormGroup || !this.nasFormControlNameSubsidyDiscount) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
const subsidyDiscountControl = this.nasFormGroup.get(this.nasFormControlNameSubsidyDiscount);
|
|
387
|
+
subsidyDiscountControl.patchValue(model);
|
|
388
|
+
}
|
|
389
|
+
getClosestAirports(position) {
|
|
390
|
+
this.positionChange.emit(position);
|
|
391
|
+
}
|
|
392
|
+
getFilterClass(element, modifiersInput) {
|
|
393
|
+
let modifiers = modifiersInput || new Array();
|
|
394
|
+
if (typeof modifiersInput === 'string' || modifiersInput instanceof String) {
|
|
395
|
+
modifiers = [modifiersInput];
|
|
396
|
+
}
|
|
397
|
+
const widths = [];
|
|
398
|
+
if (this.deviceHelper.isWidthTablet(this.containerWidth.getValue())) {
|
|
399
|
+
widths.push('md');
|
|
400
|
+
}
|
|
401
|
+
if (this.deviceHelper.isWidthDesktop(this.containerWidth.getValue())) {
|
|
402
|
+
widths.push('lg');
|
|
403
|
+
}
|
|
404
|
+
modifiers = [...modifiers, ...widths];
|
|
405
|
+
return this.getClass(element, modifiers);
|
|
406
|
+
}
|
|
407
|
+
getAirportSelectClass() {
|
|
408
|
+
return this.getClass('airport-select', [
|
|
409
|
+
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
|
|
410
|
+
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
411
|
+
this.exists(this.enableDatepickers) && 'no-border'
|
|
412
|
+
]);
|
|
413
|
+
}
|
|
414
|
+
getSuggestions() {
|
|
415
|
+
const suggestions = Array.from(new Set([
|
|
416
|
+
...this.latestSearchesOrigin ? this.latestSearchesOrigin.filter(x => x.code !== this.originAirportCode) : [],
|
|
417
|
+
...this.closestAirports ? this.closestAirports.filter(x => x.code !== this.originAirportCode) : []
|
|
418
|
+
]));
|
|
419
|
+
return suggestions.slice(0, 3);
|
|
420
|
+
}
|
|
421
|
+
getDatePickersClass() {
|
|
422
|
+
return this.getFilterClass('date-combo', [
|
|
423
|
+
this.exists(this.minimize) && 'minimized',
|
|
424
|
+
this.containerWidth.getValue() > 500 && 'side-by-side'
|
|
425
|
+
]);
|
|
426
|
+
}
|
|
427
|
+
getTravelDetailsClass(element, modifiersInput) {
|
|
428
|
+
let modifiers = modifiersInput || new Array();
|
|
429
|
+
if (typeof modifiersInput === 'string' || modifiersInput instanceof String) {
|
|
430
|
+
modifiers = [modifiersInput];
|
|
431
|
+
}
|
|
432
|
+
const widths = [
|
|
433
|
+
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
434
|
+
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg'
|
|
435
|
+
];
|
|
436
|
+
modifiers = [...modifiers, ...widths];
|
|
437
|
+
const travelDetailsBase = new NasComponentBase('travel-details');
|
|
438
|
+
return travelDetailsBase.getClass(element, modifiers);
|
|
439
|
+
}
|
|
440
|
+
onInboundMonthChange(month) { this.inboundMonthChange.emit(month); }
|
|
441
|
+
onOutboundMonthChange(month) { this.outboundMonthChange.emit(month); }
|
|
442
|
+
onPassengersSelectFocusOnPrevious() {
|
|
443
|
+
if (this.isMobileDisplay()) {
|
|
444
|
+
this.onTransitSwitchOpen(true);
|
|
445
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
446
|
+
}
|
|
447
|
+
else if (this.isTabletDisplay()) {
|
|
448
|
+
this.selectPreviousControl();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
passengerKeyDown(event) {
|
|
452
|
+
switch (event.key) {
|
|
453
|
+
case 'Tab':
|
|
454
|
+
if (event.shiftKey) {
|
|
455
|
+
if (this.isMobileDisplay() || this.isTabletDisplay()) {
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
this.focusOnAirportSelectBackwards();
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
if (this.isMobileDisplay()) {
|
|
462
|
+
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
463
|
+
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
this.focusOnNextChange.emit();
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
break;
|
|
470
|
+
case 'Enter':
|
|
471
|
+
if (event.shiftKey || this.isMobileDisplay()) {
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
if (document.activeElement === this.passengerSelectDropdown.toggleElement.nativeElement) {
|
|
475
|
+
if (this.passengerSelectDropdown.open) {
|
|
476
|
+
this.onTripSwitchOpen(true);
|
|
477
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
this.onPassengerSelectOpen(true);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
break;
|
|
484
|
+
case 'Escape':
|
|
485
|
+
this.onPassengerSelectOpen(false);
|
|
486
|
+
event.preventDefault();
|
|
487
|
+
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
onTripSwitchKeyDown(event) {
|
|
492
|
+
switch (event.key) {
|
|
493
|
+
case 'ArrowRight':
|
|
494
|
+
if (document.activeElement === this.tripTypeRoundTrip.nativeElement) {
|
|
495
|
+
this.tripTypeOneway.nativeElement.focus();
|
|
496
|
+
}
|
|
497
|
+
break;
|
|
498
|
+
case 'ArrowLeft':
|
|
499
|
+
if (document.activeElement === this.tripTypeOneway.nativeElement) {
|
|
500
|
+
this.tripTypeRoundTrip.nativeElement.focus();
|
|
501
|
+
}
|
|
502
|
+
break;
|
|
503
|
+
case 'Tab':
|
|
504
|
+
case 'Enter':
|
|
505
|
+
if (event.shiftKey) {
|
|
506
|
+
event.preventDefault();
|
|
507
|
+
if (this.isMobileDisplay() || !this.passengerSelectDropdown) {
|
|
508
|
+
this.selectPreviousControl();
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
this.onPassengerSelectOpen(true);
|
|
512
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
if (event.key === 'Tab') {
|
|
517
|
+
this.onTransitSwitchOpen(true);
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
if (this.tripSwitch.open) {
|
|
521
|
+
this.onTransitSwitchOpen(true);
|
|
522
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
this.onTripSwitchOpen(true);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
break;
|
|
530
|
+
case 'Escape':
|
|
531
|
+
this.onTripSwitchOpen(false);
|
|
532
|
+
this.setFocusOnNativeElement(this.tripSwitch.toggleElement);
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
transitKeyDown(event) {
|
|
537
|
+
switch (event.key) {
|
|
538
|
+
case 'ArrowRight':
|
|
539
|
+
if (document.activeElement === this.transitTypeTransit.nativeElement) {
|
|
540
|
+
this.transitTypeDirectOnly.nativeElement.focus();
|
|
541
|
+
}
|
|
542
|
+
break;
|
|
543
|
+
case 'ArrowLeft':
|
|
544
|
+
if (document.activeElement === this.transitTypeDirectOnly.nativeElement) {
|
|
545
|
+
this.transitTypeTransit.nativeElement.focus();
|
|
546
|
+
}
|
|
547
|
+
break;
|
|
548
|
+
case 'Tab':
|
|
549
|
+
case 'Enter':
|
|
550
|
+
if (event.shiftKey) {
|
|
551
|
+
event.preventDefault();
|
|
552
|
+
this.onTripSwitchOpen(true);
|
|
553
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
if (this.isMobileDisplay()) {
|
|
557
|
+
this.onPassengerSelectOpen(true);
|
|
558
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
this.onTransitSwitchOpen(!this.transitSwitch.open);
|
|
562
|
+
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
563
|
+
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
this.focusOnNextChange.emit();
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
if (event.key === 'Tab') {
|
|
570
|
+
event.preventDefault();
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
break;
|
|
574
|
+
case 'Escape':
|
|
575
|
+
this.onTransitSwitchOpen(false);
|
|
576
|
+
event.preventDefault();
|
|
577
|
+
this.setFocusOnNativeElement(this.transitSwitch.toggleElement);
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
onSubsidyDiscountInfoButtonKeydown(event) {
|
|
582
|
+
switch (event.key) {
|
|
583
|
+
case 'Tab':
|
|
584
|
+
if (event.shiftKey) {
|
|
585
|
+
if (this.isMobileDisplay()) {
|
|
586
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
587
|
+
}
|
|
588
|
+
else {
|
|
589
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
590
|
+
}
|
|
591
|
+
event.preventDefault();
|
|
592
|
+
}
|
|
593
|
+
break;
|
|
594
|
+
default:
|
|
595
|
+
break;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
onPassengersSelectFocusOnNext() {
|
|
599
|
+
if (this.isMobileDisplay()) {
|
|
600
|
+
this.passengerSelectDropdown.toggle();
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
this.onTripSwitchOpen(true);
|
|
604
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
focusAsync(refElement) {
|
|
608
|
+
clearTimeout(this.focusAsyncTimout);
|
|
609
|
+
this.focusAsyncTimout = setTimeout(() => this.setFocusOnNativeElement(refElement));
|
|
610
|
+
}
|
|
611
|
+
onDatepickerFocusOnPrevious(event) {
|
|
612
|
+
event.preventDefault();
|
|
613
|
+
this.focusOnAirportSelectBackwards();
|
|
614
|
+
}
|
|
615
|
+
selectPreviousControl() {
|
|
616
|
+
if (this.datepickerCombo) {
|
|
617
|
+
if (this.datepickerCombo.outboundOnly) {
|
|
618
|
+
this.outboundOpen = true;
|
|
619
|
+
}
|
|
620
|
+
else {
|
|
621
|
+
this.inboundOpen = true;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
else if (this.airportSelect) {
|
|
625
|
+
if (this.exists(this.airportSelect.combo)) {
|
|
626
|
+
this.airportSelect.onDestinationOpen(true);
|
|
627
|
+
if (this.airportSelect.airportSelectDropdownDestination) {
|
|
628
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownDestination.input);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
this.airportSelect.onOriginOpen(true);
|
|
633
|
+
if (this.airportSelect.airportSelectDropdownOrigin) {
|
|
634
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
onFocusOnNextChange(event) {
|
|
640
|
+
if (this.isMobileDisplay() && this.tripSwitch) {
|
|
641
|
+
this.onTripSwitchOpen(true);
|
|
642
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
643
|
+
}
|
|
644
|
+
else if (this.isTabletDisplay()) {
|
|
645
|
+
if (this.passengerSelectDropdown) {
|
|
646
|
+
event.preventDefault();
|
|
647
|
+
setTimeout(() => {
|
|
648
|
+
this.onPassengerSelectOpen(true);
|
|
649
|
+
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
else if (this.tripSwitch) {
|
|
653
|
+
this.onTripSwitchOpen(true);
|
|
654
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
isMobileDisplay() {
|
|
659
|
+
return this.deviceHelper.isWidthMobile(this.containerWidth.getValue());
|
|
660
|
+
}
|
|
661
|
+
isTabletDisplay() {
|
|
662
|
+
return this.deviceHelper.isWidthTablet(this.containerWidth.getValue());
|
|
663
|
+
}
|
|
664
|
+
onOriginOpen(open) {
|
|
665
|
+
if (this.passengerSelectDropdown) {
|
|
666
|
+
this.passengerSelectDropdown.open = false;
|
|
667
|
+
}
|
|
668
|
+
if (this.tripSwitch) {
|
|
669
|
+
this.tripSwitch.open = false;
|
|
670
|
+
}
|
|
671
|
+
if (this.transitSwitch) {
|
|
672
|
+
this.transitSwitch.open = false;
|
|
673
|
+
}
|
|
674
|
+
if (this.datepickerCombo) {
|
|
675
|
+
this.datepickerCombo.inboundOpen = false;
|
|
676
|
+
this.datepickerCombo.outboundOpen = false;
|
|
677
|
+
}
|
|
678
|
+
if (this.airportSelect && !this.airportSelect.originOpen) {
|
|
679
|
+
this.updateMaximize();
|
|
680
|
+
}
|
|
681
|
+
this.originOpenChange.emit(open);
|
|
682
|
+
this.changeDetector.detectChanges();
|
|
683
|
+
}
|
|
684
|
+
validateAirportValues() {
|
|
685
|
+
if (!this.airportSelect) {
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
688
|
+
const originSnapshot = this.airportSelect.origin;
|
|
689
|
+
const destinationSnapshot = this.airportSelect.destination;
|
|
690
|
+
if ((originSnapshot && destinationSnapshot && originSnapshot.code && originSnapshot.code.length
|
|
691
|
+
&& destinationSnapshot.code && destinationSnapshot.code.length)) {
|
|
692
|
+
return true;
|
|
693
|
+
}
|
|
694
|
+
return false;
|
|
695
|
+
}
|
|
696
|
+
updateMaximize() {
|
|
697
|
+
setTimeout(() => {
|
|
698
|
+
this.maximize = this.validateAirportValues();
|
|
699
|
+
});
|
|
700
|
+
}
|
|
701
|
+
onDestinationOpen(open) {
|
|
702
|
+
if (this.passengerSelectDropdown) {
|
|
703
|
+
this.passengerSelectDropdown.open = false;
|
|
704
|
+
}
|
|
705
|
+
if (this.tripSwitch) {
|
|
706
|
+
this.tripSwitch.open = false;
|
|
707
|
+
}
|
|
708
|
+
if (this.transitSwitch) {
|
|
709
|
+
this.transitSwitch.open = false;
|
|
710
|
+
}
|
|
711
|
+
if (this.datepickerCombo) {
|
|
712
|
+
this.datepickerCombo.inboundOpen = false;
|
|
713
|
+
this.datepickerCombo.outboundOpen = false;
|
|
714
|
+
}
|
|
715
|
+
if (this.airportSelect && !this.airportSelect.destinationOpen) {
|
|
716
|
+
this.updateMaximize();
|
|
717
|
+
}
|
|
718
|
+
this.destinationOpenChange.emit(open);
|
|
719
|
+
}
|
|
720
|
+
onPassengerSelectOpen(open) {
|
|
721
|
+
if (this.airportSelect) {
|
|
722
|
+
this.airportSelect.originOpen = false;
|
|
723
|
+
this.airportSelect.destinationOpen = false;
|
|
724
|
+
}
|
|
725
|
+
if (this.tripSwitch) {
|
|
726
|
+
this.tripSwitch.open = false;
|
|
727
|
+
}
|
|
728
|
+
if (this.transitSwitch) {
|
|
729
|
+
this.transitSwitch.open = false;
|
|
730
|
+
}
|
|
731
|
+
if (this.datepickerCombo) {
|
|
732
|
+
if (this.datepickerCombo.inboundOpen) {
|
|
733
|
+
this.datepickerCombo.inboundOpen = false;
|
|
734
|
+
}
|
|
735
|
+
if (this.datepickerCombo.outboundOpen) {
|
|
736
|
+
this.datepickerCombo.outboundOpen = false;
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
this.passengerSelectDropdown.open = open;
|
|
740
|
+
this.passengerSelectOpenChange.emit(open);
|
|
741
|
+
if (open) {
|
|
742
|
+
setTimeout(() => {
|
|
743
|
+
if (this.passengerSelect.numberFields.first) {
|
|
744
|
+
this.passengerSelect.numberFields.first.input.nativeElement.focus();
|
|
745
|
+
}
|
|
746
|
+
}, 300);
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
onTripSwitchOpen(open) {
|
|
750
|
+
clearTimeout(this.tripSwitchFocusTimeout);
|
|
751
|
+
if (this.passengerSelectDropdown) {
|
|
752
|
+
setTimeout(() => {
|
|
753
|
+
this.passengerSelectDropdown.open = false;
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
if (this.transitSwitch) {
|
|
757
|
+
this.transitSwitch.open = false;
|
|
758
|
+
}
|
|
759
|
+
if (this.airportSelect) {
|
|
760
|
+
this.airportSelect.originOpen = false;
|
|
761
|
+
this.airportSelect.destinationOpen = false;
|
|
762
|
+
}
|
|
763
|
+
if (this.datepickerCombo) {
|
|
764
|
+
this.datepickerCombo.inboundOpen = false;
|
|
765
|
+
this.datepickerCombo.outboundOpen = false;
|
|
766
|
+
}
|
|
767
|
+
this.tripSwitch.open = open;
|
|
768
|
+
if (open) {
|
|
769
|
+
this.tripSwitchFocusTimeout = setTimeout(() => {
|
|
770
|
+
this.tripTypeRoundTrip.nativeElement.focus();
|
|
771
|
+
}, 200);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
onTransitSwitchOpen(open) {
|
|
775
|
+
clearTimeout(this.transitSwitchFocusTimeout);
|
|
776
|
+
if (this.passengerSelectDropdown) {
|
|
777
|
+
this.passengerSelectDropdown.open = false;
|
|
778
|
+
}
|
|
779
|
+
if (this.tripSwitch) {
|
|
780
|
+
this.tripSwitch.open = false;
|
|
781
|
+
}
|
|
782
|
+
if (this.airportSelect) {
|
|
783
|
+
this.airportSelect.originOpen = false;
|
|
784
|
+
this.airportSelect.destinationOpen = false;
|
|
785
|
+
}
|
|
786
|
+
if (this.datepickerCombo) {
|
|
787
|
+
this.datepickerCombo.inboundOpen = false;
|
|
788
|
+
this.datepickerCombo.outboundOpen = false;
|
|
789
|
+
}
|
|
790
|
+
if (this.transitSwitch) {
|
|
791
|
+
this.transitSwitch.open = open;
|
|
792
|
+
}
|
|
793
|
+
if (open) {
|
|
794
|
+
this.transitSwitchFocusTimeout = setTimeout(() => {
|
|
795
|
+
this.transitTypeTransit.nativeElement.focus();
|
|
796
|
+
}, 200);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
onOriginChange(airport) {
|
|
800
|
+
this.originChange.emit(airport);
|
|
801
|
+
}
|
|
802
|
+
setSelectedOriginAirport(airport) {
|
|
803
|
+
if (!airport) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
this.onOriginChange(airport);
|
|
807
|
+
if (this.originAirportCode === airport.code) {
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
this.originAirportCode = airport.code;
|
|
811
|
+
this.changeDetector.detectChanges();
|
|
812
|
+
}
|
|
813
|
+
onDestinationChange(airport) {
|
|
814
|
+
this.destinationChange.emit(airport);
|
|
815
|
+
}
|
|
816
|
+
setFocusOnPassengerSelect(event) {
|
|
817
|
+
this.minimize = false;
|
|
818
|
+
if (this.isMobileDisplay()) {
|
|
819
|
+
if (this.datepickerCombo) {
|
|
820
|
+
event.preventDefault();
|
|
821
|
+
this.outboundOpen = true;
|
|
822
|
+
this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
|
|
823
|
+
}
|
|
824
|
+
else if (this.tripSwitch) {
|
|
825
|
+
event.preventDefault();
|
|
826
|
+
this.onTripSwitchOpen(true);
|
|
827
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
else if (this.isTabletDisplay() && this.datepickerCombo) {
|
|
831
|
+
setTimeout(() => {
|
|
832
|
+
this.outboundOpen = true;
|
|
833
|
+
});
|
|
834
|
+
}
|
|
835
|
+
else {
|
|
836
|
+
if (this.passengerSelectDropdown) {
|
|
837
|
+
this.onPassengerSelectOpen(true);
|
|
838
|
+
const currentElementRef = this.passengerSelectDropdown.toggleElement;
|
|
839
|
+
setTimeout(() => this.setFocusOnNativeElement(currentElementRef));
|
|
840
|
+
}
|
|
841
|
+
else if (this.tripSwitch) {
|
|
842
|
+
this.onTripSwitchOpen(true);
|
|
843
|
+
this.tripSwitch.toggleElement.nativeElement.focus();
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
setFocusOnNativeElement(element) {
|
|
848
|
+
element.nativeElement.focus();
|
|
849
|
+
}
|
|
850
|
+
onTripTypeChange(tripType) {
|
|
851
|
+
setTimeout(() => {
|
|
852
|
+
this.tripSwitch.open = false;
|
|
853
|
+
});
|
|
854
|
+
this.tripType = tripType;
|
|
855
|
+
if (this.nasFormGroup && this.nasFormControlNameTripType) {
|
|
856
|
+
const tripSwitchControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
857
|
+
tripSwitchControl.patchValue(tripType);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
onTransitChange(directOnly) {
|
|
861
|
+
setTimeout(() => {
|
|
862
|
+
this.transitSwitch.open = false;
|
|
863
|
+
});
|
|
864
|
+
this.directOnly = directOnly;
|
|
865
|
+
if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
|
|
866
|
+
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
867
|
+
tripTypeControl.patchValue(directOnly);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
getTravelDetailsTripSwitchIconClass(modifiers) {
|
|
871
|
+
const iconMediumBase = new NasComponentBase('icon-medium');
|
|
872
|
+
return [
|
|
873
|
+
iconMediumBase.getClass('', modifiers),
|
|
874
|
+
this.getTravelDetailsClass('icon')
|
|
875
|
+
];
|
|
876
|
+
}
|
|
877
|
+
getTripSwitchLabel() {
|
|
878
|
+
return this.tripType === TripType.twoWayReturn ? this.tripSwitchRoundTripLabel : this.tripSwitchOneWayLabel;
|
|
879
|
+
}
|
|
880
|
+
getTransitLabel() {
|
|
881
|
+
return this.directOnly ? this.directOnlyLabel : this.directTransitLabel;
|
|
882
|
+
}
|
|
883
|
+
onAccordionToggleChange(expanded) {
|
|
884
|
+
this.displaySummary = !expanded;
|
|
885
|
+
}
|
|
886
|
+
getSummary() {
|
|
887
|
+
return `${this.passengerSelectLabel}${this.defaultSummarySeparator}` +
|
|
888
|
+
`${this.getTripSwitchLabel().toLowerCase()}${this.lastSummarySeparator}${this.getTransitLabel().toLowerCase()}`;
|
|
889
|
+
}
|
|
890
|
+
shouldMaximize() {
|
|
891
|
+
if (!this.exists(this.minimize)) {
|
|
892
|
+
return true;
|
|
893
|
+
}
|
|
894
|
+
else if (this.airportSelect
|
|
895
|
+
&& this.airportSelect.origin
|
|
896
|
+
&& this.airportSelect.origin.code
|
|
897
|
+
&& this.airportSelect.destination
|
|
898
|
+
&& this.airportSelect.destination.code) {
|
|
899
|
+
return true;
|
|
900
|
+
}
|
|
901
|
+
else if (this.airportSelect && (this.airportSelect.originOpen || this.airportSelect.destinationOpen)) {
|
|
902
|
+
return this.maximize;
|
|
903
|
+
}
|
|
904
|
+
else if (this.exists(this.minimize)) {
|
|
905
|
+
if (this.maximize) {
|
|
906
|
+
if (this.nasFormGroup) {
|
|
907
|
+
return this.isNasGroupValid;
|
|
908
|
+
}
|
|
909
|
+
return true;
|
|
910
|
+
}
|
|
911
|
+
else {
|
|
912
|
+
return false;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
focusOnAirportSelectBackwards() {
|
|
917
|
+
if (this.exists(this.airportSelect.combo)) {
|
|
918
|
+
this.airportSelect.onDestinationOpen(true);
|
|
919
|
+
setTimeout(() => {
|
|
920
|
+
this.airportSelect.airportSelectDropdownDestination.input.nativeElement.focus();
|
|
921
|
+
}, 100);
|
|
922
|
+
}
|
|
923
|
+
else {
|
|
924
|
+
this.airportSelect.onOriginOpen(true);
|
|
925
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
setLatestSearches(abandonedBasket, airports) {
|
|
929
|
+
if (!abandonedBasket || !airports) {
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
const unique = new Array();
|
|
933
|
+
for (const item of abandonedBasket) {
|
|
934
|
+
if (!unique.some(x => x.destinationCode === item.destinationCode)) {
|
|
935
|
+
unique.push(item);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
const originCodes = unique.map(x => x.originCode);
|
|
939
|
+
const destinationCodes = unique.map(x => x.destinationCode);
|
|
940
|
+
const latestSearchesOrigin = airports.filter(airport => {
|
|
941
|
+
return unique.some(x => x.originCode.toLowerCase() === airport.code.toLowerCase());
|
|
942
|
+
});
|
|
943
|
+
const latestSearchesDestination = airports.filter(airport => {
|
|
944
|
+
return unique.some(x => x.destinationCode.toLowerCase() === airport.code.toLowerCase());
|
|
945
|
+
});
|
|
946
|
+
const code = 'code';
|
|
947
|
+
this.latestSearchesOrigin = this.sortService.sortByObject(latestSearchesOrigin, originCodes, code).slice(0, 3);
|
|
948
|
+
if (this.latestSearchesOrigin && this.latestSearchesOrigin.length > 0 && this.exists(this.overrideOrigin)) {
|
|
949
|
+
this.originAirportCode = this.latestSearchesOrigin[0].code;
|
|
950
|
+
}
|
|
951
|
+
this.latestSearchesDestination = this.sortService.sortByObject(latestSearchesDestination, destinationCodes, code).slice(0, 3);
|
|
952
|
+
}
|
|
953
|
+
closeDropdowns() {
|
|
954
|
+
if (this.passengerSelectDropdown) {
|
|
955
|
+
this.passengerSelectDropdown.open = false;
|
|
956
|
+
}
|
|
957
|
+
if (this.tripSwitch) {
|
|
958
|
+
this.tripSwitch.open = false;
|
|
959
|
+
}
|
|
960
|
+
if (this.transitSwitch) {
|
|
961
|
+
this.transitSwitch.open = false;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
FilterComponent.decorators = [
|
|
966
|
+
{ type: Component, args: [{
|
|
967
|
+
selector: 'nas-filter',
|
|
968
|
+
template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0 && airportRelations\">\n <nas-airport-select *ngIf=\"airports && airportRelations\"\n #airportSelect\n combo\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div\n [nasClass]=\"getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <nas-dropdown #passengerSelectDropdown\n *ngIf=\"passengers?.length > 0\"\n [nasClass]=\"getTravelDetailsClass('dropdown', 'passengers')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"passengerSelectLabel\"\n [labelStyle]=\"{'width': '102px'}\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onPassengerSelectOpen($event)\"\n (keydown)=\"passengerKeyDown($event)\">\n <nas-passenger-select #passengerSelect\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <nas-dropdown *ngIf=\"tripSwitchOneWayLabel && tripSwitchRoundTripLabel\"\n #tripSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'trip-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTripSwitchLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTripSwitchOpen($event)\"\n (keydown)=\"onTripSwitchKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #tripTypeRoundTrip\n [nasClass]=\"getTravelDetailsClass('action', tripType === 2 && 'active')\"\n (click)=\"onTripTypeChange(2)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 2 ? 'flight-return--light' : 'flight-return'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{tripSwitchRoundTripLabel}}</span>\n </button>\n <button type=\"button\"\n #tripTypeOneway\n [nasClass]=\"getTravelDetailsClass('action', tripType === 1 && 'active')\"\n (click)=\"onTripTypeChange(1)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 1 ? 'flight-oneway--light' : 'flight-oneway'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', ['small'])\">{{tripSwitchOneWayLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <nas-dropdown *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'transit-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTransitLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon-stop')\"></span>\n </span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directTransitLabel}}</span>\n </button>\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\"></span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directOnlyLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n </div>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo\n compact\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>",
|
|
969
|
+
styles: ["@-webkit-keyframes fade-in{0%{opacity:0}}@keyframes fade-in{0%{opacity:0}}@-webkit-keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@-webkit-keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@-webkit-keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@-webkit-keyframes fade-out{to{opacity:0}}@keyframes fade-out{to{opacity:0}}@-webkit-keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@-webkit-keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@-webkit-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)}}@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{background-color:#f1f1f1;position:relative;z-index:6}.nas-filter__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter__title{font-size:32px;line-height:38px}}.nas-filter__title--md{margin-top:60px}.nas-filter__filters{margin-top:12px;display:flex;flex-wrap:wrap;order:2}.nas-filter__filters .nas-filter__date-combo{order:2;flex:1;z-index:2}.nas-filter__filters .nas-filter__date-combo--minimized{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-animation:flip-in .55s ease both;animation:flip-in .55s ease both}.nas-filter__filters--minimized .nas-filter__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter__filters--maximize .nas-filter__airport-select:after{display:none}.nas-filter__filters--md .nas-filter__date-combo{flex:0 0 100%}.nas-filter__filters--lg{display:flex;align-items:stretch}.nas-filter__filters--lg .nas-filter__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter__filters--lg .nas-filter__suggestions{order:3}.nas-filter__filters--lg .nas-filter__filters--minimized .nas-filter__airport-select{margin-right:0;flex:0 1 100%}.nas-filter__filters--lg .nas-filter__filters--maximize .nas-filter__airport-select{margin-right:3px;flex:auto}.nas-filter__filters--lg.nas-filter__filters--maximize .nas-filter__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter__suggestions:before{content:\"\";position:absolute;top:-3px;left:0px;width:100%;border-top:3px solid #c3c3c3}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter__toggler{font-family:\"Apercu\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-weight:normal;font-size:18px;line-height:26px;color:#003251;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;display:flex;margin:0;flex-wrap:wrap;z-index:1}.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 #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__actions{display:flex}.travel-details__action{padding:12px;width:100%;background-color:#fff}.travel-details__action:hover,.travel-details__action:focus{background-color:#e3e3e3}.travel-details__action--active,.travel-details__action--active:hover,.travel-details__action--active:focus{color:#fff;background-color:#003251}.travel-details__action:focus{outline:none;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc;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:0px;width:100%;border-bottom:3px solid #c3c3c3}.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__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.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}.travel-details--minimized{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-animation:flip-in .55s ease both;animation:flip-in .55s ease both}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle{padding:20px!important;width:100%;height:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:hover:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle nas-icon{float:right}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:focus{outline:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown{width:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown:focus{outline:none}@media (min-width: 640px){::ng-deep .nas-filter__filters .travel-details__dropdown:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::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__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter__filters--lg .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter__filters--lg .nas-airport-select__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-datepicker-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-airport-select-combo__separator{border-bottom:3px solid #c3c3c3!important}::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{-webkit-animation:flip-in .55s ease both;animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{-webkit-animation:flip-out .2s ease-out both;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__subsidy-discount{order:3}::ng-deep .nas-filter__subsidy-discount .nas-subsidy-discount{margin-top:16px}\n"]
|
|
970
|
+
},] }
|
|
971
|
+
];
|
|
972
|
+
FilterComponent.ctorParameters = () => [
|
|
973
|
+
{ type: DeviceHelper },
|
|
974
|
+
{ type: SortService },
|
|
975
|
+
{ type: AbandonedBasketService },
|
|
976
|
+
{ type: DateHelper },
|
|
977
|
+
{ type: ElementRef },
|
|
978
|
+
{ type: ChangeDetectorRef }
|
|
979
|
+
];
|
|
980
|
+
FilterComponent.propDecorators = {
|
|
981
|
+
passengerSelectDropdown: [{ type: ViewChild, args: ['passengerSelectDropdown',] }],
|
|
982
|
+
passengerSelect: [{ type: ViewChild, args: ['passengerSelect',] }],
|
|
983
|
+
tripSwitch: [{ type: ViewChild, args: ['tripSwitch',] }],
|
|
984
|
+
transitSwitch: [{ type: ViewChild, args: ['transitSwitch',] }],
|
|
985
|
+
airportSelect: [{ type: ViewChild, args: ['airportSelect',] }],
|
|
986
|
+
datepickerCombo: [{ type: ViewChild, args: ['datepickerCombo',] }],
|
|
987
|
+
container: [{ type: ViewChild, args: ['container',] }],
|
|
988
|
+
tripTypeOneway: [{ type: ViewChild, args: ['tripTypeOneway',] }],
|
|
989
|
+
tripTypeRoundTrip: [{ type: ViewChild, args: ['tripTypeRoundTrip',] }],
|
|
990
|
+
transitTypeDirectOnly: [{ type: ViewChild, args: ['transitTypeDirectOnly',] }],
|
|
991
|
+
transitTypeTransit: [{ type: ViewChild, args: ['transitTypeTransit',] }],
|
|
992
|
+
subsidyDiscount: [{ type: ViewChild, args: ['subsidyDiscount',] }],
|
|
993
|
+
airportRelations: [{ type: Input }],
|
|
994
|
+
ariaLabelClear: [{ type: Input }],
|
|
995
|
+
ariaLabelSubtract: [{ type: Input }],
|
|
996
|
+
ariaLabelBackdrop: [{ type: Input }],
|
|
997
|
+
ariaLabelAdd: [{ type: Input }],
|
|
998
|
+
allowedOriginAirports: [{ type: Input }],
|
|
999
|
+
allowedDestinationAirports: [{ type: Input }],
|
|
1000
|
+
displayLatestSearches: [{ type: Input }],
|
|
1001
|
+
useSwitch: [{ type: Input }],
|
|
1002
|
+
displayClosestAirports: [{ type: Input }],
|
|
1003
|
+
originAirportCode: [{ type: Input }],
|
|
1004
|
+
destinationAirportCode: [{ type: Input }],
|
|
1005
|
+
passengerSelectLabel: [{ type: Input }],
|
|
1006
|
+
maxPaxCount: [{ type: Input }],
|
|
1007
|
+
passengers: [{ type: Input }],
|
|
1008
|
+
minAdultCount: [{ type: Input }],
|
|
1009
|
+
tripSwitchRoundTripLabel: [{ type: Input }],
|
|
1010
|
+
tripSwitchOneWayLabel: [{ type: Input }],
|
|
1011
|
+
directOnlyLabel: [{ type: Input }],
|
|
1012
|
+
directTransitLabel: [{ type: Input }],
|
|
1013
|
+
minimizeOnMobile: [{ type: Input }],
|
|
1014
|
+
expandedAccordionMobile: [{ type: Input }],
|
|
1015
|
+
defaultSummarySeparator: [{ type: Input }],
|
|
1016
|
+
lastSummarySeparator: [{ type: Input }],
|
|
1017
|
+
passengerSelectTitle: [{ type: Input }],
|
|
1018
|
+
passengerSelectAdultsLabel: [{ type: Input }],
|
|
1019
|
+
passengerSelectChildrenLabel: [{ type: Input }],
|
|
1020
|
+
passengerSelectInfantsLabel: [{ type: Input }],
|
|
1021
|
+
groupBookingLabel: [{ type: Input }],
|
|
1022
|
+
allAirportsLabel: [{ type: Input }],
|
|
1023
|
+
latestSearchesLabel: [{ type: Input }],
|
|
1024
|
+
closestAirportsLabel: [{ type: Input }],
|
|
1025
|
+
selectOriginFirstLabel: [{ type: Input }],
|
|
1026
|
+
labelOrigin: [{ type: Input }],
|
|
1027
|
+
placeholderOrigin: [{ type: Input }],
|
|
1028
|
+
labelDestination: [{ type: Input }],
|
|
1029
|
+
geolocationLabel: [{ type: Input }],
|
|
1030
|
+
geolocationBlockedLabel: [{ type: Input }],
|
|
1031
|
+
placeholderDestination: [{ type: Input }],
|
|
1032
|
+
keepSelection: [{ type: Input }],
|
|
1033
|
+
editSearchTitle: [{ type: Input }],
|
|
1034
|
+
nasFormGroup: [{ type: Input }],
|
|
1035
|
+
nasFormControlNameOrigin: [{ type: Input }],
|
|
1036
|
+
nasFormControlNameDestination: [{ type: Input }],
|
|
1037
|
+
nasFormControlNameTripType: [{ type: Input }],
|
|
1038
|
+
nasFormControlNameDirectOnly: [{ type: Input }],
|
|
1039
|
+
nasFormControlNameOutbound: [{ type: Input }],
|
|
1040
|
+
nasFormControlNameInbound: [{ type: Input }],
|
|
1041
|
+
nasFormControlGroupBooking: [{ type: Input }],
|
|
1042
|
+
nasFormControlNameSubsidyDiscount: [{ type: Input }],
|
|
1043
|
+
overrideOrigin: [{ type: Input }],
|
|
1044
|
+
enableSuggestions: [{ type: Input }],
|
|
1045
|
+
closestAirports: [{ type: Input }],
|
|
1046
|
+
minimize: [{ type: Input }],
|
|
1047
|
+
airports: [{ type: Input }],
|
|
1048
|
+
tripType: [{ type: Input }],
|
|
1049
|
+
directOnly: [{ type: Input }],
|
|
1050
|
+
groupBookingLimit: [{ type: Input }],
|
|
1051
|
+
subsidyDiscounts: [{ type: Input }],
|
|
1052
|
+
selectedSubsidyDiscount: [{ type: Input }],
|
|
1053
|
+
subsidyDiscountLabel: [{ type: Input }],
|
|
1054
|
+
ariaLabelPreviousMonth: [{ type: Input }],
|
|
1055
|
+
ariaLabelNextMonth: [{ type: Input }],
|
|
1056
|
+
originOpenChange: [{ type: Output }],
|
|
1057
|
+
destinationOpenChange: [{ type: Output }],
|
|
1058
|
+
passengerSelectOpenChange: [{ type: Output }],
|
|
1059
|
+
originChange: [{ type: Output }],
|
|
1060
|
+
destinationChange: [{ type: Output }],
|
|
1061
|
+
passengersChange: [{ type: Output }],
|
|
1062
|
+
tripTypeChange: [{ type: Output }],
|
|
1063
|
+
directOnlyChange: [{ type: Output }],
|
|
1064
|
+
noAvailableFlightsLabel: [{ type: Input }],
|
|
1065
|
+
availableFlightsLabel: [{ type: Input }],
|
|
1066
|
+
disablePastSelection: [{ type: Input }],
|
|
1067
|
+
outboundLabel: [{ type: Input }],
|
|
1068
|
+
inboundLabel: [{ type: Input }],
|
|
1069
|
+
availability: [{ type: Input }],
|
|
1070
|
+
outboundAvailableDates: [{ type: Input }],
|
|
1071
|
+
inboundAvailableDates: [{ type: Input }],
|
|
1072
|
+
times: [{ type: Input }],
|
|
1073
|
+
dateDisplayFormat: [{ type: Input }],
|
|
1074
|
+
timeDisplayFormat: [{ type: Input }],
|
|
1075
|
+
locale: [{ type: Input }],
|
|
1076
|
+
compact: [{ type: Input }],
|
|
1077
|
+
outboundDisabled: [{ type: Input }],
|
|
1078
|
+
inboundDisabled: [{ type: Input }],
|
|
1079
|
+
enableDatepickers: [{ type: Input }],
|
|
1080
|
+
minimizingLabel: [{ type: Input }],
|
|
1081
|
+
maximizingLabel: [{ type: Input }],
|
|
1082
|
+
directOnlyMobileLabel: [{ type: Input }],
|
|
1083
|
+
orLabel: [{ type: Input }],
|
|
1084
|
+
invalidDestinationText: [{ type: Input }],
|
|
1085
|
+
outboundSelectedDate: [{ type: Input }],
|
|
1086
|
+
inboundSelectedDate: [{ type: Input }],
|
|
1087
|
+
enablePassengersSelect: [{ type: Input }],
|
|
1088
|
+
enableTripSwitch: [{ type: Input }],
|
|
1089
|
+
enableTransitSwitch: [{ type: Input }],
|
|
1090
|
+
outboundSelectedDateChange: [{ type: Output }],
|
|
1091
|
+
inboundSelectedDateChange: [{ type: Output }],
|
|
1092
|
+
outboundOpenChange: [{ type: Output }],
|
|
1093
|
+
inboundOpenChange: [{ type: Output }],
|
|
1094
|
+
outboundMonthChange: [{ type: Output }],
|
|
1095
|
+
inboundMonthChange: [{ type: Output }],
|
|
1096
|
+
focusOnNextChange: [{ type: Output }],
|
|
1097
|
+
positionChange: [{ type: Output }],
|
|
1098
|
+
subsidyDiscountInfoClick: [{ type: Output }]
|
|
1099
|
+
};
|
|
1100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUl0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN2RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVVwRTs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUErMUJuRCxZQUNTLFlBQTBCLEVBQ3pCLFdBQXdCLEVBQ3hCLHNCQUE4QyxFQUM5QyxXQUF1QixFQUN4QixVQUFzQixFQUNyQixjQUFpQztRQUN6QyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFOYixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFD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QUFLO2dDQU1MLEtBQUs7OEJBT0wsS0FBSzs4QkFPTCxLQUFLO29DQU9MLEtBQUs7c0JBTUwsS0FBSztxQ0FNTCxLQUFLO21DQU1MLEtBQUs7a0NBbUJMLEtBQUs7cUNBbUJMLEtBQUs7K0JBTUwsS0FBSztrQ0FNTCxLQUFLO3lDQU1MLE1BQU07d0NBTU4sTUFBTTtpQ0FPTixNQUFNO2dDQU1OLE1BQU07a0NBTU4sTUFBTTtpQ0FNTixNQUFNO2dDQU1OLE1BQU07NkJBTU4sTUFBTTt1Q0FNTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmlwVHlwZSB9IGZyb20gJy4vZW51bXMvdHJpcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTmFzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS9uYXMtY29tcG9uZW50LmJhc2UnO1xuaW1wb3J0IHsgQWJhbmRvbmVkQmFza2V0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvYWJhbmRvbmVkLWJhc2tldC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgQWJhbmRvbmVkQmFza2V0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYWJhbmRvbmVkLWJhc2tldC9hYmFuZG9uZWQtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGV2aWNlL2RldmljZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvc29ydC9zb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2FpcnBvcnQtc2VsZWN0L2FpcnBvcnQtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaXJwb3J0TW9kZWwgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9tb2RlbHMvYWlycG9ydC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tYm9Db21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbWJvL2RhdGVwaWNrZXItY29tYm8uY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3NlbmdlcnNNb2RlbCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvbW9kZWxzL3Bhc3NlbmdlcnMubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2lkeURpc2NvdW50TW9kZWwgfSBmcm9tICcuLi9zdWJzaWR5LWRpc2NvdW50L21vZGVscy9zdWJzaWR5LWRpc2NvdW50Lm1vZGVsJztcbmltcG9ydCB7IFBhc3NlbmdlclNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvcGFzc2VuZ2VyLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2lkeURpc2NvdW50Q29tcG9uZW50IH0gZnJvbSAnLi4vc3Vic2lkeS1kaXNjb3VudC9zdWJzaWR5LWRpc2NvdW50LmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBOb3J3ZWdpYW4gRmlsdGVyIENvbXBvbmVudCB8IEZ1bmN0aW9uYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBOYXNDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQFZpZXdDaGlsZCgncGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24nKSBwYXNzZW5nZXJTZWxlY3REcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdCcpIHBhc3NlbmdlclNlbGVjdDogUGFzc2VuZ2VyU2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmlwU3dpdGNoJykgdHJpcFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRTd2l0Y2gnKSB0cmFuc2l0U3dpdGNoOiBEcm9wZG93bkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnYWlycG9ydFNlbGVjdCcpIGFpcnBvcnRTZWxlY3Q6IEFpcnBvcnRTZWxlY3RDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXJDb21ibycpIGRhdGVwaWNrZXJDb21ibzogRGF0ZXBpY2tlckNvbWJvQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyaXBUeXBlT25ld2F5JykgdHJpcFR5cGVPbmV3YXk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyaXBUeXBlUm91bmRUcmlwJykgdHJpcFR5cGVSb3VuZFRyaXA6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlRGlyZWN0T25seScpIHRyYW5zaXRUeXBlRGlyZWN0T25seTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNpdFR5cGVUcmFuc2l0JykgdHJhbnNpdFR5cGVUcmFuc2l0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdWJzaWR5RGlzY291bnQnKSBzdWJzaWR5RGlzY291bnQ6IFN1YnNpZHlEaXNjb3VudENvbXBvbmVudDtcblxuICBsYXRlc3RTZWFyY2hlc09yaWdpbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgZGlzcGxheVN1bW1hcnkgPSB0cnVlO1xuICBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgaW5ib3VuZExvd2VyTGltaXREYXRlOiBVdGNEYXRlO1xuICBjb250YWluZXJXaWR0aCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgbWF4aW1pemUgPSBmYWxzZTtcbiAgaXNOYXNHcm91cFZhbGlkID0gZmFsc2U7XG5cbiAgZ2V0IG91dGJvdW5kT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgb3V0Ym91bmRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMub3V0Ym91bmRPcGVuVmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd25zKCk7XG5cbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3V0Ym91bmRPcGVuVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm91dGJvdW5kT3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbmJvdW5kT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kT3BlblZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmluYm91bmRPcGVuVmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd25zKCk7XG5cbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmluYm91bmRPcGVuVGltZW91dCk7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblRpbWVvdXQ6IGFueTtcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHJlY29yZCBjb250YWluaW5nIGtleXMgd2l0aCBhbGwgYWlycG9ydCBjb2RlcyB3aXRoIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2YgYWlycG9ydCBjb2RlcyBjb25uZWN0ZWQgdG8gdGhlIGtleS5cbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRSZWxhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgb24gdGhlIGNsZWFyIGJ1dHRvbiBpbnNpZGUgdGhlIGFpcnBvcnQgc2VsZWN0IGlucHV0cy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbENsZWFyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgc3VidHJhY3QgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFN1YnRyYWN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBhZGQgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEFkZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsaXN0IG9mIGFpcnBvcnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JpZ2luIGRyb3Bkb3duLlxuICAgKiBJZiBub3QgaW5jbHVkZWQsIGFsbCBhaXJwb3J0cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWRPcmlnaW5BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGFpcnBvcnRzIHRoYXQgYXJlIHJlc3RyaWN0ZWQgZm9yIGRlc3RpbmF0aW9uIGFpcnBvcnRzLiBJdCB3aWxsIGRlZmF1bHQgdG8gYWlycG9ydHMgaWYgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCB0aGUgdXNlciBhbGxyZWFkeSBoYXMgc2VhcmggZm9yIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5TGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IHN3aXRjaCBVSSB0byBpbnRlcmNoYW5nZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSB1c2VTd2l0Y2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCBhcmUgY2xvc2UgdG8gdGhlIHVzZXIgc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlDbG9zZXN0QWlycG9ydHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBvcmlnaW4gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBvcmlnaW5BaXJwb3J0Q29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIGRlc3RpbmF0aW9uIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGRlc3RpbmF0aW9uQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0b3RhbCBtYXhpbXVtIGFtb3VudCBvZiBwYXNzZW5nZXJzIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgbWF4UGF4Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGRpZmZlcmVudCBwYXNzZW5nZXIgdHlwZXMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBwYXNzZW5nZXJzKCk6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLnBhc3NlbmdlcnNWYWx1ZTtcbiAgfVxuICBzZXQgcGFzc2VuZ2Vycyh2YWx1ZTogQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlcnNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGFzc2VuZ2Vyc0NoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIGFkdWx0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1pbkFkdWx0Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHJvdW5kIHRyaXAgc2VsZWN0aW9uIGluIHRoZSB0cmlwIHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHRyaXBTd2l0Y2hSb3VuZFRyaXBMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3Igb25lIHdheSBzZWxlY3Rpb24gaW4gdGhlIHRyaXAgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgdHJpcFN3aXRjaE9uZVdheUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBkaXJlY3Qgb25seSBzZWxlY3Rpb24gaW4gdGhlIHRyYW5zaXQgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0T25seUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBib3RoIGRpcmVjdCBhbmQgdHJhbnNpdCBzZWxlY3Rpb24gaW4gdGhlIHRyYW5zaXQgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0VHJhbnNpdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgbWluaW1pemVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZU9uTW9iaWxlPzogYm9vbGVhbjtcblxuIC8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJbmRpY2F0ZXMgaWYgdGhlIGVkaXQgc2VhcmNoIG9mIGFjY29yZGlvbiBzaG91bGQgYmUgZXhwZW5kZWQgb24gbW9iaWxlIHNjcmVlbiBzaXplcy5cbiAqL1xuICBASW5wdXQoKVxuICBnZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTtcbiAgfVxuICBzZXQgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IHRoYXQgaXMgZGlzcGF5ZWQgaWYgbWluaW1pemVPbk1vYmlsZSBpcyB0cnVlLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKiAxIHRyYXZlbGxlciwgcm91bmQgdHJpcCBhbmQgZGlyZWN0L3RyYW5zaXRcbiAgICovXG4gIEBJbnB1dCgpIGRlZmF1bHRTdW1tYXJ5U2VwYXJhdG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIEEgc2VwYXJhdG9yIGZvciB0aGUgZmlsdGVyIHN1bW1hcnkgaXMgYXJlIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBsYXN0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0aXRsZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RUaXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGFkdWx0cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdEFkdWx0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgY2hpbGRyZW4gcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RDaGlsZHJlbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgaW5mYW50cyBwYXNzZW5nZXIgdHlwZSBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdEluZmFudHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdG90YWwgbnVtYmVyIG9mIHNlbGVjdGVkIHBhc3NlbmdlcnMgZXhjZWVkcyB0aGUgZ3JvdXAgYm9va2luZyBsaW1pdFxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgYWxsIGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBhbGxBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBsYXRlc3Qgc2VhcmNoZXMgaW4gdGhlIGFpcnBvcnQgc2VsZWN0IGRyb3AgZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGxhdGVzdFNlYXJjaGVzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNsb3Nlc3QgYWlycG9ydHMgaW4gdGhlIGFpcnBvcnQgc2VsZWN0IGRyb3AgZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGNsb3Nlc3RBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGluIHRoZSBhaXJwb3J0IHNlbGVjdCwgaWYgdGhlXG4gICAqIHVzZXIgdHJpZXMgdG8gc2VsZWN0IGEgZGVzdGluYXRpb24gYWlycG9ydCB3aXRob3V0IHNlbGVjdGluZyBhbiBvcmlnaW4gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE9yaWdpbkZpcnN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBvcmlnaW4gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIG9yaWdpbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJPcmlnaW4gPSAnJztcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpbiBhaXJwb3J0IHNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIGdlb2xvY2F0aW9uTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiwgaW4gdGhlIGRyb3AgZG93biBsaXN0IGluIGFpcnBvcnQgc2VsZWN0IGlmIHVzZXIgaGFzIGRlbmllZCBnZW9sb2NhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGdlb2xvY2F0aW9uQmxvY2tlZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckRlc3RpbmF0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRoYXQgd2lsbCBhbGxvdyBhbHdheXMga2VlcGluZyB0aGUgc2VsZWN0ZWQgYWlycG9ydC5cbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgYWlycG9ydCB3aWxsIGJlIHNob3duIG9uY2UgdXNlciBjbGVhcnMgdGhlIHNlbGVjdGlvbiBhbmQgYmx1ci5cbiAgICovXG4gIEBJbnB1dCgpIGtlZXBTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRpdGxlIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBlZGl0IHNlYXJjaCBhY2NvcmRpb24uXG4gICAqL1xuICBASW5wdXQoKSBlZGl0U2VhcmNoVGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgdGhlIHBhcmVudCdzIGZvcm0gZ3JvdXAuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IGlzIHJlcXVpZXJlZCB0byBiZSBmaWxsZWQgaWYgbmFzRm9ybUNvbnRyb2xOYW1lIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sR3JvdXBCb29raW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVTdWJzaWR5RGlzY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1ha2UgbGF0ZXN0IHNlYXJjaGVzIGFuZCBnZW9sb2NhdGlvbiBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBvcmlnaW4gYWlycG9ydCBzZWxlY3Rvci5cbiAgICovXG4gIEBJbnB1dCgpIG92ZXJyaWRlT3JpZ2luPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoaXMgd2lsbCBtYWtlIHRoZSBmaWx0ZXIgZGlzcGxheSBzdWdnZXN0ZWQgYWlycG9ydHMgYmFzZWQgb24gZ2VvbG9jYXRpb24gYW5kIGxhdGVzdCBzZWFyY2hlcy5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVN1Z2dlc3Rpb25zPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBnZXQgY2xvc2VzdEFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBjbG9zZXN0QWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICBpZiAoIWFpcnBvcnRzIHx8IGFpcnBvcnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG5cbiAgICBpZiAodGhpcy5leGlzdHModGhpcy5vdmVycmlkZU9yaWdpbikpIHtcbiAgICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSBhaXJwb3J0c1swXS5jb2RlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgb25seSBkaXNwbGF5IGFpcnBvcnQgc2VsZWN0aW9uLiBXaGVuIGEgY2l0eSBwYWlyIGlzIHNlbGVjdGVkLCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyIHdpbGwgYmUgdmlzaWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXplPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbGwgYWlycG9ydHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZSBkcm9wZG93biBsaXN0cy5cbiAgICogSWYgZGlzcGxheUxhdGVzdFNlYXJjaGVzIGlzIHRydWUsIGl0IHdpbGwgdHJ5IHRvIGdldCB0aGUgbGF0ZXN0IHNlYXJjaGVzIGZyb20gdGhlIGFiYW5kb25lZCBiYXNrZXQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgYWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICB0aGlzLmFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcykpIHtcbiAgICAgIGNvbnN0IGFiYW5kb25lZEJhc2tldCA9IHRoaXMuYWJhbmRvbmVkQmFza2V0U2VydmljZS5nZXRBbGwoKTtcbiAgICAgIHRoaXMuc2V0TGF0ZXN0U2VhcmNoZXMoYWJhbmRvbmVkQmFza2V0LCB0aGlzLmFpcnBvcnRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgdGhlIHNlbGVjdGVkIHRyaXAgdHlwZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0cmlwVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZVZhbHVlO1xuICB9XG4gIHNldCB0cmlwVHlwZSh0cmlwVHlwZTogVHJpcFR5cGUpIHtcbiAgICBpZiAodHJpcFR5cGUgPT09IHRoaXMudHJpcFR5cGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpcFR5cGVWYWx1ZSA9IHRyaXBUeXBlO1xuICAgIHRoaXMudHJpcFR5cGVDaGFuZ2UuZW1pdCh0aGlzLnRyaXBUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpcmVjdE9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0T25seVZhbHVlO1xuICB9XG4gIHNldCBkaXJlY3RPbmx5KGRpcmVjdE9ubHk6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlyZWN0T25seSA9PT0gdGhpcy5kaXJlY3RPbmx5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpcmVjdE9ubHlWYWx1ZSA9IGRpcmVjdE9ubHk7XG4gICAgdGhpcy5kaXJlY3RPbmx5Q2hhbmdlLmVtaXQodGhpcy5kaXJlY3RPbmx5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxpbWl0IGZvciB3aGVuIHRoZSB0b3RhbCBhbW91bnQgb2YgcGFzc2VuZ2VycyBleGNlZWRzIHRvIGJlIGEgZ3JvdXAgYm9va2luZy5cbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwQm9va2luZ0xpbWl0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTdWJzaWR5IGRpc2NvdW50c1xuICAgKi9cbiAgQElucHV0KCkgc3Vic2lkeURpc2NvdW50czogQXJyYXk8U3Vic2lkeURpc2NvdW50TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgc3Vic2lkeSBkaXNjb3VudFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRTdWJzaWR5RGlzY291bnQ6IFN1YnNpZHlEaXNjb3VudE1vZGVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU3Vic2lkeSBkaXNjb3VudCBsYWJlbFxuICAgKi9cbiAgQElucHV0KCkgc3Vic2lkeURpc2NvdW50TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsUHJldmlvdXNNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIG5leHQgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbE5leHRNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICogQGRlc2NyaXB0aW9uXG4gICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJTZWxlY3RPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAqIEBkZXNjcmlwdGlvblxuICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBjaGFuZ2VzLlxuICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSBhIHBhc3NlbmdlciBzZWxlY3Rpb24gY2hhbmdlIGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXNzZW5nZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQYXNzZW5nZXJzTW9kZWw+PigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQE91dHB1dCgpIHRyaXBUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmlwVHlwZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgd2hldGhlciB0aGUgc2VsZWN0ZWQgdHJhbnNpdCB0eXBlIGlzIGRpcmVjdCBvbmx5IG9yIG5vdC5cbiAgICovXG4gIEBPdXRwdXQoKSBkaXJlY3RPbmx5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG5vIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGF0ZXMgaW4gdGhlIHBhc3QuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdFNlbGVjdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBvdXRib3VuZCBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgZGF0ZXBpY2tlcnMgaW4gYXZhaWxhYmlsaXR5IG1vZGUgd2hlcmUgYXZhaWxhYmxlIGRhdGVzIGNhbiBiZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJpbGl0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3Igb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJZiBzZXQsIEVuYWJsZXMgdGhlIHRpbWUgZHJvcGRvd24gc2VsZWN0b3IgYWxvbmdzaWRlIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdGltZSBkaXNwbGF5IGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVEaXNwbGF5Rm9ybWF0ID0gJ0hIOm1tJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tR0InO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0byByZW1vdmUgdGhlIHBhZGRpbmcgYW5kIG1hcmdpbnMgYXJvdW5kIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IG91dGJvdW5kIGRhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGluYm91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTaG93L0FkZCBkYXRlIHBpY2tlciBjb21ibyBpbnRvIHRoZSBmaWx0ZXIgaWYgc2V0IHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVEYXRlcGlja2VyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSBpY29uIGZvciBtaW5pbWl6aW5nIGZpbHRlci5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXppbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1heGltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWF4aW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGluZyB0cmFuc2l0IHR5cGUgd2hlbiBmaWx0ZXIgaXMgbWluaW1pemVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0T25seU1vYmlsZUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgJ29yJyBpbiB0aGUgc3VnZ2VzdGlvbmVkIGFpcnBvcnRzLlxuICAgKi9cbiAgQElucHV0KCkgb3JMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgZGVzdGluYXRpb25zIGRyb3Bkb3duIGxpc3Qgd2hlbiBvcmlnaW4gYWlycG9ydCBpcyBub3Qgc2V0LlxuICAgKi9cbiAgQElucHV0KCkgaW52YWxpZERlc3RpbmF0aW9uVGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSBwYXNzZW5nZXIgc2VsZWN0LCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIHRyaXAgc3dpdGNoLCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlVHJpcFN3aXRjaCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIHRyYW5zaXQgc3dpdGNoLCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlVHJhbnNpdFN3aXRjaCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGRhdGVwaWNrZXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGNhbGVuZGFyIGNoYW5nZXMgbW9udGguXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIGFjdGl2ZWx5IGNoYW5nZWQgdGhlIGRhdGUuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPbk5leHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZ2VvbG9jYXRpb24gb2YgdGhlIHVzZXIuIFdpbGwgYmUgZW1pdHRlZCBpZiAnZW5hYmxlU3VnZ2VzdGlvbnMnIGlzIHRydWUuXG4gICAqL1xuICBAT3V0cHV0KCkgcG9zaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdlb2xvY2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVuIHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgaW5mbyBidXR0b24gb24gdGhlIHN1YnNpZHkgZGlzY291bnQgaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzdWJzaWR5RGlzY291bnRJbmZvQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgobW9udGgsIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSB0cmlwVHlwZVZhbHVlOiBUcmlwVHlwZTtcbiAgcHJpdmF0ZSBkaXJlY3RPbmx5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjbG9zZXN0QWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSBvdXRib3VuZE9wZW5WYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIGluYm91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYXNzZW5nZXJzVmFsdWUgPSBuZXcgQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPigpO1xuICBwcml2YXRlIGZvY3VzQXN5bmNUaW1vdXQ6IGFueTtcbiAgcHJpdmF0ZSB0cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBTb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGFiYW5kb25lZEJhc2tldFNlcnZpY2U6IEFiYW5kb25lZEJhc2tldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZUhlbHBlcixcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCduYXMtZmlsdGVyJyk7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmFzRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNOYXNHcm91cFZhbGlkID0geDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgY29uc3QgZGlyZWN0T25seUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KTtcblxuICAgICAgaWYgKGRpcmVjdE9ubHlDb250cm9sKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHlDb250cm9sLnZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSk7XG5cbiAgICAgIGlmICh0cmlwVHlwZUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy50cmlwVHlwZSA9IHRyaXBUeXBlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbmJvdW5kRGlzYWJsZWQgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWUgPT09IFRyaXBUeXBlLm9uZVdheTtcblxuICAgICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kKSB7XG4gICAgICAgICAgY29uc3QgaW5ib3VuZENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kKTtcblxuICAgICAgICAgIGlmIChpbmJvdW5kQ29udHJvbCAmJiB0aGlzLmluYm91bmREaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5ib3VuZENvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaXBUeXBlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogVHJpcFR5cGUpID0+IHtcbiAgICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcblxuICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dCgodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGgpO1xuXG4gICAgd2luZG93Lm9ucmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aCk7XG4gICAgfTtcbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50SW5mb0NsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2lkeURpc2NvdW50SW5mb0NsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50U2VsZWN0Q2hhbmdlKG1vZGVsOiBTdWJzaWR5RGlzY291bnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uYXNGb3JtR3JvdXAgfHwgIXRoaXMubmFzRm9ybUNvbnRyb2xOYW1lU3Vic2lkeURpc2NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2lkeURpc2NvdW50Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudCk7XG4gICAgc3Vic2lkeURpc2NvdW50Q29udHJvbC5wYXRjaFZhbHVlKG1vZGVsKTtcbiAgfVxuXG4gIGdldENsb3Nlc3RBaXJwb3J0cyhwb3NpdGlvbjogR2VvbG9jYXRpb25Qb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChwb3NpdGlvbik7XG4gIH1cblxuICBnZXRGaWx0ZXJDbGFzcyhlbGVtZW50Pzogc3RyaW5nLCBtb2RpZmllcnNJbnB1dD86IGFueSk6IENsYXNzTW9kZWwge1xuICAgIGxldCBtb2RpZmllcnMgPSBtb2RpZmllcnNJbnB1dCB8fCBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgaWYgKHR5cGVvZiBtb2RpZmllcnNJbnB1dCA9PT0gJ3N0cmluZycgfHwgbW9kaWZpZXJzSW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIG1vZGlmaWVycyA9IFttb2RpZmllcnNJbnB1dF07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhzID0gW107XG5cbiAgICBpZiAodGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpKSB7XG4gICAgICB3aWR0aHMucHVzaCgnbWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ2xnJyk7XG4gICAgfVxuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIHJldHVybiB0aGlzLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBnZXRBaXJwb3J0U2VsZWN0Q2xhc3MoKTogQ2xhc3NNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoXG4gICAgICAnYWlycG9ydC1zZWxlY3QnLFxuICAgICAgW1xuICAgICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoRGVza3RvcCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpICYmICdsZycsXG4gICAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgICB0aGlzLmV4aXN0cyh0aGlzLmVuYWJsZURhdGVwaWNrZXJzKSAmJiAnbm8tYm9yZGVyJ1xuICAgICAgXSk7XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucygpOiBBcnJheTxBaXJwb3J0TW9kZWw+IHtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmZyb20obmV3IFNldChbXG4gICAgICAuLi50aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID8gdGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbi5maWx0ZXIoeCA9PiB4LmNvZGUgIT09IHRoaXMub3JpZ2luQWlycG9ydENvZGUpIDogW10sXG4gICAgICAuLi50aGlzLmNsb3Nlc3RBaXJwb3J0cyA/IHRoaXMuY2xvc2VzdEFpcnBvcnRzLmZpbHRlcih4ID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSkgOiBbXVxuICAgIF0pKTtcblxuICAgIHJldHVybiBzdWdnZXN0aW9ucy5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIGdldERhdGVQaWNrZXJzQ2xhc3MoKTogQ2xhc3NNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyQ2xhc3MoJ2RhdGUtY29tYm8nLCBbXG4gICAgICB0aGlzLmV4aXN0cyh0aGlzLm1pbmltaXplKSAmJiAnbWluaW1pemVkJyxcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSA+IDUwMCAmJiAnc2lkZS1ieS1zaWRlJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAodHlwZW9mIG1vZGlmaWVyc0lucHV0ID09PSAnc3RyaW5nJyB8fCBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJ1xuICAgIF07XG5cbiAgICBtb2RpZmllcnMgPSBbLi4ubW9kaWZpZXJzLCAuLi53aWR0aHNdO1xuXG4gICAgY29uc3QgdHJhdmVsRGV0YWlsc0Jhc2UgPSBuZXcgTmFzQ29tcG9uZW50QmFzZSgndHJhdmVsLWRldGFpbHMnKTtcbiAgICByZXR1cm4gdHJhdmVsRGV0YWlsc0Jhc2UuZ2V0Q2xhc3MoZWxlbWVudCwgbW9kaWZpZXJzKTtcbiAgfVxuXG4gIG9uSW5ib3VuZE1vbnRoQ2hhbmdlKG1vbnRoOiBVdGNEYXRlKTogdm9pZCB7IHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpOyB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQgeyB0aGlzLm91dGJvdW5kTW9udGhDaGFuZ2UuZW1pdChtb250aCk7IH1cblxuICBvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uUHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdFByZXZpb3VzQ29udHJvbCgpO1xuICAgIH1cbiAgfVxuXG4gIHBhc3NlbmdlcktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgdGhpcy5pc1RhYmxldERpc3BsYXkoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mb2N1c09uQWlycG9ydFNlbGVjdEJhY2t3YXJkcygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdWJzaWR5RGlzY291bnRzICYmIHRoaXMuc3Vic2lkeURpc2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNpZHlEaXNjb3VudC5pbmZvQnV0dG9uLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3BlbihmYWxzZSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25UcmlwU3dpdGNoS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJpcFR5cGVPbmV3YXkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJpcFR5cGVPbmV3YXkubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpIHx8ICF0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzQ29udHJvbCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmlwU3dpdGNoLm9wZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zaXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlRGlyZWN0T25seS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKDxhbnk+dGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4oIXRoaXMudHJhbnNpdFN3aXRjaC5vcGVuKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2lkeURpc2NvdW50cyAmJiB0aGlzLnN1YnNpZHlEaXNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLnN1YnNpZHlEaXNjb3VudC5pbmZvQnV0dG9uLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3BlbihmYWxzZSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblN1YnNpZHlEaXNjb3VudEluZm9CdXR0b25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJhbnNpdFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKDxhbnk+dGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzQXN5bmMocmVmRWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQXN5bmNUaW1vdXQpO1xuXG4gICAgdGhpcy5mb2N1c0FzeW5jVGltb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHJlZkVsZW1lbnQpKTtcbiAgfVxuXG4gIG9uRGF0ZXBpY2tlckZvY3VzT25QcmV2aW91cyhldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5mb2N1c09uQWlycG9ydFNlbGVjdEJhY2t3YXJkcygpO1xuICB9XG5cbiAgc2VsZWN0UHJldmlvdXNDb250cm9sKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT25seSkge1xuICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluYm91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuYWlycG9ydFNlbGVjdC5jb21ibykpIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uRGVzdGluYXRpb25PcGVuKHRydWUpO1xuICAgICAgICBpZiAoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pLmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgICAgaWYgKCg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pLmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgb25Gb2N1c09uTmV4dENoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSAmJiB0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTW9iaWxlRGlzcGxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aE1vYmlsZSh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgaXNUYWJsZXREaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBvbk9yaWdpbk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWlycG9ydFZhbHVlcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5TbmFwc2hvdCA9IHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW47XG4gICAgY29uc3QgZGVzdGluYXRpb25TbmFwc2hvdCA9IHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbjtcbiAgICBpZiAoKG9yaWdpblNuYXBzaG90ICYmIGRlc3RpbmF0aW9uU25hcHNob3QgJiYgb3JpZ2luU25hcHNob3QuY29kZSAmJiBvcmlnaW5TbmFwc2hvdC5jb2RlLmxlbmd0aFxuICAgICAgJiYgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlICYmIGRlc3RpbmF0aW9uU25hcHNob3QuY29kZS5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTWF4aW1pemUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1heGltaXplID0gdGhpcy52YWxpZGF0ZUFpcnBvcnRWYWx1ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0ICYmICF0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuICAgIHRoaXMuZGVzdGluYXRpb25PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gIH1cblxuICBvblBhc3NlbmdlclNlbGVjdE9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gb3BlbjtcbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0Lm51bWJlckZpZWxkcy5maXJzdCkge1xuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0Lm51bWJlckZpZWxkcy5maXJzdC5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmlwU3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJpcFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBvcGVuO1xuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaEZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gb3BlbjtcbiAgICB9XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25PcmlnaW5DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5vcmlnaW5DaGFuZ2UuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkT3JpZ2luQWlycG9ydChhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIWFpcnBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uT3JpZ2luQ2hhbmdlKGFpcnBvcnQpO1xuXG4gICAgaWYgKHRoaXMub3JpZ2luQWlycG9ydENvZGUgPT09IGFpcnBvcnQuY29kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkRlc3RpbmF0aW9uQ2hhbmdlKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdGluYXRpb25DaGFuZ2UuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1pbmltaXplID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuZGF0ZXBpY2tlckNvbWJvLmRhdGVwaWNrZXJPdXRib3VuZCkuaW5wdXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0RGlzcGxheSgpICYmIHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG5cbiAgICAgICAgdGhpcy5vblBhc3NlbmdlclNlbGVjdE9wZW4odHJ1ZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UmVmID0gdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoY3VycmVudEVsZW1lbnRSZWYpKTtcblxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcblxuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25OYXRpdmVFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIG9uVHJpcFR5cGVDaGFuZ2UodHJpcFR5cGU6IFRyaXBUeXBlKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmlwVHlwZSA9IHRyaXBUeXBlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpIHtcbiAgICAgIGNvbnN0IHRyaXBTd2l0Y2hDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpO1xuICAgICAgdHJpcFN3aXRjaENvbnRyb2wucGF0Y2hWYWx1ZSh0cmlwVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0Q2hhbmdlKGRpcmVjdE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5O1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSk7XG4gICAgICB0cmlwVHlwZUNvbnRyb2wucGF0Y2hWYWx1ZShkaXJlY3RPbmx5KTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmF2ZWxEZXRhaWxzVHJpcFN3aXRjaEljb25DbGFzcyhtb2RpZmllcnM/OiBhbnkpOiBBcnJheTxDbGFzc01vZGVsPiB7XG4gICAgY29uc3QgaWNvbk1lZGl1bUJhc2UgPSBuZXcgTmFzQ29tcG9uZW50QmFzZSgnaWNvbi1tZWRpdW0nKTtcblxuICAgIHJldHVybiBbXG4gICAgICBpY29uTWVkaXVtQmFzZS5nZXRDbGFzcygnJywgbW9kaWZpZXJzKSxcbiAgICAgIHRoaXMuZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdpY29uJylcbiAgICBdO1xuICB9XG5cbiAgZ2V0VHJpcFN3aXRjaExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJpcFR5cGUgPT09IFRyaXBUeXBlLnR3b1dheVJldHVybiA/IHRoaXMudHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsIDogdGhpcy50cmlwU3dpdGNoT25lV2F5TGFiZWw7XG4gIH1cblxuICBnZXRUcmFuc2l0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RPbmx5ID8gdGhpcy5kaXJlY3RPbmx5TGFiZWwgOiB0aGlzLmRpcmVjdFRyYW5zaXRMYWJlbDtcbiAgfVxuXG4gIG9uQWNjb3JkaW9uVG9nZ2xlQ2hhbmdlKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5U3VtbWFyeSA9ICFleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXNzZW5nZXJTZWxlY3RMYWJlbH0ke3RoaXMuZGVmYXVsdFN1bW1hcnlTZXBhcmF0b3J9YCArXG4gICAgICBgJHt0aGlzLmdldFRyaXBTd2l0Y2hMYWJlbCgpLnRvTG93ZXJDYXNlKCl9JHt0aGlzLmxhc3RTdW1tYXJ5U2VwYXJhdG9yfSR7dGhpcy5nZXRUcmFuc2l0TGFiZWwoKS50b0xvd2VyQ2FzZSgpfWA7XG4gIH1cblxuICBzaG91bGRNYXhpbWl6ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdFxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlXG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25cbiAgICAgICYmIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbi5jb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAodGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gfHwgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbikpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltaXplO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1heGltaXplKSB7XG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTmFzR3JvdXBWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luKS5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQ6IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4sIGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KTogdm9pZCB7XG4gICAgaWYgKCFhYmFuZG9uZWRCYXNrZXQgfHwgIWFpcnBvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcXVlID0gbmV3IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhYmFuZG9uZWRCYXNrZXQpIHtcbiAgICAgIGlmICghdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCh4ID0+IHgub3JpZ2luQ29kZSk7XG4gICAgY29uc3QgZGVzdGluYXRpb25Db2RlcyA9IHVuaXF1ZS5tYXAoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc09yaWdpbiA9IGFpcnBvcnRzLmZpbHRlcihhaXJwb3J0ID0+IHtcbiAgICAgIHJldHVybiB1bmlxdWUuc29tZSh4ID0+IHgub3JpZ2luQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKGFpcnBvcnQgPT4ge1xuICAgICAgcmV0dXJuIHVuaXF1ZS5zb21lKHggPT4geC5kZXN0aW5hdGlvbkNvZGUudG9Mb3dlckNhc2UoKSA9PT0gYWlycG9ydC5jb2RlLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29kZSA9ICdjb2RlJztcbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID0gdGhpcy5zb3J0U2VydmljZS5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNPcmlnaW4sIG9yaWdpbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJiB0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5bMF0uY29kZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|