@myclub_se/data-access 2.15.1 → 3.0.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/{esm2020 → esm2022}/index.mjs +2 -1
- package/{esm2020 → esm2022}/lib/api-models/api-bookable-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-application-time.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot-session.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar.mjs +1 -1
- package/esm2022/lib/api-models/api-feature-flags.mjs +2 -0
- package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +11 -0
- package/esm2022/lib/api-models/index.mjs +57 -0
- package/esm2022/lib/authentication/authentication.interceptor.mjs +101 -0
- package/esm2022/lib/authentication/authentication.service.mjs +109 -0
- package/esm2022/lib/authentication/guards/authenticated.guard.mjs +38 -0
- package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +31 -0
- package/esm2022/lib/data-access.module.mjs +39 -0
- package/esm2022/lib/maintenance/maintenance.interceptor.mjs +30 -0
- package/esm2022/lib/models/activity-extra-member.mjs +19 -0
- package/esm2022/lib/models/activity-invite.mjs +35 -0
- package/esm2022/lib/models/activity-location-group.mjs +27 -0
- package/esm2022/lib/models/activity-location-part.mjs +16 -0
- package/esm2022/lib/models/activity-location-tag.mjs +22 -0
- package/esm2022/lib/models/activity-location.mjs +46 -0
- package/esm2022/lib/models/activity-participant.mjs +19 -0
- package/esm2022/lib/models/activity-settings.mjs +27 -0
- package/esm2022/lib/models/activity-type.mjs +34 -0
- package/esm2022/lib/models/activity.mjs +137 -0
- package/esm2022/lib/models/auth/auth-member.mjs +13 -0
- package/{esm2020 → esm2022}/lib/models/auth/auth-section.mjs +3 -1
- package/{esm2020 → esm2022}/lib/models/auth/auth-team-section.mjs +3 -1
- package/esm2022/lib/models/auth/auth-team.mjs +13 -0
- package/esm2022/lib/models/auth/auth.mjs +25 -0
- package/{esm2020 → esm2022}/lib/models/authentication.mjs +3 -1
- package/esm2022/lib/models/bookable-group.mjs +27 -0
- package/esm2022/lib/models/bookable-item.mjs +49 -0
- package/esm2022/lib/models/bookable-part.mjs +16 -0
- package/esm2022/lib/models/bookable-tag.mjs +22 -0
- package/esm2022/lib/models/booking-calendar-application-time.mjs +86 -0
- package/esm2022/lib/models/booking-calendar-slot-session.mjs +87 -0
- package/esm2022/lib/models/booking-calendar-slot.mjs +79 -0
- package/esm2022/lib/models/booking-calendar.mjs +74 -0
- package/esm2022/lib/models/booking-settings.mjs +29 -0
- package/esm2022/lib/models/booking-slot-filter.mjs +72 -0
- package/esm2022/lib/models/calendar-event.mjs +35 -0
- package/esm2022/lib/models/calendar.mjs +15 -0
- package/esm2022/lib/models/card/card-deal.mjs +15 -0
- package/esm2022/lib/models/card/card-logo-urls.mjs +21 -0
- package/esm2022/lib/models/card/card-logo.mjs +11 -0
- package/esm2022/lib/models/card/card-member-ticket.mjs +17 -0
- package/esm2022/lib/models/card/card-theme.mjs +15 -0
- package/esm2022/lib/models/card/card-ticket-location.mjs +13 -0
- package/esm2022/lib/models/card/card-ticket.mjs +37 -0
- package/{esm2020 → esm2022}/lib/models/card/card.mjs +9 -1
- package/esm2022/lib/models/card/home-team.mjs +11 -0
- package/esm2022/lib/models/card/member-card.mjs +23 -0
- package/esm2022/lib/models/card/search-member-card.mjs +13 -0
- package/esm2022/lib/models/club-image.mjs +31 -0
- package/{esm2020 → esm2022}/lib/models/club-section.mjs +3 -1
- package/{esm2020 → esm2022}/lib/models/club.mjs +3 -1
- package/esm2022/lib/models/collection.mjs +19 -0
- package/esm2022/lib/models/contact.mjs +61 -0
- package/esm2022/lib/models/directory.mjs +38 -0
- package/esm2022/lib/models/email.mjs +11 -0
- package/esm2022/lib/models/event.mjs +47 -0
- package/{esm2020 → esm2022}/lib/models/external-link.mjs +3 -1
- package/esm2022/lib/models/feature-flags.mjs +14 -0
- package/esm2022/lib/models/file-object.mjs +23 -0
- package/esm2022/lib/models/general-image.mjs +11 -0
- package/esm2022/lib/models/group-role.mjs +17 -0
- package/esm2022/lib/models/image-urls.mjs +15 -0
- package/esm2022/lib/models/index.mjs +64 -0
- package/esm2022/lib/models/invoice/member-fee.mjs +13 -0
- package/esm2022/lib/models/invoice/member-invoice-row.mjs +31 -0
- package/esm2022/lib/models/invoice/member-invoice.mjs +45 -0
- package/esm2022/lib/models/invoice/payment-attempt.mjs +21 -0
- package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +27 -0
- package/esm2022/lib/models/invoice/payment-types/giro.mjs +17 -0
- package/esm2022/lib/models/invoice/payment-types/swish.mjs +31 -0
- package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +19 -0
- package/esm2022/lib/models/invoice/search-member-invoice.mjs +26 -0
- package/{esm2020 → esm2022}/lib/models/invoice/swish-qr-code.mjs +2 -1
- package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +13 -0
- package/esm2022/lib/models/member/member-attribute.mjs +44 -0
- package/esm2022/lib/models/member/member-contact.mjs +26 -0
- package/esm2022/lib/models/member/member-function.mjs +24 -0
- package/esm2022/lib/models/member/member-validation-settings.mjs +21 -0
- package/esm2022/lib/models/member/member.mjs +101 -0
- package/{esm2020 → esm2022}/lib/models/member/other-member-field.mjs +4 -1
- package/esm2022/lib/models/member/other-member.mjs +21 -0
- package/esm2022/lib/models/member/search-member.mjs +35 -0
- package/esm2022/lib/models/member-activity-invite.mjs +42 -0
- package/esm2022/lib/models/member-public-form-field-option.mjs +13 -0
- package/esm2022/lib/models/member-public-form-field.mjs +27 -0
- package/esm2022/lib/models/member-public-form.mjs +55 -0
- package/esm2022/lib/models/member-team-through.mjs +23 -0
- package/esm2022/lib/models/member-team.mjs +21 -0
- package/esm2022/lib/models/member-type.mjs +11 -0
- package/esm2022/lib/models/news.mjs +66 -0
- package/esm2022/lib/models/open-activity.mjs +117 -0
- package/esm2022/lib/models/optional-fee.mjs +16 -0
- package/esm2022/lib/models/overbooked-bookable-item.mjs +15 -0
- package/esm2022/lib/models/overbooked-location.mjs +15 -0
- package/esm2022/lib/models/partner.mjs +13 -0
- package/esm2022/lib/models/public-authentication.mjs +9 -0
- package/esm2022/lib/models/registration-qr-code.mjs +19 -0
- package/esm2022/lib/models/search-club.mjs +23 -0
- package/esm2022/lib/models/search-team.mjs +24 -0
- package/{esm2020 → esm2022}/lib/models/section.mjs +3 -1
- package/esm2022/lib/models/token.mjs +11 -0
- package/esm2022/lib/models/user-notification.mjs +21 -0
- package/esm2022/lib/models/user.mjs +41 -0
- package/esm2022/lib/services/activity.service.mjs +508 -0
- package/esm2022/lib/services/api.service.mjs +108 -0
- package/esm2022/lib/services/auth.service.mjs +62 -0
- package/esm2022/lib/services/bookable.service.mjs +279 -0
- package/esm2022/lib/services/booking-calendar.service.mjs +736 -0
- package/esm2022/lib/services/club.service.mjs +35 -0
- package/esm2022/lib/services/constant.service.mjs +97 -0
- package/esm2022/lib/services/email.service.mjs +28 -0
- package/esm2022/lib/services/external-link.service.mjs +25 -0
- package/esm2022/lib/services/factories/activity-settings-factory.mjs +3 -0
- package/esm2022/lib/services/factories/bookable-item-factory.mjs +5 -0
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-application-time-factory.mjs +2 -2
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-factory.mjs +2 -2
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-session-factory.mjs +2 -2
- package/esm2022/lib/services/factories/feature-flags-factory.mjs +5 -0
- package/esm2022/lib/services/factories/index.mjs +87 -0
- package/esm2022/lib/services/factories/member-public-form-factory.mjs +26 -0
- package/esm2022/lib/services/factories/payment-attempt-factory.mjs +23 -0
- package/esm2022/lib/services/feature-flags.service.mjs +44 -0
- package/esm2022/lib/services/file.service.mjs +65 -0
- package/esm2022/lib/services/index.mjs +24 -0
- package/esm2022/lib/services/invoice/invoice.service.mjs +42 -0
- package/esm2022/lib/services/invoice/payment-attempt.service.mjs +52 -0
- package/esm2022/lib/services/maintenance-mode.service.mjs +20 -0
- package/esm2022/lib/services/member-card.service.mjs +104 -0
- package/esm2022/lib/services/member-public-form.service.mjs +33 -0
- package/esm2022/lib/services/member.service.mjs +85 -0
- package/esm2022/lib/services/news.service.mjs +94 -0
- package/esm2022/lib/services/registration-qr-code.service.mjs +37 -0
- package/esm2022/lib/services/section.service.mjs +24 -0
- package/esm2022/lib/services/storage.service.mjs +44 -0
- package/esm2022/lib/services/team.service.mjs +89 -0
- package/esm2022/lib/services/token.service.mjs +58 -0
- package/esm2022/lib/services/user-notification.service.mjs +24 -0
- package/esm2022/lib/services/user.service.mjs +69 -0
- package/esm2022/lib/store/actions/activity.actions.mjs +177 -0
- package/esm2022/lib/store/actions/auth.actions.mjs +45 -0
- package/esm2022/lib/store/actions/booking.actions.mjs +187 -0
- package/esm2022/lib/store/actions/calendar.actions.mjs +77 -0
- package/esm2022/lib/store/actions/club-info.actions.mjs +23 -0
- package/esm2022/lib/store/actions/constant.actions.mjs +124 -0
- package/esm2022/lib/store/actions/email.actions.mjs +19 -0
- package/esm2022/lib/store/actions/external-link.actions.mjs +11 -0
- package/esm2022/lib/store/actions/file.actions.mjs +41 -0
- package/esm2022/lib/store/actions/index.mjs +19 -0
- package/esm2022/lib/store/actions/invoice.actions.mjs +73 -0
- package/esm2022/lib/store/actions/member-card.actions.mjs +71 -0
- package/esm2022/lib/store/actions/member.actions.mjs +65 -0
- package/esm2022/lib/store/actions/news.actions.mjs +47 -0
- package/esm2022/lib/store/actions/public-form.actions.mjs +17 -0
- package/esm2022/lib/store/actions/store.actions.mjs +7 -0
- package/esm2022/lib/store/actions/team.actions.mjs +83 -0
- package/esm2022/lib/store/actions/token.actions.mjs +53 -0
- package/esm2022/lib/store/actions/user.actions.mjs +49 -0
- package/esm2022/lib/store/effects/activity.effects.mjs +211 -0
- package/esm2022/lib/store/effects/auth.effects.mjs +96 -0
- package/esm2022/lib/store/effects/booking.effects.mjs +102 -0
- package/esm2022/lib/store/effects/calendar.effects.mjs +84 -0
- package/esm2022/lib/store/effects/club-info.effects.mjs +26 -0
- package/esm2022/lib/store/effects/constant.effects.mjs +69 -0
- package/esm2022/lib/store/effects/data-access.effects.mjs +37 -0
- package/esm2022/lib/store/effects/email.effects.mjs +27 -0
- package/esm2022/lib/store/effects/external-link.effects.mjs +20 -0
- package/esm2022/lib/store/effects/file.effects.mjs +149 -0
- package/esm2022/lib/store/effects/index.mjs +2 -0
- package/esm2022/lib/store/effects/invoice.effects.mjs +72 -0
- package/esm2022/lib/store/effects/member-card.effects.mjs +80 -0
- package/esm2022/lib/store/effects/member.effects.mjs +75 -0
- package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +60 -0
- package/esm2022/lib/store/effects/news.effects.mjs +82 -0
- package/esm2022/lib/store/effects/public-form.effects.mjs +33 -0
- package/esm2022/lib/store/effects/team.effects.mjs +82 -0
- package/esm2022/lib/store/effects/token.effects.mjs +81 -0
- package/esm2022/lib/store/effects/user.effects.mjs +59 -0
- package/esm2022/lib/store/index.mjs +8 -0
- package/esm2022/lib/store/interfaces/activate-card-ticket.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/activate-user.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-activity-locations.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-activity-types.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-open-activity-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-public-open-activity-results.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/directory-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/email-settings.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/index.mjs +20 -0
- package/esm2022/lib/store/interfaces/list-result-interface.mjs +4 -0
- package/esm2022/lib/store/interfaces/location.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-calendar-event-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-card-deals.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-card-tickets.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/public-activate-card-ticket.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/remove-member-auth.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/remove-team-auth.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/retrieve-result.interface.mjs +4 -0
- package/esm2022/lib/store/interfaces/team-activity.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/team-calendar-event-result.interface.mjs +2 -0
- package/esm2022/lib/store/operators/ensure-activity.mjs +8 -0
- package/esm2022/lib/store/operators/ensure-auths.mjs +18 -0
- package/esm2022/lib/store/operators/ensure-calendar-events-loading-done.mjs +23 -0
- package/esm2022/lib/store/operators/ensure-constants.mjs +21 -0
- package/esm2022/lib/store/operators/ensure-current-auth.mjs +17 -0
- package/esm2022/lib/store/operators/ensure-current-user.mjs +16 -0
- package/esm2022/lib/store/operators/ensure-loading-done.mjs +24 -0
- package/esm2022/lib/store/operators/ensure-open-activities-loading-done.mjs +5 -0
- package/esm2022/lib/store/operators/ensure-public-open-activities-loading-done.mjs +5 -0
- package/esm2022/lib/store/operators/ensure-updated-data.mjs +10 -0
- package/esm2022/lib/store/operators/index.mjs +11 -0
- package/esm2022/lib/store/reducers/auth.reducer.mjs +52 -0
- package/esm2022/lib/store/reducers/booking.reducers.mjs +79 -0
- package/esm2022/lib/store/reducers/calendar.reducer.mjs +449 -0
- package/esm2022/lib/store/reducers/club-info.reducer.mjs +9 -0
- package/esm2022/lib/store/reducers/constant.reducer.mjs +181 -0
- package/esm2022/lib/store/reducers/data-access.reducer.mjs +37 -0
- package/esm2022/lib/store/reducers/email.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/external-link.reducer.mjs +6 -0
- package/esm2022/lib/store/reducers/file.reducer.mjs +118 -0
- package/esm2022/lib/store/reducers/index.mjs +2 -0
- package/esm2022/lib/store/reducers/invoice.reducer.mjs +6 -0
- package/esm2022/lib/store/reducers/member-card.reducer.mjs +33 -0
- package/esm2022/lib/store/reducers/member.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/news.reducer.mjs +96 -0
- package/esm2022/lib/store/reducers/public-form.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/public.reducer.mjs +109 -0
- package/esm2022/lib/store/reducers/reducer-helpers.mjs +61 -0
- package/esm2022/lib/store/reducers/team.reducer.mjs +77 -0
- package/esm2022/lib/store/reducers/token.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/user.reducer.mjs +18 -0
- package/esm2022/lib/store/selectors/auth.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/booking.selectors.mjs +15 -0
- package/esm2022/lib/store/selectors/calendar.selectors.mjs +18 -0
- package/esm2022/lib/store/selectors/club-info.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/constant.selectors.mjs +38 -0
- package/esm2022/lib/store/selectors/email.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/external-links.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/file.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/index.mjs +18 -0
- package/esm2022/lib/store/selectors/invoice.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/member-card.selectors.mjs +8 -0
- package/esm2022/lib/store/selectors/member.selectors.mjs +10 -0
- package/esm2022/lib/store/selectors/news.selectors.mjs +8 -0
- package/esm2022/lib/store/selectors/public-form.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/public.selectors.mjs +18 -0
- package/esm2022/lib/store/selectors/team.selectors.mjs +12 -0
- package/esm2022/lib/store/selectors/token.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/user.selectors.mjs +6 -0
- package/esm2022/lib/store/state/auth.state.mjs +5 -0
- package/esm2022/lib/store/state/booking.state.mjs +16 -0
- package/esm2022/lib/store/state/calendar.state.mjs +17 -0
- package/esm2022/lib/store/state/club-info.state.mjs +4 -0
- package/esm2022/lib/store/state/constant.state.mjs +21 -0
- package/esm2022/lib/store/state/data-access.state.mjs +2 -0
- package/esm2022/lib/store/state/email.state.mjs +7 -0
- package/esm2022/lib/store/state/external-link.state.mjs +4 -0
- package/esm2022/lib/store/state/file.state.mjs +5 -0
- package/esm2022/lib/store/state/index.mjs +19 -0
- package/esm2022/lib/store/state/invoice.state.mjs +5 -0
- package/esm2022/lib/store/state/member-card.state.mjs +7 -0
- package/esm2022/lib/store/state/member.state.mjs +10 -0
- package/esm2022/lib/store/state/news.state.mjs +7 -0
- package/esm2022/lib/store/state/public-form.state.mjs +5 -0
- package/esm2022/lib/store/state/public.state.mjs +17 -0
- package/esm2022/lib/store/state/team.state.mjs +11 -0
- package/esm2022/lib/store/state/token.state.mjs +5 -0
- package/esm2022/lib/store/state/user.state.mjs +5 -0
- package/fesm2022/myclub_se-data-access.mjs +10080 -0
- package/fesm2022/myclub_se-data-access.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/api-models/api-bookable-item.d.ts +2 -0
- package/lib/api-models/api-booking-calendar-application-time.d.ts +3 -0
- package/lib/api-models/api-booking-calendar-slot-session.d.ts +3 -0
- package/lib/api-models/api-booking-calendar.d.ts +2 -0
- package/lib/api-models/api-feature-flags.d.ts +5 -0
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.d.ts +1 -1
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.d.ts +1 -1
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.d.ts +1 -1
- package/lib/api-models/index.d.ts +1 -0
- package/lib/authentication/authentication.interceptor.d.ts +12 -7
- package/lib/data-access.module.d.ts +3 -1
- package/lib/models/activity-settings.d.ts +3 -1
- package/lib/models/auth/auth.d.ts +3 -2
- package/lib/models/bookable-item.d.ts +6 -1
- package/lib/models/booking-calendar-application-time.d.ts +8 -3
- package/lib/models/booking-calendar-slot-session.d.ts +10 -5
- package/lib/models/booking-calendar-slot.d.ts +7 -6
- package/lib/models/booking-calendar.d.ts +4 -1
- package/lib/models/booking-settings.d.ts +5 -4
- package/lib/models/booking-slot-filter.d.ts +17 -0
- package/lib/models/directory.d.ts +1 -0
- package/lib/models/feature-flags.d.ts +7 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.d.ts +1 -1
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.d.ts +1 -1
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.d.ts +1 -1
- package/lib/services/activity.service.d.ts +55 -52
- package/lib/services/bookable.service.d.ts +12 -9
- package/lib/services/booking-calendar.service.d.ts +6 -23
- package/lib/services/constant.service.d.ts +5 -11
- package/lib/services/email.service.d.ts +0 -9
- package/lib/services/factories/feature-flags-factory.d.ts +3 -0
- package/lib/services/factories/index.d.ts +1 -0
- package/lib/services/feature-flags.service.d.ts +13 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/member.service.d.ts +7 -3
- package/lib/services/storage.service.d.ts +20 -0
- package/lib/store/actions/activity.actions.d.ts +641 -0
- package/lib/store/actions/auth.actions.d.ts +83 -0
- package/lib/store/actions/booking.actions.d.ts +652 -0
- package/lib/store/actions/calendar.actions.d.ts +381 -0
- package/lib/store/actions/club-info.actions.d.ts +54 -0
- package/lib/store/actions/constant.actions.d.ts +249 -0
- package/lib/store/actions/email.actions.d.ts +57 -0
- package/lib/store/actions/external-link.actions.d.ts +22 -0
- package/lib/store/actions/file.actions.d.ts +169 -0
- package/lib/store/actions/index.d.ts +18 -0
- package/lib/store/actions/invoice.actions.d.ts +298 -0
- package/lib/store/actions/member-card.actions.d.ts +251 -0
- package/lib/store/actions/member.actions.d.ts +212 -0
- package/lib/store/actions/news.actions.d.ts +164 -0
- package/lib/store/actions/public-form.actions.d.ts +46 -0
- package/lib/store/actions/store.actions.d.ts +4 -0
- package/lib/store/actions/team.actions.d.ts +326 -0
- package/lib/store/actions/token.actions.d.ts +151 -0
- package/lib/store/actions/user.actions.d.ts +102 -0
- package/lib/store/effects/activity.effects.d.ts +152 -0
- package/lib/store/effects/auth.effects.d.ts +35 -0
- package/lib/store/effects/booking.effects.d.ts +196 -0
- package/lib/store/effects/calendar.effects.d.ts +129 -0
- package/lib/store/effects/club-info.effects.d.ts +24 -0
- package/lib/store/effects/constant.effects.d.ts +96 -0
- package/lib/store/effects/data-access.effects.d.ts +18 -0
- package/lib/store/effects/email.effects.d.ts +14 -0
- package/lib/store/effects/external-link.effects.d.ts +14 -0
- package/lib/store/effects/file.effects.d.ts +55 -0
- package/lib/store/effects/index.d.ts +1 -0
- package/lib/store/effects/invoice.effects.d.ts +80 -0
- package/lib/store/effects/member-card.effects.d.ts +69 -0
- package/lib/store/effects/member.effects.d.ts +58 -0
- package/lib/store/effects/mixins/extra-members-mixin.d.ts +10 -0
- package/lib/store/effects/news.effects.d.ts +49 -0
- package/lib/store/effects/public-form.effects.d.ts +19 -0
- package/lib/store/effects/team.effects.d.ts +80 -0
- package/lib/store/effects/token.effects.d.ts +66 -0
- package/lib/store/effects/user.effects.d.ts +36 -0
- package/lib/store/index.d.ts +7 -0
- package/lib/store/interfaces/activate-card-ticket.interface.d.ts +6 -0
- package/lib/store/interfaces/activate-user.interface.d.ts +4 -0
- package/lib/store/interfaces/calendar-activity-locations.interface.d.ts +7 -0
- package/lib/store/interfaces/calendar-activity-types.interface.d.ts +7 -0
- package/lib/store/interfaces/calendar-open-activity-result.interface.d.ts +8 -0
- package/lib/store/interfaces/calendar-public-open-activity-results.interface.d.ts +7 -0
- package/lib/store/interfaces/directory-result.interface.d.ts +5 -0
- package/lib/store/interfaces/email-settings.interface.d.ts +5 -0
- package/lib/store/interfaces/index.d.ts +19 -0
- package/lib/store/interfaces/list-result-interface.d.ts +13 -0
- package/lib/store/interfaces/location.interface.d.ts +7 -0
- package/lib/store/interfaces/member-calendar-event-result.interface.d.ts +8 -0
- package/lib/store/interfaces/member-card-deals.interface.d.ts +5 -0
- package/lib/store/interfaces/member-card-tickets.interface.d.ts +5 -0
- package/lib/store/interfaces/public-activate-card-ticket.interface.d.ts +6 -0
- package/lib/store/interfaces/remove-member-auth.interface.d.ts +4 -0
- package/lib/store/interfaces/remove-team-auth.interface.d.ts +4 -0
- package/lib/store/interfaces/retrieve-result.interface.d.ts +13 -0
- package/lib/store/interfaces/team-activity.interface.d.ts +9 -0
- package/lib/store/interfaces/team-calendar-event-result.interface.d.ts +8 -0
- package/lib/store/operators/ensure-activity.d.ts +4 -0
- package/lib/store/operators/ensure-auths.d.ts +13 -0
- package/lib/store/operators/ensure-calendar-events-loading-done.d.ts +19 -0
- package/lib/store/operators/ensure-constants.d.ts +12 -0
- package/lib/store/operators/ensure-current-auth.d.ts +12 -0
- package/lib/store/operators/ensure-current-user.d.ts +11 -0
- package/lib/store/operators/ensure-loading-done.d.ts +20 -0
- package/lib/store/operators/ensure-open-activities-loading-done.d.ts +3 -0
- package/lib/store/operators/ensure-public-open-activities-loading-done.d.ts +3 -0
- package/lib/store/operators/ensure-updated-data.d.ts +4 -0
- package/lib/store/operators/index.d.ts +10 -0
- package/lib/store/reducers/auth.reducer.d.ts +2 -0
- package/lib/store/reducers/booking.reducers.d.ts +2 -0
- package/lib/store/reducers/calendar.reducer.d.ts +2 -0
- package/lib/store/reducers/club-info.reducer.d.ts +2 -0
- package/lib/store/reducers/constant.reducer.d.ts +2 -0
- package/lib/store/reducers/data-access.reducer.d.ts +3 -0
- package/lib/store/reducers/email.reducer.d.ts +2 -0
- package/lib/store/reducers/external-link.reducer.d.ts +2 -0
- package/lib/store/reducers/file.reducer.d.ts +2 -0
- package/lib/store/reducers/index.d.ts +1 -0
- package/lib/store/reducers/invoice.reducer.d.ts +2 -0
- package/lib/store/reducers/member-card.reducer.d.ts +2 -0
- package/lib/store/reducers/member.reducer.d.ts +2 -0
- package/lib/store/reducers/news.reducer.d.ts +2 -0
- package/lib/store/reducers/public-form.reducer.d.ts +2 -0
- package/lib/store/reducers/public.reducer.d.ts +2 -0
- package/lib/store/reducers/reducer-helpers.d.ts +8 -0
- package/lib/store/reducers/team.reducer.d.ts +2 -0
- package/lib/store/reducers/token.reducer.d.ts +2 -0
- package/lib/store/reducers/user.reducer.d.ts +2 -0
- package/lib/store/selectors/auth.selectors.d.ts +4 -0
- package/lib/store/selectors/booking.selectors.d.ts +13 -0
- package/lib/store/selectors/calendar.selectors.d.ts +16 -0
- package/lib/store/selectors/club-info.selectors.d.ts +3 -0
- package/lib/store/selectors/constant.selectors.d.ts +19 -0
- package/lib/store/selectors/email.selectors.d.ts +3 -0
- package/lib/store/selectors/external-links.selectors.d.ts +3 -0
- package/lib/store/selectors/file.selectors.d.ts +4 -0
- package/lib/store/selectors/index.d.ts +17 -0
- package/lib/store/selectors/invoice.selectors.d.ts +4 -0
- package/lib/store/selectors/member-card.selectors.d.ts +6 -0
- package/lib/store/selectors/member.selectors.d.ts +8 -0
- package/lib/store/selectors/news.selectors.d.ts +6 -0
- package/lib/store/selectors/public-form.selectors.d.ts +3 -0
- package/lib/store/selectors/public.selectors.d.ts +16 -0
- package/lib/store/selectors/team.selectors.d.ts +10 -0
- package/lib/store/selectors/token.selectors.d.ts +4 -0
- package/lib/store/selectors/user.selectors.d.ts +4 -0
- package/lib/store/state/auth.state.d.ts +7 -0
- package/lib/store/state/booking.state.d.ts +16 -0
- package/lib/store/state/calendar.state.d.ts +19 -0
- package/lib/store/state/club-info.state.d.ts +6 -0
- package/lib/store/state/constant.state.d.ts +23 -0
- package/lib/store/state/data-access.state.d.ts +36 -0
- package/lib/store/state/email.state.d.ts +5 -0
- package/lib/store/state/external-link.state.d.ts +6 -0
- package/lib/store/state/file.state.d.ts +6 -0
- package/lib/store/state/index.d.ts +18 -0
- package/lib/store/state/invoice.state.d.ts +7 -0
- package/lib/store/state/member-card.state.d.ts +9 -0
- package/lib/store/state/member.state.d.ts +11 -0
- package/lib/store/state/news.state.d.ts +9 -0
- package/lib/store/state/public-form.state.d.ts +7 -0
- package/lib/store/state/public.state.d.ts +19 -0
- package/lib/store/state/team.state.d.ts +13 -0
- package/lib/store/state/token.state.d.ts +7 -0
- package/lib/store/state/user.state.d.ts +7 -0
- package/lib/types/attribute-type.d.ts +1 -1
- package/lib/types/booking-calendar-slot-reserved-time-position.d.ts +1 -1
- package/lib/types/booking-calendar-slot-type.d.ts +1 -1
- package/lib/types/contact-type.d.ts +1 -1
- package/lib/types/grant-type.d.ts +1 -1
- package/lib/types/payment-attempt-status-type.d.ts +1 -1
- package/lib/types/payment-attempt-type.d.ts +1 -1
- package/lib/types/sex-type.d.ts +1 -1
- package/package.json +13 -18
- package/esm2020/lib/api-models/api-invoice/api-payment-attempt-create.mjs +0 -8
- package/esm2020/lib/api-models/index.mjs +0 -56
- package/esm2020/lib/authentication/authentication.interceptor.mjs +0 -66
- package/esm2020/lib/authentication/authentication.service.mjs +0 -106
- package/esm2020/lib/authentication/guards/authenticated.guard.mjs +0 -36
- package/esm2020/lib/authentication/guards/handle-grant-token.guard.mjs +0 -29
- package/esm2020/lib/data-access.module.mjs +0 -30
- package/esm2020/lib/maintenance/maintenance.interceptor.mjs +0 -29
- package/esm2020/lib/models/activity-extra-member.mjs +0 -12
- package/esm2020/lib/models/activity-invite.mjs +0 -20
- package/esm2020/lib/models/activity-location-group.mjs +0 -21
- package/esm2020/lib/models/activity-location-part.mjs +0 -14
- package/esm2020/lib/models/activity-location-tag.mjs +0 -17
- package/esm2020/lib/models/activity-location.mjs +0 -36
- package/esm2020/lib/models/activity-participant.mjs +0 -12
- package/esm2020/lib/models/activity-settings.mjs +0 -14
- package/esm2020/lib/models/activity-type.mjs +0 -26
- package/esm2020/lib/models/activity.mjs +0 -92
- package/esm2020/lib/models/auth/auth-member.mjs +0 -10
- package/esm2020/lib/models/auth/auth-team.mjs +0 -9
- package/esm2020/lib/models/auth/auth.mjs +0 -15
- package/esm2020/lib/models/bookable-group.mjs +0 -21
- package/esm2020/lib/models/bookable-item.mjs +0 -34
- package/esm2020/lib/models/bookable-part.mjs +0 -14
- package/esm2020/lib/models/bookable-tag.mjs +0 -17
- package/esm2020/lib/models/booking-calendar-application-time.mjs +0 -52
- package/esm2020/lib/models/booking-calendar-slot-session.mjs +0 -54
- package/esm2020/lib/models/booking-calendar-slot.mjs +0 -53
- package/esm2020/lib/models/booking-calendar.mjs +0 -54
- package/esm2020/lib/models/booking-settings.mjs +0 -22
- package/esm2020/lib/models/calendar-event.mjs +0 -20
- package/esm2020/lib/models/calendar.mjs +0 -10
- package/esm2020/lib/models/card/card-deal.mjs +0 -10
- package/esm2020/lib/models/card/card-logo-urls.mjs +0 -13
- package/esm2020/lib/models/card/card-logo.mjs +0 -8
- package/esm2020/lib/models/card/card-member-ticket.mjs +0 -11
- package/esm2020/lib/models/card/card-theme.mjs +0 -10
- package/esm2020/lib/models/card/card-ticket-location.mjs +0 -9
- package/esm2020/lib/models/card/card-ticket.mjs +0 -21
- package/esm2020/lib/models/card/home-team.mjs +0 -8
- package/esm2020/lib/models/card/member-card.mjs +0 -14
- package/esm2020/lib/models/card/search-member-card.mjs +0 -9
- package/esm2020/lib/models/club-image.mjs +0 -18
- package/esm2020/lib/models/collection.mjs +0 -15
- package/esm2020/lib/models/contact.mjs +0 -46
- package/esm2020/lib/models/directory.mjs +0 -26
- package/esm2020/lib/models/email.mjs +0 -8
- package/esm2020/lib/models/event.mjs +0 -26
- package/esm2020/lib/models/file-object.mjs +0 -14
- package/esm2020/lib/models/general-image.mjs +0 -8
- package/esm2020/lib/models/group-role.mjs +0 -11
- package/esm2020/lib/models/image-urls.mjs +0 -10
- package/esm2020/lib/models/index.mjs +0 -62
- package/esm2020/lib/models/invoice/member-fee.mjs +0 -9
- package/esm2020/lib/models/invoice/member-invoice-row.mjs +0 -18
- package/esm2020/lib/models/invoice/member-invoice.mjs +0 -25
- package/esm2020/lib/models/invoice/payment-attempt.mjs +0 -13
- package/esm2020/lib/models/invoice/payment-types/credit-card.mjs +0 -16
- package/esm2020/lib/models/invoice/payment-types/giro.mjs +0 -11
- package/esm2020/lib/models/invoice/payment-types/swish.mjs +0 -18
- package/esm2020/lib/models/invoice/payment-types/zimpler.mjs +0 -12
- package/esm2020/lib/models/invoice/search-member-invoice.mjs +0 -17
- package/esm2020/lib/models/invoice/unpaid-member-invoice.mjs +0 -9
- package/esm2020/lib/models/member/member-attribute.mjs +0 -33
- package/esm2020/lib/models/member/member-contact.mjs +0 -21
- package/esm2020/lib/models/member/member-function.mjs +0 -19
- package/esm2020/lib/models/member/member-validation-settings.mjs +0 -13
- package/esm2020/lib/models/member/member.mjs +0 -75
- package/esm2020/lib/models/member/other-member.mjs +0 -13
- package/esm2020/lib/models/member/search-member.mjs +0 -20
- package/esm2020/lib/models/member-activity-invite.mjs +0 -31
- package/esm2020/lib/models/member-public-form-field-option.mjs +0 -9
- package/esm2020/lib/models/member-public-form-field.mjs +0 -16
- package/esm2020/lib/models/member-public-form.mjs +0 -30
- package/esm2020/lib/models/member-team-through.mjs +0 -14
- package/esm2020/lib/models/member-team.mjs +0 -13
- package/esm2020/lib/models/member-type.mjs +0 -8
- package/esm2020/lib/models/news.mjs +0 -47
- package/esm2020/lib/models/open-activity.mjs +0 -62
- package/esm2020/lib/models/optional-fee.mjs +0 -11
- package/esm2020/lib/models/overbooked-bookable-item.mjs +0 -10
- package/esm2020/lib/models/overbooked-location.mjs +0 -10
- package/esm2020/lib/models/partner.mjs +0 -9
- package/esm2020/lib/models/public-authentication.mjs +0 -7
- package/esm2020/lib/models/registration-qr-code.mjs +0 -12
- package/esm2020/lib/models/search-club.mjs +0 -14
- package/esm2020/lib/models/search-team.mjs +0 -18
- package/esm2020/lib/models/token.mjs +0 -8
- package/esm2020/lib/models/user-notification.mjs +0 -13
- package/esm2020/lib/models/user.mjs +0 -31
- package/esm2020/lib/services/activity.service.mjs +0 -470
- package/esm2020/lib/services/api.service.mjs +0 -106
- package/esm2020/lib/services/auth.service.mjs +0 -61
- package/esm2020/lib/services/bookable.service.mjs +0 -258
- package/esm2020/lib/services/booking-calendar.service.mjs +0 -794
- package/esm2020/lib/services/club.service.mjs +0 -34
- package/esm2020/lib/services/constant.service.mjs +0 -131
- package/esm2020/lib/services/email.service.mjs +0 -53
- package/esm2020/lib/services/external-link.service.mjs +0 -24
- package/esm2020/lib/services/factories/activity-settings-factory.mjs +0 -3
- package/esm2020/lib/services/factories/bookable-item-factory.mjs +0 -5
- package/esm2020/lib/services/factories/index.mjs +0 -86
- package/esm2020/lib/services/factories/member-public-form-factory.mjs +0 -26
- package/esm2020/lib/services/factories/payment-attempt-factory.mjs +0 -23
- package/esm2020/lib/services/file.service.mjs +0 -64
- package/esm2020/lib/services/index.mjs +0 -22
- package/esm2020/lib/services/invoice/invoice.service.mjs +0 -41
- package/esm2020/lib/services/invoice/payment-attempt.service.mjs +0 -51
- package/esm2020/lib/services/maintenance-mode.service.mjs +0 -21
- package/esm2020/lib/services/member-card.service.mjs +0 -103
- package/esm2020/lib/services/member-public-form.service.mjs +0 -32
- package/esm2020/lib/services/member.service.mjs +0 -63
- package/esm2020/lib/services/news.service.mjs +0 -102
- package/esm2020/lib/services/registration-qr-code.service.mjs +0 -36
- package/esm2020/lib/services/section.service.mjs +0 -23
- package/esm2020/lib/services/team.service.mjs +0 -88
- package/esm2020/lib/services/token.service.mjs +0 -57
- package/esm2020/lib/services/user-notification.service.mjs +0 -23
- package/esm2020/lib/services/user.service.mjs +0 -68
- package/fesm2015/myclub_se-data-access.mjs +0 -4810
- package/fesm2015/myclub_se-data-access.mjs.map +0 -1
- package/fesm2020/myclub_se-data-access.mjs +0 -4806
- package/fesm2020/myclub_se-data-access.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-extra-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-invite.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-group.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-part.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-tag.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-participant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-group.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-part.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-tag.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-booking-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-calendar-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-calendar.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-deal.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo-urls.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-member-ticket.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-theme.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-home-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-member-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-search-member-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club-image.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-collection.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-directory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-external-link.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-file-object.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-general-image.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-group-role.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-image-urls.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-credit-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-giro.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-swish.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-zimpler.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-fee.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice-row.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-payment-attempt.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-search-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-swish-qr-code.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-unpaid-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-contact.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-attribute.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-contact.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-validation-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member-field.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-search-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-activity-invite.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field-option.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-team-through.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-news.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-open-activity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-optional-fee.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-bookable-item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-partner.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-public-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-registration-qr-code.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-search-club.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-search-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-user-notification.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-user.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/authentication/authentication.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/authentication/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/email-recipient.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/new-account.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/open-activity-search-params.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/option.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/sms-recipient.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/maintenance/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/member/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/role.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-extra-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-invite-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-group-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-part-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-tag-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-participant-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-type-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-team-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-group-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-part-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-tag-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/booking-settings-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-deal-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-logo-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-logo-urls-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-member-ticket-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-theme-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-image-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/contact-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/credit-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/directory-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/event-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/external-link-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/file-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/general-image-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/giro-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/group-role-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/home-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/image-urls-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-attribute-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-contact-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-fee-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-function-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invite-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-row-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-option-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-team-through-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-type-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-validation-settings-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/news-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/open-activity-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/optional-fee-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/other-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/other-member-field-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/overbooked-bookable-item-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/overbooked-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/partner-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/public-authentication-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/registration-qr-code-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-club-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-team-through-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/swish-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/token-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/unpaid-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/user-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/user-notification-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/zimpler-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/attribute-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-reserved-time-position.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/contact-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/grant-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/payment-attempt-status-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/payment-attempt-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/sex-type.mjs +0 -0
- /package/{esm2020 → esm2022}/myclub_se-data-access.mjs +0 -0
|
@@ -0,0 +1,736 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Role, } from '../models';
|
|
3
|
+
import { bookingCalendarApplicationTimeFactory, bookingCalendarFactory, bookingCalendarSlotFactory, bookingCalendarSlotSessionFactory, bookingSettingsFactory, overbookedBookableItemFactory, } from "./factories";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./api.service";
|
|
6
|
+
const CLUB_BOOKING_CALENDARS_PATH = ':clubId/activities/calendars/';
|
|
7
|
+
const CLUB_BOOKING_CALENDAR_PATH = ':clubId/activities/calendars/:id/';
|
|
8
|
+
const CLUB_BOOKING_CALENDAR_SLOTS_PATH = ':clubId/activities/slots/';
|
|
9
|
+
const CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':clubId/activities/slots/application-times/';
|
|
10
|
+
const CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':clubId/activities/slots/copy/';
|
|
11
|
+
const CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':clubId/activities/slots/clear/';
|
|
12
|
+
const CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':clubId/activities/slots/sync/';
|
|
13
|
+
const CLUB_BOOKING_CALENDAR_SLOT_PATH = ':clubId/activities/slots/:id/';
|
|
14
|
+
const CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':clubId/activities/slots/:id/all/';
|
|
15
|
+
const CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':clubId/activities/sessions/';
|
|
16
|
+
const CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':clubId/activities/sessions/:id/';
|
|
17
|
+
const CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':clubId/activities/sessions/:id/all/';
|
|
18
|
+
const CLUB_BOOKING_SETTINGS_PATH = ':clubId/activities/booking-settings/';
|
|
19
|
+
const CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':clubId/activities/application-times/:id/';
|
|
20
|
+
const CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':clubId/activities/application-times/';
|
|
21
|
+
const CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH = ':clubId/activities/overbooked/sessions/';
|
|
22
|
+
const CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':clubId/activities/overbooked/bookables/';
|
|
23
|
+
const SECTION_BOOKING_CALENDARS_PATH = ':sectionId/activities/calendars/';
|
|
24
|
+
const SECTION_BOOKING_CALENDAR_PATH = ':sectionId/activities/calendars/:id/';
|
|
25
|
+
const SECTION_BOOKING_CALENDAR_SLOTS_PATH = ':sectionId/activities/slots/';
|
|
26
|
+
const SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':sectionId/activities/slots/application-times/';
|
|
27
|
+
const SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':sectionId/activities/slots/copy/';
|
|
28
|
+
const SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':sectionId/activities/slots/clear/';
|
|
29
|
+
const SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':sectionId/activities/slots/sync/';
|
|
30
|
+
const SECTION_BOOKING_CALENDAR_SLOT_PATH = ':sectionId/activities/slots/:id/';
|
|
31
|
+
const SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':sectionId/activities/slots/:id/all/';
|
|
32
|
+
const SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':sectionId/activities/sessions/';
|
|
33
|
+
const SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':sectionId/activities/sessions/:id/';
|
|
34
|
+
const SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':sectionId/activities/sessions/:id/all/';
|
|
35
|
+
const SECTION_BOOKING_SETTINGS_PATH = ':sectionId/activities/booking-settings/';
|
|
36
|
+
const SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':sectionId/activities/application-times/:id/';
|
|
37
|
+
const SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':sectionId/activities/application-times/';
|
|
38
|
+
const SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH = ':sectionId/activities/overbooked/sessions/';
|
|
39
|
+
const SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':sectionId/activities/overbooked/bookables/';
|
|
40
|
+
const TEAM_BOOKING_CALENDARS_PATH = ':teamId/activities/calendars/';
|
|
41
|
+
const TEAM_BOOKING_CALENDAR_SLOTS_PATH = ':teamId/activities/slots/';
|
|
42
|
+
const TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':teamId/activities/slots/sync/';
|
|
43
|
+
const TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':teamId/activities/slots/application-times/';
|
|
44
|
+
const TEAM_BOOKING_SETTINGS_PATH = ':teamId/activities/booking-settings/';
|
|
45
|
+
const TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':teamId/activities/sessions/';
|
|
46
|
+
const TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':teamId/activities/sessions/:id/';
|
|
47
|
+
const TEAM_BOOKING_CALENDAR_SLOT_PATH = ':teamId/activities/slots/:id/';
|
|
48
|
+
const TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':teamId/activities/application-times/';
|
|
49
|
+
const TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':teamId/activities/application-times/:id/';
|
|
50
|
+
export class BookingCalendarService {
|
|
51
|
+
apiService;
|
|
52
|
+
constructor(apiService) {
|
|
53
|
+
this.apiService = apiService;
|
|
54
|
+
}
|
|
55
|
+
// region Booking calendar
|
|
56
|
+
createBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
|
|
57
|
+
if (role === Role.ClubAdmin) {
|
|
58
|
+
return this.createClubBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
59
|
+
}
|
|
60
|
+
return this.createSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
61
|
+
}
|
|
62
|
+
createClubBookingCalendar(clubId, calendar) {
|
|
63
|
+
delete calendar.id;
|
|
64
|
+
return this.apiService
|
|
65
|
+
.postResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, {
|
|
66
|
+
clubId,
|
|
67
|
+
}, calendar);
|
|
68
|
+
}
|
|
69
|
+
createSectionBookingCalendar(sectionId, calendar) {
|
|
70
|
+
delete calendar.id;
|
|
71
|
+
return this.apiService
|
|
72
|
+
.postResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, {
|
|
73
|
+
sectionId,
|
|
74
|
+
}, calendar);
|
|
75
|
+
}
|
|
76
|
+
getBookingCalendars(role, clubOrSectionOrTeamId, name = null) {
|
|
77
|
+
if (role == Role.ClubAdmin) {
|
|
78
|
+
return this.getClubBookingCalendars(clubOrSectionOrTeamId, name);
|
|
79
|
+
}
|
|
80
|
+
else if (role == Role.SectionAdmin) {
|
|
81
|
+
return this.getSectionBookingCalendars(clubOrSectionOrTeamId, name);
|
|
82
|
+
}
|
|
83
|
+
return this.getTeamBookingCalendars(clubOrSectionOrTeamId, name);
|
|
84
|
+
}
|
|
85
|
+
getClubBookingCalendars(clubId, name = null) {
|
|
86
|
+
const params = { limit: 'null' };
|
|
87
|
+
if (name) {
|
|
88
|
+
params['name'] = name;
|
|
89
|
+
}
|
|
90
|
+
return this.apiService
|
|
91
|
+
.getCollection(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, { clubId }, {
|
|
92
|
+
params
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
getSectionBookingCalendars(sectionId, name = null) {
|
|
96
|
+
const params = { limit: 'null' };
|
|
97
|
+
if (name) {
|
|
98
|
+
params['name'] = name;
|
|
99
|
+
}
|
|
100
|
+
return this.apiService
|
|
101
|
+
.getCollection(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, { sectionId }, {
|
|
102
|
+
params
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
getTeamBookingCalendars(teamId, name = null) {
|
|
106
|
+
const params = { limit: 'null' };
|
|
107
|
+
if (name) {
|
|
108
|
+
params['name'] = name;
|
|
109
|
+
}
|
|
110
|
+
return this.apiService
|
|
111
|
+
.getCollection(bookingCalendarFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDARS_PATH, { teamId }, {
|
|
112
|
+
params
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
updateBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
|
|
116
|
+
if (role === Role.ClubAdmin) {
|
|
117
|
+
return this.updateClubBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
118
|
+
}
|
|
119
|
+
return this.updateSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
120
|
+
}
|
|
121
|
+
updateClubBookingCalendar(clubId, calendar) {
|
|
122
|
+
return this.apiService
|
|
123
|
+
.updateResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
|
|
124
|
+
clubId,
|
|
125
|
+
id: calendar.id
|
|
126
|
+
}, calendar);
|
|
127
|
+
}
|
|
128
|
+
updateSectionBookingCalendar(sectionId, calendar) {
|
|
129
|
+
return this.apiService
|
|
130
|
+
.updateResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
|
|
131
|
+
sectionId,
|
|
132
|
+
id: calendar.id
|
|
133
|
+
}, calendar);
|
|
134
|
+
}
|
|
135
|
+
deleteBookingCalendar(role, clubOrSectionOrTeamId, id) {
|
|
136
|
+
if (role === Role.ClubAdmin) {
|
|
137
|
+
return this.deleteClubBookingCalendar(clubOrSectionOrTeamId, id);
|
|
138
|
+
}
|
|
139
|
+
return this.deleteSectionBookingCalendar(clubOrSectionOrTeamId, id);
|
|
140
|
+
}
|
|
141
|
+
deleteClubBookingCalendar(clubId, id) {
|
|
142
|
+
return this.apiService
|
|
143
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
|
|
144
|
+
clubId,
|
|
145
|
+
id
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
deleteSectionBookingCalendar(sectionId, id) {
|
|
149
|
+
return this.apiService
|
|
150
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
|
|
151
|
+
sectionId,
|
|
152
|
+
id
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// endregion
|
|
156
|
+
// region Booking calendar slot
|
|
157
|
+
createBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
|
|
158
|
+
if (role === Role.ClubAdmin) {
|
|
159
|
+
return this.createClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
160
|
+
}
|
|
161
|
+
return this.createSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
162
|
+
}
|
|
163
|
+
createClubBookingCalendarSlot(clubId, slot) {
|
|
164
|
+
delete slot.id;
|
|
165
|
+
return this.apiService
|
|
166
|
+
.postResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, {
|
|
167
|
+
clubId,
|
|
168
|
+
}, slot);
|
|
169
|
+
}
|
|
170
|
+
createSectionBookingCalendarSlot(sectionId, slot) {
|
|
171
|
+
delete slot.id;
|
|
172
|
+
return this.apiService
|
|
173
|
+
.postResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, {
|
|
174
|
+
sectionId,
|
|
175
|
+
}, slot);
|
|
176
|
+
}
|
|
177
|
+
getBookingCalendarSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
178
|
+
if (role == Role.ClubAdmin) {
|
|
179
|
+
return this.getClubBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
180
|
+
}
|
|
181
|
+
else if (role == Role.SectionAdmin) {
|
|
182
|
+
return this.getSectionBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
183
|
+
}
|
|
184
|
+
return this.getTeamBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
185
|
+
}
|
|
186
|
+
getClubBookingCalendarSlots(clubId, bookingSlotFilter) {
|
|
187
|
+
const params = bookingSlotFilter.toParams();
|
|
188
|
+
return this.apiService
|
|
189
|
+
.getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, { clubId }, {
|
|
190
|
+
params
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
getSectionBookingCalendarSlots(sectionId, bookingSlotFilter) {
|
|
194
|
+
const params = bookingSlotFilter.toParams();
|
|
195
|
+
return this.apiService
|
|
196
|
+
.getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, { sectionId }, {
|
|
197
|
+
params
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
getTeamBookingCalendarSlots(teamId, bookingSlotFilter) {
|
|
201
|
+
const params = bookingSlotFilter.toParams();
|
|
202
|
+
return this.apiService
|
|
203
|
+
.getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_PATH, { teamId }, {
|
|
204
|
+
params
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
getBookingCalendarSlot(role, clubOrSectionOrTeamId, slotId) {
|
|
208
|
+
if (role == Role.ClubAdmin) {
|
|
209
|
+
return this.getClubBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
210
|
+
}
|
|
211
|
+
else if (role == Role.SectionAdmin) {
|
|
212
|
+
return this.getSectionBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
213
|
+
}
|
|
214
|
+
return this.getTeamBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
215
|
+
}
|
|
216
|
+
getClubBookingCalendarSlot(clubId, slotId) {
|
|
217
|
+
return this.apiService
|
|
218
|
+
.getResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
219
|
+
clubId,
|
|
220
|
+
id: slotId
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
getSectionBookingCalendarSlot(sectionId, slotId) {
|
|
224
|
+
return this.apiService
|
|
225
|
+
.getResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
226
|
+
sectionId,
|
|
227
|
+
id: slotId
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
getTeamBookingCalendarSlot(teamId, slotId) {
|
|
231
|
+
return this.apiService
|
|
232
|
+
.getResource(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_PATH, {
|
|
233
|
+
teamId,
|
|
234
|
+
id: slotId
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
getBookingCalendarApplicationTimeSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
238
|
+
if (role == Role.ClubAdmin) {
|
|
239
|
+
return this.getClubBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
240
|
+
}
|
|
241
|
+
else if (role == Role.SectionAdmin) {
|
|
242
|
+
return this.getSectionBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
243
|
+
}
|
|
244
|
+
return this.getTeamBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
245
|
+
}
|
|
246
|
+
getClubBookingCalendarApplicationTimeSlots(clubId, bookingSlotFilter) {
|
|
247
|
+
const params = bookingSlotFilter.toParams();
|
|
248
|
+
return this.apiService
|
|
249
|
+
.getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { clubId }, {
|
|
250
|
+
params
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
getSectionBookingCalendarApplicationTimeSlots(sectionId, bookingSlotFilter) {
|
|
254
|
+
const params = bookingSlotFilter.toParams();
|
|
255
|
+
return this.apiService
|
|
256
|
+
.getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { sectionId }, {
|
|
257
|
+
params
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
getTeamBookingCalendarApplicationTimeSlots(teamId, bookingSlotFilter) {
|
|
261
|
+
const params = bookingSlotFilter.toParams();
|
|
262
|
+
return this.apiService
|
|
263
|
+
.getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { teamId }, {
|
|
264
|
+
params
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
getBookingCalendarApplicationTimes(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
268
|
+
if (role == Role.ClubAdmin) {
|
|
269
|
+
return this.getClubBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
270
|
+
}
|
|
271
|
+
else if (role == Role.SectionAdmin) {
|
|
272
|
+
return this.getSectionBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
273
|
+
}
|
|
274
|
+
return this.getTeamBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
275
|
+
}
|
|
276
|
+
getClubBookingCalendarApplicationTimes(clubId, bookingSlotFilter) {
|
|
277
|
+
const params = bookingSlotFilter.toParams();
|
|
278
|
+
return this.apiService
|
|
279
|
+
.getCollection(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { clubId }, {
|
|
280
|
+
params
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
getSectionBookingCalendarApplicationTimes(sectionId, bookingSlotFilter) {
|
|
284
|
+
const params = bookingSlotFilter.toParams();
|
|
285
|
+
return this.apiService
|
|
286
|
+
.getCollection(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { sectionId }, {
|
|
287
|
+
params
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
getTeamBookingCalendarApplicationTimes(teamId, bookingSlotFilter) {
|
|
291
|
+
const params = bookingSlotFilter.toParams();
|
|
292
|
+
return this.apiService
|
|
293
|
+
.getCollection(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { teamId }, {
|
|
294
|
+
params
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
copyBookingCalendarSlots(role, clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
298
|
+
if (role === Role.ClubAdmin) {
|
|
299
|
+
return this.copyClubBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
|
|
300
|
+
}
|
|
301
|
+
return this.copySectionBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
|
|
302
|
+
}
|
|
303
|
+
copyClubBookingCalendarSlots(clubId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
304
|
+
const params = bookingSlotFilter.toParams();
|
|
305
|
+
return this.apiService
|
|
306
|
+
.postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH, { clubId }, {
|
|
307
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
308
|
+
only_copy_slots: onlyCopySlots,
|
|
309
|
+
weekdays: weekdays,
|
|
310
|
+
}, {
|
|
311
|
+
params
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
copySectionBookingCalendarSlots(sectionId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
315
|
+
const params = bookingSlotFilter.toParams();
|
|
316
|
+
return this.apiService
|
|
317
|
+
.postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH, { sectionId }, {
|
|
318
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
319
|
+
only_copy_slots: onlyCopySlots,
|
|
320
|
+
weekdays: weekdays,
|
|
321
|
+
}, {
|
|
322
|
+
params
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
326
|
+
if (role === Role.ClubAdmin) {
|
|
327
|
+
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
328
|
+
}
|
|
329
|
+
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
330
|
+
}
|
|
331
|
+
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
332
|
+
const params = bookingSlotFilter.toParams();
|
|
333
|
+
return this.apiService
|
|
334
|
+
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { clubId }, {
|
|
335
|
+
body: {
|
|
336
|
+
current_week_start_date: currentWeekStartDate,
|
|
337
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
338
|
+
only_delete_sessions: onlyDeleteSessions,
|
|
339
|
+
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
340
|
+
weekdays: weekdays,
|
|
341
|
+
},
|
|
342
|
+
params,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
346
|
+
const params = bookingSlotFilter.toParams();
|
|
347
|
+
return this.apiService
|
|
348
|
+
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { sectionId }, {
|
|
349
|
+
body: {
|
|
350
|
+
current_week_start_date: currentWeekStartDate,
|
|
351
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
352
|
+
only_delete_sessions: onlyDeleteSessions,
|
|
353
|
+
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
354
|
+
weekdays: weekdays,
|
|
355
|
+
},
|
|
356
|
+
params,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
syncBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
360
|
+
if (role == Role.ClubAdmin) {
|
|
361
|
+
return this.syncClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
362
|
+
}
|
|
363
|
+
else if (role == Role.SectionAdmin) {
|
|
364
|
+
return this.syncSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
365
|
+
}
|
|
366
|
+
return this.syncTeamBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
367
|
+
}
|
|
368
|
+
syncClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
369
|
+
const params = bookingSlotFilter.toParams();
|
|
370
|
+
return this.apiService
|
|
371
|
+
.postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { clubId }, {
|
|
372
|
+
current_week_start_date: currentWeekStartDate,
|
|
373
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
374
|
+
}, { params });
|
|
375
|
+
}
|
|
376
|
+
syncSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
377
|
+
const params = bookingSlotFilter.toParams();
|
|
378
|
+
return this.apiService
|
|
379
|
+
.postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { sectionId }, {
|
|
380
|
+
current_week_start_date: currentWeekStartDate,
|
|
381
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
382
|
+
}, { params });
|
|
383
|
+
}
|
|
384
|
+
syncTeamBookingCalendarSlots(teamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
385
|
+
const params = bookingSlotFilter.toParams();
|
|
386
|
+
return this.apiService
|
|
387
|
+
.postResourceNoResponse(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { teamId }, {
|
|
388
|
+
current_week_start_date: currentWeekStartDate,
|
|
389
|
+
week_relative_indexes: weekRelativeIndexes,
|
|
390
|
+
}, { params });
|
|
391
|
+
}
|
|
392
|
+
updateBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
|
|
393
|
+
if (role === Role.ClubAdmin) {
|
|
394
|
+
return this.updateClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
395
|
+
}
|
|
396
|
+
return this.updateSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
397
|
+
}
|
|
398
|
+
updateClubBookingCalendarSlot(clubId, slot) {
|
|
399
|
+
return this.apiService
|
|
400
|
+
.updateResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
401
|
+
clubId,
|
|
402
|
+
id: slot.id
|
|
403
|
+
}, slot);
|
|
404
|
+
}
|
|
405
|
+
updateSectionBookingCalendarSlot(sectionId, slot) {
|
|
406
|
+
return this.apiService
|
|
407
|
+
.updateResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
408
|
+
sectionId,
|
|
409
|
+
id: slot.id
|
|
410
|
+
}, slot);
|
|
411
|
+
}
|
|
412
|
+
deleteBookingCalendarSlot(role, clubOrSectionOrTeamId, id) {
|
|
413
|
+
if (role === Role.ClubAdmin) {
|
|
414
|
+
return this.deleteClubBookingCalendarSlot(clubOrSectionOrTeamId, id);
|
|
415
|
+
}
|
|
416
|
+
return this.deleteSectionBookingCalendarSlot(clubOrSectionOrTeamId, id);
|
|
417
|
+
}
|
|
418
|
+
deleteClubBookingCalendarSlot(clubId, id) {
|
|
419
|
+
return this.apiService
|
|
420
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
421
|
+
clubId,
|
|
422
|
+
id
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
deleteSectionBookingCalendarSlot(sectionId, id) {
|
|
426
|
+
return this.apiService
|
|
427
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
428
|
+
sectionId,
|
|
429
|
+
id
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
deleteBookingCalendarSlotRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
|
|
433
|
+
if (role === Role.ClubAdmin) {
|
|
434
|
+
return this.deleteClubBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
435
|
+
}
|
|
436
|
+
return this.deleteSectionBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
437
|
+
}
|
|
438
|
+
deleteClubBookingCalendarSlotRepeatable(clubId, id, deleteUntilDate) {
|
|
439
|
+
return this.apiService
|
|
440
|
+
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
|
|
441
|
+
clubId,
|
|
442
|
+
id
|
|
443
|
+
}, { body: { delete_until_date: deleteUntilDate } });
|
|
444
|
+
}
|
|
445
|
+
deleteSectionBookingCalendarSlotRepeatable(sectionId, id, deleteUntilDate) {
|
|
446
|
+
return this.apiService
|
|
447
|
+
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
|
|
448
|
+
sectionId,
|
|
449
|
+
id
|
|
450
|
+
}, { body: { delete_until_date: deleteUntilDate } });
|
|
451
|
+
}
|
|
452
|
+
// endregion
|
|
453
|
+
// region Booking calendar slot session
|
|
454
|
+
createBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
|
|
455
|
+
if (role === Role.ClubAdmin) {
|
|
456
|
+
return this.createClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
457
|
+
}
|
|
458
|
+
else if (role === Role.SectionAdmin) {
|
|
459
|
+
return this.createSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
460
|
+
}
|
|
461
|
+
return this.createTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
462
|
+
}
|
|
463
|
+
createClubBookingCalendarSlotSession(clubId, session) {
|
|
464
|
+
delete session.id;
|
|
465
|
+
return this.apiService
|
|
466
|
+
.postResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
467
|
+
clubId,
|
|
468
|
+
}, session);
|
|
469
|
+
}
|
|
470
|
+
createSectionBookingCalendarSlotSession(sectionId, session) {
|
|
471
|
+
delete session.id;
|
|
472
|
+
return this.apiService
|
|
473
|
+
.postResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
474
|
+
sectionId,
|
|
475
|
+
}, session);
|
|
476
|
+
}
|
|
477
|
+
createTeamBookingCalendarSlotSession(teamId, session) {
|
|
478
|
+
delete session.id;
|
|
479
|
+
return this.apiService
|
|
480
|
+
.postResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
481
|
+
teamId,
|
|
482
|
+
}, session);
|
|
483
|
+
}
|
|
484
|
+
updateBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
|
|
485
|
+
if (role === Role.ClubAdmin) {
|
|
486
|
+
return this.updateClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
487
|
+
}
|
|
488
|
+
else if (role === Role.SectionAdmin) {
|
|
489
|
+
return this.updateSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
490
|
+
}
|
|
491
|
+
return this.updateTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
492
|
+
}
|
|
493
|
+
updateClubBookingCalendarSlotSession(clubId, session) {
|
|
494
|
+
return this.apiService
|
|
495
|
+
.updateResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
496
|
+
clubId,
|
|
497
|
+
id: session.id,
|
|
498
|
+
}, session);
|
|
499
|
+
}
|
|
500
|
+
updateSectionBookingCalendarSlotSession(sectionId, session) {
|
|
501
|
+
return this.apiService
|
|
502
|
+
.updateResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
503
|
+
sectionId,
|
|
504
|
+
id: session.id,
|
|
505
|
+
}, session);
|
|
506
|
+
}
|
|
507
|
+
updateTeamBookingCalendarSlotSession(teamId, session) {
|
|
508
|
+
return this.apiService
|
|
509
|
+
.updateResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
510
|
+
teamId,
|
|
511
|
+
id: session.id,
|
|
512
|
+
}, session);
|
|
513
|
+
}
|
|
514
|
+
deleteBookingCalendarSlotSession(role, clubOrSectionOrTeamId, id) {
|
|
515
|
+
if (role == Role.ClubAdmin) {
|
|
516
|
+
return this.deleteClubBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
517
|
+
}
|
|
518
|
+
else if (role == Role.SectionAdmin) {
|
|
519
|
+
return this.deleteSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
520
|
+
}
|
|
521
|
+
return this.deleteTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
522
|
+
}
|
|
523
|
+
deleteClubBookingCalendarSlotSession(clubId, id) {
|
|
524
|
+
return this.apiService
|
|
525
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
526
|
+
clubId,
|
|
527
|
+
id
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
deleteSectionBookingCalendarSlotSession(sectionId, id) {
|
|
531
|
+
return this.apiService
|
|
532
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
533
|
+
sectionId,
|
|
534
|
+
id
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
deleteTeamBookingCalendarSlotSession(teamId, id) {
|
|
538
|
+
return this.apiService
|
|
539
|
+
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
540
|
+
teamId,
|
|
541
|
+
id
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
deleteBookingCalendarSlotSessionRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
|
|
545
|
+
if (role === Role.ClubAdmin) {
|
|
546
|
+
return this.deleteClubBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
547
|
+
}
|
|
548
|
+
return this.deleteSectionBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
549
|
+
}
|
|
550
|
+
deleteClubBookingCalendarSlotSessionRepeatable(clubId, id, deleteUntilDate) {
|
|
551
|
+
return this.apiService
|
|
552
|
+
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
|
|
553
|
+
clubId,
|
|
554
|
+
id
|
|
555
|
+
}, { body: { delete_until_date: deleteUntilDate } });
|
|
556
|
+
}
|
|
557
|
+
deleteSectionBookingCalendarSlotSessionRepeatable(sectionId, id, deleteUntilDate) {
|
|
558
|
+
return this.apiService
|
|
559
|
+
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
|
|
560
|
+
sectionId,
|
|
561
|
+
id
|
|
562
|
+
}, { body: { delete_until_date: deleteUntilDate } });
|
|
563
|
+
}
|
|
564
|
+
// endregion
|
|
565
|
+
// region Booking Setting
|
|
566
|
+
getBookingSettings(role, clubOrSectionOrTeamId) {
|
|
567
|
+
if (role == Role.ClubAdmin) {
|
|
568
|
+
return this.getClubBookingSettings(clubOrSectionOrTeamId);
|
|
569
|
+
}
|
|
570
|
+
else if (role == Role.SectionAdmin) {
|
|
571
|
+
return this.getSectionBookingSettings(clubOrSectionOrTeamId);
|
|
572
|
+
}
|
|
573
|
+
return this.getTeamBookingSettings(clubOrSectionOrTeamId);
|
|
574
|
+
}
|
|
575
|
+
getClubBookingSettings(clubId) {
|
|
576
|
+
return this.apiService
|
|
577
|
+
.getResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, { clubId });
|
|
578
|
+
}
|
|
579
|
+
getSectionBookingSettings(sectionId) {
|
|
580
|
+
return this.apiService
|
|
581
|
+
.getResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, { sectionId });
|
|
582
|
+
}
|
|
583
|
+
getTeamBookingSettings(teamId) {
|
|
584
|
+
return this.apiService
|
|
585
|
+
.getResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, { teamId });
|
|
586
|
+
}
|
|
587
|
+
updateBookingSettings(role, clubOrSectionOrTeamId, bookingSettings) {
|
|
588
|
+
if (role == Role.ClubAdmin) {
|
|
589
|
+
return this.updateClubBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
590
|
+
}
|
|
591
|
+
else if (role == Role.SectionAdmin) {
|
|
592
|
+
return this.updateSectionBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
593
|
+
}
|
|
594
|
+
return this.updateTeamBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
595
|
+
}
|
|
596
|
+
updateClubBookingSettings(clubId, bookingSettings) {
|
|
597
|
+
return this.apiService
|
|
598
|
+
.updateResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, {
|
|
599
|
+
clubId,
|
|
600
|
+
}, bookingSettings);
|
|
601
|
+
}
|
|
602
|
+
updateSectionBookingSettings(sectionId, bookingSettings) {
|
|
603
|
+
return this.apiService
|
|
604
|
+
.updateResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, {
|
|
605
|
+
sectionId,
|
|
606
|
+
}, bookingSettings);
|
|
607
|
+
}
|
|
608
|
+
updateTeamBookingSettings(teamId, bookingSettings) {
|
|
609
|
+
return this.apiService
|
|
610
|
+
.updateResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, {
|
|
611
|
+
teamId,
|
|
612
|
+
}, bookingSettings);
|
|
613
|
+
}
|
|
614
|
+
// endregion
|
|
615
|
+
// region Booking Calendar Application Times
|
|
616
|
+
updateBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTime) {
|
|
617
|
+
if (role == Role.ClubAdmin) {
|
|
618
|
+
return this.updateClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
619
|
+
}
|
|
620
|
+
else if (role == Role.SectionAdmin) {
|
|
621
|
+
return this.updateSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
622
|
+
}
|
|
623
|
+
return this.updateTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
624
|
+
}
|
|
625
|
+
updateClubBookingCalendarApplicationTime(clubId, availableTime) {
|
|
626
|
+
return this.apiService
|
|
627
|
+
.updateResource(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
628
|
+
clubId,
|
|
629
|
+
id: availableTime.id,
|
|
630
|
+
}, availableTime);
|
|
631
|
+
}
|
|
632
|
+
updateSectionBookingCalendarApplicationTime(sectionId, availableTime) {
|
|
633
|
+
return this.apiService
|
|
634
|
+
.updateResource(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
635
|
+
sectionId,
|
|
636
|
+
id: availableTime.id,
|
|
637
|
+
}, availableTime);
|
|
638
|
+
}
|
|
639
|
+
updateTeamBookingCalendarApplicationTime(teamId, availableTime) {
|
|
640
|
+
return this.apiService
|
|
641
|
+
.updateResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
642
|
+
teamId,
|
|
643
|
+
id: availableTime.id,
|
|
644
|
+
}, availableTime);
|
|
645
|
+
}
|
|
646
|
+
createTeamBookingCalendarApplicationTime(teamId, availableTime) {
|
|
647
|
+
delete availableTime.id;
|
|
648
|
+
return this.apiService
|
|
649
|
+
.postResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, {
|
|
650
|
+
teamId,
|
|
651
|
+
}, availableTime);
|
|
652
|
+
}
|
|
653
|
+
deleteBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTimeId) {
|
|
654
|
+
if (role == Role.ClubAdmin) {
|
|
655
|
+
return this.deleteClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
656
|
+
}
|
|
657
|
+
else if (role == Role.SectionAdmin) {
|
|
658
|
+
return this.deleteSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
659
|
+
}
|
|
660
|
+
return this.deleteTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
661
|
+
}
|
|
662
|
+
deleteClubBookingCalendarApplicationTime(clubId, id) {
|
|
663
|
+
return this.apiService
|
|
664
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
665
|
+
clubId,
|
|
666
|
+
id
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
deleteSectionBookingCalendarApplicationTime(sectionId, id) {
|
|
670
|
+
return this.apiService
|
|
671
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
672
|
+
sectionId,
|
|
673
|
+
id
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
deleteTeamBookingCalendarApplicationTime(teamId, id) {
|
|
677
|
+
return this.apiService
|
|
678
|
+
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
679
|
+
teamId,
|
|
680
|
+
id
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
// endregion
|
|
684
|
+
// region Overbooked sessions
|
|
685
|
+
getOverbookedSessions(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
686
|
+
if (role == Role.ClubAdmin) {
|
|
687
|
+
return this.getClubOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
688
|
+
}
|
|
689
|
+
return this.getSectionOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
690
|
+
}
|
|
691
|
+
getClubOverbookedSessions(clubId, bookingSlotFilter) {
|
|
692
|
+
const params = bookingSlotFilter.toParams();
|
|
693
|
+
return this.apiService
|
|
694
|
+
.getCollection(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH, { clubId }, {
|
|
695
|
+
params
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
getSectionOverbookedSessions(sectionId, bookingSlotFilter) {
|
|
699
|
+
const params = bookingSlotFilter.toParams();
|
|
700
|
+
return this.apiService
|
|
701
|
+
.getCollection(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH, { sectionId }, {
|
|
702
|
+
params
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
// endregion
|
|
706
|
+
// region Overbooked bookables
|
|
707
|
+
getOverbookedBookables(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
708
|
+
if (role == Role.ClubAdmin) {
|
|
709
|
+
return this.getClubOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
710
|
+
}
|
|
711
|
+
return this.getSectionOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
712
|
+
}
|
|
713
|
+
getClubOverbookedBookables(clubId, bookingSlotFilter) {
|
|
714
|
+
const params = bookingSlotFilter.toParams();
|
|
715
|
+
return this.apiService
|
|
716
|
+
.getCollection(overbookedBookableItemFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH, { clubId }, {
|
|
717
|
+
params
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
getSectionOverbookedBookables(sectionId, bookingSlotFilter) {
|
|
721
|
+
const params = bookingSlotFilter.toParams();
|
|
722
|
+
return this.apiService
|
|
723
|
+
.getCollection(overbookedBookableItemFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH, { sectionId }, {
|
|
724
|
+
params
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BookingCalendarService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
728
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BookingCalendarService, providedIn: 'root' });
|
|
729
|
+
}
|
|
730
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BookingCalendarService, decorators: [{
|
|
731
|
+
type: Injectable,
|
|
732
|
+
args: [{
|
|
733
|
+
providedIn: 'root'
|
|
734
|
+
}]
|
|
735
|
+
}], ctorParameters: () => [{ type: i1.ApiService }] });
|
|
736
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBT0wsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3RCLDZCQUE2QixHQUM5QixNQUFNLGFBQWEsQ0FBQzs7O0FBRXJCLE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUM7QUFDcEUsTUFBTSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQUN2RSxNQUFNLGdDQUFnQyxHQUFHLDJCQUEyQixDQUFDO0FBQ3JFLE1BQU0sa0RBQWtELEdBQUcsNkNBQTZDLENBQUM7QUFDekcsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLHNDQUFzQyxHQUFHLGlDQUFpQyxDQUFDO0FBQ2pGLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSwrQkFBK0IsR0FBRywrQkFBK0IsQ0FBQztBQUN4RSxNQUFNLDBDQUEwQyxHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZGLE1BQU0sd0NBQXdDLEdBQUcsOEJBQThCLENBQUM7QUFDaEYsTUFBTSx1Q0FBdUMsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRixNQUFNLDZDQUE2QyxHQUFHLHNDQUFzQyxDQUFDO0FBQzdGLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUM7QUFDMUUsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRyxNQUFNLDRDQUE0QyxHQUFHLHVDQUF1QyxDQUFD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QUksQ0FBQyxTQUFTLEVBQ2Qsc0NBQXNDLEVBQ3RDLEVBQUMsTUFBTSxFQUFDLEVBQ1I7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUNPLDZCQUE2QixDQUFDLFNBQWlCLEVBQUUsaUJBQW9DO1FBQzNGLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLDZCQUE2QixFQUM3QixJQUFJLENBQUMsWUFBWSxFQUNqQix5Q0FBeUMsRUFDekMsRUFBQyxTQUFTLEVBQUMsRUFDWDtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO3VHQWpyQ1Usc0JBQXNCOzJHQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwaVNlcnZpY2V9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQm9va2luZ0NhbGVuZGFyLFxuICBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3QsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uLFxuICBCb29raW5nU2V0dGluZ3MsXG4gIEJvb2tpbmdTbG90RmlsdGVyLFxuICBSb2xlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgb3ZlcmJvb2tlZEJvb2thYmxlSXRlbUZhY3RvcnksXG59IGZyb20gXCIuL2ZhY3Rvcmllc1wiO1xuXG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9vdmVyYm9va2VkL3Nlc3Npb25zLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9ib29rYWJsZXMvJztcblxuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9zZXNzaW9ucy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL292ZXJib29rZWQvYm9va2FibGVzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2luZ0NhbGVuZGFyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXJcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoc2VjdGlvbklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFycyh0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZCBhcyBzdHJpbmdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWQgYXMgc3RyaW5nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90XG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyU2xvdHMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90SWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90SWQpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNsb3RJZFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IHNsb3RJZFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3QodGVhbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IHNsb3RJZFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNvcHlCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlDb3B5U2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvcHlTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY2xlYXJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5RGVsZXRlU2Vzc2lvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgICAgb25seV9kZWxldGVfc2Vzc2lvbnM6IG9ubHlEZWxldGVTZXNzaW9ucyxcbiAgICAgICAgICAgIHNob3VsZF9kZWxldGVfcmVwZWF0aW5nX3Nsb3RzOiBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cyxcbiAgICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5RGVsZXRlU2Vzc2lvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgICAgb25seV9kZWxldGVfc2Vzc2lvbnM6IG9ubHlEZWxldGVTZXNzaW9ucyxcbiAgICAgICAgICAgIHNob3VsZF9kZWxldGVfcmVwZWF0aW5nX3Nsb3RzOiBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cyxcbiAgICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIHN5bmNCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuc3luY0NsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICB0ZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zfSxcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNsb3QuaWQgYXMgc3RyaW5nXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IHNsb3QuaWQgYXMgc3RyaW5nXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdCBzZXNzaW9uXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7Y2x1YklkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoc2VjdGlvbklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBkZWxldGUgYXZhaWxhYmxlVGltZS5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBPdmVyYm9va2VkIHNlc3Npb25zXG4gIGdldE92ZXJib29rZWRTZXNzaW9ucyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJPdmVyYm9va2VkU2Vzc2lvbnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25PdmVyYm9va2VkU2Vzc2lvbnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJPdmVyYm9va2VkU2Vzc2lvbnMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uT3ZlcmJvb2tlZFNlc3Npb25zKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBPdmVyYm9va2VkIGJvb2thYmxlc1xuICBnZXRPdmVyYm9va2VkQm9va2FibGVzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1Yk92ZXJib29rZWRCb29rYWJsZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25PdmVyYm9va2VkQm9va2FibGVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2x1Yk92ZXJib29rZWRCb29rYWJsZXMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuICBwcml2YXRlIGdldFNlY3Rpb25PdmVyYm9va2VkQm9va2FibGVzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBvdmVyYm9va2VkQm9va2FibGVJdGVtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX0JPT0tBQkxFU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbn1cbiJdfQ==
|