{"version":3,"sources":["assets/images/logo_faan.png","assets/images/check (1).svg","assets/images/admin_bg.jpg","assets/images/personal.png","assets/images/departures.svg","assets/images/doc.svg","assets/images/patternmm.svg","assets/images/fqa-bg.png","assets/images/arrivalService.png","assets/images/arrivalServiceIcon.png","assets/images/departureService.png","assets/images/departureServiceIcon.png","assets/images/carService.png","assets/images/carServiceIcon.png","assets/images/loungeService.png","assets/images/loungeServiceIcon.png","assets/images/card.png","assets/images/flag.png","assets/images/folder.svg","assets/images/award03.jpeg","assets/images/award1.png","assets/images/award3.jpeg","components/auth-layout/auth-layout.style.tsx","components/auth-layout/auth-layout.tsx","components/utilities/container/container.tsx","components/utilities/custom-button/custom-button.tsx","util/history.ts","util/misc/generate-class-names.ts","util/constants/airports.ts","components/utilities/custom-primary-button/custom-primary-button.tsx","components/app-layout/app-layout-style.tsx","components/app-layout/app-layout.tsx","util/constants/booking-statuses.ts","util/constants/client-statuses.ts","util/constants/business-natures.ts","util/constants/client-types.ts","util/constants/e-options.ts","util/constants/genders.ts","util/constants/government-staff-types.ts","util/constants/honorifics.ts","util/constants/means-of-id.ts","util/constants/notification-types.ts","util/constants/nigerian-states.ts","util/constants/roles.ts","util/constants/service-categories.ts","util/constants/transaction-types.ts","context/auth.context.tsx","store/notifications/notifications.types.ts","models/response/system-notification.ts","store/notifications/notifications.actions.ts","util/api-client.ts","store/notifications/notifications.thunk.ts","util/local-storage.ts","services/airports.service.ts","store/airports/airports.types.ts","services/auth.service.ts","store/airports/airports.actions.ts","store/loading/loading.types.ts","store/airports/airports.reducer.ts","util/misc/can-cancel-booking.ts","util/misc/format-currency.ts","store/loading/loading.actions.ts","store/auth/auth.types.ts","util/misc/generate-loader.ts","util/misc/get-metadata.ts","store/airports/airports.thunk.ts","store/auth/auth.actions.ts","store/bookings/bookings.types.ts","store/auth/auth.reducer.ts","store/bookings/bookings.actions.ts","store/bookings/pbooking.types.ts","store/bookings/bookings.reducer.ts","store/bookings/bookings.thunk.ts","store/bookings/pbooking.actions.ts","store/services/services.types.ts","store/bookings/pbooking.thunk.ts","store/bookings/pbooking.reducer.ts","store/loading/loading.reducer.ts","store/notifications/notifications.reducer.ts","store/services/services.actions.ts","store/transactions/transactions.types.ts","store/services/services.reducer.ts","store/services/services.thunk.ts","store/transactions/transactions.actions.ts","store/users/users.types.ts","store/transactions/transactions.reducer.ts","util/misc/formatters/format-currency.ts","util/misc/formatters/format-date-time.ts","services/transactions.service.ts","store/transactions/transactions.thunk.ts","store/users/users.actions.ts","store/reporting/reporting.types.ts","store/users/users.reducer.ts","store/users/users.thunk.ts","store/reporting/reporting.state.ts","store/vcard/vcard.types.ts","store/vcard/vcard.actions.ts","store/vcard/vcard.reducer.ts","store/index.ts","services/bookings.service.ts","services/services.service.ts","services/users.service.ts","services/reporting.ts","store/auth/auth.thunk.ts","components/auth-layout/sidebar-hook.tsx","components/auth-layout/left-side-bar/side-bar.style.tsx","components/auth-layout/left-side-bar/side-bar.tsx","components/breadcrumbs/breadcrumbs.tsx","components/auth-layout/top-bar/top-bar.style.tsx","components/auth-layout/top-bar/top-bar.tsx","components/auth-layout/top-navigation/top-navigation-style.tsx","components/auth-layout/top-navigation/top-navigation.tsx","components/cards/service-card/service-card.style.tsx","components/cards/service-card/service-card.tsx","components/cards/client-service-card/service-card.style.tsx","components/cards/client-service-card/service-card.tsx","components/error-boundary.tsx","components/nav-menu/nav-menu.tsx","components/layout.tsx","components/utilities/spinner.tsx","components/page-loader.tsx","components/protected-route.tsx","components/utilities/activity-item/activity-item.style.tsx","components/utilities/custom-dropdown/custom-dropdown.style.tsx","components/utilities/activity-item/activity-item.tsx","components/utilities/custom-dropdown/custom-dropdown.tsx","components/utilities/custom-table/custom-table.style.tsx","components/utilities/custom-table/custom-table.tsx","components/utilities/data-table/data-table.tsx","components/utilities/entry-form-container/entry-form-container.tsx","components/utilities/toast-notifications/toast-notification.tsx","components/utilities/flag-time/flag-time.style.tsx","components/utilities/flag-time/flag-time.tsx","components/utilities/sign-out-switch/sign-out-switch.style.tsx","components/utilities/sign-out-switch/sign-out-switch.tsx","components/utilities/toast-notifications/toast-notification-area.tsx","models/request/auth/forget-password.model.ts","models/request/auth/user-login.model.ts","util/validation/decorators/convert-to-number.ts","util/validation/decorators/is-mobile-number.ts","util/validation/decorators/should-match-field.ts","util/validation/validate-model.ts","util/validation/map-errors-to-form.ts","util/validation/porthacourtvalidation.ts","models/request/auth/constants.ts","models/request/auth/reset-password.model.ts","models/request/bookings/create-booking.model.ts","util/validation/decorators/dates/date-after.ts","components/form/form-date-picker.tsx","models/request/bookings/create-passenger.model.ts","models/request/bookings/update-booking.model.ts","models/request/bookings/create-passenger-booking.model.ts","models/request/bookings/create-porthacourt-booking.model.ts","models/request/services/create-service.model.ts","models/request/services/update-service.model.ts","models/request/survey/customer-survey.model.ts","models/request/users/common-registration-model.ts","models/request/users/create-corporate-organization.model.ts","models/request/users/create-user.model.ts","models/request/users/create-government-official.model.ts","models/request/users/create-individual.model.ts","models/request/users/update-client.model.ts","models/request/users/update-individual-client.model.ts","models/request/users/edit-user.model.ts","models/request/users/change-user-status.model.ts","models/request/users/edit-user-profile.model.ts","models/request/wallet/fund-wallet.ts","models/request/vcard/create-vcard.model.ts","components/form/form-back-button.tsx","models/request/vcard/update-vcard.model.ts","components/form/form-button.tsx","components/form/form-file-upload.tsx","components/form/form-large-radio-button.tsx","components/form/form-radio.tsx","components/form/form-range-input.tsx","components/form/form-stepper.tsx","components/form/form-switch.tsx","components/form/form-text-input.tsx","pages/admin/reporting/components/revenue-card.tsx","components/utilities/modal/modal-button.tsx","components/utilities/modal/modal.tsx","components/wallet/fund-wallet-modal.tsx","components/utilities/modal/renewal-modal.tsx","components/wallet/renewal.ts","components/wallet/renewal-modal.tsx","components/wallet/payment-modal.tsx","components/file/index.tsx","pages/auth/login/login.tsx","pages/auth/forget-password/forget-password.tsx","pages/auth/forget-password/reset-password.tsx","pages/landing-page/landing-page.style.tsx","components/nav-menu/landing-page-nav.tsx","components/accordion/FQA.tsx","pages/landing-page/landing-page.tsx","pages/dashboard/components/dashboard-page.style.tsx","pages/dashboard/pages/admin-dashboard.tsx","pages/dashboard/pages/accountant.dashboard.tsx","pages/dashboard/pages/airport-protocol-dashboard.tsx","pages/dashboard/pages/client-dashboard-page.tsx","pages/admin/bookings/view-booking/view-booking-page.style.tsx","pages/admin/manage-users/modals/create-user-modal.tsx","pages/admin/manage-users/modals/edit-user-modal.tsx","pages/admin/manage-users/users-table.tsx","pages/admin/manage-users/manage-users-page.tsx","components/form/form-check-box.tsx","pages/admin/services/modals/create-service-modal.tsx","pages/admin/services/modals/update-service-modal.tsx","pages/admin/services/services-table.tsx","pages/admin/services/service-page.tsx","pages/admin/bookings/list-bookings/bookings-table.tsx","pages/admin/services/view/view-service.style.tsx","pages/admin/services/view/view-service.tsx","pages/404/404-page.style.tsx","pages/404/no-match-page.tsx","pages/admin/manage-clients/clients-table.tsx","pages/admin/manage-clients/modals/update-client-modal.tsx","pages/admin/manage-clients/all-clients-page.tsx","pages/admin/manage-clients/view/view-client-page-table.tsx","pages/admin/manage-clients/view/view-client-page.style.tsx","pages/admin/manage-clients/view/view-client-page.tsx","pages/admin/manage-clients/registration-request/registration-request.style.tsx","pages/admin/manage-clients/registration-request/registration-request-page.tsx","pages/admin/manage-users/modals/edit-profile-modal.tsx","pages/admin/manage-clients/modals/update-individual-client-modal.tsx","pages/admin/manage-users/profile/user-profile-page.tsx","pages/admin/manage-users/activities/user-activities-table.tsx","pages/admin/manage-users/activities/user-activities-page.tsx","pages/admin/reporting/components/icons.tsx","pages/admin/reporting/components/chart/tab.tsx","pages/admin/reporting/components/chart/chart.tsx","util/constants/airline.ts","pages/admin/reporting/components/chart/charts-table.tsx","pages/admin/reporting/reporting.tsx","pages/dashboard/dashboard.page.tsx","pages/transaction-services/components/bookings-table.tsx","pages/transaction-services/components/funds-transaction-table.tsx","pages/transaction-services/components/registration-trannsactions-table.tsx","pages/transaction-services/components/transaction-services-table.tsx","pages/transaction-services/components/payment-table.tsx","pages/transaction-services/transaction-services.page.tsx","pages/transaction-services/views/client-transactions.tsx","pages/transaction-services/views/view-fund-service.tsx","pages/transaction-services/transactions-page.tsx","pages/admin/bookings/list-bookings/bookings-page.tsx","pages/admin/bookings/view-booking/view-pbooking-page.style.tsx","pages/admin/bookings/view-booking/view-booking-page.tsx","pages/transaction-services/view-transaction-service.page.tsx","pages/invoice/invoice.tsx","pages/admin/bookings/create-booking/create-booking-page.tsx","pages/admin/bookings/create-booking/components/create-booking-form.tsx","pages/admin/bookings/create-booking/components/create-booking-verification-page.tsx","pages/admin/bookings/create-booking/components/create-booking-invoice.tsx","pages/admin/bookings/create-booking/components/create-porthacourt-booking-form.tsx","pages/admin/bookings/create-booking/components/create-porthacourt-booking-verification-page.tsx","pages/auth/registration/register-account.tsx","pages/admin/client-services/service-page.tsx","pages/auth/registration/common.tsx","pages/auth/registration/register-corporate-organization.tsx","pages/auth/registration/verify-email.tsx","services/feedback.service.ts","store/feedback/feedback.thunk.ts","pages/customer-survey/customer-survey.page.tsx","pages/protocol-officer/modals/create-officer-modal.tsx","pages/protocol-officer/modals/edit-protocol-modal.tsx","pages/protocol-officer/protocols-table.tsx","pages/protocol-officer/protocol-officer-page.tsx","app.tsx","register-service-worker.ts","index.tsx","store/configure-store.ts"],"names":["module","exports","LayoutStyleWrapper","styled","div","AuthLayout","Fragment","className","this","props","children","React","Component","Container","baseUrl","document","getElementsByTagName","getAttribute","history","createBrowserHistory","basename","pastLocations","key","location","push","pop","length","index","locations","sessionStorage","setItem","JSON","stringify","isPreviousLocationWithinApp","setSearch","param","value","search","queryString","listen","action","setLocation","appLocation","getLocation","setLocations","Airports","generateClassNames","classNames","reduce","acc","current","Array","isArray","CustomPrimaryButton","Button","AppLayoutStyle","Header","AppLayout","Wrapper","HeaderBackButton","showIf","to","onClick","e","preventDefault","goBack","size","strokeWidth","Body","TabHeader","activeTab","setActiveTab","links","searchable","handleChange","handleSearch","isSearchNotOnChange","handleExport","style","fontWeight","undefined","tabs","map","name","query","active","type","placeholder","onChange","borderRadius","alignSelf","padding","marginTop","TabBody","BookingStatuses","ABV","YOL","QUO","QOW","MIU","IBA","CBQ","BNI","BCU","JOS","SKO","PHC","LOS","KAN","KAD","ILR","ENU","ABB","ClientStatuses","BookingStatusesMap","Processing","PaymentReceived","ServiceRendered","NoShow","Canceled","FlightCanceled","BookingStatusAdminAvailableState","BusinessNatures","ClientTypes","Inactive","Active","New","Deactivated","EOptions","Genders","ClientTypesMap","International","Domestic","GovernmentStaffTypes","GendersMap","Male","Female","Honorifics","State","Federal","MeansOfId","HonorificsMap","Mr","Mrs","Master","Miss","Dr","NotificationTypes","MeansOfIdList","NationalId","NationalPassport","VoterCard","DriversLicense","NigerianStates","Roles","ServiceCategories","CreateUserRolesMap","Admin","Auditor","Accountant","AirportManager","AirportProtocolCoordinator","Commercial","CreateProtocolRoleMap","Protocol","NewRoles","Client","TransactionTypes","Arrival","Departure","NotificationsActionNames","Context","createContext","canAccess","isInAirport","isClientOfType","AuthContext","Provider","user","useSelector","state","auth","authUser","returnAccessLevel","useCallback","role","strict","some","_role","clientType","clientTypeId","airportId","access","contextState","useMemo","Consumer","SystemNotification","content","sticky","id","flatten","Object","values","message","HttpMethods","NotificationsActions","notification","ADD","payload","REMOVE","NotificationsThunk","dispatch","add","remove","ApiClient","target","_","descriptor","originalFunction","a","args","call","response","console","error","token","localStorage","getItem","parse","extract","formData","host","window","protocol","headers","Headers","append","getBearerToken","isOrigin","process","signal","abortController","mode","removeItem","abort","method","endpoint","request","isFormData","AbortController","extractToken","resetSessionTimeout","requestContent","entries","filter","join","body","finalize","options","getFetchConfig","fetch","base","json","responseContent","status","create","Error","errors","store","AuthThunk","clearSession","unsetToken","data","ok","meta","title","cancelTimeout","timedOut","sessionTimeout","clearTimeout","setTimeout","Get","Post","Patch","Delete","AirportsActionNames","AirportsService","get","AuthService","login","post","patch","code","LoadingActionNames","AirportsActions","airports","LIST","initialState","canCancelBooking","booking","applicationUserId","bookingStatus","dateSection","moment","date_Of_Travel","timeSection","date_Of_Arrival","cancellationCutoff","Date","UTC","year","month","date","hours","minutes","subtract","isSameOrAfter","formatCurrency","currency","formatter","Intl","NumberFormat","format","AuthActionNames","LoadingActions","SET_LOADING","SET_DONE","generateLoader","promise","uniqueId","setLoading","returnValue","setDone","generateChartMetadata","titleKey","valueKey","useAcronym","lebels","dataValue","forEach","AirportsThunk","list","BookingActionNames","AuthActions","LOG_IN","LOG_OUT","authReducer","persistReducer","storage","PBookingActionNames","BookingActions","bookings","GET_ALL","GET_ONE","CLEAR","UPDATE","BookingsThunk","pageNumber","searchTerm","filterDates","BookingsService","getState","lastPage","firstPage","replace","clear","retrieve","details","client","closeModal","Promise","resolve","reject","nw","newDetails","dt","i","clientId","Success","invoiceNumber","update","cancel","ServiceActionNames","PBookingsThunk","createporthacourtbooking","errorMessage","serviceId","additionalOdc","tasks","notifications","idCounter","TransactionsActionNames","ServiceActions","services","service","RETRIEVE","GET_BOOKINGS","serviceBookings","ServiceThunk","ServicesService","getAllServices","allServices","service_id","clearService","getSingleService","viewService","getClientService","serviceDetails","createService","addService","updateService","getBookingsByServiceId","getServiceBookings","UsersActionNames","TransactionsActions","transactions","RETRIEVE_TYPE","PAY_RENEWAL_ID","transactionType","convertCurrencyToDecimal","amount","numberString","parseInt","formatTime","time","formatDate","TransactionsService","page","path","url","model","covartedModel","invoicenumber","TransactionsThunk","sort","b","dateCreated","payRenewalId","transaction","find","transactType","transactionId","cb","retrieveByTransactionId","retrieveTransactionTypeById","Registration","retrieveType","getTransactionByDate","ReportingActionNames","UsersActions","ADD_USER","users","GET_USERS","protocols","GET_PROTOCOLS","allProtocols","GET_ALL_PROTOCOLS","GET_CLIENTS","stats","GET_CLIENT_STATS","GET_CLIENT_BOOKING_STAT","GET_DASHBOARD_STATS","userDetails","GET_USER","usersBookings","GET_USERBOOKINGS","clientDetails","UPDATE_CLIENT","activities","GET_ACTIVITIES","userBookingMeta","protocolsMeta","usersMeta","clients","clientsMeta","dashboardStats","userActivitiesMeta","UsersThunk","callback","UsersService","createUser","addUser","closeModelCalback","updateUser","createCorporateOrganization","successfulRegistration","createGovernmentOfficial","createIndividual","getUsers","getProtocols","getAllProtocols","searchTerms","getClients","getDashboardStats","getClientBookingStats","getClientStats","user_id","viewUser","getUser","getUserBooking","changeUserStatus","updateClient","queryParams","userActivities","getUserActivities","updateIndividualClient","updateUserProfile","VcardActionNames","reportings","reportingsIntervals","ReportinThunk","dateFilter","ReportingService","getReporting","ReportingActions","interval","getReportinginterval","getReportingInterval","REPRTING_GET","REPRTING_GET_INTERVAL","vcards","reducers","_state","unshift","clientStats","clientBookingStats","userIndex","findIndex","currentUser","updatedUser","omit","table","serviceIndex","serviceBookingsMeta","bookingDetails","bookingIndex","merge","loading","transactionsMeta","openTransaction","transactionTypeMeta","vcard","searchPath","filterbByDate","startDate","endDate","initialQuery","modifiedquery","delete","batchCode","documentName","fileType","config","Info","blob","downloadedFile","saveAs","loginDetails","logIn","setToken","forgotPasswordDetails","requestPasswordReset","requestResetPassword","actions","verifyEmail","onSuccess","onFail","logOut","Warning","useSidebar","useDispatch","handleLogout","link","icon","Home","Users","Grid","DollarSign","Clipboard","Activity","Flag","Bell","inactive","User","SidebarMenuStyleWrapper","SidebarMenu","useContext","alt","src","require","width","Icon","lastName","business_Name","Breadcrumbs","breadcrumbs","previousPages","slice","currentPage","TopBarStyleWrapper","TopBar","TopNavigationStyle","TopNavigation","useState","sidebar","setSidebar","toggleSidebar","ServiceCardStyleWrapper","Link","ServiceCardComponent","desc","aria-hidden","ClientServiceCardStyleWrapper","ClientServiceCardComponent","price","ErrorBoundary","hasError","errorInfo","NavMenu","isOpen","toggle","setState","light","fluid","marginRight","marginLeft","tag","navbar","StickyBackground","backgroundImage","LoadingSpinner","pros","PageLoaderWrapper","motion","PageLoader","isLoading","messages","variant","variants","initial","opacity","display","visible","animate","keys","span","exit","ManagedRoute","authFunction","isPrivate","useLocation","currentLocation","pathname","UNAUTHORIZED","REQUIRES_LOGOUT","REQUIRES_AUTH","warn","useEffect","referrer","AuthedRoute","ProtectedRoute","ExternalRoute","ActivityItemStyleWrapper","StyledDropdown","Dropdown","CustomDropdownItem","CustomDropdownMenu","DropdownMenu","CustomDropdown","TriggerComponent","triggerComponent","setIsOpen","prevState","cursor","right","CustomTableStyleWrapper","CustomTable","headData","showHead","responsive","StyledTable","Table","ButtonArea","DataTable","hideHead","columns","useTable","pageSize","useSortBy","usePagination","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","pageIndex","canPreviousPage","canNextPage","gotoPage","nextPage","previousPage","pageOptions","pages","totalPages","midpoint","Math","floor","head","tail","includes","headerGroup","getHeaderGroupProps","column","getHeaderProps","render","row","getRowProps","cells","cell","j","getCellProps","disabled","section","totalCount","Colors","StyledDiv","EntryFormContainer","FlagTimeStyleWrapper","FlagTime","setTime","formattedTime","setInterval","clearInterval","bind","globalThis","SignoutStyleWrapper","SignOutSwitchComponent","ToastNotification","dismissNotification","timeout_duration","NOTIFICATION_TIMEOUT","Check","X","Triangle","timeout","animationProps","x","capitalize","ToastNotificationArea","ForgetPasswordModel","IsEmail","UserLoginModel","MinLength","Email","Password","ConvertToNumber","object","propertyName","registerDecorator","constructor","constraints","validator","validate","IsMobileNumber","validationOptions","n","firstChar","substring","test","isValid","ShouldMatchField","field","validateFormValues","beforeValidation","validationErrors","validateSync","whitelist","prev","property","IsOptionalWhenPortharcourtServiceFalse","portharcourtService","defaultMessage","CONTAINS_SPECIAL_CHARACTER","CONTAINS_UPPERCASE","CONTAINS_LOWERCASE","CONTAINS_DIGIT","ResetPasswordModel","Matches","ActivationCode","ArrayLength","ValidatorConstraint","async","array","CreateBookingModel","Allow","isAfter","now","IsISO8601","IsEnum","ValidateNested","IsArray","Validate","Equals","Service","ServiceId","AirportId","Accept","CreatePassenger","ValidateIf","o","MiddleName","Others","IsBoolean","additionalServiceId","UpdateBookingModel","IsPositive","Id","BookingStatus","CreatePassengerBooking","IsString","IsNotEmpty","bookingOrService","pick","Passengers","toPassenger","md5","Flight_Number","Date_Of_Arrival","Date_Of_Travel","CreatePorthacourtBooking","isNaN","toString","CreateServiceModel","ServiceTypeId","UpdateServiceModel","IsOptional","Name","Description","description","Price","Status","serviceTypeId","defaultOdc","CustomerSurveyModel","Min","Max","FeedbackText","FriendlinessRank","KnowledgeRank","QuicknessRank","Yes","CommonRegistrationModel","ClientTypeId","IsIn","CreateUserModel","GovernmentStaffType","Business_Name","Name_Of_Government_Officials_Office","Registered_Address","Gender","Firstname","endsWith","trim","LastName","CreateProtocolModel","FirstName","UpdateClientModel","business_Nature","registered_Address","registration_Number","phoneNumber","UpdateIndividualClientModel","firstName","middleName","meansOfId","identification","EditUserModel","email","PhoneNumber","Role","ChangeUserStatusModel","account_Status","EditUserProfileModel","firstname","FundWalletModel","IsNumber","IsAlphanumeric","CreateVcardModel","cardNumber","color","airpot","button","FormButton","LabelIdle","renderToString","FilePond","attrs","labelIdle","allowRevert","instantUpload","onprocessfile","file","abortLoad","label","RadioContainer","FormRadio","useField","validState","touched","validationClass","checked","PresentationalFormRadio","defaultChecked","FormRangeInputContainer","FormRangeIndicator","min","max","step","background","height","fontSize","flex","FormRangeInput","tooltipOpen","setTooltipOpen","ref","useRef","isFocused","setIsFocused","focusClass","onfocus","onblur","placement","Div","FormStepper","steps","currentStep","stepsActivated","fill","isActivated","SwitchContainer","PresentationalFormSwitch","FormTextInputContainer","SpecialInput","Field","FormTextInput","as","compact","inputProps","toggleField","special","fieldType","setFieldType","showPassword","setShowPassword","validationProps","EyeIcon","Eye","EyeOff","togglePassword","BorderColor","Title","DatePickerContainer","LightGrey","Primary","DarkGrey","CustomInput","forwardRef","isTime","FormDatePicker","minDate","maxDate","helpers","currentDate","setCurrentDate","showTimeSelect","showTimeSelectOnly","timeIntervals","timeCaption","dateFormat","selected","toDate","openToDate","formattedDate","showMonthDropdown","showYearDropdown","dropdownMode","customInput","onSelect","setTouched","placeholderText","ButtonBody","ModalButton","StyledModal","Modal","customSize","lg","md","CustomModal","close","FundWalletModal","onComplete","initialValues","onSubmit","setSubmitting","fundWallet","then","res","catch","finally","handleSubmit","isSubmitting","setFieldValue","sm","currencyMask","RenewalsModel","RenewalModal","renewalDate","fetchPayRenewalId","backgroundColor","PaymentModal","client_id","payment","iframe","LoginPage","href","handleLogIn","validateOnChange","submitCount","Mail","Lock","ForgetPasswordPage","handleFogetPassword","ResetPasswordPage","useParams","handleResetPassword","LandingPageStyleWrapper","FAQImage","LandingPageNav","setOpen","expand","fixed","FAQ","defaultOpen","stayOpen","targetId","accordionId","LandingPage","ArrivalIcon","DepartureIcon","Car","CarIcon","Lounge","LoungeIcon","getFullYear","rel","DashboardPageStyleWrapper","AdminDashbboardStyle","AdminDashboardPage","filteredBookings","shared_links","count","total","admin_links","todaybookings","manager_links","new","inActive","cards","showSidebar","accessor","Cell","original","fromNow","profile_Status","applicationUser","AccountantDashboard","paid","unpaid","text","AirportProtocolDashboardPage","log","all_bookings","sorted_activities","sorted_bookings","pending_bookings","noshow_bookings","rendered_bookings","latest_bookings","latest_activities","getAllUsers","ClientDashboardPage","access_level","StyleWrapper","HeaderStyleWrapper","ViewBookingInformationComponent","booking_id","setValues","bookingProtocols","canCancel","handleSetStatus","paymentVerified","handleAssignProtocol","updateBooking","fetchAllProtocols","flight_Number","modifiedBy_FirstName","bookedBy_FirstName","Set","xl","wheel_Chair","passenger","special_Requirement","additionalService","passengers","closeMenuOnSelect","isMulti","CreateUserModal","handleCreateUser","EditUserModal","editModalOpen","setEditModalOpen","activeUser","handleUpdateUser","isMatch","UsersTable","setActiveUser","handleModal","ManageUsersPage","createModalOpen","setCreateModalOpen","EditModalOpen","setSearchTem","UpdateUser","fetchUsers","filterdUsers","toLowerCase","indexOf","tabId","CheckBoxContainer","FormCheckBox","hideError","CreateServiceModal","handleCreateService","htmlFor","UpdateServiceModal","handleUpdateService","enableReinitialize","ServicesTable","setActiveService","setUpdateModalOpen","toLocaleString","bookingCount","intent","ServicePage","updateModalOpen","activeService","filtered_services","BookingsTable","refreshFunction","handleUpdateBooking","extraColumns","_user","orderBy","ServiceInformationComponent","bold","Tag","ViewServicePage","getService","listBookings","NoMatchPageStyleWrapper","NoMatchPage","ClientsTable","UpdateClientModal","handleUpdateClient","organization_CategoryId","AllClientPage","activeClient","setActiveClient","fetchClients","ClientPageTable","ViewClientPageStyleWrapper","InsufficientFundsWrapper","ViewClientPage","isFunding","setFundingModal","isRenewal","setRenewalModal","setAmount","setSelectedRenewalDate","isFundingWallet","setFundingWallet","balance","setBalance","loggedInUser","getUserBoking","retrieveTransactionTypebyId","Fund","getWalletBalance","newBalance","err","clientFiles","exportFile","exportInvoice","fetchFile","exportClientActivitiesFile","exportClienFunds","dateString","toUpperCase","customerAIN","updatedBy","name_Of_Government_Officials_Office","download","colSpan","RegistrationRequestStyleWrapper","RegistrationRequestPage","crumbs","abortFetchTransaction","retrieveByTrasactionId","paymentStatus","EditUserProfileModal","UpdateIndividualClientModal","Briefcase","Book","UserProfilePage","ClientModalOpen","setClientModalOpen","userProfile","business_name","full_name","fetchUser","handleUpdateUserProfile","UpdateUserProfile","handleUpdateIndividualClient","concat","ActivitiesTable","activity","UserActivitiesPage","PageNumber","InCome","xmlns","viewBox","d","Passenger","BorderColorMap","Revenue","Bookings","Generated","CardWrapper","borderColor","RevenueCard","money","borderColorTitle","split","formattedAmount","String","formatCurrencyWithNairaSign","TabsWrapper","TabsHeader","TabsBody","ChartJS","register","ArcElement","CategoryScale","LinearScale","BarElement","Tooltip","Legend","Airlines","plugins","legend","position","BarChart","labels","datas","datasets","barThickness","PieChart","borderWidth","Pie","ChartsTable","topClients","topClientsServiceRendered","airpotIntervals","topClientsLebels","topClientsRevenue","topClientsServiceRenderedLebel","topClientsServiceRenderedRevenue","airportBookings","airportNames","totalBookings","airportPassengers","airportNamesPassengers","airportRevenues","handleGetReportingStats","getReportingsInterval","selectedOption","setSelectedOption","topsClientLables","topsClientServiceLebel","y","border","event","option","Reporting","setDate","getReportings","handleFilter","ReactDOM","unstable_batchedUpdates","marginBottom","totalRevenue","totalRevenueUsed","DashboardPage","Page","BookingsTransactionsTable","createdBy","quantity","FundsTransactionsTable","hideOptions","useHistory","rrrNo","invoiceNo","RegistrationTransactionsTable","TransactionServicesTable","isBooking","handleRefreshPayment","refreshInvoicePayment","PaymentTransactionsTable","isPayment","setIsPaymentModal","selectedTransactionId","setSelectedTransactionId","exportRenewalInvoice","renewalId","renewalPaymentStatus","OtherUsersTransactionServices","setDateFilter","setSearchTerm","retrieveByTransactionType","filterdTransactionType","customerName","exportBookingFile","exportFundsFile","exportRegFile","ClientTransactionServices","ViewFundingTransaction","bookingId","canPay","toLocaleLowerCase","open","TransactionServicesPage","BookingsPage","ViewPorthacourtBookingInformationComponent","ViewBookingPage","_booking","porthacourtProcess","exportBooking","ViewTransactionServicePage","setReady","addBorder","borderStyle","Pair","flexDirection","Listing","styles","TableHead","TableCell","borderLeftWidth","borderRightWidth","borderLeftColor","borderRightColor","Invoice","airport","Logo","header","textAlign","justifyContent","StyleSheet","paddingTop","paddingBottom","paddingHorizontal","ProgressSteps","AirlinesMap","A_A_RANO","AERO_CONTRACTORS","AFRIQIYAH","AFRICA_WORLD_AIRLINES","AIR_CÔTE_D_IVOIRE","AIR_FRANCE","AIR_PEACE","ARIK_AIR","ASKY_AIRLINES","AZMAN","BRITISH_AIRWAYS","CABO_VERDE_AIRLINES","CAMAIR_CO","CRONOS_AIRLINEE","DANA_AIR","DELTA_AIRLINES","DORNIER_AVIATION","EAS_AIRLINES","EGYPT_AIR","EMIRATES","ETHIOPIAN_AIRLINES","FIRST_NATION","GREEN_AFRICA_AIRLINE","IBERIA_AIRLINES","IBOM_AIR","KABO_AIR","KANEM_AIR","KENYA_AIRWAYS","KLM","K_IMPEX_AIRLINE","LUFTHANSA","MAX_AIR","MIDDLE_EAST_AIRLINE","OVERLAND_AIRWAYS","QATAR_AIRWAYS","ROYAL_AIR_MOROC","RWANDAIR","SOUTH_AFRICAN_AIRWAYS","SWISS_AIR","TAT_NIGERIA","TAAG_ANGOLA","TURKISH_AIRLINES","UNITED_AIRLINES","UNITED_NIGERIA_AIRLINES","VALUE_JET","VIRGIN_ATLANTIC_AIRLINE","WEST_LINK_AIRLINES","XEJET","CreateBookingForm","setPassengerBookings","proceed","passengerBookings","setPassengerbookings","isTermsOpen","setTermsOpen","lastPassengerBooking","setLastPassengerBooking","additionalServicePrice","s","removePassenger","newPassengersList","resetForm","Calendar","air","airline","Wheel_Chair","Special_Requirement","Accepted","CreateBookingVerificationPage","setBooking","getAdditionalServicePrice","totalAdditionalService","pass","calculateAdditionalServicePrices","handleCreateBooking","bookingsMap","passengerBooking","hash","hashDetails","toBooking","returnBooking","handledleConfirmBooking","isCreatingBooking","maxWidth","Card","CreateBookingInvoice","CreateBookingFormP","setPassengerBooking","setPassengerbooking","isMountedRef","bookingAdded","setBookingAdded","defaultODCValue","handleAdditionalODCChange","existingBooking","addBookingToTable","bookingToRemove","CreatePorthacourtBookingVerificationPage","addODCValue","handleCreateSingleBooking","totalPrice","numberOfODC","totalODCPrice","calculateDefaultODCValue","AccountTypes","CreateBookingPage","porthacourtBooking","setPorthacourtBooking","selectedService","DetailsStep","setCurrentStep","VerificationStep","invoiceStep","ClientServicePage","RegistrationStages","registerPlugin","FilePondPluginFileValidateSize","FilePondPluginFileValidateType","VerifyEmailPage","successful","setSuccessful","match","useRouteMatch","handleResult","params","FeedbackService","survey","FeedbackThunk","sumbitSurvey","CustomerSurveyPage","handleSubmitSurvey","submit","No","Maybe","ProtocolTable","ProtocolOfficersPage","protocolDetails","handleUpdateProtocol","prtocolDetails","fetchProtocols","Font","family","exact","component","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","persistor","persistStore","configureStore","getElementById","URL","origin","addEventListener","contentType","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"2GAAAA,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,sC,kBCA3CD,EAAOC,QAAU,02B,oBCAjBD,EAAOC,QAAU,IAA0B,wC,0CCA3CD,EAAOC,QAAU,IAA0B,iC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,4C,kBCA3CD,EAAOC,QAAU,87O,oBCAjBD,EAAOC,QAAU,IAA0B,8C,kBCA3CD,EAAOC,QAAU,s4O,oBCAjBD,EAAOC,QAAU,IAA0B,wC,kBCA3CD,EAAOC,QAAU,09N,oBCAjBD,EAAOC,QAAU,IAA0B,2C,kBCA3CD,EAAOC,QAAU,srM,kBCAjBD,EAAOC,QAAU,88J,oLCAjBD,EAAOC,QAAU,0wD,oBCAjBD,EAAOC,QAAU,IAA0B,oC,0CCA3CD,EAAOC,QAAU,IAA0B,sC,oBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,qC,kUCE9BC,EAAqBC,IAAOC,IAAV,m0GCwBhBC,E,4JAjBX,WACI,OACI,kBAAC,IAAMC,SAAP,KACI,kBAAC,GAAD,MACA,kBAACJ,EAAD,KACI,kBAAC,GAAD,MACA,yBAAKK,UAAU,iBACX,yBAAKA,UAAU,eACX,yBAAKA,UAAU,qBAAqBC,KAAKC,MAAMC,kB,GATlDC,IAAMC,WCGhBC,G,mKAPX,WACI,IAAQH,EAAaF,KAAKC,MAAlBC,SAER,OAAO,yBAAKH,UAAU,mBAAmBG,O,GAJzBC,IAAMC,Y,iBCOHD,IAAMC,U,mECP3BE,EAAUC,SAASC,qBAAqB,QAAQ,GAAGC,aAAa,QACzDC,EAAUC,YAAqB,CAAEC,SAAUN,IAuClDO,EAAgB,I,WAjClB,aAAe,yBAHPA,cAA4B,GAGtB,KAFGC,IAAM,qBAGnBd,KAAKa,cAAgB,G,wCAGzB,SAAYE,GACRf,KAAKa,cAAcG,KAAKD,K,iBAG5B,WACIf,KAAKa,cAAcI,Q,oBAGvB,WACI,OAAOjB,KAAKa,cAAcK,S,yBAG9B,SAAmBC,EAAeJ,GAC9Bf,KAAKa,cAAcM,GAASJ,I,yBAGhC,SAAmBI,GACf,OAAOnB,KAAKa,cAAcM,K,0BAG9B,SAAoBC,GAChBpB,KAAKa,cAAgBO,I,kCAGzB,WACIC,eAAeC,QAAQtB,KAAKc,IAAKS,KAAKC,UAAUxB,KAAKa,oB,MAkCtD,SAASY,IACZ,OAAOZ,EAAcK,SAAW,EAW7B,SAASQ,EAAuDC,EAA2BC,GAC9F,IAAKD,EACD,OAAOjB,EAAQM,KAAK,CAAEa,OAAQ,KAGlC,IAAMA,EAASC,QAAkBpB,EAAQK,SAASc,QAClDA,EAAOF,GAASC,EAEhBlB,EAAQM,KAAK,CACTa,OAAO,IAAD,OAAMC,YAAsBD,MAvB1CnB,EAAQqB,QA1BR,SAA6BhB,EAAoBiB,GAC7C,OAAQA,GACJ,IAAK,OAEDnB,EAAcG,KAAKD,GACnB,MACJ,IAAK,UAEDF,EAAcoB,YAAYpB,EAAcK,SAAW,EAAGH,GACtD,MACJ,IAAK,MAEDF,EAAcI,MAEd,IAAMiB,EAAcrB,EAAcsB,YAAYtB,EAAcK,SAAW,GACjEgB,GAAeA,EAAYpB,MAAQC,EAASD,KAG9CD,EAAcuB,aAAa,CAACrB,QC7DrC,I,QCFKsB,EDECC,EAAqB,SAArBA,IAAwD,IAAD,uBAA9BC,EAA8B,yBAA9BA,EAA8B,gBAChE,OAAOA,EAAWC,QAAe,SAACC,EAAKC,GACnC,OAAKA,EAIDC,MAAMC,QAAQF,GACPJ,EAAkB,WAAlB,cAAsBI,IAG1BD,EAAM,IAAMC,EAPRD,IAQZ,KEVMI,EAAsBlD,YAAOmD,IAAPnD,CAAH,0uCCDnBoD,EAAiBpD,IAAOC,IAAV,myDAyFdoD,EAASrD,IAAOC,IAAV,ijB,gBCwDNqD,EAAY,CACrBC,QArIsB,SAAC,GAAkB,IAAhBhD,EAAe,EAAfA,SACzB,OAAO,kBAAC6C,EAAD,KAAiB7C,IAqIxB8C,SACAG,iBAxBC,SAAC,GAAwB,IAAtBC,EAAqB,EAArBA,OAAQpB,EAAa,EAAbA,OACZ,OAAa,OAANoB,QAAM,IAANA,OAAA,EAAAA,MAAc3B,IACjB,kBAAC,IAAD,CACI1B,UAAU,sBACVsD,GAAI,IACJC,QAAS,SAACC,GACNA,EAAEC,iBAEExB,IAAM,OAAIoB,QAAJ,IAAIA,OAAJ,EAAIA,KACVpB,IAIJtB,EAAQ+C,WAGZ,kBAAC,IAAD,CAAaC,KAAM,GAAIC,YAAa,KAExC,MAOJC,KApI2C,SAAC,GAA6B,IAA3B1D,EAA0B,EAA1BA,SAAUH,EAAgB,EAAhBA,UACxD,OAAO,yBAAKA,UAAWuC,EAAmB,eAAgBvC,IAAaG,IAoIvE2D,UAvHC,SAAC,GAWC,IAVHC,EAUE,EAVFA,UACAC,EASE,EATFA,aACAC,EAQE,EARFA,MACA9D,EAOE,EAPFA,SACA+D,EAME,EANFA,WACAC,EAKE,EALFA,aACAtC,EAIE,EAJFA,MACAuC,EAGE,EAHFA,aAEAC,GACE,EAFFC,aAEE,EADFD,qBAEA,OACI,yBAAKrE,UAAU,kBAAkBuE,MAAO,CAAEC,WAAY,MACjDP,QAAuBQ,IAAdV,GAA2BC,GACjC,kBAAC,IAAD,CAAKhE,UAAU,UAAU0E,MAAI,GACxBT,EAAMU,KAAI,gBAAGvD,EAAH,EAAGA,MAAOwD,EAAV,EAAUA,KAAMC,EAAhB,EAAgBA,MAAhB,OACP,kBAAC,IAAD,CAAS7E,UAAU,gBAAgBe,IAAKK,GACpC,kBAAC,IAAD,CACIpB,UAAU,gBACV8E,OAAQ1D,IAAU2C,EAClBR,QAAS,WACLS,EAAa5C,GAETyD,GACAlE,EAAQM,KAAK4D,EAAM1D,OAAN,WAAmB0D,EAAM,GAAzB,YAA+BA,EAAM,IAAO,OAIhED,OAIZV,GACG,yBAAKlE,UAAU,4BACX,yBAAKA,UAAU,0BACX,kBAAC,IAAD,CAAQ2D,KAAM,GAAIC,YAAa,EAAG5D,UAAU,wBAC5C,2BACI+E,KAAK,OACL/E,UAAU,uBACVgF,YAAY,SACZC,SAAUd,EACVtC,MAAOA,KAGdwC,GACG,6BACI,kBAACvB,EAAD,CACIyB,MAAO,CACHW,aAAc,OACdC,UAAW,SACXC,QAAS,eACTC,UAAW,OAEf9B,QAASa,EACTpE,UAAU,kBAEV,kBAAC,IAAD,CAAM2D,KAAM,GAAIC,YAAa,IAC7B,8BAAO,cAuBlCzD,IAuCTmF,QAlC6D,SAAC,GAA6B,IAA3BtF,EAA0B,EAA1BA,UAAcE,EAAY,iBAC1F,OAAO,uCAAKF,UAAWuC,EAAmB,WAAYvC,IAAgBE,M,2BHxH9DoC,O,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,aAAAA,I,cAAAA,I,cAAAA,I,cAAAA,I,cAAAA,I,cAAAA,I,cAAAA,I,cAAAA,I,eAAAA,M,KAqBL,I,IIrBKiD,EJqBY,mBACnBjD,EAASkD,IAAM,wCADI,cAEnBlD,EAASmD,IAAM,gBAFI,cAGnBnD,EAASoD,IAAM,mCAHI,cAInBpD,EAASqD,IAAM,0CAJI,cAKnBrD,EAASsD,IAAM,mCALI,cAMnBtD,EAASuD,IAAM,kBANI,cAOnBvD,EAASwD,IAAM,uCAPI,cAQnBxD,EAASyD,IAAM,iBARI,cASnBzD,EAAS0D,IAAM,sCATI,cAUnB1D,EAAS2D,IAAM,wBAVI,cAWnB3D,EAAS4D,IAAM,4CAXI,cAYnB5D,EAAS6D,IAAM,uCAZI,cAanB7D,EAAS8D,IAAM,0CAbI,cAcnB9D,EAAS+D,IAAM,2CAdI,cAenB/D,EAASgE,IAAM,gCAfI,cAgBnBhE,EAASiE,IAAM,gCAhBI,cAiBnBjE,EAASkE,IAAM,qCAjBI,cAkBnBlE,EAASmE,IAAM,gC,SIvCRlB,K,wBAAAA,E,mCAAAA,E,mCAAAA,E,iBAAAA,E,iCAAAA,E,qBAAAA,M,KASL,I,ECTKmB,GDSCC,IAAkB,mBAC1BpB,EAAgBqB,WAAarB,EAAgBqB,YADnB,cAE1BrB,EAAgBsB,gBAAkB,oBAFR,cAG1BtB,EAAgBuB,gBAAkB,oBAHR,cAI1BvB,EAAgBwB,OAAS,WAJC,cAK1BxB,EAAgByB,SAAWzB,EAAgByB,UALjB,cAM1BzB,EAAgB0B,eAAiB1B,EAAgB0B,gBANvB,GASlBC,IAA4E,mBACpF3B,EAAgBqB,WAAa,CAC1BrB,EAAgBuB,gBAChBvB,EAAgBwB,OAChBxB,EAAgB0B,eAChB1B,EAAgByB,WALiE,cAOpFzB,EAAgBsB,gBAAkB,IAPkD,cAQpFtB,EAAgBuB,gBAAkB,IARkD,cASpFvB,EAAgBwB,OAAS,IAT2D,cAUpFxB,EAAgByB,SAAW,IAVyD,cAWpFzB,EAAgB0B,eAAiB,IAXmD,GElB5EE,GAAkB,CAC3B,cACA,WACA,wBACA,eACA,yBACA,8BACA,UACA,qBACA,wBACA,aACA,MACA,gBACA,0BACA,cACA,wBACA,cACA,qBACA,0BACA,iBACA,mBACA,W,SDrBQT,K,wBAAAA,E,oBAAAA,E,gBAAAA,E,UAAAA,E,2BAAAA,Q,KAQL,I,GERKU,GFQkB,mBACzBV,GAAeE,WAAaF,GAAeE,YADlB,cAEzBF,GAAeW,SAAWX,GAAeW,UAFhB,cAGzBX,GAAeY,OAASZ,GAAeY,QAHd,cAIzBZ,GAAea,IAAMb,GAAea,KAJX,cAKzBb,GAAec,YAAcd,GAAec,c,SEbrCJ,O,iCAAAA,I,wBAAAA,Q,KAKL,ICLKK,G,GCAAC,GFKCC,IAAc,qBACtBP,GAAYQ,cAAgB,iBADN,eAEtBR,GAAYS,SAAW,YAFD,K,SCLfJ,O,aAAAA,I,WAAAA,I,kBAAAA,Q,cCAAC,K,YAAAA,E,iBAAAA,Q,KAKL,I,GCLKI,GDKCC,IAAU,qBAClBL,GAAQM,KAAO,QADG,eAElBN,GAAQO,OAAS,UAFC,K,SCLXH,K,cAAAA,E,mBAAAA,Q,KAKL,I,GCLKI,GDKwB,qBAC/BJ,GAAqBK,MAAQ,SADE,eAE/BL,GAAqBM,QAAU,Y,SCPxBF,K,SAAAA,E,WAAAA,E,gBAAAA,E,WAAAA,E,UAAAA,Q,KAQL,ICRKG,GDQCC,IAAa,qBACrBJ,GAAWK,GAAK,OADK,eAErBL,GAAWM,IAAM,QAFI,eAGrBN,GAAWO,OAAS,UAHC,eAIrBP,GAAWQ,KAAO,OAJG,eAKrBR,GAAWS,GAAK,OALK,K,SCRdN,K,0CAAAA,E,qCAAAA,E,uBAAAA,E,mCAAAA,Q,KAOL,ICPKO,GDOCC,GAAgB,CACzBR,GAAUS,WACVT,GAAUU,iBACVV,GAAUW,UACVX,GAAUY,gBEXDC,GAAiB,CAC1B,OACA,UACA,YACA,UACA,SACA,UACA,QACA,QACA,cACA,QACA,SACA,MACA,QACA,QACA,cACA,QACA,MACA,SACA,SACA,OACA,UACA,QACA,OACA,QACA,QACA,WACA,QACA,OACA,OACA,OACA,MACA,UACA,SACA,SACA,SACA,OACA,Y,SDrCQN,O,qBAAAA,I,eAAAA,I,iBAAAA,I,sBAAAA,Q,YEAAO,G,mBAAAA,K,cAAAA,E,wBAAAA,E,kBAAAA,E,wBAAAA,E,gBAAAA,E,iCAAAA,E,0DAAAA,E,qBAAAA,Q,KAWL,I,GCXKC,GDWCC,IAAkB,qBAC1BF,GAAMG,MAAQH,GAAMG,OADM,eAE1BH,GAAMI,QAAUJ,GAAMI,SAFI,eAG1BJ,GAAMK,WAAaL,GAAMK,YAHC,eAI1BL,GAAMM,eAAiBN,GAAMM,gBAJH,eAK1BN,GAAMO,2BAA6BP,GAAMO,4BALf,eAM1BP,GAAMQ,WAAaR,GAAMQ,YANC,IASlBC,GAAqB,eAC7BT,GAAMU,SAAWV,GAAMU,UAQfC,IALQ,6BACdT,IADc,kBAEhBF,GAAMY,OAASZ,GAAMY,SAGF,CAACZ,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,c,SC7BpDP,O,qBAAAA,I,0BAAAA,Q,KAKL,ICLKY,GDKqB,qBAC5BZ,GAAkBa,QAAU,WADA,eAE5Bb,GAAkBc,UAAY,c,SCPvBF,O,uBAAAA,I,+BAAAA,I,gBAAAA,Q,KCeZ,ICRYG,GDcNC,GAAUhK,IAAMiK,cANiB,CACnCC,UAAW,kBAAM,GACjBC,YAAa,kBAAM,GACnBC,eAAgB,kBAAM,KA8FbC,GAAc,CACvBL,WACAM,SA3FuB,SAAC,GAAkB,IAAhBvK,EAAe,EAAfA,SACRwK,EAASC,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAAlEC,SAEFC,EAAoB5K,IAAM6K,aAC5B,SAACC,EAAaC,GACV,GAAIA,EAEA,OAAW,OAAJR,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAASA,EAG1B,cAAQP,QAAR,IAAQA,OAAR,EAAQA,EAAMO,MACV,KAAK/B,GAAMG,MACP,OAAO,EACX,KAAKH,GAAMY,OACP,OAAOmB,IAAS/B,GAAMY,OAC1B,KAAKZ,GAAMO,2BACP,OAAOwB,IAAS/B,GAAMO,2BAC1B,KAAKP,GAAMM,eACP,OAAOyB,IAAS/B,GAAMM,eAC1B,KAAKN,GAAMK,WACX,KAAKL,GAAMI,QACX,KAAKJ,GAAMQ,WACP,OAAOuB,IAAS/B,GAAMK,YAAc0B,IAAS/B,GAAMI,SAAW2B,IAAS/B,GAAMQ,WACjF,QACI,OAAO,KAGnB,CAACgB,IAGCL,EAAYlK,IAAM6K,aACpB,SAACC,EAAuBC,GACpB,QAAKR,IAID/H,MAAMC,QAAQqI,GACPA,EAAKE,MAAK,SAACC,GAAD,OAAWL,EAAkBK,EAAOF,MAGlDH,EAAkBE,EAAMC,MAEnC,CAACR,EAAMK,IAGLR,EAAiBpK,IAAM6K,aACzB,SAACK,GACG,OACIhB,EAAUnB,GAAMG,QACfgB,EAAUnB,GAAMY,UAAe,OAAJY,QAAI,IAAJA,OAAA,EAAAA,EAAMY,gBAAiBnE,GAAYQ,gBAC3D,OAAJ+C,QAAI,IAAJA,OAAA,EAAAA,EAAMY,gBAAiBD,IAG/B,CAACX,EAAML,IAOLC,EAAcnK,IAAM6K,aACtB,SAACO,GAAqD,IAAlCC,EAAiC,uDAAX,OACtC,cAAQd,QAAR,IAAQA,OAAR,EAAQA,EAAMO,MACV,KAAK/B,GAAMG,MACP,OAAO,EACX,KAAKH,GAAMO,2BACP,OAAOiB,EAAKa,YAAcA,EAC9B,KAAKrC,GAAMM,eACP,MAAe,WAAXgC,EAGR,KAAKtC,GAAMK,WACX,KAAKL,GAAMI,QACX,KAAKJ,GAAMQ,WACP,OAAO,EACX,QACI,OAAO,KAGnB,CAACgB,IAGCe,EAAetL,IAAMuL,SACvB,iBAAO,CAAEhB,OAAML,YAAWE,iBAAgBD,iBAC1C,CAACI,EAAML,EAAWE,EAAgBD,IAEtC,OAAO,kBAACH,GAAQM,SAAT,CAAkB7I,MAAO6J,GAAevL,IAM/CyL,SAAUxB,GAAQwB,U,gJEzGTC,GAAb,aAII,WAAmB9G,EAAyB+G,EAAoDC,GAAmB,yBAAhGhH,OAA+F,KAAlBgH,SAAkB,KAH3GC,QAG2G,OAF3GF,aAE2G,EACzGA,EAKkB,kBAAZA,EAKPlJ,MAAMC,QAAQiJ,GACd7L,KAAK6L,QAAUA,EAInB7L,KAAK6L,QAAUG,mBAAQC,OAAOC,OAAOL,IAAUnH,KAAI,SAACyH,GAChD,OAAOA,KAVPnM,KAAK6L,QAAU,CAACA,GALhB7L,KAAK6L,QAAU,O,SDTf3B,K,wBAAAA,E,+BAAAA,Q,KEHL,I,YC6BKkC,GD7BCC,GAAb,wFACI,SAAkBC,GACd,MAAO,CACHxH,KAAMoF,GAAyBqC,IAC/BC,QAASF,KAJrB,oBAQI,SAAqBP,GACjB,MAAO,CACHjH,KAAMoF,GAAyBuC,OAC/BD,QAAST,OAXrB,KECaW,GAAb,2FACI,SAAqB5H,EAAyB+G,EAA6CC,GACvF,OAAO,SAACa,GACJA,EAASN,GAAqBO,IAAI,IAAIhB,GAAmB9G,EAAM+G,EAASC,QAHpF,qBAOI,SAAsBC,GAClB,OAAO,SAACY,GACJA,EAASN,GAAqBQ,OAAOd,SATjD,M,SD4BYK,K,UAAAA,E,YAAAA,E,cAAAA,E,iBAAAA,Q,KAqCZ,IAEaU,IAAb,GAxBW,SAAUC,EAAkBC,EAAWC,GAC1C,IAAMC,EAA6BD,EAAWrL,MAiB9C,OAhBAqL,EAAWrL,MAAX,wBAAmB,+CAAAuL,EAAA,8EAAmBC,EAAnB,yBAAmBA,EAAnB,eAEyBA,EAFzB,GAEyBA,EAFzB,GAEyBA,EAFzB,YAGYF,EAAiBG,KAAjB,MAAAH,EAAgB,CAAMH,GAAN,OAAiBK,IAH7C,cAGLE,EAHK,yBAUJA,GAVI,kCAYXC,QAAQC,MAAR,MAZW,0DAgBZP,GAMf,uGAMI,WACSjN,KAAKyN,QACNzN,KAAKyN,MEhFM,SAAI3M,GACvB,IAAMc,EAAQ8L,aAAaC,QAAQ7M,GACnC,IACI,OAAOc,GAAUL,KAAKqM,MAAMhM,GAC9B,MAAO2B,GACL,OAAO,MF2EUsK,CAVO,gBAEhC,4BAYI,WACI,MAAM,UAAN,OAAiB7N,KAAKyN,SAb9B,4BAgBI,SAA6BK,GACzB,IAAMC,EAAI,UAAMC,OAAOjN,SAASkN,SAAtB,aAAmCD,OAAOjN,SAASgN,MACvDG,EAAmB,IAAIC,QAExBL,IACDI,EAAQE,OAAO,SAAU,oBACzBF,EAAQE,OAAO,eAAgB,qBAG/BpO,KAAKyN,OACLS,EAAQE,OAAO,gBAAiBpO,KAAKqO,kBAGzC,IAIMC,EAAWC,iCAAmCR,EAQpD,OAN0B,cACtBG,UACAM,OAAQxO,KAAKyO,gBAAgBD,QACzBF,EAAW,GATuB,CACtCI,KAAM,WA9BlB,sBA4CI,SAAuBjB,GE3GP,IAAI3M,EAAac,EF4G7B5B,KAAKyN,MAAQA,EE5GG3M,EF6DQ,YE7DKc,EF6GS6L,EE5G1CC,aAAapM,QAAQR,EAAKS,KAAKC,UAAUI,MF8D7C,wBAiDI,WACI5B,KAAKyN,MAAQ,KACbC,aAAaiB,WArDW,aAsDxB3O,KAAK4O,UApDb,8DAuDI,WAEIC,EACAC,EACAC,EACAC,GALJ,yFAOIhP,KAAKyO,gBAAkB,IAAIQ,gBACdV,mCACbvO,KAAKkP,eACLlP,KAAKmP,sBAECC,EAA+C,GAEjDL,GAAWA,EAAQnK,QACbA,EAAQqH,OAAOoD,QAAQN,EAAQnK,OAChC0K,QAAO,yDACP5K,KAAI,gDAA4B,IAA5B,QACJ6K,KAAK,KACVT,GAAYlK,EAAQ,IAAMA,EAAQ,IAGlCmK,GAAWA,EAAQS,OACf,aAAcT,EAAQS,MACrBT,EAAQS,KAAaC,WAG1BL,EAAeI,KAAOR,EAAcD,EAAQS,KAA+BjO,KAAKC,UAAUuN,EAAQS,OA3B1G,SA+BcE,EA/Bd,6BAgCe1P,KAAK2P,eAAeX,IAhCnC,IAiCYH,UACGO,GAlCf,UAqC+BQ,MAAMC,oCAAaf,EAAUY,GArC5D,eAqCcpC,EArCd,iBAsCuCA,EAASwC,OAtChD,eAsCcC,EAtCd,OAwCYzC,EAAS0C,QAAU,KAA2B,MAApB1C,EAAS0C,QACnCtD,GAAmBuD,OACftH,GAAkBuH,MADtB,UAEIH,EAAgBI,cAFpB,QAE8BJ,EAAgB5D,QAF9CO,CAGE0D,GAAMzD,UAGY,MAApBW,EAAS0C,SACTK,GAAUC,cAAVD,CAAyBD,GAAMzD,UAC/B3M,KAAKuQ,cAjDjB,kBAoDe,CACHJ,OAAQJ,EAAgBI,OACxBK,KAAMT,EAAgBS,KACtBC,GAAwB,MAApBnD,EAAS0C,OACbA,OAAQ1C,EAAS0C,OACjBU,KAAMX,EAAgBW,KACtBvE,QAAU4D,EAAwBY,MAASZ,EAAwBY,MAAQZ,EAAgB5D,UA1DvG,2DA6De,CACHsE,IAAI,EACJT,OAAQ,IACR7D,QAAS,KAAeA,UAhEpC,0DAvDJ,gFA4HI,WACInM,KAAKyO,gBAAgBG,QACrB5O,KAAK4Q,kBA9Hb,iCAiII,WAAqC,IAAD,OAIhC,GAHA5Q,KAAK6Q,UAAW,EAEZ7Q,KAAK8Q,gBAAgBC,aAAa/Q,KAAK8Q,gBACvC9Q,KAAKyN,MAAO,CAEZzN,KAAK8Q,eAAiBE,YAAW,WAC7BX,GAAUC,cAAVD,CAAyBD,GAAMzD,UAC/B,EAAKiC,UAH0E,SAtI/F,2BA8II,WACQ5O,KAAK8Q,gBAAgBC,aAAa/Q,KAAK8Q,gBAC3C9Q,KAAK8Q,eAAiB,OAhJ9B,iBAmJI,SAAqBhC,EAAkBlK,GACnC,OAAO5E,KAAK+O,QAAW3C,GAAY6E,IAAKnC,EAAU,CAAElK,YApJ5D,kBAuJI,SAAoDkK,EAAkBU,EAAoBR,GACtF,OAAOhP,KAAK+O,QAAsB3C,GAAY8E,KAAMpC,EAAU,CAAEU,QAAQR,KAxJhF,mBA2JI,SACIF,EACAU,EACAR,GAEA,OAAOhP,KAAK+O,QAAmC3C,GAAY+E,MAAOrC,EAAU,CAAEU,QAAQR,KAhK9F,oBAmKI,SAA8BF,GAC1B,OAAO9O,KAAK+O,QAAW3C,GAAYgF,OAAQtC,OApKnD,QACmBL,gBAAkB,IAAIQ,gBADzC,GAEmBxB,MAAuB,KAF1C,GAGmBqD,eAAwC,KAH3D,GAIkBD,UAAoB,EAJtC,2FAwKA/D,GAAUqC,sBG7OH,ICGKkC,GDHCC,GAAb,kIACI,wGACWxE,GAAUyE,IAAe,aADpC,2CADJ,6DECaC,GAAb,mIACI,WAA0BC,GAA1B,2FACW3E,GAAU4E,KAAwC,aAAcD,IAD3E,2CADJ,kIAKI,WAAyCjB,GAAzC,2FACW1D,GAAU4E,KAA6C,wBAAyBlB,IAD3F,2CALJ,kIASI,WAAyCA,GAAzC,2FACW1D,GAAU6E,MAA6C,uBAAwBnB,IAD1F,2CATJ,yHAaI,WAAgCoB,GAAhC,2FACW9E,GAAUyE,IAAI,4BAA8BK,IADvD,2CAbJ,8D,8BDEYP,K,aAAAA,Q,KEFL,ICAKQ,GDACC,GAAb,yFACI,SAAmBC,GACf,MAAO,CACHjN,KAAMuM,GAAoBW,KAC1BxF,QAASuF,OAJrB,KEAME,GAA8B,CAChCF,SAAU,I,oBCCDG,GAAmB,SAACC,EAAkBzH,GAC/C,GACIA,EAAKO,OAAS/B,GAAMY,QACpBY,EAAKqB,KAAOoG,EAAQC,mBACpBD,EAAQE,gBAAkB/M,EAAgBqB,WAE1C,OAAO,EAGX,IAAM2L,EAAcC,KAAOJ,EAAQK,gBAC7BC,EAAcF,KAAOJ,EAAQO,iBAE7BC,EAAqBJ,KACvBK,KAAKC,IACDP,EAAYQ,OACZR,EAAYS,QACZT,EAAYU,OACZP,EAAYQ,QACZR,EAAYS,YAElBC,SAtBgC,EAsBQ,KAE1C,OAAIZ,OAASa,cAAcT,IC1BlBU,GAAiB,SAACzR,GAAkE,IAA1C0R,EAAyC,uDAAV,MAC5EC,EAAY,IAAIC,KAAKC,aAAa,QAAS,CAC7CnP,MAAO,WACPgP,aAEJ,OAAOC,EAAUG,QAAQ9R,K,SHHjBiQ,K,0BAAAA,E,qBAAAA,Q,KIDL,ICIK8B,GDJCC,GAAb,+FACI,SAAyB7H,EAAYI,GACjC,MAAO,CACHrH,KAAM+M,GAAmBgC,YACzBrH,QAAS,CAAET,KAAII,cAJ3B,qBAQI,SAAsBJ,GAClB,MAAO,CACHjH,KAAM+M,GAAmBiC,SACzBtH,QAAS,CAAET,WAXvB,KECagI,GAAc,yCAAG,WAAUC,EAAqBrH,EAAoBR,GAAnD,kBAAAgB,EAAA,6DACpBpB,EAAKkI,sBACXtH,EAASiH,GAAeM,WAAWnI,IAFT,SAGAiI,EAHA,cAGpBG,EAHoB,OAI1BxH,EAASiH,GAAeQ,QAAQrI,IAJN,kBAKnBoI,GALmB,2CAAH,0DCFdE,GAAwB,SAAC7D,EAAa8D,EAAkBC,EAAkBC,GACnF,IAAMC,EAAmB,GACnBC,EAAsB,GAO5B,OALI,OAAJlE,QAAI,IAAJA,KAAMmE,SAAQ,SAACnE,GAAe,IAAD,EACzBiE,EAAOzT,KAAP,UAAYwP,EAAK8D,UAAjB,QAA8B,IAC9BI,EAAU1T,KAAKwP,EAAK+D,OAGjB,CAAEE,SAAQC,cCJRE,GAAb,yFACI,WACI,gDAAO,WAAOjI,GAAP,gBAAAQ,EAAA,sEACoB4G,GAAezC,GAAgBuD,OAAQlI,EAAU,qBADrE,YACGW,EADH,QAGUkD,KAHV,uBAIC7D,EAASmF,GAAgB+C,KAAKvH,EAASkD,OAJxC,0BAQH9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAAnDxD,CAA+EC,GAR5E,2CAAP,0DAFR,M,SHAYgH,K,qBAAAA,E,wBAAAA,Q,KIJL,ICOKmB,GDPCC,GAAb,0FACI,SAAoBjK,GAChB,MAAO,CACHhG,KAAM6O,GAAgBqB,OACtBxI,QAAS,CAAE1B,eAJvB,oBAQI,WACI,MAAO,CACHhG,KAAM6O,GAAgBsB,aAVlC,K,+BEIMhD,GAA0B,CAC5BnH,cAAUtG,GAmBD0Q,GAAcC,aAAe,CAAErU,IAtBnB,eAsB0CsU,eAhBnD,WAAiE,IAAhExK,EAA+D,uDAAvDqH,GAAcjQ,EAAyC,uCAC5E,OAAQA,EAAO8C,MACX,KAAK6O,GAAgBqB,OACjB,OAAO,gBAAKhT,EAAOwK,SAGvB,KAAKmH,GAAgBsB,QACjB,OAAO,gBAAKhD,IAGhB,QACI,OAAOrH,O,SDZPkK,K,0BAAAA,E,0BAAAA,E,sBAAAA,E,kBAAAA,E,yBAAAA,Q,KECL,ICFKO,GDECC,GAAb,yFACI,SAAmBC,GACf,MAAO,CACHzQ,KAAMgQ,GAAmBU,QACzBhJ,QAAS+I,KAJrB,sBAQI,SAAuBpD,GACnB,MAAO,CACHrN,KAAMgQ,GAAmBW,QACzBjJ,QAAS2F,KAXrB,mBAeI,WACI,MAAO,CACHrN,KAAMgQ,GAAmBY,SAjBrC,iBAqBI,SAAkBvD,GACd,MAAO,CACHrN,KAAMgQ,GAAmBvI,IACzBC,QAAS2F,KAxBrB,oBA4BI,SAAqBA,GACjB,MAAO,CACHrN,KAAMgQ,GAAmBa,OACzBnJ,QAAS2F,OA/BrB,KEJMF,GAA8B,CAChCsD,SAAU,GACV7E,UAAMlM,GCQGoR,GAAb,yFACI,SAAmBC,EAAqBC,EAAqBC,GACzD,gDAAO,WAAOpJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBiC,GAAgBnB,KAAhB,UAAqBzE,GAAM6F,WAAWpL,KAAKC,gBAA3C,aAAqB,EAAgCG,KAAM4K,EAAYC,EAAvE,gBACOC,IAEPpJ,EACA,qBAPL,YAEOW,EAFP,QAUckD,KAVd,sBAYSlD,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAd5E,uBAgBSzV,EAAQ0V,QAAQ,WAhBzB,iCAoBKzJ,EAAS2I,GAAeT,KAAKvH,IApBlC,iCAwBO,IAAI4C,MAAM,4CAxBjB,4FAAP,wDAFR,sBAkCI,SAAuBnE,GACnB,gDAAO,WAAOY,GAAP,gBAAAQ,EAAA,sEAECR,EAAS2I,GAAee,SAFzB,SAIwBtC,GACnBiC,GAAgBM,SAASvK,GACzBY,EACA,4BAPL,YAIOW,EAJP,QAUckD,KAVd,uBAWK7D,EAAS2I,GAAegB,SAAShJ,EAASkD,OAX/C,sIAAP,wDAnCR,oBAqDI,SAAqB+F,EAAoDC,EAAgBC,GACrF,gDAAO,WAAO9J,GAAP,UAAAQ,EAAA,+EACI,IAAIuJ,QAAJ,yCAAY,WAAOC,EAASC,GAAhB,sBAAAzJ,EAAA,sEAEP0J,EAAUN,EACVO,EAAkB,GACXnU,MAAMC,QAAQiU,GAErBA,EAAGnS,KAAI,SAACqS,EAASC,GACbD,EAAGE,SAAWT,EACdM,EAAW9V,KAAK+V,MAGpBD,EAAaP,EAXN,SAaYxC,GACnBiC,GAAgB/F,OAAO6G,GACvBnK,EACA,oBAhBO,YAaLW,EAbK,QAmBEkD,KAnBF,wBAoBHiG,GAAYA,IAChB/J,GAAmBuD,OAAOtH,GAAkBuO,QAAS,4BAArDxK,CAAkFC,GACjC,QAA7C,UAAAW,EAASkD,KAAT,MAAuB,UAAvB,eAA2B2G,eAC3BxK,EAAS2I,GAAe1I,IAAIU,EAASkD,KAAT,MAAuB,KAEnD9P,EAAQ0V,QAAQ,iBAzBb,kBA2BAO,EAAQrJ,EAASkD,OA3BjB,cA8BX9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,0BAAnDxD,CAA8EC,GACxE,IAAIuD,MAAM,2BA/BL,kCAmCX0G,EAAO,EAAD,IAnCK,0DAAZ,0DADJ,2CAAP,wDAtDR,oBAgGI,SAAqBL,EAA6BE,GAC9C,gDAAO,WAAO9J,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAeiC,GAAgBoB,OAAOb,GAAU5J,EAAU,oBAFlF,YAEOW,EAFP,QAIckD,KAJd,uBAKSiG,GAAYA,IAChB/J,GAAmBuD,OAAOtH,GAAkBuO,QAAS,+BAArDxK,CAAqFC,GACrFA,EAAS2I,GAAe8B,OAAO9J,EAASkD,OAP7C,gCAWO,IAAIN,MAAM,yBAXjB,4FAAP,wDAjGR,oBAoHI,SAAqBnE,EAAY0K,GAC7B,gDAAO,WAAO9J,GAAP,UAAAQ,EAAA,+EAEwB4G,GAAeiC,GAAgBqB,OAAOtL,GAAKY,EAAU,qBAF7E,kBAIc6D,KAJd,uBAKSiG,GAAYA,IAEhB/J,GAAmBuD,OAAOtH,GAAkBuO,QAAS,gCAArDxK,CAAsFC,GAP3F,gCAYO,IAAIuD,MAAM,yBAZjB,4FAAP,0DArHR,M,SFRYmF,K,2BAAAA,E,2BAAAA,E,uBAAAA,E,mBAAAA,E,0BAAAA,Q,KGLL,ICOKiC,GCDCC,GAAb,6GACI,SAAuChB,EAAmCC,EAAgBC,GACtF,gDAAO,WAAO9J,GAAP,UAAAQ,EAAA,+EACI,IAAIuJ,QAAJ,yCAAY,WAAOC,EAASC,GAAhB,oBAAAzJ,EAAA,sEAEL2J,EAFK,6BAEaP,GAFb,IAEsBU,SAAUT,IAFhC,SAIYzC,GACnBiC,GAAgBwB,yBAAyBV,GACzCnK,EACA,gCAPO,YAILW,EAJK,QAUEkD,KAVF,wBAWHiG,GAAYA,IAChB/J,GAAmBuD,OACftH,GAAkBuO,QAClB,wCAFJxK,CAGEC,GACFjM,EAAQ0V,QAAQ,iBAhBT,kBAiBAO,EAAQrJ,EAASkD,OAjBjB,cAoBDiH,EAAenK,EAASnB,SAAW,gBACnC,IAAI+D,MAAMuH,GArBT,0DAwBXlK,QAAQC,MAAM,sCAAd,MACAd,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sCAAnDxD,CAA0FC,GAC1FiK,EAAO,EAAD,IA1BK,0DAAZ,0DADJ,2CAAP,0DAFR,KCJM3E,GAA+B,CACjCE,QAAS,CAAEuF,UAAW,EAAGnM,UAAW,EAAG0L,SAAU,GAAIU,cAAe,GACpEjH,UAAMlM,GCLJyN,GAA6B,CAC/B2F,MAAO,ICCL3F,GAAmC,CACrC4F,cAAe,GACfC,UAAW,I,SJIHR,K,oBAAAA,E,kBAAAA,E,4BAAAA,E,sBAAAA,E,wBAAAA,E,qCAAAA,Q,KKAL,ICSKS,GDTCC,GAAb,gGACI,SAA0BC,GACtB,MAAO,CACHnT,KAAMwS,GAAmBtF,KACzBxF,QAASyL,KAJrB,yBAQI,SAA0BC,GACtB,MAAO,CACHpT,KAAMwS,GAAmBa,SACzB3L,QAAS0L,KAXrB,0BAeI,WACI,MAAO,CACHpT,KAAMwS,GAAmB5B,SAjBrC,wBAqBI,SAAyBwC,GACrB,MAAO,CACHpT,KAAMwS,GAAmB/K,IACzBC,QAAS0L,KAxBrB,2BA4BI,SAA4BA,GACxB,MAAO,CACHpT,KAAMwS,GAAmB3B,OACzBnJ,QAAS0L,KA/BrB,gCAmCI,SAAiC3C,EAAqB7E,GAClD,MAAO,CACH5L,KAAMwS,GAAmBc,aACzB5L,QAAS,CAAE+I,WAAU7E,aAtCjC,KENMuB,GAA6B,CAC/BgG,SAAU,GACVI,gBAAiB,ICIRC,GAAb,mGACI,WACI,gDAAO,WAAO3L,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAewE,GAAgBC,iBAAkB7L,EAAU,qBAFnF,YAEOW,EAFP,QAIcmD,GAJd,uBAKK9D,EAASqL,GAAeS,YAAYnL,EAASkD,OALlD,gCASO,IAAIN,MAAM,4CATjB,4FAAP,wDAFR,wBAmBI,SAAyBwI,GACrB,gDAAO,WAAO/L,GAAP,gBAAAQ,EAAA,sEAECR,EAASqL,GAAeW,gBAFzB,SAIwB5E,GACnBwE,GAAgBK,iBAAiBF,GACjC/L,EACA,gCAPL,YAIOW,EAJP,QAUcmD,GAVd,uBAWK9D,EAASqL,GAAea,YAAYvL,EAASkD,OAXlD,sIAAP,wDApBR,8BAsCI,WACI,gDAAO,WAAO7D,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwE,GAAgBO,mBAChBnM,EACA,gCALL,YAEOW,EAFP,QAQcmD,GARd,uBASK9D,EAASqL,GAAeS,YAAYnL,EAASkD,OATlD,mIAAP,wDAvCR,2BAuDI,SAA4BuI,EAAoCtC,GAC5D,gDAAO,WAAO9J,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwE,GAAgBS,cAAcD,GAC9BpM,EACA,oBALL,YAEOW,EAFP,QAQckD,KARd,uBASSiG,GAAYA,IAEhB/J,GAAmBuD,OAAOtH,GAAkBuO,QAAS,+BAArDxK,CAAqFC,GAErFA,EAASqL,GAAeiB,WAAW3L,EAASkD,OAbjD,gCAiBO,IAAIN,MAAM,2BAjBjB,4FAAP,wDAxDR,2BAiFI,SAA4B6I,EAAoCtC,GAC5D,gDAAO,WAAO9J,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwE,GAAgBW,cAAcH,GAC9BpM,EACA,mBALL,YAEOW,EAFP,QAQckD,KARd,uBASSiG,GAAYA,IAEhB/J,GAAmBuD,OAAOtH,GAAkBuO,QAAS,+BAArDxK,CAAqFC,GAErFA,EAASqL,GAAekB,cAAc5L,EAASkD,OAbpD,gCAiBO,IAAIN,MAAM,yBAjBjB,4FAAP,wDAlFR,0BA2GI,SAA2BwH,EAA0B7B,GACjD,gDAAO,WAAOlJ,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBiC,GAAgBmD,uBAAuBzB,EAAW7B,GAClDlJ,EACA,qBALL,YAEOW,EAFP,QAQckD,KARd,sBAUSlD,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAZ5E,uBAcSzV,EAAQ0V,QAAQ,WAdzB,iCAkBKzJ,EAASqL,GAAeoB,mBAAmB9L,EAASkD,KAAMlD,EAASoD,OAlBxE,iCAsBO,IAAIR,MAAM,6CAtBjB,4FAAP,0DA5GR,M,SFSY6H,K,yBAAAA,E,iCAAAA,E,8BAAAA,E,iCAAAA,Q,KGfL,ICiBKsB,GDjBCC,GAAb,yFACI,SACIC,EACA7I,GAEA,MAAO,CACH5L,KAAMiT,GAAwB/F,KAC9BxF,QAAS,CAAE+M,eAAc7I,WAPrC,sBAWI,SACI6F,GAEA,MAAO,CACHzR,KAAMiT,GAAwBI,SAC9B3L,QAAS+J,KAhBrB,0BAoBI,SACIgD,EACA7I,GAEA,MAAO,CACH5L,KAAMiT,GAAwByB,cAC9BhN,QAAS,CAAE+M,eAAc7I,WA1BrC,0BA8BI,SACI6I,EACA7I,GAEA,MAAO,CACH5L,KAAMiT,GAAwB0B,eAC9BjN,QAAS,CAAE+M,eAAc7I,aApCrC,KEAMuB,GAAkC,CACpCsH,aAAc,GACdG,gBAAiB,ICLRrG,GAAiB,SAACzR,GAAkE,IAA1C0R,EAAyC,uDAAV,MAC5EC,EAAY,IAAIC,KAAKC,aAAa,QAAS,CAC7CnP,MAAO,WACPgP,aAGJ,OAAOC,EAAUG,QAAQ9R,IAgBhB+X,GAA2B,SAACC,GACrC,IAAMC,EAAeD,EAAOxD,QAAQ,KAAM,IAE1C,OADe0D,SAASD,ICxBfE,GAAa,SAACC,GACvB,OAAOzH,KAAOyH,GAAMtG,OAAO,YAGlBuG,GAAa,SAACD,GACvB,OAAOzH,KAAOyH,GAAMtG,OAAO,kBCClBwG,GAAb,yFACI,SAAmBC,GACf,IAAMvV,EAAQuV,EAAI,sBAAkBA,GAAS,GAE7C,OAAOrN,GAAUyE,IAAmB,wBAA0B3M,KAJtE,qCAOI,SAAsCmH,GAClC,OAAOe,GAAUyE,IAAmB,yBAA2BxF,KARvE,yCAWI,SAA0CA,EAAgBjH,EAAwBqV,GAC9E,OAAOrN,GAAUyE,IAAV,wCAA8DzM,EAA9D,YAAsEiH,EAAtE,uBAAuFoO,MAZtG,kCAeI,SAAmCrV,EAAcqV,GAC7C,OAAOrN,GAAUyE,IAAV,wCAA8DzM,EAA9D,uBAAiFqV,MAhBhG,kCAmBI,SAAmCrV,EAAcF,EAAoBkR,GACjE,IAAMsE,EAAI,6CAAyCtV,GAC7CuV,EAAMvE,EAAU,oDAAgDhR,EAAhD,YAAwDgR,GAAesE,EAC7F,OAAOtN,GAAUyE,IAAmB8I,EAAKzV,KAtBjD,wBAyBI,SAAyB0V,GACrB,IAAMC,EAAgBZ,GAAyBW,EAAMV,QAErD,OADAU,EAAMV,OAASW,EACRzN,GAAU4E,KAAmC,oBAAqB4I,KA5BjF,8BA+BI,SAA+B9D,GAC3B,OAAO1J,GAAUyE,IAAV,sCAAiEiF,MAhChF,sCAmCI,WACI,OAAO1J,GAAUyE,IAAV,sCApCf,yBAuCI,SAA0B+I,GACtB,OAAOxN,GAAU4E,KAAiC,WAAY4I,KAxCtE,qBA2CI,SAAsBrD,EAAkBlL,GACpC,IAAM+C,EAAQ,uBAAmBmI,EAAnB,YAA+BlL,GAC7C,OAAOe,GAAU6E,MAAqB7C,KA7C9C,0BAgDI,SAA2BmI,EAAkBkD,GACzC,OAAOrN,GAAUyE,IAAV,sCAA4D0F,EAA5D,uBAAmFkD,MAjDlG,mCAoDI,SAAoCK,EAAuBL,GACvD,OAAOrN,GAAUyE,IAAV,sCAA4DiJ,EAA5D,uBAAwFL,QArDvG,KCIaM,GAAb,yFACI,SAAmB5E,GACf,gDAAO,WAAOlJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBmG,GAAoBrF,KAAKgB,GACzBlJ,EACA,yBALL,YAEOW,EAFP,QAQckD,KARd,uBAUS,UAAAlD,EAASkD,YAAT,eAAetP,SACfoM,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAb5E,uBAeSzV,EAAQ0V,QAAQ,WAfzB,iCAmBKzJ,EACI2M,GAAoBzE,KAChBvH,EAASkD,KAAKkK,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBACtEtN,EAASoD,OAtBtB,6EA4BChE,GAAmBuD,OAAOtH,GAAkBuH,MAAO,+BAAnDxD,CAAmFC,GA5BpF,0DAAP,wDAFR,+BAmCI,SAAgCsK,EAAkBpB,GAC9C,gDAAO,WAAOlJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBmG,GAAoBW,aAAa5D,EAAUpB,GAC3ClJ,EACA,0BALL,UAQyB,OANlBW,EAFP,QAQc0C,SAAkB1C,EAASkD,KARzC,uBAUS,UAAAlD,EAASkD,YAAT,eAAetP,SACfoM,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAb5E,uBAeSzV,EAAQ0V,QAAQ,WAfzB,iCAmBKzJ,EACI2M,GAAoBuB,aAChBvN,EAASkD,KAAKkK,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBACtEtN,EAASoD,OAtBtB,6EA4BCnD,QAAQC,MAAM,uBAAd,MACAd,GAAmBuD,OAAOtH,GAAkBuH,MAAO,+BAAnDxD,CAAmFC,GA7BpF,0DAAP,wDApCR,sBAsEI,SAAuBZ,GACnB,gDAAO,WAAOY,GAAP,sBAAAQ,EAAA,+EAEwB4G,GAAemG,GAAoBrF,OAAQlI,EAAU,wBAF7E,WAEOW,EAFP,QAIekD,KAJf,sBAKW,IAAIN,MAAM,8CALrB,UAQCvD,EAAS2M,GAAoBzE,KAAKvH,EAASkD,KAAMlD,EAASoD,OACpDoK,EAAcC,gBAAKzN,EAASkD,KAAM,CAAEzE,IAAKA,IAThD,uBAYW,IAAImE,MAAM,8CAZrB,WAekC,sBAA7B4K,EAAYE,aAfjB,kCAgB4BjH,GACnBiC,GAAgBM,UAAUwE,EAAYG,eACtCtO,EACA,4BAnBT,YAgBWW,EAhBX,QAsBmBkD,KAtBnB,uBAuBe,IAAIN,MAAM,0BAvBzB,QA0BKvD,EAAS2M,GAAoBhD,SAAS,CAAEwE,cAAavE,QAASjJ,EAASkD,QA1B5E,0EA+BC9D,GAAmBuD,OAAOtH,GAAkBuH,MAA5C,mCAAmD,EAAgB/D,QAAnEO,CAA4EC,GA/B7E,0DAAP,wDAvER,oCA2GI,SAAqCZ,EAAqBmP,GACtD,gDAAO,WAAOvO,GAAP,kBAAAQ,EAAA,sEAECR,EAAS2M,GAAoBhD,SAAS,CAAEwE,iBAAatW,KAFtD,SAIwBuP,GACnBmG,GAAoBiB,wBAAwB,GAAKpP,GACjDY,EACA,wBAPL,WAIOW,EAJP,QAUekD,KAVf,sBAWW,IAAIN,MAAM,8CAXrB,OAcCvD,EAAS2M,GAAoBhD,SAAS,CAAEwE,YAAaxN,EAASkD,KAAK,MACjE,OAAF0K,QAAE,IAAFA,OAfD,kDAiBCxO,GAAmBuD,OAAOtH,GAAkBuH,MAA5C,mCAAmD,EAAgB/D,QAAnEO,CAA4EC,GAjB7E,0DAAP,wDA5GR,yCAkII,SACIZ,EACAjH,EACAoW,EACAf,GAEA,gDAAO,WAAOxN,GAAP,kBAAAQ,EAAA,sEAECR,EAAS2M,GAAoBhD,SAAS,CAAEwE,iBAAatW,KAFtD,SAIwBuP,GACnBmG,GAAoBkB,4BAA4BrP,EAAIjH,EAAMqV,GAC1DxN,EACA,wBAPL,WAIOW,EAJP,QAUekD,KAVf,sBAWW,IAAIN,MAAM,8CAXrB,OAcKpL,IAASiF,GAAiBsR,aAC1B1O,EAAS2M,GAAoBhD,SAAS,CAAEwE,YAAaxN,EAASkD,KAAK,MAEnE7D,EAAS2M,GAAoBgC,aAAahO,EAASkD,KAAMlD,EAASoD,OAEpE,OAAFwK,QAAE,IAAFA,OAnBD,kDAqBCxO,GAAmBuD,OAAOtH,GAAkBuH,MAA5C,mCAAmD,EAAgB/D,QAAnEO,CAA4EC,GArB7E,0DAAP,wDAxIR,uCAkKI,SAAwCZ,EAAYnH,EAAoBkR,GACpE,gDAAO,WAAOnJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBmG,GAAoBqB,qBAAqBxP,EAAInH,EAAOkR,GACpDnJ,EACA,yBALL,WAEOW,EAFP,QAQekD,KARf,sBASW,IAAIN,MAAM,+CATrB,OAYCvD,EAAS2M,GAAoBgC,aAAahO,EAASkD,KAAMlD,EAASoD,OAZnE,gDAcChE,GAAmBuD,OAAOtH,GAAkBuH,MAA5C,mCAAmD,EAAgB/D,QAAnEO,CAA4EC,GAd7E,yDAAP,wDAnKR,8BAsLI,WACI,gDAAO,WAAOA,GAAP,UAAAQ,EAAA,sDACHR,EAAS2M,GAAoBhD,SAAS,CAAEwE,iBAAatW,KADlD,2CAAP,0DAvLR,M,SLUY6U,K,0BAAAA,E,gCAAAA,E,oCAAAA,E,4CAAAA,E,0CAAAA,E,4BAAAA,E,0BAAAA,E,0CAAAA,E,gDAAAA,E,oCAAAA,E,sBAAAA,E,kDAAAA,E,oCAAAA,E,uCAAAA,Q,KMNL,ICRKmC,GDQCC,GAAb,4FACI,SAAsB/Q,GAClB,MAAO,CACH5F,KAAMuU,GAAiBqC,SACvBlP,QAAS9B,KAJrB,sBAQI,SAAuBiR,GACnB,MAAO,CACH7W,KAAMuU,GAAiBuC,UACvBpP,QAASmP,KAXrB,0BAeI,SAA2BE,GACvB,MAAO,CACH/W,KAAMuU,GAAiByC,cACvBtP,QAASqP,KAlBrB,6BAsBI,SAA8BE,GAC1B,MAAO,CACHjX,KAAMuU,GAAiB2C,kBACvBxP,QAASuP,KAzBrB,wBA6BI,SAAyBJ,GACrB,MAAO,CACH7W,KAAMuU,GAAiB4C,YACvBzP,QAASmP,KAhCrB,4BAoCI,SAA6BO,GACzB,MAAO,CACHpX,KAAMuU,GAAiB8C,iBACvB3P,QAAS0P,KAvCrB,mCA2CI,SAAoCA,GAChC,MAAO,CACHpX,KAAMuU,GAAiB+C,wBACvB5P,QAAS0P,KA9CrB,+BAkDI,SAAgCA,GAC5B,MAAO,CACHpX,KAAMuU,GAAiBgD,oBACvB7P,QAAS0P,KArDrB,qBAyDI,SAAsBI,GAClB,MAAO,CACHxX,KAAMuU,GAAiBkD,SACvB/P,QAAS8P,KA5DrB,4BAgEI,SAA6BE,GACzB,MAAO,CACH1X,KAAMuU,GAAiBoD,iBACvBjQ,QAASgQ,KAnErB,wBAuEI,SAAyBF,GACrB,MAAO,CACHxX,KAAMuU,GAAiB1D,OACvBnJ,QAAS8P,KA1ErB,0BA8EI,SAA2BI,GACvB,MAAO,CACH5X,KAAMuU,GAAiBsD,cACvBnQ,QAASkQ,KAjFrB,+BAqFI,SAAgCE,GAC5B,MAAO,CACH9X,KAAMuU,GAAiBwD,eACvBrQ,QAASoQ,OAxFrB,KEXM3K,GAA2B,CAC7BuK,cAAe,GACfM,qBAAiBtY,EACjBmX,MAAO,GACPE,UAAW,GACXE,aAAc,GACdgB,mBAAevY,EACfwY,eAAWxY,EACXyY,QAAS,GACTC,iBAAa1Y,EACb2Y,oBAAgB3Y,EAChB4Y,wBAAoB5Y,GCcX6Y,GAAb,+FACI,SAAyBf,EAAoDgB,GACzE,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaC,WAAWlB,GACxB3P,EACA,yBALL,YAEOW,EAFP,QAQckD,KARd,uBASa,OAAR8M,QAAQ,IAARA,OACA5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS5J,EAASnB,QAA9DO,CAAuEC,GACvEA,EAAS8O,GAAagC,QAAQnQ,EAASkD,OAX5C,gCAeC9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uBAAnDxD,CAA2EC,GACrE,IAAIuD,MAAM,wBAhBjB,4FAAP,wDAFR,wBAuBI,SAAyBoM,EAA4BoB,EAAgCJ,GACjF,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaI,WAAWrB,GACxB3P,EACA,yBALL,YAEOW,EAFP,QAQcmD,GARd,wBASsB,OAAjBiN,QAAiB,IAAjBA,OACQ,OAARJ,QAAQ,IAARA,OAEA5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS,4BAArDxK,CAAkFC,GAElFA,EAAS8O,GAAakC,WAAWrQ,EAASkD,OAd/C,2BAmBC9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,+BAAnDxD,CAAmFC,GAnBpF,kDAqBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uBAAnDxD,CAA2EC,GArB5E,0DAAP,wDAxBR,yCAkDI,SAA0C4J,GACtC,gDAAO,WAAO5J,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaK,4BAA4BrH,GACzC5J,EACA,2CALL,kBAQc8D,GARd,uBASK/P,EAAQ0V,QAAQ,wBAAyB,CACrCyH,wBAAwB,IAVjC,0EAeCnR,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uBAAnDxD,CAA2EC,GAf5E,yDAAP,wDAnDR,sCAuEI,SAAuC4J,GACnC,gDAAO,WAAO5J,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaO,yBAAyBvH,GACtC5J,EACA,wCALL,kBAQc8D,GARd,uBASK/P,EAAQ0V,QAAQ,wBAAyB,CACrCyH,wBAAwB,IAVjC,0EAeCnR,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uBAAnDxD,CAA2EC,GAf5E,yDAAP,wDAxER,8BA4FI,SAA+B4J,GAC3B,gDAAO,WAAO5J,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaQ,iBAAiBxH,GAC9B5J,EACA,+BALL,kBAQc8D,GARd,uBASK/P,EAAQ0V,QAAQ,wBAAyB,CACrCyH,wBAAwB,IAVjC,0EAeCnR,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uBAAnDxD,CAA2EC,GAf5E,yDAAP,wDA7FR,yBAiHI,SAA0BkJ,EAAqBC,GAC3C,gDAAO,WAAOnJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaS,SAASnI,EAAYC,GAClCnJ,EACA,kBALL,YAEOW,EAFP,QAQcmD,GARd,uBAUS,UAAAnD,EAASkD,YAAT,eAAetP,SACfoM,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAb5E,uBAeSzV,EAAQ0V,QAAQ,WAfzB,iCAmBKzJ,EAAS8O,GAAauC,SAAS1Q,IAnBpC,iCAuBO,IAAI4C,MAvBX,kCAyBCxD,GAAmBuD,OACftH,GAAkBuH,MAClB,4CAFJxD,CAGEC,GA5BH,0DAAP,wDAlHR,0BAmJI,SAA2BkJ,EAAqBC,GAC5C,gDAAO,WAAOnJ,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaU,aAAapI,EAAYC,GACtCnJ,EACA,sBALL,YAEOW,EAFP,QAQcmD,GARd,uBAUS,UAAAnD,EAASkD,YAAT,eAAetP,SACfoM,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAb5E,uBAeSzV,EAAQ0V,QAAQ,WAfzB,iCAmBKzJ,EAAS8O,GAAawC,aAAa3Q,IAnBxC,iCAuBO,IAAI4C,MAvBX,kCAyBCxD,GAAmBuD,OACftH,GAAkBuH,MAClB,gDAFJxD,CAGEC,GA5BH,0DAAP,wDApJR,6BAqLI,WACI,gDAAO,WAAOA,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAewJ,GAAaW,kBAAmBvR,EAAU,sBAFjF,YAEOW,EAFP,QAIcmD,GAJd,uBAKK9D,EAAS8O,GAAayC,gBAAgB5Q,IAL3C,gCASO,IAAI4C,MATX,kCAWCxD,GAAmBuD,OACftH,GAAkBuH,MAClB,gDAFJxD,CAGEC,GAdH,0DAAP,wDAtLR,wBAyMI,SAAyB2C,EAAyBuG,EAAqBsI,GACnE,gDAAO,WAAOxR,GAAP,kBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaa,WAAW9O,EAAQuG,EAAYsI,GAC5CxR,EACA,oBALL,YAEOW,EAFP,QAQckD,KARd,uBAUS,UAAAlD,EAASkD,YAAT,eAAetP,SACfoM,EAASoD,MACTmF,IACCA,EAAavI,EAASoD,KAAKwF,UAAYL,EAAavI,EAASoD,KAAKyF,YAb5E,uBAeSzV,EAAQ0V,QAAQ,WAfzB,iCAmBKzJ,EAAS8O,GAAa2C,WAAW9Q,IAnBtC,iCAuBO,IAAI4C,MAvBX,kCAyBCxD,GAAmBuD,OACftH,GAAkBuH,MAClB,8CAFJxD,CAGEC,GA5BH,0DAAP,wDA1MR,+BA2OI,WACI,gDAAO,WAAOA,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAewJ,GAAac,oBAAqB1R,EAAU,kBAFnF,YAEOW,EAFP,QAIckD,KAJd,uBAKK7D,EAAS8O,GAAa4C,kBAAkB/Q,EAASkD,OALtD,gCASO,IAAIN,MATX,kCAWCxD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,wCAAnDxD,CAA4FC,GAX7F,0DAAP,wDA5OR,mCA4PI,WACI,gDAAO,WAAOA,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAewJ,GAAae,wBAAyB3R,EAAU,kBAFvF,YAEOW,EAFP,QAIckD,KAJd,uBAKK7D,EAAS8O,GAAa6C,sBAAsBhR,EAASkD,OAL1D,0EASC9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GAT5F,yDAAP,wDA7PR,4BA2QI,WACI,gDAAO,WAAOA,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAewJ,GAAagB,iBAAkB5R,EAAU,yBAFhF,YAEOW,EAFP,QAIckD,KAJd,uBAKK7D,EAAS8O,GAAa8C,eAAejR,EAASkD,OALnD,gCASO,IAAIN,MATX,kCAWCxD,GAAmBuD,OACftH,GAAkBuH,MAClB,+CAFJxD,CAGEC,GAdH,0DAAP,wDA5QR,qBA+RI,SAAsB6R,GAClB,gDAAO,WAAO7R,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAakB,SAASD,GACtB7R,EACA,6BALL,YAEOW,EAFP,QAQcmD,GARd,uBASK9D,EAAS8O,GAAaiD,QAAQpR,EAASkD,OAT5C,0BAaC9D,GAAmBuD,OACftH,GAAkBuH,MAClB,+CAFJxD,CAGEC,GAhBH,kDAkBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GAlB5F,0DAAP,wDAhSR,2BAuTI,SAA4B6R,EAA6BrE,GACrD,gDAAO,WAAOxN,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaoB,eAAeH,EAASrE,GACrCxN,EACA,0BALL,YAEOW,EAFP,QAQcmD,GARd,uBASK9D,EAAS8O,GAAakD,eAAerR,IAT1C,0BAaCZ,GAAmBuD,OACftH,GAAkBuH,MAClB,gDAFJxD,CAGEC,GAhBH,kDAkBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GAlB5F,0DAAP,wDAxTR,8BA+UI,SAA+B2P,EAAoCgB,GAC/D,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAaqB,iBAAiBtC,GAC9B3P,EACA,mBALL,YAEOW,EAFP,QAQcmD,GARd,uBASa,OAAR6M,QAAQ,IAARA,OAEA5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS,8BAArDxK,CAAoFC,GAEpFA,EAAS8O,GAAakC,WAAWrQ,EAASkD,OAb/C,0BAiBC9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,yCAAnDxD,CAA6FC,GAjB9F,kDAmBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GAnB5F,0DAAP,wDAhVR,0BAwWI,SAA2B+P,EAAkC5X,EAAcwY,GACvE,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAasB,aAAanC,EAAe5X,GACzC6H,EAFiC,6BAFtC,YAEOW,EAFP,QAQcmD,GARd,uBASS6M,GAAUA,IACd5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS,8BAArDxK,CAAoFC,GAEpFA,EAAS8O,GAAaoD,aAAavR,EAASkD,OAZjD,0BAgBC9D,GAAmBuD,OACftH,GAAkBuH,MAClB,gDAFJxD,CAGEC,GAnBH,kDAqBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GArB5F,0DAAP,wDAzWR,4BAmYI,SAA6B1B,EAAc6T,GACvC,gDAAO,WAAOnS,GAAP,gBAAAQ,EAAA,+EAEwBoQ,GAAawB,eAAe9T,EAAM6T,GAF1D,YAEOxR,EAFP,UAIiBA,EAASmD,GAJ1B,uBAKK9D,EAAS8O,GAAauD,kBAAkB1R,IAL7C,0BASCZ,GAAmBuD,OACftH,GAAkBuH,MAClB,kDAFJxD,CAGEC,GAZH,kDAcCD,GAAmBuD,OACftH,GAAkBuH,MAClB,+CAFJxD,CAGEC,GAjBH,0DAAP,wDApYR,oCA0ZI,SAAqC+P,EAA4CY,GAC7E,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAa0B,uBAAuBvC,GACpC/P,EAFiC,6BAFtC,YAEOW,EAFP,QAQcmD,GARd,uBASS6M,GAAUA,IACd5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS,8BAArDxK,CAAoFC,GAEpFA,EAAS8O,GAAaoD,aAAavR,EAASkD,OAZjD,0BAgBC9D,GAAmBuD,OACftH,GAAkBuH,MAClB,gDAFJxD,CAGEC,GAnBH,kDAqBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GArB5F,0DAAP,wDA3ZR,+BAqbI,SAAgC2P,EAAmCgB,GAC/D,gDAAO,WAAO3Q,GAAP,gBAAAQ,EAAA,+EAEwB4G,GACnBwJ,GAAa2B,kBAAkB5C,GAC/B3P,EACA,oBALL,YAEOW,EAFP,UAQiBA,EAASmD,GAR1B,uBASa,OAAR6M,QAAQ,IAARA,OAEA5Q,GAAmBuD,OAAOtH,GAAkBuO,QAAS,+BAArDxK,CAAqFC,GAErFA,EAAS8O,GAAakC,WAAWrQ,EAASkD,OAb/C,0BAkBC9D,GAAmBuD,OAAOtH,GAAkBuH,MAAO,0CAAnDxD,CAA8FC,GAlB/F,kDAoBCD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,uCAAnDxD,CAA2FC,GApB5F,0DAAP,0DAtbR,M,SFtBY6O,K,kCAAAA,E,qDAAAA,Q,KGDZ,ICAY2D,GDANlN,GAA+B,CACjCmN,WAAY,GACZC,oBAAqB,IAGZC,GAAb,kGACI,SAA4BC,GACxB,gDAAO,WAAO5S,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAeyL,GAAiBC,aAAaF,GAAa5S,GAFlF,YAEOW,EAFP,QAIckD,KAJd,uBAKK7D,EAAS+S,GAAiBD,aAAanS,EAASkD,OALrD,gCASO,IAAIN,MAAM,cATjB,4FAAP,wDAFR,mCAmBI,SAAoCyP,GAChC,gDAAO,WAAOhT,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAeyL,GAAiBI,qBAAqBD,GAAWhT,GAFxF,YAEOW,EAFP,QAIckD,KAJd,uBAKK7D,EAAS+S,GAAiBG,qBAAqBvS,EAASkD,OAL7D,gCASO,IAAIN,MAAM,cATjB,4FAAP,0DApBR,KAsCawP,GAAb,iGACI,SAA2BN,GACvB,MAAO,CACHta,KAAM0W,GAAqBsE,aAC3BtT,QAAS,CAAE4S,iBAJvB,kCAQI,SAAmCC,GAC/B,MAAO,CACHva,KAAM0W,GAAqBuE,sBAC3BvT,QAAS,CAAE6S,4BAXvB,M,SC3CYF,K,2BAAAA,E,6BAAAA,E,qBAAAA,Q,KCJL,I,gDCADlN,GAA2B,CAC7B+N,OAAQ,ICoCCC,GAAW,CACpBpV,KAAMqK,GACNnD,SxClC2B,WAAoF,IAAnFnH,EAAkF,uDAA1EqH,GAAcjQ,EAA4D,uCAC9G,OAAQA,EAAO8C,MACX,KAAKuM,GAAoBW,KACrB,OAAO,6BAAKpH,GAAZ,IAAmBmH,SAAU/P,EAAOwK,UAGxC,QACI,OAAO5B,IwC4Bf+Q,MNxBwB,WAA8E,IAA7E/Q,EAA4E,uDAApEqH,GAAcjQ,EAAsD,uCACrG,OAAQA,EAAO8C,MACX,KAAKuU,GAAiBqC,SAClB,IAAMwE,EAAM,gBAAQtV,GAEpB,OADAsV,EAAOvE,MAAMwE,QAAQne,EAAOwK,SACrB0T,EAGX,KAAK7G,GAAiBuC,UAClB,OAAO,6BACAhR,GADP,IAEI+Q,MAAO3Z,EAAOwK,QAAQgE,KACtBwM,UAAWhb,EAAOwK,QAAQkE,OAIlC,KAAK2I,GAAiByC,cAClB,OAAO,6BACAlR,GADP,IAEIiR,UAAW7Z,EAAOwK,QAAQgE,KAC1BuM,cAAe/a,EAAOwK,QAAQkE,OAItC,KAAK2I,GAAiB2C,kBAClB,OAAO,6BACApR,GADP,IAEImR,aAAc/Z,EAAOwK,QAAQgE,OAKrC,KAAK6I,GAAiB4C,YAClB,OAAO,6BACArR,GADP,IAEIqS,QAASjb,EAAOwK,QAAQgE,KACxB0M,YAAalb,EAAOwK,QAAQkE,OAIpC,KAAK2I,GAAiB8C,iBAClB,OAAO,6BACAvR,GADP,IAEIwV,YAAape,EAAOwK,UAI5B,KAAK6M,GAAiB+C,wBAClB,OAAO,6BACAxR,GADP,IAEIyV,mBAAoBre,EAAOwK,UAInC,KAAK6M,GAAiBwD,eAClB,OAAO,6BACAjS,GADP,IAEImU,eAAgB/c,EAAOwK,QAAQgE,KAC/B4M,mBAAoBpb,EAAOwK,QAAQkE,OAI3C,KAAK2I,GAAiBgD,oBAClB,OAAO,6BACAzR,GADP,IAEIuS,eAAgBnb,EAAOwK,UAI/B,KAAK6M,GAAiBkD,SAClB,OAAO,6BACA3R,GADP,IAEI0R,YAAata,EAAOwK,UAI5B,KAAK6M,GAAiBoD,iBAClB,OAAO,6BACA7R,GADP,IAEI4R,cAAexa,EAAOwK,QAAQgE,KAC9BsM,gBAAiB9a,EAAOwK,QAAQkE,OAIxC,KAAK2I,GAAiB1D,OACtB,KAAK0D,GAAiBsD,cAClB,IAAMuD,EAAM,gBAAQtV,GACd0V,EAAYJ,EAAOvE,MAAM4E,WAAU,SAACvT,GAAD,OAAOA,EAAEjB,KAAQ/J,EAAOwK,QAAiBT,MAElF,GAAIuU,EAAY,EACZ,OAAO1V,EAGX,IAAM4V,EAAcN,EAAOvE,MAAM2E,GAC3BG,EAAeP,EAAOvE,MAAM2E,GAAb,6BACdE,GACAE,gBAAK1e,EAAOwK,QAAS,CAAC,iBAO7B,OAJI0T,EAAO5D,aAAe4D,EAAO5D,YAAYvQ,KAAO/J,EAAOwK,QAAQT,KAC/DmU,EAAO5D,YAAcmE,GAGlBP,EAGX,QACI,OAAOtV,IMlFfqN,SjBlC0B,WAGxB,IAFFrN,EAEC,uDAFOqH,GACRjQ,EACC,uCACD,OAAQA,EAAO8C,MACX,KAAKwS,GAAmBtF,KACpB,OAAO,6BACApH,GADP,IAEIqN,SAAUjW,EAAOwK,UAIzB,KAAK8K,GAAmBa,SACpB,OAAO,6BACAvN,GADP,IAEImO,eAAgB/W,EAAOwK,UAI/B,KAAK8K,GAAmB5B,MACpB,OAAO,6BACA9K,GADP,IAEImO,oBAAgBvU,IAIxB,KAAK8S,GAAmB/K,IACpB,IAAM2T,EAAM,gBAAQtV,GAGpB,OAFAsV,EAAOjI,SAASkI,QAAQne,EAAOwK,SAC/Be,QAAQoT,MAAMT,EAAOjI,UACdiI,EAGX,KAAK5I,GAAmB3B,OACpB,IAAMuK,EAAM,gBAAQtV,GACdgW,EAAeV,EAAOjI,SAASsI,WAAU,SAACvT,GAAD,OAAOA,EAAEjB,KAAQ/J,EAAOwK,QAAoBT,MAE3F,OAAI6U,EAAe,EACRhW,GAGXsV,EAAOjI,SAAS2I,GAAgB5e,EAAOwK,QAEnC0T,EAAOnH,gBAAkBmH,EAAOnH,eAAehN,KAAO/J,EAAOwK,QAAQT,KACrEmU,EAAOnH,eAAiB/W,EAAOwK,SAG5B0T,GAGX,KAAK5I,GAAmBc,aACpB,OAAO,6BACAxN,GADP,IAEIyN,gBAAiBrW,EAAOwK,QAAQ+I,SAChCsL,oBAAqB7e,EAAOwK,QAAQkE,OAI5C,KAAKiD,GAAgBsB,QACjB,OAAO,gBAAKhD,IAGhB,QACI,OAAOrH,IiB5Bf2K,S3BjC2B,WAGV,IAFjB3K,EAEgB,uDAFRqH,GACRjQ,EACgB,uCAChB,OAAQA,EAAO8C,MACX,KAAKgQ,GAAmBU,QACpB,OAAO,6BACA5K,GADP,IAEI2K,SAAUvT,EAAOwK,QAAQgE,KACzBE,KAAM1O,EAAOwK,QAAQkE,OAI7B,KAAKoE,GAAmBW,QACpB,OAAO,6BACA7K,GADP,IAEIkW,eAAgB9e,EAAOwK,UAI/B,KAAKsI,GAAmBY,MACpB,OAAO,6BACA9K,GADP,IAEIkW,oBAAgBtc,IAIxB,KAAKsQ,GAAmBvI,IACpB,IAAM2T,EAAM,gBAAQtV,GAEpB,OADAsV,EAAO3K,SAAS4K,QAAQne,EAAOwK,SACxB0T,EAGX,KAAKpL,GAAmBa,OAAS,IAAD,EACtBuK,EAAM,gBAAQtV,GACdmW,EAAeb,EAAO3K,SAASgL,WAAU,SAACvT,GAAD,OAAOA,EAAEjB,KAAQ/J,EAAOwK,QAAoBT,MAM3F,OAJImU,EAAOY,iBAAkB,UAAAZ,EAAOY,sBAAP,eAAuB/U,MAAO/J,EAAOwK,QAAQT,IACtEiV,iBAAM,GAAId,EAAOY,eAAgB9e,EAAOwK,SAGxCuU,EAAe,EACRnW,GAGXoW,iBAAM,GAAId,EAAO3K,SAASwL,GAAe/e,EAAOwK,SAChD0T,EAAO3K,SAASwL,GAAc1O,cAAgBrQ,EAAOwK,QAAQ6F,cACtD6N,GAGX,KAAKvM,GAAgBsB,QACjB,OAAO,gBAAKhD,IAGhB,QACI,OAAOrH,I2BrBfqW,QrBvC0B,WAAkF,IAAjFrW,EAAgF,uDAAxEqH,GAAcjQ,EAA0D,uCAC3G,OAAQA,EAAO8C,MACX,KAAK+M,GAAmBgC,YACpB,IAAMqM,EAAM,gBAAQtV,GAEpB,OADAsV,EAAOtI,MAAM5V,EAAOwK,QAAQT,IAAM/J,EAAOwK,QAAQL,QAC1C+T,EAGX,KAAKrO,GAAmBiC,SACpB,IAAMoM,EAAM,gBAAQtV,GAEpB,cADOsV,EAAOtI,MAAM5V,EAAOwK,QAAQT,IAC5BmU,EAGX,QACI,OAAOtV,IqByBfiN,cpBrCgC,WAGV,IAFtBjN,EAEqB,uDAFbqH,GACRjQ,EACqB,uCACrB,OAAQA,EAAO8C,MACX,KAAKoF,GAAyBqC,IAC1B,IAAM2T,EAAM,gBAAQtV,GACd0B,EAAetK,EAAOwK,QAI5B,OAHAF,EAAaP,GAAKmU,EAAOpI,UACzBoI,EAAOrI,cAAc7W,KAAKsL,GAC1B4T,EAAOpI,YACAoI,EAGX,KAAKhW,GAAyBuC,OAC1B,IAAMyT,EAAM,gBAAQtV,GACdmB,EAAK/J,EAAOwK,QAElB,OADA0T,EAAOrI,cAAgBvI,kBAAO4Q,EAAOrI,eAAe,SAAC7K,GAAD,OAAOA,EAAEjB,KAAOA,KAC7DmU,EAGX,QACI,OAAOtV,IoBgBf2O,abtC+B,WAGV,IAFrB3O,EAEoB,uDAFZqH,GACRjQ,EACoB,uCACpB,OAAQA,EAAO8C,MACX,KAAKiT,GAAwB/F,KACzB,MAAiDhQ,EAAOwK,QAAhD+M,EAAR,EAAQA,aAAoB2H,EAA5B,EAAsBxQ,KAKtB,OAAO,6BAAK9F,GAAZ,IAAmB2O,eAAc2H,qBAGrC,KAAKnJ,GAAwBI,SACzB,MAAiCnW,EAAOwK,QAAhCsO,EAAR,EAAQA,YAAavE,EAArB,EAAqBA,QACrB,OAAO,6BAAK3L,GAAZ,IAAmBuW,gBAAiBrG,EAAavE,YAGrD,KAAKwB,GAAwByB,cACzB,MAA+BxX,EAAOwK,QAA9B+M,EAAR,EAAQA,aAAc7I,EAAtB,EAAsBA,KAKtB,OAAO,6BAAK9F,GAAZ,IAAmB8O,gBAAiBH,EAAc6H,oBAAqB1Q,IAE3E,KAAKqH,GAAwB0B,eACzB,MAA+BzX,EAAOwK,QAA9B+M,EAAR,EAAQA,aAAc7I,EAAtB,EAAsBA,KAKtB,OAAO,6BAAK9F,GAAZ,IAAmB8O,gBAAiBH,EAAc6H,oBAAqB1Q,IAE3E,QACI,OAAO9F,IaGfwU,WJiB4B,WAAsE,IAArExU,EAAoE,uDAA5DqH,GAAcjQ,EAA8C,uCACjG,OAAQA,EAAO8C,MACX,KAAK0W,GAAqBsE,aACtB,OAAO,gBAAK9d,EAAOwK,SAGvB,KAAKgP,GAAqBuE,sBACtB,OAAO,6BAAKnV,GAAU5I,EAAOwK,SAGjC,QACI,OAAO5B,II3BfyW,MD3CwB,WAAkE,IAAjEzW,EAAgE,uDAAxDqH,GAAcjQ,EAA0C,uCACzF,OAAQA,EAAO8C,MACX,KAAKqa,GAAiB3J,QAItB,KAAK2J,GAAiB1J,QAClB,OAAO,gBAAKzT,EAAOwK,SAGvB,QACI,OAAO5B,ICiCfuH,QtBxC4B,WAGV,IAFlBvH,EAEiB,uDAFTqH,GACRjQ,EACiB,uCACjB,OAAQA,EAAO8C,MACX,KAAKuQ,GAAoB9I,IACrB,OAAO,6BACA3B,GADP,IAEIuH,QAAQ,6BAAMvH,EAAMuH,SAAb,kBAAuBnQ,EAAOwK,QAAQT,GAAK/J,EAAOwK,YAGjE,QACI,OAAO5B,KuBdNoL,GAAb,kIACI,WAAyB/K,EAAckP,EAAerE,EAAqBxG,GAA3E,yFACU+K,EADV,0BACmCpP,IAAS/B,GAAMY,OAAS,UAAY,IAC7DwX,EAFV,2BAE2CxL,GACjCyL,EAHV,oBAGuCjS,EAAOkS,UAH9C,oBAGmElS,EAAOmS,SAEhEC,EAAevH,EAAI,sBAAkBA,GAAS,GAC9CvV,EAAQkR,GAA6B,KAAfA,EAAd,UAAqCwL,EAArC,uBAA8DnH,GAASuH,EAC/EC,EAAgBrS,EAAOkS,UAAP,UAAsB5c,EAAtB,YAA+B2c,GAAkB3c,EAP3E,kBASWkI,GAAUyE,IAAe8I,EAAMsH,IAT1C,2CADJ,0IAaI,WAA2C5V,EAAmBoO,GAA9D,iFACUE,EADV,8CACuDtO,GAC7CnH,EAAQuV,EAAI,sBAAkBA,GAAS,GAFjD,kBAGWrN,GAAUyE,IAAe8I,EAAMzV,IAH1C,2CAbJ,wHAmBI,WAA6BmH,GAA7B,2FACWe,GAAUyE,IAAV,2BAA2CxF,KADtD,2CAnBJ,oHAuBI,WAA2ByE,GAA3B,sEACQ7N,MAAMC,QAAQ4N,GADtB,yCAEe1D,GAAU4E,KAAyB,mCAAoClB,IAFtF,gCAKW1D,GAAU4E,KAAwC,mBAAoBlB,IALjF,2CAvBJ,sIA+BI,WAA6CA,GAA7C,2FACW1D,GAAU4E,KACb,gDACAlB,IAHR,2CA/BJ,oHAsCI,WAA2BA,GAA3B,2FACW1D,GAAU6E,MAAV,mBAAiEnB,IAD5E,2CAtCJ,oHA0CI,WAA2BzE,GAA3B,2FACWe,GAAU8U,OAAV,2BAA8C7V,KADzD,2CA1CJ,2HA8CI,WAAkC8V,EAAmBC,EAAsBnV,EAAeoV,GAA1F,qFACUC,EADV,gBAEWlV,GAAU6C,kBAGXyK,EACW,YAAb2H,GAEmB,YAAbA,EADA,oCAGA,GAVd,SAaQpV,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBAbjB,SAc+BrS,MAAM,GAAD,OAAIrB,oCAAJ,OAAqC6L,GAArC,OAA4CyH,GAAaG,GAd7F,cAcc1U,EAdd,0BAiByCA,EAAS4U,OAjBlD,QAiBkBC,EAjBlB,OAkBYC,KAAOD,EAAgBL,EAAe,QAlBlD,kDAoBYnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBApBxE,0DAuBQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAvBpE,iEA9CJ,oECLaqI,GAAb,4IACI,wGACWzL,GAAUyE,IAAe,aADpC,2CADJ,6HAKI,WAAqCmH,GAArC,2FACW5L,GAAUyE,IAAV,mBAAmCmH,KAD9C,2CALJ,8HASI,wGACW5L,GAAUyE,IAAV,2BADX,2CATJ,0HAYI,WAAkCf,GAAlC,2FACW1D,GAAU4E,KAAkC,WAAYlB,IADnE,2CAZJ,2HAgBI,WAAkCA,GAAlC,2FACW1D,GAAU6E,MAAmC,WAAYnB,IADpE,2CAhBJ,8DCSa+M,GAAb,+IACI,wGACWzQ,GAAUyE,IAAS,0BAD9B,2CADJ,qIAKI,WAA6C+K,GAA7C,2FACWxP,GAAU4E,KAAqB,mBAAoB4K,GAAa,IAD3E,2CALJ,yIASI,WAAgDA,GAAhD,2FACWxP,GAAU4E,KAAqB,kBAAmB4K,GAAa,IAD1E,2CATJ,8HAaI,WAAqCA,GAArC,2FACWxP,GAAU4E,KAAqB,mBAAoB4K,GAAa,IAD3E,2CAbJ,wHAiBI,WAA+BA,GAA/B,2FACWxP,GAAU4E,KAAkD,cAAe4K,IADtF,2CAjBJ,wHAqBI,WAA+BhN,EAAyB6K,EAAegE,GAAvE,mFACUvZ,EAAQuV,EAAI,sBAAkBA,GAAS,GACvCrL,EAAWQ,EAAM,yBAAqBA,GAAW,UACjD8K,EAAO+D,EAAW,iBAAaA,GAAgBrP,EAHzD,kBAKWhC,GAAUyE,IAAY,SAAW6I,EAAOxV,IALnD,2CArBJ,uIA6BI,wGACWkI,GAAUyE,IAAyB,2BAD9C,2CA7BJ,2HAiCI,wGACWzE,GAAUyE,IAAiB,uBADtC,2CAjCJ,qHAqCI,WAA6B4I,EAAerE,GAA5C,iFACUlR,EAAQuV,EAAI,sBAAkBA,GAAS,GACvCC,EAAOtE,EAAU,4BAAwBA,GAAe,QAFlE,kBAGWhJ,GAAUyE,IAAY,SAAW6I,EAAOxV,IAHnD,2CArCJ,4HA2CI,WAAiCuV,EAAerE,GAAhD,iFACUlR,EAAQuV,EAAI,sBAAkBA,GAAS,GAC5B,aACXC,EAAOtE,EAAU,iBAAaA,GAAe,GAHvD,kBAIWhJ,GAAUyE,IAAY,mBAAsB6I,EAAOxV,IAJ9D,2CA3CJ,+HAkDI,wGACWkI,GAAUyE,IAAY,wBADjC,2CAlDJ,6HAsDI,WAAqC+K,GAArC,2FACWxP,GAAU6E,MAAmC,mBAAoB2K,IAD5E,2CAtDJ,sHA0DI,WAA6BkC,GAA7B,2FACW1R,GAAUyE,IAAV,sBAAiCiN,KAD5C,2CA1DJ,4HA8DI,WAAmCA,EAA6BrE,GAAhE,2FACWrN,GAAUyE,IAAV,kCAA6CiN,EAA7C,uBAAmErE,KAD9E,2CA9DJ,0HAkEI,WAA+B3J,GAA/B,2FACW1D,GAAU6E,MAA2B,aAAcnB,IAD9D,2CAlEJ,+HAsEI,WAAsCA,GAAtC,2FACW1D,GAAU6E,MAAkC,kBAAmBnB,IAD1E,2CAtEJ,0HA0EI,WAAiCA,EAAyB1L,GAA1D,2FACWgI,GAAU6E,MAAV,UAAqD,IAAT7M,EAAa,kBAAoB,oBAAsB0L,IAD9G,2CA1EJ,sIA8EI,WAA2CA,GAA3C,2FACW1D,GAAU6E,MAAyC,mBAAoBnB,IADlF,2CA9EJ,4HAkFI,WAAmCvF,EAAcrG,GAAjD,qEACQqG,IAAS/B,GAAMG,MADvB,yCAEeyD,GAAUyE,IAAV,0BAAyD3M,IAFxE,gCAKWkI,GAAUyE,IAAV,oBALX,2CAlFJ,gECXaiO,GAAb,0IACI,WAAiCD,GAAjC,2FACWzS,GAAUyE,IAAS,wBAAyBgO,IADvD,2CADJ,kIAKI,WAAyCI,GAAzC,2FACW7S,GAAUyE,IAAV,iCAAqDoO,IADhE,2CALJ,8DCQatP,GAAb,0FACI,SAAoBgS,GAChB,gDAAO,WAAO1V,GAAP,gBAAAQ,EAAA,+EAEwB4G,GAAevC,GAAY8Q,MAAMD,GAAe1V,EAAU,cAFlF,YAEOW,EAFP,QAIckD,KAJd,uBAKK1D,GAAUyV,SAASjV,EAASkD,KAAK/C,OAEjCd,EAASoI,GAAYuN,MAAMhV,EAASkD,OAEpC9D,GAAmBuD,OAAOtH,GAAkBuO,QAAS,mBAArDxK,CAAyEC,GAT9E,kBAWYjM,EAAQM,KAAK,mBAXzB,aAcO,IAAIkP,MAAM,gBAdjB,4FAAP,wDAFR,kCAwBI,SAAmCsS,GAC/B,gDAAO,WAAO7V,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnBvC,GAAYiR,qBAAqBD,GACjC7V,EACA,6BALL,kBAQc8D,GARd,uBASK/D,GAAmBuD,OACftH,GAAkBuO,QAClB,yCAFJxK,CAGEC,GAZP,kBAcYjM,EAAQM,KAAK,WAdzB,aAiBO,IAAIkP,MAAM,iCAjBjB,4FAAP,wDAzBR,kCAkDI,SAAmCsS,GAC/B,gDAAO,WAAO7V,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnBvC,GAAYkR,qBAAqBF,GACjC7V,EACA,sBALL,kBAQc8D,GARd,uBASK/D,GAAmBuD,OAAOtH,GAAkBuO,QAAS,4BAArDxK,CAAkFC,GATvF,kBAWYjM,EAAQM,KAAK,WAXzB,aAcO,IAAIkP,MAAM,wBAdjB,4FAAP,wDAnDR,yBAyEI,SACI0B,EACA+Q,GAKA,gDAAO,WAAOhW,GAAP,UAAAQ,EAAA,+EAEwB4G,GAAevC,GAAYoR,YAAYhR,GAAOjF,EAAU,mBAFhF,kBAIc8D,GAJd,yCAKYkS,EAAQE,aALpB,gCAQQF,EAAQG,UARhB,yFAAP,wDAhFR,oBAgGI,WACI,gDAAO,WAAOnW,GAAP,UAAAQ,EAAA,sEAECR,EAASoI,GAAYgO,UACrBjW,GAAUyD,aACVvC,OAAON,aAAa2I,QAJrB,kBAMQ3V,EAAQM,KAAK,WANrB,wFAAP,wDAjGR,0BA4GI,WACI,gDAAO,WAAO2L,GAAP,UAAAQ,EAAA,sDACHR,EAASoI,GAAYgO,UAErBjW,GAAUyD,aACVzD,GAAU+D,UAAW,EAErB7C,OAAON,aAAa2I,QACpB3J,GAAmBuD,OACftH,GAAkBqa,QAClB,gDACA,EAHJtW,CAIEC,GAXC,2CAAP,0DA7GR,KCIasW,GAAa,WACtB,IAAMtW,EAAWuW,cAEXC,EAAehjB,IAAM6K,aAAY,WACnC2B,EAAS0D,GAAU0S,YACpB,CAACpW,IA0EJ,MAAO,CACH3I,MAzEyB,CACzB,CAAEW,KAAM,YAAaye,KAAM,iBAAkBC,KAAMC,MACnD,CACI3e,KAAM,cACNye,KAAM,eACNC,KAAME,KACNtY,KAAK,CAAE/B,GAAMG,MAAOH,GAAMO,2BAA4BP,GAAMM,gBAAxD,mBAA2EK,MAEnF,CACIlF,KAAM,eACNye,KAAM,gBACNC,KAAMG,KACNvY,KAAM,CAAC/B,GAAMY,OAAQZ,GAAMG,QAE/B,CACI1E,KAAM,eACNye,KAAM,4BACNC,KAAMI,KACNxY,KAAM,CACF/B,GAAMK,WACNL,GAAMI,QACNJ,GAAMY,OACNZ,GAAMQ,WACNR,GAAMG,MACNH,GAAMO,6BAGd,CACI9E,KAAM,WACNye,KAAM,gBACNC,KAAMK,KACNzY,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,eAAgBN,GAAMO,6BAEpD,CACI9E,KAAM,QACNye,KAAM,aACNC,KAAME,KACNtY,KAAM/B,GAAMG,OAEhB,CACI1E,KAAM,mBACNye,KAAM,kBACNC,KAAMM,KACN1Y,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,eAAgBN,GAAMO,6BAQpD,CACI9E,KAAM,YACNye,KAAM,iBACNC,KAAMO,KACN3Y,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,eAAgBN,GAAMO,6BAEpD,CACI9E,KAAM,YACNye,KAAM,iBACNC,KAAME,KACNtY,KAAM,CAAC/B,GAAMO,2BAA4BP,GAAMG,QAEnD,CACI1E,KAAM,gBACNye,KAAM,qBACNC,KAAMQ,KACNC,UAAU,GAEd,CAAEnf,KAAM,UAAWye,KAAM,eAAgBC,KAAMU,OAK/CZ,iBC7FKa,GAA0BrkB,IAAOC,IAAV,25DCSvBqkB,GAA+B,SAAChkB,GACzC,MAA4BE,IAAM+jB,WAAW1Z,GAAYL,SAAjDO,EAAR,EAAQA,KAAML,EAAd,EAAcA,UACd,EAAgC4Y,KAAxBjf,EAAR,EAAQA,MAAOmf,EAAf,EAAeA,aAEf,OACI,kBAACa,GAAD,KACI,yBAAKG,IAAI,OAAOC,IAAKC,EAAQ,KAAyCC,MAAO,KAC7E,yBAAKvkB,UAAU,cACViE,EACIsL,QAAO,SAACtC,GAAD,OAAQA,EAAE8W,YACjBxU,QAAO,SAACtC,GAAD,OAAQA,EAAE/B,MAAOZ,EAAU2C,EAAE/B,MAAM,MAC1CvG,KAAI,WAAuCsS,GAAO,IAA3CrS,EAA0C,EAA1CA,KAAMye,EAAoC,EAApCA,KAAYmB,EAAwB,EAA9BlB,KAAYS,EAAkB,EAAlBA,SAC5B,OACI,kBAAC,IAAD,CACIzgB,GAAI+f,EACJrjB,UAAU,WACVuD,QAAS,SAACC,GACFugB,GACAvgB,EAAEC,kBAGV1C,IAAKkW,GAEL,yBAAKjX,UAAU,4BACX,kBAACwkB,EAAD,CAAMxkB,UAAU,oBAEpB,yBAAKA,UAAU,kBACX,8BAAO4E,SAM/B,yBAAK5E,UAAU,sBACX,yBAAKA,UAAU,qBACX,yBAAKA,UAAU,mBAAmBokB,IAAI,OAAOC,IAAKC,EAAQ,QAE9D,yBAAKtkB,UAAU,kDACX,8BAAO2K,IAASA,EAAK8Z,UAAY9Z,EAAK+Z,iBAE1C,yBAAK1kB,UAAU,qBACX,yBAAKA,UAAU,MAAMuD,QAAS6f,GAC1B,yBAAKpjB,UAAU,aACX,kBAAC,IAAD,CAAQ2D,KAAM,W,UCjDpCrD,GAAYV,IAAOC,IAAV,0hBAgCF8kB,GAAuD,SAAC,GAAqB,IAAnBC,EAAkB,EAAlBA,YAC7DC,EAAgBD,EAAYE,MAAM,GAAI,GACtCC,EAAcH,EAAYE,OAAO,GAAG,GAE1C,OAAOF,EAAYzjB,OAAS,EACxB,kBAAC,GAAD,KACK0jB,EAAclgB,KAAI,YAAqB,IAAlBC,EAAiB,EAAjBA,KAAMyV,EAAW,EAAXA,KACxB,OACI,kBAAC,IAAMta,SAAP,CAAgBgB,IAAK6D,GACjB,kBAAC,IAAD,CAAM5E,UAAU,iBAAiBsD,GAAI+W,GAChCzV,GAEL,kBAAC,KAAD,CAAc5E,UAAU,iBAAiB2D,KAAM,SAI3D,0BAAM3D,UAAU,kBAAkB+kB,EAAYngB,OAElD,MCrDKogB,GAAqBplB,IAAOC,IAAV,0WCOlBolB,GAA0B,SAAC/kB,GACpC,IAAQ0kB,EAAgB1kB,EAAhB0kB,YAER,OACI,kBAACI,GAAD,KACI,yBAAKhlB,UAAU,iBACX,yBAAKA,UAAU,WACX,kBAAC,GAAD,OAEJ,yBAAKA,UAAU,iBACX,kBAAC,GAAD,CAAa4kB,YAAaA,KAE9B,yBAAK5kB,UAAU,aACX,kBAAC,GAAD,U,UCpBPklB,GAAqBtlB,IAAOC,IAAV,yiFCKlBslB,GAA8B,SAACjlB,GACxC,MAA4BE,IAAM+jB,WAAW1Z,GAAYL,SAAjDO,EAAR,EAAQA,KAAML,EAAd,EAAcA,UACd,EAA8BlK,IAAMglB,UAAS,GAA7C,oBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAAgCpC,KAAxBjf,EAAR,EAAQA,MAAOmf,EAAf,EAAeA,aACTmC,EAAgBnlB,IAAM6K,aAAY,WACpCqa,GAAYD,KACb,CAACA,IAEJ,OACI,kBAACH,GAAD,KACI,yBAAKllB,UAAU,mBACX,0BAAMA,UAAU,0CACZ,kBAAC,KAAD,CAAc2D,KAAM,GAAIJ,QAASgiB,KAErC,0BAAMvlB,UAAU,4CACZ,yBAAKokB,IAAI,OAAOG,MAAO,GAAIF,IAAKC,EAAQ,QAE5C,0BAAMtkB,UAAU,2CAEnBqlB,GACG,yBAAKrlB,UAAU,2BAA2BuD,QAASgiB,GAC/C,yBAAKvlB,UAAU,mBACX,yBAAKokB,IAAI,OAAOC,IAAKC,EAAQ,KAAyCC,MAAO,KAC7E,yBAAKvkB,UAAU,cACViE,EACIsL,QAAO,SAACtC,GAAD,OAAQA,EAAE8W,YACjBxU,QAAO,SAACtC,GAAD,OAAQA,EAAE/B,MAAOZ,EAAU2C,EAAE/B,MAAM,MAC1CvG,KAAI,WAAuCsS,GAAO,IAA3CrS,EAA0C,EAA1CA,KAAMye,EAAoC,EAApCA,KAAYmB,EAAwB,EAA9BlB,KAAYS,EAAkB,EAAlBA,SAC5B,OACI,kBAAC,IAAD,CACIzgB,GAAI+f,EACJrjB,UAAU,WACVuD,QAAS,SAACC,GACFugB,GACAvgB,EAAEC,kBAGV1C,IAAKkW,GAEL,yBAAKjX,UAAU,4BACX,kBAACwkB,EAAD,CAAMxkB,UAAU,oBAEpB,yBAAKA,UAAU,kBACX,8BAAO4E,SAM/B,yBAAK5E,UAAU,sBACX,yBAAKA,UAAU,qBACX,yBACIA,UAAU,mBACVokB,IAAI,OACJC,IAAKC,EAAQ,QAGrB,yBAAKtkB,UAAU,kDACX,8BAAO2K,IAASA,EAAK8Z,UAAY9Z,EAAK+Z,iBAE1C,yBAAK1kB,UAAU,qBACX,yBAAKA,UAAU,MAAMuD,QAAS6f,GAC1B,yBAAKpjB,UAAU,aACX,kBAAC,IAAD,CAAQ2D,KAAM,aCnEzC6hB,GAA0B5lB,YAAO6lB,IAAP7lB,CAAH,8lBCMvB8lB,GAAwC,SAAC,GAAyB,IAAvB9U,EAAsB,EAAtBA,MAAOtN,EAAe,EAAfA,GAAIqiB,EAAW,EAAXA,KAC/D,OACI,kBAACH,GAAD,CAAyBliB,GAAIA,GACzB,yBAAKtD,UAAU,WACX,yBAAKokB,IAAI,YAAYC,IAAKC,EAAQ,QAEtC,4BACI,gCAAS1T,IAEb,2BAAI+U,GACJ,8CACiB,uBAAG3lB,UAAU,yBAAyB4lB,cAAY,YCjBlEC,GAAgCjmB,YAAO6lB,IAAP7lB,CAAH,8lBCO7BkmB,GAA8C,SAAC,GAAgC,IAA9BlV,EAA6B,EAA7BA,MAAOtN,EAAsB,EAAtBA,GAAIqiB,EAAkB,EAAlBA,KAAMI,EAAY,EAAZA,MAC3E,OACI,kBAACF,GAAD,CAA+BviB,GAAIA,GAC/B,yBAAKtD,UAAU,WACX,yBAAKokB,IAAI,YAAYC,IAAKC,EAAQ,QAEtC,4BACI,gCAAS1T,IAEb,2BAAI+U,GACJ,2BAAII,GACJ,8CACiB,uBAAG/lB,UAAU,yBAAyB4lB,cAAY,YChBlEI,GAAb,4MAKWnb,MAAQ,CACXob,UAAU,GANlB,uDASI,SAAyBxY,EAAiCyY,MAT9D,oBAaI,WACI,OAAIjmB,KAAK4K,MAAMob,SAEJ,qDAGJhmB,KAAKC,MAAMC,YAnB1B,uCACI,SAAuCsN,GACnC,MAAO,CAAEwY,UAAU,OAF3B,GAAmC7lB,IAAMC,W,qBCCpB8lB,I,mNACVtb,MAAQ,CACXub,QAAQ,G,EAmCJC,OAAS,WACb,EAAKC,SAAS,CACVF,QAAS,EAAKvb,MAAMub,U,4CAlC5B,WACI,OACI,8BACI,gBAAC,IAAD,CAAQpmB,UAAU,6CAA6CumB,OAAK,GAChE,gBAAC,IAAD,CAAWC,OAAO,EAAMjiB,MAAO,CAAEkiB,YAAa,KAAMC,WAAY,OAC5D,gBAAC,IAAD,CAAa1mB,UAAU,UAAUsD,GAAG,IAAIqjB,IAAKlB,KACzC,uBAAKrB,IAAI,MAAMG,MAAO,GAAIF,IAAKC,EAAQ,QAE3C,gBAAC,IAAD,CAAe/gB,QAAStD,KAAKomB,OAAQrmB,UAAU,SAC/C,gBAAC,IAAD,CAAUA,UAAU,uCAAuComB,OAAQnmB,KAAK4K,MAAMub,OAAQQ,QAAM,GACxF,gBAAC,IAAD,CAAK5mB,UAAU,mCAAmC4mB,QAAM,GACpD,gBAACnc,GAAYmB,SAAb,MACK,qBAAGjB,KAEI,gBAAC,WAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,CAASgc,IAAKlB,IAAMniB,GAAG,kBAAvB,eAKR,iB,GA1BPlD,kBCFxBymB,GAAmBjnB,IAAOC,IAAV,0UAQDinB,MAOb,YAAC5mB,GAAD,OACX,gBAAC,WAAD,KACI,gBAAC,GAAD,MACA,4BAAOA,EAAMC,Y,UCrBR4mB,GAAiB,SAAC,GAAiB,IAAZC,EAAW,oBAC3C,OACI,kBAAC,IAAMjnB,SAAP,KACI,yCAASinB,EAAT,CAAehnB,UAAU,iBAAiBkL,KAAK,cCIrD+b,GAAoBrnB,YAAOsnB,KAAOrnB,IAAdD,CAAH,0pBA+BVunB,GAAuB,WAChC,IAAQtP,EAAUjN,aAAY,SAACC,GAAD,OAA6BA,EAAMqW,WAAzDrJ,MACFuP,EAAYzjB,gBAAKkU,GAAS,EAC1BwP,EAAW1iB,eAAIkT,GAOfyP,EAAU3b,mBAAQ,kBAAOyb,EAAY,UAAY,YAAY,CAACA,IAEpE,OACI,kBAACH,GAAD,CAAmBM,SARI,CACvBC,QAAS,CAAEC,QAAS,EAAGC,QAAS,QAChCC,QAAS,CAAEF,QAAS,EAAGC,QAAS,SAMOE,QAASN,GAC5C,kBAAC,GAAD,CAAgBtnB,UAAU,iBAC1B,0BAAMA,UAAU,mBACZ,kBAAC,KAAD,KACKqnB,EAASlmB,OAAS,EACbwD,eAAIkjB,gBAAKhQ,IAAQ,SAAC9W,GACd,OACI,kBAAC,KAAO+mB,KAAR,CACI/mB,IAAKA,EACLf,UAAU,UACVwnB,QAAS,CAAEC,QAAS,GACpBG,QAAS,CAAEH,QAAS,GACpBM,KAAM,CAAEN,QAAS,IAEhB5P,EAAM9W,OAInB,c,uDC1DbinB,GAA4C,SAAC,GAAiD,IA6CrF,IAWG,IAxDmC9c,EAA8C,EAA9CA,KAAM+c,EAAwC,EAAxCA,aAAcC,EAA0B,EAA1BA,UAAchoB,EAAY,kBACtG,EAA4BikB,qBAAW1Z,GAAYL,SAA3CO,EAAR,EAAQA,KAAML,EAAd,EAAcA,UACRsC,EAAWuW,cACjB,EAAmDgF,cAAjCC,EAAlB,EAAQC,SAA8BrnB,EAAtC,kBAGMsnB,EAAeloB,IAAMuL,SACvB,kBAAOsc,KAAgB,OAACA,QAAD,IAACA,OAAD,EAACA,MAAsB/c,IAASZ,EAAUY,GAAM,KAEvE,CAACP,IAIC4d,EAAkBnoB,IAAMuL,SAAQ,kBAAMhB,IAASud,IAAW,CAACvd,IAE3D6d,EAAgBpoB,IAAMuL,SAAQ,kBAAOhB,GAAQud,IAAW,CAACvd,IAEzD8d,EAAOroB,IAAM6K,aACf,SAACmB,GACGQ,EAASD,GAAmBuD,OAAOtH,GAAkBqa,QAAS7W,MAElE,CAACQ,IAaL,OAVAxM,IAAMsoB,WAAU,WACZ,OAAIF,EACOC,EAAK,8BAGZH,EACOG,EAAK,mDADhB,IAGD,CAACH,EAAcE,EAAeD,EAAiB5d,EAAM8d,IAEpDD,EAEI,kBAAC,IAAD,CACIllB,GAAI,CACA+kB,SAAU,SACVxd,MAAO,CAAE8d,SAAUP,MAM/BE,EAEI,kBAAC,IAAD,CACIhlB,GAAI,CACA+kB,SAAQ,oBAAErnB,EAAS6J,aAAX,aAAE,EAAgB8d,gBAAlB,QAA8B,iBACtC9d,MAAO7J,EAAS6J,SAM5B0d,EAEI,kBAAC,IAAD,CACIjlB,GAAI,CACA+kB,SAAQ,oBAAErnB,EAAS6J,aAAX,aAAE,EAAgB8d,gBAAlB,QAA8B,iBACtC9d,MAAO,MAMhB,kBAAC,IAAU3K,IAGhB0oB,GAAc,SAACV,GAAD,OAAwB,SAAChoB,GAAD,OAA8B,kBAAC,GAAD,cAAoBgoB,aAAchoB,MAE/F2oB,GAAiBD,IAAY,GAC7BE,GAAgBF,IAAY,GCpF5BG,GAA2BnpB,IAAOC,IAAV,w4BCCxBmpB,ICOqB5oB,IAAMC,UDPVT,YAAOqpB,IAAPrpB,CAAH,6BAEdspB,GAAqBtpB,IAAOC,IAAV,oaAoBlBspB,GAAqBvpB,YAAOwpB,IAAPxpB,CAAH,kWAUzBspB,GAAwBA,IE1BjBG,GAAgD,SAAC,GAIvD,IAHHrpB,EAGE,EAHFA,UACkBspB,EAEhB,EAFFC,iBACAppB,EACE,EADFA,SAEA,EAA4BC,IAAMglB,UAAS,GAA3C,oBAAOgB,EAAP,KAAeoD,EAAf,KAGA,OACI,kBAAC,IAAMzpB,SAAP,KACI,kBAACipB,GAAD,CAAgB5C,OAAQA,EAAQC,OAJzB,kBAAMmD,GAAU,SAACC,GAAD,OAAgBA,MAISzpB,UAAWA,GACvD,kBAAC,IAAD,CAAgB2mB,IAAI,MAAMpiB,MAAO,CAAEmlB,OAAQ,YACvC,kBAACJ,EAAD,OAEJ,kBAACH,GAAD,CAAoBQ,OAAK,GAAExpB,MCrB9BypB,GAA0BhqB,IAAOC,IAAV,+yBCQvBgqB,GAA+B,SAAC3pB,GACzC,IAAQ4pB,EAAiC5pB,EAAjC4pB,SAAU3pB,EAAuBD,EAAvBC,SAAU4pB,EAAa7pB,EAAb6pB,SAE5B,OACI,kBAACH,GAAD,KACI,kBAAC,IAAD,CAAOI,YAAU,GACZD,GACG,+BACI,4BACKD,GACGA,EAAS3oB,OAAS,GAClB2oB,EAASnlB,KAAI,SAAC8L,GAAD,OAAkB,wBAAI1P,IAAK0P,GAAOA,QAI/D,+BAAQtQ,M,kFCRlB8pB,GAAcrqB,YAAOsqB,IAAPtqB,CAAH,kWAqBXuqB,GAAavqB,IAAOC,IAAV,gnBA4CT,SAASuqB,GAAT,GAOkC,IANrCpqB,EAMoC,EANpCA,UACAqqB,EAKoC,EALpCA,SACAC,EAIoC,EAJpCA,QACA7Z,EAGoC,EAHpCA,KACAE,EAEoC,EAFpCA,KACGzQ,EACiC,kBACpC,EAO6CqqB,oBAAS,cAE9CD,UACA7Z,OACAyB,aAAc,CAAEsY,SArBV,KAsBHtqB,GAEPuqB,aACAC,kBAdAC,EADJ,EACIA,cACAC,EAFJ,EAEIA,kBACAC,EAHJ,EAGIA,aACAC,EAJJ,EAIIA,WACA1Q,EALJ,EAKIA,KACA2Q,EANJ,EAMIA,KAYEC,EAAY5qB,IAAMuL,SAAQ,kBAAU,OAAJgF,QAAI,IAAJA,OAAA,EAAAA,EAAMmF,aAAc,IAAG,CAACnF,IAExDsa,EAAkB7qB,IAAMuL,SAAQ,kBAAMgF,GAAQA,EAAKmF,WAAanF,EAAKyF,YAAW,CAACzF,IACjFua,EAAc9qB,IAAMuL,SAAQ,kBAAMgF,GAAQA,EAAKmF,WAAanF,EAAKwF,WAAU,CAACxF,IAE5Ewa,EAAW/qB,IAAM6K,aAAY,SAACmP,GAChCzY,EAAU,OAAQyY,KACnB,IAEGgR,EAAWhrB,IAAM6K,aAAY,WAC/BkgB,EAASxa,EAAMya,YAChB,CAACD,EAAUxa,IAER0a,EAAejrB,IAAM6K,aAAY,WACnCkgB,EAASxa,EAAM0a,gBAChB,CAACF,EAAUxa,IAER2a,EAAclrB,IAAMuL,SAAQ,WAC9B,IAAM4f,EAAQ,YAAI,IAAI3oB,MAAJ,OAAU+N,QAAV,IAAUA,OAAV,EAAUA,EAAM6a,aAAa7mB,KAAI,SAACsI,EAAGgK,GAAJ,OAAUA,EAAI,KAC3DwU,EAAWC,KAAKC,MAAMJ,EAAMpqB,OAAS,GAE3C,GAAIoqB,EAAMpqB,QAAU,EAChB,MAAO,CAACoqB,GAGZ,IAAMK,EAAOL,EAAMzG,MAAM,EAAG,GACtB+G,EAAON,EAAMzG,OAAO,GAEtBrV,EACc,IAAdub,GAAmBA,IAAcO,EAAMpqB,OACjCoqB,EAAMzG,MAAM2G,EAAW,EAAGA,EAAW,GACrCF,EAAMzG,MAAMkG,EAAY,EAAGA,EAAY,GAsBjD,OApBIY,EAAKE,SAASrc,EAAK,MACnBA,EAAOA,EAAKqV,MAAM,IAGlB+G,EAAKC,SAASrc,EAAKA,EAAKtO,OAAS,MACjCsO,EAAOA,EAAKqV,MAAM,GAAI,IAenB,CAAC8G,EAAMnc,EAAMoc,KACrB,CAACb,EAAWra,IAEf,OACI,kBAAC,IAAM5Q,SAAP,KACI,kBAACkqB,GAAD,iBAAiBU,IAAjB,CAAkC3qB,UAAWA,EAAWgqB,YAAU,IAC7DK,EAAW,KACR,+BACKQ,EAAalmB,KAAI,SAAConB,GAAD,OACd,uBAAQA,EAAYC,sBACfD,EAAY5d,QAAQxJ,KAAI,SAACsnB,GAAD,OACrB,uBAAQA,EAAOC,iBACX,6BACI,8BAAOD,EAAOE,OAAO,qBAQjD,0BAAWvB,IACNG,EAAKpmB,KAAI,SAACynB,EAAKnV,GAEZ,OADA6T,EAAWsB,GAEP,wCAAQA,EAAIC,cAAZ,CAA2BtrB,IAAKkW,IAC3BmV,EAAIE,MAAM3nB,KAAI,SAAC4nB,EAAMC,GAClB,OACI,wCAAQD,EAAKE,eAAb,CAA6B1rB,IAAKyrB,IAC7BD,EAAKJ,OAAO,kBAS5Cxb,GACG,kBAACwZ,GAAD,KACI,iCACI,kBAACrnB,EAAD,CACI9C,UAAU,QACVuD,QAAS,kBAAM8nB,KACfqB,UAAWzB,GAEX,kBAAC,KAAD,CAAWtnB,KAAM,MAEpB2nB,EAAY3mB,KAAI,SAACgoB,EAAS1V,GAAV,OACb,6BAASjX,UAAU,iBAAiBe,IAAKkW,GACpC0V,EAAQhoB,KAAI,SAACyV,GAAD,OACT,kBAACtX,EAAD,CACI9C,UAAU,QACVuD,QAAS,WACL4nB,EAAS/Q,IAEbsS,SAAUtS,IAAS4Q,EACnBjqB,IAAKqZ,GAEJA,UAKjB,kBAACtX,EAAD,CAAqB9C,UAAU,QAAQuD,QAAS,kBAAM6nB,KAAYsB,UAAWxB,GACzE,kBAAC,KAAD,CAAYvnB,KAAM,OAG1B,yCArJF,IAsJgBqnB,EAAY,GAAiB,EAD3C,OArJF,IAsJqDA,EAAY,GAAiB5Q,EAAKjZ,OADrF,MACgG,IAC3FwP,EAAKic,WAFV,IAE2C,IAApBjc,EAAKic,WAAmB,UAAY,WCpO/E,I,SCOKC,GDPCC,GAAYltB,IAAOC,IAAV,wyBAwCFktB,GAA+B,SAAC,GAAkB,IAAhB5sB,EAAe,EAAfA,SAC3C,OAAO,kBAAC2sB,GAAD,KAAY3sB,IE1CV6sB,GAAuBptB,IAAOC,IAAV,mRCEpBotB,GAAyB,SAAC/sB,GACnC,MAAwBE,IAAMglB,SAAS,IAAIvS,MAA3C,oBAAOoH,EAAP,KAAaiT,EAAb,KACMC,EAAgB/sB,IAAMuL,SAAQ,kBAAMqO,GAAWC,KAAO,CAACA,IAU7D,OARA7Z,IAAMsoB,WAAU,WACZ,IAAM9I,EAAWwN,aAAY,WACzBF,EAAQ,IAAIra,QACb,KAEH,OAAOwa,cAAcC,KAAKC,WAAY3N,MAItC,kBAACoN,GAAyB9sB,EACtB,yBAAKkkB,IAAI,eAAeC,IAAKC,EAAQ,OACrC,8BAAO6I,KCjBNK,GAAsB5tB,IAAOC,IAAV,kwBCInB4tB,GAAuC,WAChD,IAAM7gB,EAAWuW,cAEXC,EAAehjB,IAAM6K,aAAY,WACnC2B,EAAS0D,GAAU0S,YACpB,CAACpW,IAEJ,OACI,kBAAC4gB,GAAD,KACI,yBAAKxtB,UAAU,UAAUuD,QAAS6f,GAC9B,yBAAKpjB,UAAU,WACX,yCAEJ,yBAAKA,UAAU,OACX,yBAAKA,UAAU,aACX,6BACI,kBAAC,IAAD,CAAQ2D,KAAM,GAAIC,YAAa,U,kDJZtDipB,K,kBAAAA,E,eAAAA,E,gBAAAA,E,mBAAAA,Q,KAOL,I,2BAAMvsB,GAAYV,YAAOsnB,KAAOrnB,IAAdD,CAAH,m9CA8DOitB,GAAO1V,QAIP0V,GAAO3K,KAIP2K,GAAO1c,MAIP0c,GAAO5J,SAMhByK,GAAkD,SAAC,GAAmC,IAAjC1hB,EAAgC,EAAhCA,GAAIjH,EAA4B,EAA5BA,KAAM+G,EAAsB,EAAtBA,QAASC,EAAa,EAAbA,OAC3Ea,EAAWuW,cACXwK,EAAsBvtB,IAAM6K,aAAY,WAC1C2B,EAASN,GAAqBQ,OAAOd,MACtC,CAACY,EAAUZ,IAER4hB,EAAmB7oB,IAAS6D,GAAkBuH,MAAQ0d,IARnC,IAUnBhjB,EAAQzK,IAAMuL,SAAQ,WACxB,OAAQ5G,GACJ,KAAK6D,GAAkBuO,QACnB,MAAO,UACX,KAAKvO,GAAkBsZ,KACnB,MAAO,OACX,KAAKtZ,GAAkBuH,MACnB,MAAO,QACX,KAAKvH,GAAkBqa,QACnB,MAAO,aAEhB,CAACle,IAEEyf,EAAOpkB,IAAMuL,SAAQ,WACvB,OAAQ5G,GACJ,KAAK6D,GAAkBuO,QACnB,OAAO2W,KACX,KAAKllB,GAAkBsZ,KACnB,OAAOA,KACX,KAAKtZ,GAAkBuH,MACnB,OAAO4d,KACX,KAAKnlB,GAAkBqa,QACnB,OAAO+K,QAEhB,CAACjpB,IAEJ3E,IAAMsoB,WAAU,WACZ,IAAMuF,EAAUhd,YAAW,WAClBlF,GACD4hB,MAELC,GAEH,OAAO,WACH5c,aAAaid,MAElB,CAACN,EAAqBC,EAAkB7hB,IAE3C,IAAMmiB,EAAiB9tB,IAAMuL,SACzB,iBACK,CACG6b,QAAS,CAAE2G,EAAG,IAAK1G,QAAS,GAC5BG,QAAS,CAAEuG,EAAG,EAAG1G,QAAS,GAC1BM,KAAM,CAAEN,QAAS,MAEzB,IAGJ,OACI,kBAAC,GAAcyG,EACX,yBAAKluB,UAAS,2BAAsB6K,KACpC,yBAAK7K,UAAU,eACX,yBAAKA,UAAS,sBAAiB6K,IAC3B,kBAAC2Z,EAAD,CAAM7gB,KAAM,EAAGC,YAAa,KAEhC,yBAAK5D,UAAU,kBACX,0BAAMA,UAAU,iBAAiBouB,sBAAWvjB,IAC3CiB,EAAQnH,KAAI,SAACyH,EAAS6K,GAAV,OACT,0BAAMjX,UAAU,iBAAiBe,IAAKkW,GACjC7K,OAIb,4BAAQpM,UAAU,wBAAwBuD,QAASoqB,GAC/C,kBAAC,KAAD,CAAGhqB,KAAM,GAAIC,YAAa,QKlKxCtD,GAAYV,IAAOC,IAAV,4QAiBFwuB,GAAkC,WAC3C,IAAQvW,EAAkBlN,aAAY,SAACC,GAAD,OAA6BA,EAAMiN,iBAAjEA,cAER,OACI,kBAAC,GAAD,KACI,kBAAC,KAAD,KACKA,EAAcnT,KAAI,SAAC4H,GAAD,OACf,kBAAC,GAAD,eAAmBxL,IAAKwL,EAAaP,IAAQO,U,8CC5BpD+hB,IAAb,GACKC,kBAAQ9pB,EAAW,CAAE2H,QAAS,uBADnC,sIAII,gBAJJ,uHAE2B,MAF3B,I,UCOaoiB,IAAb,GACKD,kBAAQ9pB,EAAW,CAAE2H,QAAS,uBADnC,GAIKqiB,aAAU,EAAG,CACVriB,QAAQ,+BALhB,cASI,aAAe,6FACXnM,KAAKyuB,MAAQ,GACbzuB,KAAK0uB,SAAW,GAXxB,oDAcI,gBAdJ,4N,oBCRO,SAASC,KACZ,OAAO,SAAUC,EAAgBC,GAC7BC,aAAkB,CACdnqB,KAAM,kBACNoI,OAAQ6hB,EAAOG,YACfF,eACAG,YAAa,GACbC,UAAW,CACPC,SADO,SACEttB,EAAYwL,GAEjB,OADCA,EAAKwhB,OAAeC,IAAiBjtB,GAC/B,OCEpB,SAASutB,GAAeC,GAC3B,OAAO,SAAUR,EAAgBC,GAC7BC,aAAkB,CACdnqB,KAAM,iBACNoI,OAAQ6hB,EAAOG,YACfF,eACAnf,QAAS0f,EACTJ,YAAa,GACbC,UAAW,CACPC,SADO,SACEttB,EAAewL,GACpB,OAtBpB,SAAiBiiB,GACb,IAAIC,EAIJ,SAAKD,GAAKA,EAAEnuB,OAAS,KAErBouB,EAAYD,EAAEE,UAAU,EAAG,GAJX,oDAMDC,MADQ,MAAdF,EAAoBD,EAAI,IAAMA,GACZjZ,QAAQ,OAAQ,MAapBqZ,CAAQ7tB,QCtB5B,SAAS8tB,GAAiBC,EAAeP,GAC5C,OAAO,SAAUR,EAAgBC,GAC7BC,aAAkB,CACdnqB,KAAM,mBACNoI,OAAQ6hB,EAAOG,YACfF,eACAnf,QAAS0f,EACTJ,YAAa,GACbC,UAAW,CACPC,SADO,SACEttB,EAAYwL,GACjB,OAAOxL,IAAWwL,EAAKwhB,OAAee,Q,aCRnD,SAASC,GAA8C1jB,GACtD,qBAAsBA,GACrBA,EAAe2jB,mBAGpB,IAAMC,EAAmBC,aAAa7jB,EAAQ,CAC1C8jB,WAAW,IAIf,OADqCF,ECNvBttB,QAAO,SAACytB,EAAMvtB,GAExB,OADAutB,EAAKvtB,EAAQwtB,UAAYjkB,OAAOC,OAAOxJ,EAAQssB,aAAuC,GAC/EiB,IAJsB,ICH9B,SAASE,GAAuCf,GACnD,OAAO,SAAUR,EAAgBC,GAC7BC,aAAkB,CACdnqB,KAAM,yCACNoI,OAAQ6hB,EAAOG,YACfF,aAAcA,EACdnf,QAAS0f,EACTH,UAAW,CACPC,SADO,SACEttB,EAAYwL,GAEjB,OADYA,EAAKwhB,OACTwB,qBACoB,kBAAVxuB,GAAsBA,EAAQ,GAIpDyuB,eARO,SAQQjjB,GACX,MAAM,+ECjBnB,I,mGAAMkjB,GAA6B,eAC7BC,GAAqB,QACrBC,GAAqB,QACrBC,GAAiB,OCOjBC,IAAb,GACKC,aAAQF,GAAgB,CACrBtkB,QAAS,kCAFjB,GAIKwkB,aAAQL,GAA4B,CACjCnkB,QAAS,8CALjB,GAOKwkB,aAAQJ,GAAoB,CACzBpkB,QAAS,8CARjB,GAUKwkB,aAAQH,GAAoB,CACzBrkB,QAAS,8CAXjB,GAaKqiB,aDlB8B,ECkBC,CAC5BriB,QAAQ,6BAAD,ODnBoB,ECmBpB,wBAdf,GAkBKujB,GAAiB,WAAY,CAAEvjB,QAAS,wBAlB7C,uIAqBWykB,eAAyB,GArBpC,oDAuBI,gBAvBJ,sIAgB8B,MAhB9B,4HAmBqC,MAnBrC,I,sECDO,ICPmB5d,GAAsBoc,G,o7BCa3CxC,GFNQiE,IAAb,GADCC,aAAoB,CAAEnsB,KAAM,cAAeosB,OAAO,IACnD,8FACI,SAAgBC,EAAc5jB,GAC1B,OAAO4jB,EAAM9vB,OAAS,MAF9B,WAMa+vB,IAAb,GACKzC,aAAU,EAAG,CACVriB,QAAS,oDAFjB,GAQK+kB,eCrBqBle,QDwBXxO,ECxBiC4qB,GDwBtB,CAAEjjB,QAAS,+BAXrC,GCZW,SAAUyiB,EAAgBC,GAC7BC,aAAkB,CACdnqB,KAAM,YACNoI,OAAQ6hB,EAAOG,YACfF,eACAG,YAAa,GACbtf,QAAS0f,GACTH,UAAW,CACPC,SADO,SACEttB,EAAewL,GACpB,OAAOmF,KAAO3Q,GAAOuvB,QAAQne,IAAQJ,KAAKwe,MAAO,UDGrE,GAYKC,aAAU,GAAI,CAAEllB,QAAS,wBAZ9B,GAeKklB,aAAU,GAAI,CAAEllB,QAAS,wBAf9B,GAkBKmlB,aAAOjvB,EAAU,CAAE8J,QAAS,8BAlBjC,GAqBKolB,eArBL,GAsBKC,aAAQ,CAAErlB,QAAS,uBAtBxB,GAuBKslB,aAASZ,GAAa,CAAE1kB,QAAS,qCAvBtC,GA0BK+kB,eA1BL,GA6BKA,eA7BL,GAgCKQ,cAAO,EAAM,CAAEvlB,QAAS,6CAhC7B,cAmCI,WAAY+L,GAAoB,oEA7BzBjB,SAAmB,GA6BK,yUAC3BjX,KAAK2xB,QAAUzZ,EAEXA,IACAlY,KAAK4xB,UAAY1Z,EAAQnM,IAvCrC,oDA2CI,WACI/L,KAAK6xB,WAAa7xB,KAAK6xB,UACvB7xB,KAAKiX,SAAWjX,KAAKiX,WA7C7B,sBAgDI,kBACWjX,KAAK2xB,eACL3xB,KAAK8xB,WAlDpB,+HAImC,MAJnC,iIASyC,KATzC,8HAaoC,MAbpC,4HAgBqC,MAhBrC,uHAmBiCzvB,EAASkD,OAnB1C,6HAwB2C,MAxB3C,iOA8B+B,KA9B/B,oHAiC8B,KAjC9B,I,oBGZawsB,IAAb,GACKvD,aAAU,EAAG,CACVriB,QAAS,oDAFjB,GAQKqiB,aAAU,EAAG,CACVriB,QAAS,oDATjB,GAWK6lB,cAAW,SAACC,GAAD,QAA0BA,EAAEC,cAX5C,GAcK1D,aAAU,EAAG,CACVriB,QAAS,oDAfjB,GAmBKmlB,aAAOrpB,GAAY,CAAEkE,QAAS,sBAnBnC,GAsBKqiB,aAAU,EAAG,CACVriB,QAAS,oDAvBjB,GAyBK6lB,cAAW,SAACC,GAAD,OAAwBA,EAAEE,UAzB1C,GA4BKC,aAAU,CAAEjmB,QAAS,sBA5B1B,GA+BK+kB,eA/BL,GAkCKI,aAAO7pB,GAAS,CAAE0E,QAAS,6BAlChC,2FAMWkmB,oBAA8B,EANzC,6UAqCI,gBArCJ,2HAI+B,MAJ/B,0HAYgC,MAZhC,qHAiB8B,MAjB9B,yHAoBqCpqB,GAAWQ,QApBhD,mIA0ByC,MA1BzC,yHA6BkC,KA7BlC,oHAgC6B,KAhC7B,oHAmC6BhB,GAAQO,UAnCrC,I,UCCasqB,IAAb,GACKC,aAAW,CAAEpmB,QAAS,eAD3B,GAIKmlB,aAAOhsB,EAAiB,CAAE6G,QAAS,mCAJxC,cASI,WAAYgG,GAAmB,oGAFxB0J,eAEuB,EAC1B7b,KAAKwyB,IAAMrgB,EAAQpG,GACnB/L,KAAKyyB,cAAgBtgB,EAAQE,cAC7BrS,KAAK6b,UAAY1J,EAAQ0J,UAZjC,4CAeI,gBAfJ,8N,yCCca6W,IAAb,GACKC,eADL,GAEKzB,eAFL,GAKKyB,eALL,GAMKC,aAAW,CAAEzmB,QAAS,6BAN3B,GASK+kB,eATL,GAaKG,aAAU,GAAI,CAAEllB,QAAS,wBAb9B,GAgBKklB,aAAU,GAAI,CAAEllB,QAAS,wBAhB9B,GAmBKomB,aAAW,CAAEpmB,QAAS,8BAnB3B,GAsBKqiB,aAAU,EAAG,CACVriB,QAAS,oDAvBjB,GA2BKqiB,aAAU,EAAG,CACVriB,QAAS,oDA5BjB,GA8BK6lB,cAAW,SAACC,GAAD,QAA0BA,EAAEC,cA9B5C,GAiCK1D,aAAU,EAAG,CACVriB,QAAS,oDAlCjB,GAsCKmlB,aAAOrpB,GAAY,CAAEkE,QAAS,sBAtCnC,GAyCKqiB,aAAU,EAAG,CACVriB,QAAS,oDA1CjB,GA4CK6lB,cAAW,SAACC,GAAD,OAAwBA,EAAEE,UA5C1C,GA+CKC,aAAU,CAAEjmB,QAAS,sBA/C1B,GAkDK+kB,eAlDL,GAqDKI,aAAO7pB,GAAS,CAAE0E,QAAS,6BArDhC,GAwDK+kB,eAxDL,GA2DKA,eA3DL,cA8DI,WAAY2B,GAAqD,iqBACzD,YAAaA,EACb7R,iBACIhhB,KACA8yB,gBAAKD,EAAkB,CACnB,gBACA,kBACA,iBAEA,YACA,UACA,YAOZ7yB,KAAK2xB,QAAUmB,gBAAKD,EAAkB,CAAC,QAAS,OAhFxD,+CAyFI,WACI,OAAO7R,iBAAM,IAAI+Q,GAAmB/xB,QA1F5C,uBA6FI,WACI,IAAMmS,EAAU6O,iBAAM,IAAIiQ,GAAmBjxB,KAAK2xB,SAAU3xB,MAG5D,OAFAmS,EAAQyf,UAAY5xB,KAAK2xB,QAAQ5lB,GACjCoG,EAAQ4gB,WAAa,CAAC/yB,KAAKgzB,eACpB7gB,IAjGf,8BAoGI,WACInS,KAAK6xB,WAAa7xB,KAAK6xB,aArG/B,0BAmFI,SAA0B1f,GACtB,OAAO8gB,KACH,CAAC9gB,EAAQ+gB,cAAe/gB,EAAQghB,gBAAiBhhB,EAAQihB,eAAgBjhB,EAAQ0f,WAAWtiB,KAAK,UArF7G,kIAGmC,MAHnC,uHAOqB,MAPrB,iIAUyC,KAVzC,2HAcoC,MAdpC,4HAiBqC,MAjBrC,uHAoB+B,KApB/B,sHAyB+B,MAzB/B,0HA+BgC,MA/BhC,qHAoC8B,MApC9B,yHAuCqCtH,GAAWQ,QAvChD,mIA6CyC,MA7CzC,yHAgDkC,KAhDlC,oHAmD6B,KAnD7B,oHAsD6BhB,GAAQO,UAtDrC,iOA4D+B,KA5D/B,ICLaqrB,IAAb,GAGKd,aAAW,CAAEpmB,QAAS,8BAH3B,GAQK+kB,eARL,GAWKA,eAXL,GAcKqB,aAAW,CAAEpmB,QAAS,8BAd3B,GAiBK+kB,eAjBL,cAmBI,WAAYhZ,GAAoB,yBAlBzBjB,SAAmB,GAkBK,4CAbxB0a,aAawB,6KAC3B3xB,KAAK2xB,QAAUzZ,EAEXA,IACAlY,KAAK4xB,UAAY1Z,EAAQnM,IAvBrC,oDA2BI,WACI/L,KAAK6xB,WAAa7xB,KAAK6xB,UACvB7xB,KAAKiX,SAAWjX,KAAKiX,SACrBjX,KAAK2X,cACsB,OAAvB3X,KAAK2X,oBAAiDnT,IAAvBxE,KAAK2X,eAAgC2b,MAAMtzB,KAAK2X,eAEzE,EADAmC,SAAS9Z,KAAK2X,cAAc4b,gBAhC9C,4HAI+B,MAJ/B,uHAS+B,KAT/B,2HAYoC,KAZpC,wHAeiC,KAfjC,iIAkB0C,KAlB1C,ICTaC,IAAb,GACKhF,aAAU,EAAG,CACVriB,QAAS,oDAFjB,GAMKqiB,aAAU,EAAG,CACVriB,QAAS,oDAPjB,GAWKomB,aAAW,CAAEpmB,QAAS,8BAX3B,GAcKgkB,GAAuC,CAAEhkB,QAAS,8BAdvD,GAiBKmlB,aAAOnqB,GAAa,CAAEgF,QAAS,sBAjBpC,GAoBKimB,aAAU,CAAEjmB,QAAS,4BApB1B,qVAuBI,WACInM,KAAKyzB,eAAiBzzB,KAAKyzB,kBAxBnC,sHAI0B,MAJ1B,wHASiC,MATjC,mHAY2B,KAZ3B,wHAeiC,KAfjC,2HAkBmC,KAlBnC,iIAqB2C,KArB3C,I,6BCCaC,IAAb,GACKnB,aAAW,CAAEpmB,QAAS,eAD3B,GAIKimB,aAAU,CAAEjmB,QAAS,+BAJ1B,GAOKwnB,eAPL,GAQKvB,aAAU,CAAEjmB,QAAS,4BAR1B,GAWKwnB,eAXL,GAYKxD,GAAuC,CAAEhkB,QAAS,8BAZvD,qDAeI,WAAY+L,GAAmB,IAAD,EAG1B,OAH0B,oBAC1B,eAD0B,6LAGtBA,GACA,EAAKsa,GAAKta,EAAQnM,GAClB,EAAK6nB,KAAO1b,EAAQvT,KACpB,EAAKkvB,YAAc3b,EAAQ4b,YAC3B,EAAKC,MAAQ7b,EAAQ4N,MACrB,EAAKkO,OAAS9b,EAAQlI,OACtB,EAAKyjB,cAAgBvb,EAAQ+b,cAC7B,EAAK7D,oBAAsBlY,EAAQkY,oBACnC,EAAK8D,WAAahc,EAAQgc,WAC1B,iBAZsB,EAflC,uBAAwCV,IAAxC,gHAEwB,KAFxB,oHAK6B,KAL7B,6O,oBCCaW,IAAb,GACKjD,eADL,GAIKkD,aAPY,EAOE,CAAEjoB,QAAS,qCAJ9B,GAKKkoB,aAPY,EAOE,CAAEloB,QAAS,qCAL9B,GAQKioB,aAXY,EAWE,CAAEjoB,QAAS,qCAR9B,GASKkoB,aAXY,EAWE,CAAEloB,QAAS,qCAT9B,GAYKioB,aAfY,EAeE,CAAEjoB,QAAS,qCAZ9B,GAaKkoB,aAfY,EAeE,CAAEloB,QAAS,qCAb9B,GAgBKmlB,aAAO9pB,GAAU,CAAE2E,QAAS,sBAhBjC,GAmBKqiB,aAAU,EAAG,CACVriB,QAAS,oDApBjB,GAsBK6lB,cAAW,SAACC,GAAD,QAA8BA,EAAEqC,gBAtBhD,cAyBI,WAAY1iB,GAAe,oRACvB5R,KAAK4wB,eAAiBhf,EA1B9B,oDA6BI,WAEI5R,KAAKu0B,iBAA4C,GAAxBv0B,KAAKu0B,iBAC9Bv0B,KAAKw0B,cAAsC,GAArBx0B,KAAKw0B,cAC3Bx0B,KAAKy0B,cAAsC,GAArBz0B,KAAKy0B,cAC3Bz0B,KAAKwH,UAAYxH,KAAKwH,aAlC9B,uPAHiB,KAGjB,8HAHiB,KAGjB,8HAHiB,KAGjB,sHAiBgCA,GAASktB,OAjBzC,4HAuBkC,MAvBlC,I,UCKaC,IAAb,GACKnG,aAAU,EAAG,CACVriB,QAAS,kDAFjB,GAMKmiB,kBAAQ9pB,EAAW,CAAE2H,QAAS,yBANnC,GASKgjB,GAAe,CAAEhjB,QAAS,gCAT/B,GAYKwiB,KAZL,GAaK2C,aAAOnqB,GAAa,CAAEgF,QAAS,sBAbpC,GAcKioB,aAAI,EAAG,CAAEjoB,QAAS,iCAdvB,GAiBKwkB,aAAQF,GAAgB,CACrBtkB,QAAS,yBAlBjB,GAoBKwkB,aAAQL,GAA4B,CACjCnkB,QAAS,qCArBjB,GAuBKwkB,aAAQJ,GAAoB,CACzBpkB,QAAS,qCAxBjB,GA0BKwkB,aAAQH,GAAoB,CACzBrkB,QAAS,qCA3BjB,GA6BKqiB,aZnC8B,EYmCC,CAC5BriB,QAAQ,oDA9BhB,GAkCKujB,GAAiB,WAAY,CAAEvjB,QAAS,wBAlC7C,GAqCK+kB,eArCL,gYAwCI,WACIlxB,KAAK40B,cAAgB50B,KAAK40B,iBAzClC,oIAIwC,MAJxC,kHAO2B,MAP3B,wHAUiC,MAVjC,gIAekC,KAflC,iIAgC8B,MAhC9B,6HAmCsC,MAnCtC,kHAsC2B,MAtC3B,I,ICPA,GACKjC,eADL,GAEKnE,aAAU,EAAG,CACVriB,QAAS,kDAHjB,GAOK0oB,aAAK3tB,GAAiB,CAAEiF,QAAS,sBAPtC,GAUKwkB,aAAQ,cAAe,CAAExkB,QAAS,wBAVvC,GAaKwmB,eAbL,GAcKnE,aAAU,EAAG,CACVriB,QAAS,kDAfjB,2bAAsDwoB,IAAtD,6HAKmC,MALnC,4HAQqC,MARrC,0HAWmC,MAXnC,mIAiByC,M,gBCjB5BG,ICAb,GACKnC,eADL,GAEKnE,aAAU,EAAG,CACVriB,QAAS,kDAHjB,GAOKwmB,eAPL,GAQKnE,aAAU,EAAG,CACVriB,QAAS,kDATjB,GAaKmlB,aAAOzpB,GAAsB,CAAEsE,QAAS,sBAb7C,GAgBK0oB,aAAK5rB,GAAgB,CAAEkD,QAAS,sBAhBrC,GAiBK6lB,cAAW,SAACC,GAAD,OAAsCA,EAAE8C,sBAAwBltB,GAAqBK,SAjBrG,oeAoBI,WACI,2EACAlI,KAAKg1B,cAAgBh1B,KAAKi1B,sCAtBlC,sBAyBI,WACQj1B,KAAK+0B,sBAAwBltB,GAAqBM,gBAC3CnI,KAAKkI,aAGTlI,KAAK+0B,wBA9BpB,GAAmDJ,IAAnD,6HAKmC,MALnC,mJAWyD,MAXzD,gIAc0C,MAd1C,qHAkB4B,MChB5B,GACKnG,aAAU,EAAG,CACVriB,QAAS,kDAFjB,GAYKqiB,aAAU,EAAG,CACVriB,QAAS,kDAbjB,GAiBKqiB,aAAU,EAAG,CACVriB,QAAS,kDAlBjB,GAoBK6lB,cAAW,SAACC,GAAD,QAAgCA,EAAEiD,sBApBlD,GAuBK5G,kBAAQ9pB,EAAW,CAAE2H,QAAS,yBAvBnC,GA0BKgjB,GAAe,CAAEhjB,QAAS,gCA1B/B,GA6BKqiB,aAAU,EAAG,CACVriB,QAAS,kDA9BjB,GAgCKmlB,aAAOlpB,GAAW,CAAE+D,QAAS,sBAhClC,GAmCKqiB,aAAU,EAAG,CACVriB,QAAS,kDApCjB,GA0CK+kB,eA1CL,GA6CKI,aAAO7pB,GAAS,CAAE0E,QAAS,sBA7ChC,GA8CK6lB,cAAW,SAACC,GAAD,QAAgCA,EAAEkD,UA9ClD,GAiDKxE,aAAQF,GAAgB,CACrBtkB,QAAS,yBAlDjB,GAoDKwkB,aAAQL,GAA4B,CACjCnkB,QAAS,qCArDjB,GAuDKwkB,aAAQJ,GAAoB,CACzBpkB,QAAS,qCAxDjB,GA0DKwkB,aAAQH,GAAoB,CACzBrkB,QAAS,qCA3DjB,GA6DKqiB,ahB9D8B,EgB8DC,CAC5BriB,QAAQ,oDA9DhB,GAkEKujB,GAAiB,WAAY,CAAEvjB,QAAS,wBAlE7C,iiBAqEI,WACInM,KAAK40B,cAAgB50B,KAAK40B,iBAtElC,2HAI+B,MAJ/B,qHAe8B,MAf9B,kIAqBwC,MArBxC,kHAwB2B,MAxB3B,wHA2BiC,MA3BjC,0HAiC+B,KAjC/B,2HAsCoC,MAtCpC,0HA2CkC,KA3ClC,sHA+C6B,MA/C7B,iIAgE8B,MAhE9B,6HAmEsC,MFrEtC,GACKjC,eADL,GAEKhC,aAAQ,iBAAkB,CAAExkB,QAAS,qCAF1C,GAGKqiB,aAAU,EAAG,CACVriB,QAAS,kDAJjB,GAQKwmB,eARL,GASKhC,aAAQ,iBAAkB,CAAExkB,QAAS,qCAT1C,GAUKqiB,aAAU,EAAG,CACVriB,QAAS,kDAXjB,GAaK6lB,cAAW,SAACC,GAAD,QAA0BA,EAAEC,cAb5C,GAgBKS,eAhBL,GAiBKhC,aAAQ,iBAAkB,CAAExkB,QAAS,qCAjB1C,GAkBKqiB,aAAU,EAAG,CACVriB,QAAS,kDAnBjB,GAuBKmiB,kBAAQ9pB,EAAW,CAAE2H,QAAS,yBAvBnC,GA0BKmlB,aAAOpoB,GAAO,CAAEiD,QAAS,sBA1B9B,GA6BKgjB,GAAe,CAAEhjB,QAAS,gCA7B/B,GAgCKomB,aAAW,CAAEpmB,QAAS,sBAhC3B,6WAmCI,WAA2B,IAAD,EAClBnM,KAAKo1B,UAAUC,SAAS,QACxBr1B,KAAKo1B,UAAYp1B,KAAKo1B,UAAUE,SAGpC,UAAIt1B,KAAKkyB,kBAAT,aAAI,EAAiBmD,SAAS,SAC1Br1B,KAAKkyB,WAAalyB,KAAKkyB,WAAWoD,QAGlCt1B,KAAKu1B,SAASF,SAAS,QACvBr1B,KAAKu1B,SAAWv1B,KAAKu1B,SAASD,QAGlCt1B,KAAK6xB,WAAa7xB,KAAK6xB,cAhD/B,iIAM+B,MAN/B,gIAcgC,MAdhC,2HAqB8B,MArB9B,kHAwB2B,MAxB3B,iHA2B0B,MA3B1B,wHA8BiC,MA9BjC,uHAiC+B,KAjC/B,IAoDa2D,IAAb,GACK7C,eADL,GAEKhC,aAAQ,iBAAkB,CAAExkB,QAAS,qCAF1C,GAGKqiB,aAAU,EAAG,CACVriB,QAAS,kDAJjB,GAQKwmB,eARL,GASKhC,aAAQ,iBAAkB,CAAExkB,QAAS,qCAT1C,GAUKqiB,aAAU,EAAG,CACVriB,QAAS,kDAXjB,GAeKmiB,kBAAQ9pB,EAAW,CAAE2H,QAAS,yBAfnC,GAkBKmlB,aAAOpoB,GAAO,CAAEiD,QAAS,sBAlB9B,GAqBKgjB,GAAe,CAAEhjB,QAAS,gCArB/B,GAwBKomB,aAAW,CAAEpmB,QAAS,sBAxB3B,qUA2BI,WACQnM,KAAKy1B,UAAUJ,SAAS,QACxBr1B,KAAKy1B,UAAYz1B,KAAKy1B,UAAUH,QAGhCt1B,KAAKu1B,SAASF,SAAS,QACvBr1B,KAAKu1B,SAAWv1B,KAAKu1B,SAASD,QAGlCt1B,KAAK6xB,WAAa7xB,KAAK6xB,cApC/B,iIAM+B,MAN/B,2HAa8B,MAb9B,kHAgB2B,MAhB3B,iHAmB0B,MAnB1B,wHAsBiC,MAtBjC,uHAyB+B,KAzB/B,IGnDa6D,IH2Fb,GACKpE,aAAOpoB,GAAO,CAAEiD,QAAS,sBAD9B,yIAOI,gBAPJ,0HAE8B,MG7F9B,GACKwmB,aAAS,CAAExmB,QAAS,eADzB,GAIKwkB,aAAQ,iBAAkB,CAAExkB,QAAS,qCAJ1C,GAOK0oB,aAAK3tB,GAAiB,CAAEiF,QAAS,sBAPtC,GAUKqiB,aAAU,EAAG,CACVriB,QAAS,kDAXjB,GAeKqiB,aAAU,EAAG,CACVriB,QAAS,kDAhBjB,GAoBKgjB,GAAe,CAAEhjB,QAAS,gCApB/B,GAuBKwiB,KAvBL,GAwBK2C,aAAOnqB,GAAa,CAAEgF,QAAS,sBAxBpC,cA2BI,WAAYqK,GACR,GADuB,gUACnBA,EASA,OARAxW,KAAK+L,GAAKyK,EAAOzK,GACjB/L,KAAKykB,cAAgBjO,EAAOiO,cAC5BzkB,KAAK21B,gBAAkBnf,EAAOmf,gBAC9B31B,KAAK41B,mBAAqBpf,EAAOof,mBACjC51B,KAAK61B,oBAAsBrf,EAAOqf,oBAClC71B,KAAK81B,YAActf,EAAOsf,iBAC1B91B,KAAKsL,aAAekL,EAAOlL,cAnCvC,oDAyCI,WACItL,KAAKsL,cAAgBtL,KAAKsL,iBA1ClC,oHAEwB,MAFxB,0HAKmC,MALnC,4HAQqC,MARrC,+HAawC,MAbxC,gIAkByC,MAlBzC,wHAqBiC,MArBjC,6HAyBkCnE,GAAYS,YAzB9C,ICAamuB,IAAb,GACKpD,aAAS,CAAExmB,QAAS,eADzB,GAIKwkB,aAAQ,iBAAkB,CAAExkB,QAAS,qCAJ1C,GAKKqiB,aAAU,EAAG,CACVriB,QAAS,kDANjB,GAUK+kB,eAVL,GAaKP,aAAQ,iBAAkB,CAAExkB,QAAS,qCAb1C,GAcKqiB,aAAU,EAAG,CACVriB,QAAS,kDAfjB,GAmBKgjB,GAAe,CAAEhjB,QAAS,gCAnB/B,GAsBKwkB,aAAQ,iBAAkB,CAAExkB,QAAS,qCAtB1C,GAuBKqiB,aAAU,EAAG,CACVriB,QAAS,kDAxBjB,GA0BKmlB,aAAOlpB,GAAW,CAAE+D,QAAS,sBA1BlC,GA6BKqiB,aAAU,EAAG,CACVriB,QAAS,kDA9BjB,cAkCI,WAAYqK,GACR,GADuB,qSACnBA,EAQA,OAPAxW,KAAK+L,GAAKyK,EAAOzK,GACjB/L,KAAKg2B,UAAYxf,EAAOwf,UACxBh2B,KAAKi2B,WAAazf,EAAOyf,WACzBj2B,KAAKwkB,SAAWhO,EAAOgO,SACvBxkB,KAAK81B,YAActf,EAAOsf,YAC1B91B,KAAKk2B,UAAY1f,EAAO0f,eACxBl2B,KAAKm2B,eAAiB3f,EAAO2f,gBA1CzC,oDA+CI,gBA/CJ,oHAEwB,MAFxB,yHAQ+B,MAR/B,uHAWgC,MAXhC,wHAiB8B,MAjB9B,wHAoBiC,MApBjC,6HA2B+B,KA3B/B,2HAgCoC,MAhCpC,ICAaC,IAAb,GACKlF,eADL,qDAII,WAAYxmB,GAAa,IAAD,+BACpB,eADoB,wCAEpB,EAAK8nB,GAAK9nB,EAAKqB,GACf,EAAKqpB,UAAY1qB,EAAKsrB,UACtB,EAAK9D,WAAaxnB,EAAKurB,WACvB,EAAKxH,MAAQ/jB,EAAK2rB,MAClB,EAAKd,SAAW7qB,EAAK8Z,SACrB,EAAK8R,YAAc5rB,EAAKorB,YACxB,EAAKS,KAAO7rB,EAAKO,KACjB,EAAK4mB,UAAL,UAAiBnnB,EAAKa,iBAAtB,QAAmClJ,EAASkD,IATxB,EAJ5B,uBAAmCuvB,IAAnC,yGCDa0B,IAAb,GACK7D,aAAS,CAAExmB,QAAS,eADzB,GAIKimB,aAAU,CAAEjmB,QAAS,+BAJ1B,qDAOI,WAAYzB,GAAa,IAAD,EAGpB,OAHoB,oBACpB,cAAMA,GADc,oFAGhBA,GACA,EAAK8nB,GAAK9nB,EAAKqB,GACf,EAAKioB,OAAStpB,EAAK+rB,eACnB,iBANgB,EAP5B,uBAA2CL,IAA3C,+GAEwB,MAFxB,oHAK6B,KAL7B,ICCaM,IAAb,GACKxF,eADL,GAIKP,aAAQ,iBAAkB,CAAExkB,QAAS,qCAJ1C,GAKKqiB,aAAU,EAAG,CACVriB,QAAS,kDANjB,GAUKwkB,aAAQ,iBAAkB,CAAExkB,QAAS,qCAV1C,GAWKqiB,aAAU,EAAG,CACVriB,QAAS,kDAZjB,GAcK6lB,cAAW,SAACC,GAAD,QAA0BA,EAAEC,cAd5C,GAiBKvB,aAAQ,iBAAkB,CAAExkB,QAAS,qCAjB1C,GAkBKqiB,aAAU,EAAG,CACVriB,QAAS,kDAnBjB,GAuBKgjB,GAAe,CAAEhjB,QAAS,gCAvB/B,cA0BI,WAAYzB,GAAgB,kNACxB1K,KAAK+L,GAAKrB,EAAKqB,GACf/L,KAAK22B,UAAYjsB,EAAKsrB,UACtBh2B,KAAKi2B,WAAavrB,EAAKurB,WACvBj2B,KAAKwkB,SAAW9Z,EAAK8Z,SACrBxkB,KAAK81B,YAAcprB,EAAKorB,YA/BhC,oDAkCI,gBAlCJ,mOAQ+B,MAR/B,6HAegC,MAfhC,wHAqB8B,MArB9B,wHAwBiC,MAxBjC,I,oBCHac,IAAb,GACKC,eADL,GAEKzC,aAAI,IAAO,CAAEjoB,QAAS,sCAF3B,GAGKymB,aAAW,CAAEzmB,QAAS,2BAH3B,GAMK2qB,eANL,6KASI,WACI92B,KAAK4Z,OAAS5Z,KAAK4Z,OACnB5Z,KAAKiX,SAAWjX,KAAKiX,aAX7B,8HAIoB,MAJpB,qHAOsB,MAPtB,ICAa8f,IAAb,GACKnE,aAAW,CAAEzmB,QAAS,6BAD3B,GAIKqiB,aAAU,EAAG,CACVriB,QAAS,oDALjB,GAOKymB,aAAW,CAAEzmB,QAAS,6BAP3B,GAUKymB,aAAW,CAAEzmB,QAAS,6BAV3B,qNAaI,gBAbJ,4HAEgC,MAFhC,qHAQ2B,MAR3B,uHAWwC,KAXxC,ICMarJ,ICJb,GACKyvB,aAAW,CAAEpmB,QAAS,eAD3B,qDAII,WAAYkV,GAAe,IAAD,6BACtB,eADsB,wCAEtB,EAAKmR,IAAMnR,EAAMtV,GACjB,EAAKirB,WAAa3V,EAAM2V,WACxB,EAAKC,MAAQ5V,EAAM4V,MACnB,EAAKpF,UAAYxQ,EAAM6V,OALD,EAJ9B,4CAYI,gBAZJ,GAAsCH,IAAtC,qGDIsBp3B,IAAOw3B,OAAV,ibEPNC,GAAaz3B,IAAOw3B,OAAV,svB,oBCGjBE,GAAYC,0BACd,kBAAC,IAAMx3B,SAAP,KACI,yBAAKskB,IAAKC,EAAQ,KAAmCtkB,UAAU,oBAAoBokB,IAAI,cACvF,0BAAMpkB,UAAU,uBAAhB,2CACA,0BAAMA,UAAU,wBAAhB,wD,IAIsBJ,YAAO43B,aAAUC,OAAM,WACjD,MAAO,CACHC,UAAWJ,GACXK,aAAa,EACbC,eAAe,EACfC,cAAe,SAACpqB,EAAOqqB,GACnBA,EAAKC,gBANan4B,CAAH,k2BCTWA,IAAOo4B,MAAV,29B,kCCAtBC,GAAoCr4B,IAAOo4B,MAAV,4/DAqB7B,SAAC93B,GAAD,MAAgC,WAAfA,EAAMyD,KAAoB,OAAS,UACnD,SAACzD,GAAD,MAAgC,WAAfA,EAAMyD,KAAoB,OAAS,UA2FzDu0B,GAAsC,SAAC,GAA8C,IAAD,EAA3CxL,EAA2C,EAA3CA,SAAU1sB,EAAiC,EAAjCA,UAAWg4B,EAAsB,EAAtBA,MAAU93B,EAAY,kBAC7F,EAAsBi4B,aAASj4B,GAA/B,oBAAO0vB,EAAP,KAAcjf,EAAd,KAEMynB,EAAaznB,EAAK0nB,SAAW1nB,EAAKlD,MAAwB,KAC1D6qB,EAAiC,OAAfF,EAAsB,GAAKA,EAAa,SAAW,WAE3E,OACI,kBAACH,GAAD,CACIj4B,UAAS,WAAG0sB,EAAW,YAAc,IAAM1sB,SAAlC,QAA+C,IAGxD,yBAAKA,UAAW,mBAAqBs4B,GACjC,kBAAC,KAAD,eAAOvzB,KAAK,QAAQ2nB,SAAUA,GAAcxsB,EAA5C,CAAmDq4B,SAAU3I,EAAM/tB,SAAW3B,EAAM2B,SACpF,4BACA,0BAAM7B,UAAU,qBAAqBg4B,MASxCQ,GAAkE,SAAC,GAAuB,IAArBD,EAAoB,EAApBA,QAAS50B,EAAW,EAAXA,KACvF,OACI,kBAACs0B,GAAD,CAAgBt0B,KAAMA,GAClB,2BAAOoB,KAAK,QAAQ0zB,eAAgBF,EAAS7L,UAAQ,IACrD,8B,yEC3ICgM,GAA0B94B,IAAOo4B,MAAV,y/EAoIvBW,GAKR,SAAC,GAAmC,IAAjCC,EAAgC,EAAhCA,IAAKC,EAA2B,EAA3BA,IAAKC,EAAsB,EAAtBA,KAAM94B,EAAgB,EAAhBA,UACdmM,EAAS,YAAI,IAAIvJ,MAAMi2B,EAAMD,EAAM,IAAIj0B,KAAI,SAACsI,EAAGgK,GAAJ,OAC7C,yBACIjX,UAAU,mDACVuE,MAAO,CACHw0B,WAAY,UACZ7zB,aAAc,OACd8zB,OAAQ,GACRzU,MAAO,GACP0U,SAAU,IAEdl4B,IAAKkW,GAEL,8BAAO2hB,EAAME,EAAO7hB,OAI5B,OACI,yBAAKjX,UAAS,iBAAYA,GAAauE,MAAO,CAAEggB,MAAO,SACnD,yBAAKvkB,UAAU,iCAAiCuE,MAAO,CAAE20B,KAAM,EAAGxS,WAAY,KACzEva,KAMJgtB,GAAgD,SAAC,GAUvD,IATHn5B,EASE,EATFA,UACA4E,EAQE,EARFA,KACAozB,EAOE,EAPFA,MACA73B,EAME,EANFA,SACAusB,EAKE,EALFA,SACAkM,EAIE,EAJFA,IACAC,EAGE,EAHFA,IACAC,EAEE,EAFFA,KACG54B,EACD,kBACF,EAAsBi4B,aAAS,CAAEvzB,SAAjC,oBAAOgrB,EAAP,KAAcjf,EAAd,KACMynB,EAAaznB,EAAK0nB,SAAW1nB,EAAKlD,MAAwB,KAC1D6qB,EAAiC,OAAfF,EAAsB,GAAKA,EAAa,SAAW,WAErEpsB,EAAKpH,EACX,EAAsCxE,IAAMglB,UAAS,GAArD,oBAAOgU,EAAP,KAAoBC,EAApB,KAGMC,EAAMl5B,IAAMm5B,OAAyB,MAC3C,EAAkCn5B,IAAMglB,UAAS,GAAjD,oBAAOoU,EAAP,KAAkBC,EAAlB,KACMC,EAAat5B,IAAMuL,SAAQ,kBAAO6tB,EAAY,SAAW,KAAK,CAACA,IAcrE,OAZAp5B,IAAMsoB,WAAU,WACR4Q,EAAI32B,UACJ22B,EAAI32B,QAAQg3B,QAAU,WAClBF,GAAa,IAGjBH,EAAI32B,QAAQi3B,OAAS,WACjBH,GAAa,OAGtB,CAACH,IAGA,kBAACZ,GAAD,iBAA6Bx4B,EAA7B,CAAoCF,UAAWA,IAC3C,yBAAKA,UAAW,mBAAqBs4B,EAAkBoB,EAAY1tB,GAAIA,GAClEgsB,GAAS,0BAAMh4B,UAAU,qBAAqBg4B,GAC/C,yCACIh4B,UAAU,oBACV+E,KAAK,QACL5E,SAAUA,EACVusB,SAAUA,EACV4M,IAAKA,EACLV,IAAKA,EACLC,IAAKA,EACLC,KAAMA,GAAQ,GACVlJ,MAGI,IAAfwI,EACG,kBAAC,IAAMr4B,SAAP,KACI,kBAAC,IAAD,CAAS85B,UAAU,QAAQzT,OAAQgT,EAAapsB,OAAQhB,EAAIqa,OApC7D,kBAAMgT,GAAgBD,KAqCjB,0BAAMp5B,UAAU,+BAA+B2Q,EAAKlD,QAExD,0BAAMzN,UAAU,+BAA+B2Q,EAAKlD,QAExD,OC1NHqsB,GAAMl6B,IAAOC,IAAV,mWAmBHk6B,GAA0C,SAAC,GAAgC,IAA9BC,EAA6B,EAA7BA,MAA6B,IAAtBC,mBAAsB,MAAR,EAAQ,EAC7EC,EAA4B95B,IAAMuL,SAAQ,WAC5C,OAAO,IAAI/I,MAAMo3B,GAAOG,MAAK,GAAOx1B,KAAI,SAACsI,EAAG7L,GAAJ,OAAcA,EAAQ,GAAK64B,OACpE,CAACD,EAAOC,IAEX,OACI,kBAACH,GAAD,KACI,0BAAM95B,UAAU,gBACXk6B,EAAev1B,KAAI,SAACy1B,EAAanjB,GAAd,OAChB,0BACIjX,UAAW,sBAAwBo6B,EAAc,8BAAgC,IACjFr5B,IAAKkW,UClChBojB,GAAkBz6B,IAAOo4B,MAAV,0xCAoFfsC,GAAoE,SAAC,GAAiB,IAAf/B,EAAc,EAAdA,QAChF,OACI,kBAAC8B,GAAD,KACI,2BAAOt1B,KAAK,WAAW0zB,eAAgBF,EAAS7L,UAAQ,IACxD,8B,qMCtFC6N,GAAyB36B,IAAOo4B,MAAV,i+FAmJtBwC,GAAe56B,YAAO66B,KAAP76B,CAAH,sDAwBZ86B,GAA8C,SAAC,GAmBrD,IAlBH91B,EAkBE,EAlBFA,KACAI,EAiBE,EAjBFA,YACAgzB,EAgBE,EAhBFA,MACAjzB,EAeE,EAfFA,KACA41B,EAcE,EAdFA,GACAx6B,EAaE,EAbFA,SACAusB,EAYE,EAZFA,SACMlI,EAWJ,EAXFlB,KACAsX,EAUE,EAVFA,QACAC,EASE,EATFA,WACAC,EAQE,EARFA,YACAvnB,EAOE,EAPFA,SACApP,EAME,EANFA,aACA0V,EAKE,EALFA,OACA4H,EAIE,EAJFA,UAEA5f,GAEE,EAHFk5B,QAGE,EAFFl5B,OACG3B,EACD,kBACF,EAAsBi4B,aAAS,CAAEvzB,SAAjC,oBAAOgrB,EAAP,KAAcjf,EAAd,KACM3Q,EAAY46B,EAAU,YAAc16B,EAAMF,WAAa,IAAME,EAAMF,UACzE,EAAkCI,IAAMglB,SAASrgB,GAAjD,oBAAOi2B,EAAP,KAAkBC,EAAlB,KAEM7C,EAAaznB,EAAK0nB,SAAW1nB,EAAKlD,MAAwB,KAChE,EAAwCrN,IAAMglB,UAAS,GAAvD,oBAAO8V,EAAP,KAAqBC,EAArB,KACM7C,EAAiC,OAAfF,EAAsB,GAAKA,EAAa,SAAW,WACrEgD,EAAe,eAAM9C,GAAkB,GACvC+C,EAAUH,EAAeI,KAAMC,KAE/BvvB,EAAKpH,EACX,EAAsCxE,IAAMglB,UAAS,GAArD,oBAAOgU,EAAP,KAAoBC,EAApB,KAGMmC,EAAiBp7B,IAAM6K,aAAY,WAErCgwB,EAD4B,aAAdD,EAA2B,OAAS,YAElDG,GAAiBD,KAClB,CAACF,EAAWE,IAET5B,EAAMl5B,IAAMm5B,OAAyB,MAC3C,EAAkCn5B,IAAMglB,UAAS,GAAjD,oBAAOoU,EAAP,KAAkBC,EAAlB,KACMC,EAAat5B,IAAMuL,SAAQ,kBAAO6tB,EAAY,SAAW,KAAK,CAACA,IAcrE,OAZAp5B,IAAMsoB,WAAU,WACR4Q,EAAI32B,UACJ22B,EAAI32B,QAAQg3B,QAAU,WAClBF,GAAa,IAGjBH,EAAI32B,QAAQi3B,OAAS,WACjBH,GAAa,OAGtB,CAACH,IAGA,kBAACiB,GAAD,iBAA4Br6B,EAA5B,CAAmCF,UAAWA,IACzCg4B,GAAS,0BAAMh4B,UAAU,oBAAoBg4B,GAE9C,yBAAKh4B,UAAW,kBAAoBs4B,EAAkBoB,EAAY1tB,GAAIA,GACjEwY,EACG,6BAASxkB,UAAU,6BACf,kBAACwkB,EAAD,CAAMxkB,UAAU,qBAEpB,MAEFuT,GACE,kBAACinB,GAAD,eACIx6B,UAAU,mBACVgF,YAAaA,EACbD,KAAMi2B,EACNL,GAAIA,EACJx6B,SAAUA,EACVusB,SAAUA,GACNmO,EAPR,CAQIvB,IAAKA,GACD1J,EACAwL,EAVR,CAWIv5B,MAAOA,GAAS+tB,EAAM/tB,SAG7B0R,GACG,kBAACinB,GAAD,eACIx6B,UAAU,mBACVgF,YAAa,EACbD,KAAMA,EACN41B,GAAIA,EACJx6B,SAAUA,EACV8E,SAAUd,GACN02B,EAPR,CAQIvB,IAAKA,EACLz3B,MAAOgY,GAAU4H,GAAa5f,GAE1Bu5B,IASXN,EACG,6BAAS96B,UAAU,2BAA2BuD,QAASi4B,GACnD,kBAACH,EAAD,OAEJ,OAEQ,IAAfjD,EACG,kBAAC,IAAMr4B,SAAP,KACI,kBAAC,IAAD,CAAS85B,UAAU,QAAQzT,OAAQgT,EAAapsB,OAAQhB,EAAIqa,OA/E7D,kBAAMgT,GAAgBD,KAgFjB,0BAAMp5B,UAAU,8BAA8B2Q,EAAKlD,QAEvD,0BAAMzN,UAAU,8BAA8B2Q,EAAKlD,QAEvD,O,8G7BrRXof,K,+BAAAA,E,kBAAAA,E,iBAAAA,Q,KAML,I,2E8BjBK4O,GAOAC,G9BUCC,GAAsB/7B,YAAO26B,GAAP36B,CAAH,0mGAiBHitB,GAAO+O,UAcZ/O,GAAOgP,QA0BPhP,GAAOiP,SAQFjP,GAAO+O,UAQD/O,GAAOgP,QAcbhP,GAAO+O,UACZ/O,GAAOiP,SAWIjP,GAAO+O,WA6B7BG,GAAc37B,IAAM47B,YAAW,SAAC97B,EAAYo5B,GAC9C,IAAMrmB,EAAOT,KAAOtS,EAAM2B,OAE1B,OACI,kBAAC24B,GAAD,eACIlB,IAAKA,GACDp5B,EAFR,CAGI2B,MAAOoR,EAAKyc,UAAYzc,EAAKU,OAAOzT,EAAM+7B,OAAS,YAAc,MAAQ,SAKxEC,GAA4C,SAAC,GASnD,IARHlE,EAQE,EARFA,MACAmE,EAOE,EAPFA,QACAC,EAME,EANFA,QACAn3B,EAKE,EALFA,SACA21B,EAIE,EAJFA,QACMpW,EAGJ,EAHFlB,KACA2Y,EAEE,EAFFA,OACG/7B,EACD,kBACF,EAA+Bi4B,aAAS,CAAEvzB,KAAM1E,EAAM0E,OAAtD,oBAAOgrB,EAAP,KAAcjf,EAAd,KAAoB0rB,EAApB,KACA,EAAsCjX,mBAA2CwK,EAAM/tB,OAAvF,oBAAOy6B,EAAP,KAAoBC,EAApB,KACMv8B,EAAY46B,EAAU,YAAc16B,EAAMF,WAAa,IAAME,EAAMF,UAEnEo4B,EAAaznB,EAAK0nB,SAAW1nB,EAAKlD,MAAwB,KAC1D6qB,EAAiC,OAAfF,EAAsB,GAAKA,EAAa,SAAW,WAErEkB,EAAMl5B,IAAMm5B,OAAyB,MAC3C,EAAkCn5B,IAAMglB,UAAS,GAAjD,oBAAOoU,EAAP,KAAkBC,EAAlB,KACMC,EAAat5B,IAAMuL,SAAQ,kBAAO6tB,EAAY,SAAW,KAAK,CAACA,IAErEp5B,IAAMsoB,WAAU,WACR4Q,EAAI32B,UACJ22B,EAAI32B,QAAQg3B,QAAU,WAClBF,GAAa,IAGjBH,EAAI32B,QAAQi3B,OAAS,WACjBH,GAAa,OAGtB,CAACH,IAEJ,IAAM3pB,EAAUssB,EACV,CACIO,gBAAgB,EAChBC,oBAAoB,EACpBC,cAAe,GACfC,YAAa,OACbC,WAAY,WACZC,SAAUP,EAAc9pB,KAAO8pB,GAAaQ,SAAW,IAAIjqB,MAE/D,CACIspB,QAASA,EAAU3pB,KAAO2pB,GAASW,SAAW,KAC9CV,QAASA,EAAU5pB,KAAO4pB,GAASU,SAAW,KAC9CF,WAAY,OACZG,WAAYnN,EAAM/tB,MAAQ,IAAIgR,KAAK+c,EAAM/tB,OAAS,IAAIgR,MAchE,OAXA6V,qBAAU,WACN,IAAMsU,EAAgBV,EAAeL,EAASK,EAAc9pB,KAAO8pB,GAAa3oB,OAAO,cAAiB,GAExGic,EAAM3qB,SAAS2qB,EAAMhrB,KAArBgrB,CAA2BoN,GAEvB/3B,GAAY+3B,GACZ/3B,EAAS+3B,KAGd,CAACV,IAGA,kBAACX,GAAD,CAAqB37B,WAAYE,EAAMwsB,SAAW,YAAc,IAAM1sB,GACjEg4B,GAAS,0BAAMh4B,UAAU,oBAAoBg4B,GAC9C,yBAAKh4B,UAAW,kBAAoBs4B,EAAkBoB,EAAY1tB,GAAI9L,EAAM0E,MACvE4f,EACG,6BAASxkB,UAAU,6BACf,kBAACwkB,EAAD,CAAMxkB,UAAU,qBAEpB,KACJ,kBAAC,KAAD,eACIi9B,mBAAiB,EACjBC,kBAAgB,EAChBl9B,UAAU,mBACVm9B,aAAa,SACbC,YAAa,kBAACrB,GAAD,CAAaE,OAAQA,EAAQ3C,IAAKA,KAC3C1J,EANR,CAOIyN,SAAU,SAACpqB,GACPopB,EAAQiB,YAAW,IAEvBr4B,SAAU,SAACgO,EAAMzP,GACb,IAAM3B,EAAQo6B,EACRzpB,KAAM,OAACS,QAAD,IAACA,OAAD,EAACA,EAAMugB,YAAY7f,OAAO,4BAC/BV,EACPspB,EAAe16B,KAEf3B,EAhBR,CAiBIq9B,gBAAiBr9B,EAAM8E,aAAe,UAAYi3B,EAAS,OAAS,SAChEtsB,MAGI,IAAfyoB,EACG,kBAAC,IAAMr4B,SAAP,KACI,0BAAMC,UAAU,8BAA8B2Q,EAAKlD,QAEvD,O+B5PV+vB,GAAa59B,IAAOw3B,OAAV,4RAaHqG,GAAkE,SAACv9B,GAC5E,OACI,kBAACs9B,GAAet9B,EACZ,kBAAC,KAAD,CAAGyD,KAAM,GAAIC,YAAa,MCfhC85B,GAAc99B,YAAO+9B,IAAP/9B,CAAH,uyBACJ,SAACM,GAAD,OAAYA,EAAM09B,WAAa,OAAS,WAiBnC,SAAC19B,GAAD,OAAYA,EAAM29B,IAAM39B,EAAM49B,GAAK,QAAU,UAiClDC,GAA0C,SAAC,GAA8D,IAA5D3X,EAA2D,EAA3DA,OAAQoD,EAAmD,EAAnDA,UAAW5Y,EAAwC,EAAxCA,MAAOjN,EAAiC,EAAjCA,KAAMi6B,EAA2B,EAA3BA,WAAYz9B,EAAe,EAAfA,SAC5F69B,EAAQxU,EAAU8D,UAAK7oB,GAAW,GAExC,OACI,kBAACi5B,GAAD,CAAaE,WAAYA,EAAYj6B,KAAMA,EAAMyiB,OAAQA,EAAQC,OAAQ2X,GACrE,yBAAKh+B,UAAU,kEACX,0BAAMA,UAAU,eAAe4Q,GAC/B,kBAAC,GAAD,CAAarN,QAASy6B,KAEzB79B,IC1CA89B,GAAmC,SAAC,GAA+C,IAA7C7X,EAA4C,EAA5CA,OAAQoD,EAAoC,EAApCA,UAAW0U,EAAyB,EAAzBA,WAAYznB,EAAa,EAAbA,OACxE7J,EAAWuW,cAWjB,OACI,kBAAC,GAAD,CAAaiD,OAAQA,EAAQxV,MAAM,cAAc4Y,UAAWA,GACxD,yBAAKxpB,UAAU,QACX,kBAAC,KAAD,CACIm+B,cAAe,IAAItH,GACnBuH,SAAQ,yCAAE,WAAO7jB,EAAP,mBAAAnN,EAAA,0DAAgBixB,EAAhB,EAAgBA,gBACR,GAET9jB,EAAMV,OAHL,gBAKFjN,EACID,GAAmBuD,OACftH,GAAkBuH,MAClB,iDAGRkuB,GAAc,GAXZ,8BAaF9jB,EAAMrD,SAAWT,EAbf,UAcI0D,GAAoBmkB,WAAW/jB,GAChCgkB,MAAK,SAACC,GACCA,EAAI9tB,KACJ9D,EACID,GAAmBuD,OACftH,GAAkBuO,QADtB,+BAKM,OAAV+mB,QAAU,IAAVA,KAAatkB,GAAyBW,EAAMV,aAGnD4kB,OAAM,kBACH7xB,EACID,GAAmBuD,OAAOtH,GAAkBuH,MAAO,6BAG1DuuB,SAAQ,WACLL,GAAc,GACd7U,GAAU,MAjChB,4CAAF,0DAsCP,YAAqE,IAAlEmV,EAAiE,EAAjEA,aAAcC,EAAmD,EAAnDA,aAAclP,EAAqC,EAArCA,QAASmP,EAA4B,EAA5BA,cAAe1yB,EAAa,EAAbA,OACpD,OACI,0BAAMiyB,SAAUO,GACZ,kBAAC,IAAD,CAAKG,GAAI,EAAGjB,GAAI,EAAG79B,UAAU,WACzB,kBAAC,GAAD,CACI6Z,OAAQ1N,EAAO0N,OACf1V,aAAc,SAACX,GACXA,EAAEC,iBACF,IAAQ5B,EA5D3B,SAAC2B,GAClB,IAAI3B,EAAQ2B,EAAEwJ,OAAOnL,MAKrB,OAFAA,GADAA,GADAA,EAAQA,EAAMwU,QAAQ,MAAO,KACfA,QAAQ,eAAgB,WACxBA,QAAQ,sBAAuB,KAC7C7S,EAAEwJ,OAAOnL,MAAQA,EACV2B,EAsD+Cu7B,CAAav7B,GAAGwJ,OAA1BnL,MACRg9B,EAAc,SAAUh9B,IAE5B+C,KAAK,SACLozB,MAAM,kCACNzkB,UAAQ,KAIhB,yBAAKvT,UAAU,sCACX,kBAAC8C,EAAD,CAAqB4pB,UAAWgD,EAAS3qB,KAAK,UACzC65B,EAAe,kBAAC,KAAD,MAAa,sDC5F/DlB,GAAc99B,YAAO+9B,IAAP/9B,CAAH,syBACJ,SAACM,GAAD,OAAYA,EAAM09B,WAAa,OAAS,WAiBnC,SAAC19B,GAAD,OAAYA,EAAM29B,IAAM39B,EAAM49B,GAAK,QAAU,UAiClDC,GAA0C,SAAC,GAA8D,IAA5D3X,EAA2D,EAA3DA,OAAQoD,EAAmD,EAAnDA,UAAW5Y,EAAwC,EAAxCA,MAAOjN,EAAiC,EAAjCA,KAAMi6B,EAA2B,EAA3BA,WAAYz9B,EAAe,EAAfA,SAC5F69B,EAAQxU,EAAU8D,UAAK7oB,GAAW,GAExC,OACI,kBAAC,GAAD,CAAam5B,WAAYA,EAAYj6B,KAAMA,EAAMyiB,OAAQA,EAAQC,OAAQ2X,GACrE,yBAAKh+B,UAAU,kEACX,0BAAMA,UAAU,eAAe4Q,GAC/B,kBAAC,GAAD,CAAarN,QAASy6B,KAEzB79B,IC9DA6+B,IAAb,GACKnM,aAAW,CAAEzmB,QAAS,sBAD3B,GAIK2qB,eAJL,yLAOI,WACI92B,KAAKwhB,UAAYxhB,KAAKwhB,UACtBxhB,KAAKoS,kBAAoBpS,KAAKoS,sBATtC,2HAEuB,MAFvB,8HAK+B,MAL/B,ICuBa4sB,GAAgC,SAAC,GAA2D,IAAzD7Y,EAAwD,EAAxDA,OAAQoD,EAAgD,EAAhDA,UAAW0U,EAAqC,EAArCA,WAAYznB,EAAyB,EAAzBA,OAAQX,EAAiB,EAAjBA,WAC7ElJ,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQA,EAAQoD,UAAWA,EAAW7lB,KAAK,KAAKiN,MAAM,WAC/D,yBAAK5Q,UAAU,QACX,kBAAC,KAAD,CACIm+B,cAAe,IAAIa,GACnBZ,SAAQ,yCAAE,WAAO7jB,EAAP,mBAAAnN,EAAA,0DAAgBixB,EAAhB,EAAgBA,gBACR,GACT9jB,EAAMkH,UAFL,gBAGF7U,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,+BAC5DkuB,GAAc,GAJZ,8BAMF9jB,EAAMlI,kBAAN,OAA0BoE,QAA1B,IAA0BA,IAAU,GANlC,UAQI0D,GAAoB+kB,YAAY3kB,GACjCgkB,MAAK,SAACC,GACCA,EAAI9tB,KACJ9D,EACID,GAAmBuD,OACftH,GAAkBuO,QADtB,gDAKW1S,IAAXgS,EACA7J,EAAS8N,GAAkBykB,kBAAkB1oB,EAAQX,IAErDtI,QAAQC,MAAM,mDAER,OAAVywB,QAAU,IAAVA,KAAarrB,KAAKhF,MAAM0M,EAAMkH,WAAW+R,gBAGhDiL,OAAM,SAAChxB,GACJD,QAAQC,MAAM,kBAAmBA,GACjCb,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,yBAG/DuuB,SAAQ,WACLL,GAAc,GACd7U,GAAU,MAhChB,4CAAF,0DAqCP,gBAAGmV,EAAH,EAAGA,aAAcC,EAAjB,EAAiBA,aAAclP,EAA/B,EAA+BA,QAAwBvjB,GAAvD,EAAwC0yB,cAAxC,EAAuD1yB,QAAvD,OACG,0BAAMiyB,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KAAK9+B,UAAU,eACnB,0BAAMuE,MAAO,CAAE00B,SAAU,WAAzB,+CAIJ,kBAAC,IAAD,CAAK6F,GAAG,KAAK9+B,UAAU,eACnB,0BAAMA,UAAU,cAAcuE,MAAO,CAAE00B,SAAU,WAAjD,2EAKR,yBAAKj5B,UAAU,iBACX,kBAAC,IAAD,CAAK8+B,GAAG,IAAI9+B,UAAU,WAClB,kBAAC,GAAD,CAAe4E,KAAK,YAAY6c,UAAWtV,EAAOsV,UAAW1c,KAAK,YAI9E,kBAAC,IAAD,CAAa/E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqB4pB,UAAWgD,EAAS3qB,KAAK,SAAS/E,UAAU,QAC5D4+B,EAAe,kBAAC,KAAD,MAAa,yCAEjC,kBAAC97B,EAAD,CACI4pB,UAAWgD,EACXnsB,QAAS,kBAAMimB,GAAU,IACzBjlB,MAAO,CAAE66B,gBAAiB,QAASlI,MAAO,UAE1C,iDChFvBmI,GAAgC,SAAC,GAAkE,IAAhEjZ,EAA+D,EAA/DA,OAAQoD,EAAuD,EAAvDA,UAAW0U,EAA4C,EAA5CA,WAAYoB,EAAgC,EAAhCA,UAAWtzB,EAAqB,EAArBA,GAAI8J,EAAiB,EAAjBA,WACpFlJ,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQA,EAAQoD,UAAWA,EAAW7lB,KAAK,KAAKiN,MAAM,WAC/D,yBAAK5Q,UAAU,QACX,kBAAC,KAAD,CACIm+B,cAAe,CAAEmB,UAAWA,GAAa,GAAItzB,GAAIA,GAAM,GACvDoyB,SAAQ,yCAAE,WAAOjyB,EAAP,mBAAAiB,EAAA,6DAAiBixB,EAAjB,EAAiBA,gBACT,GADR,kBAGgBlkB,GAAoBolB,QAAQpzB,EAAOmzB,UAAWnzB,EAAOH,IAHrE,cAIM0E,IACJ9D,EAASD,GAAmBuD,OAAOtH,GAAkBuO,QAA5C,4BACS1S,IAAd66B,EACA1yB,EAAS8N,GAAkBykB,kBAAkBG,EAAWxpB,IAExDtI,QAAQC,MAAM,mDAEdywB,GAAYA,KAEhBtxB,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,mBAb9D,gDAgBF3C,QAAQC,MAAM,kBAAd,MACAb,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAjB1D,yBAmBFkuB,GAAc,GACd7U,GAAU,GApBR,4EAAF,0DAwBP,gBAAGmV,EAAH,EAAGA,aAAcC,EAAjB,EAAiBA,aAAclP,EAA/B,EAA+BA,QAA/B,OACG,0BAAM0O,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,iBACX,kBAAC,IAAD,CAAK8+B,GAAG,KAAK9+B,UAAU,WACnB,+GAMZ,kBAAC,IAAD,CAAaA,UAAU,oDACnB,kBAAC8C,EAAD,CAAqB4pB,UAAWgD,EAAS3qB,KAAK,SAAS/E,UAAU,QAC5D4+B,EAAe,kBAAC,KAAD,MAAa,0CAEjC,kBAAC97B,EAAD,CACI4pB,UAAWgD,EACXnsB,QAAS,kBAAMimB,GAAU,IACzBjlB,MAAO,CAAE66B,gBAAiB,QAASlI,MAAO,UAE1C,iD,ICrEZt3B,IAAO4/B,OAAV,oI,kBCSRC,GAAsB,WAC/B,IAAM7a,EAA4B,CAC9B,CAAEhgB,KAAM,OAAQyV,KAAM,KACtB,CAAEzV,KAAM,QAASyV,KAAMpM,OAAOjN,SAAS0+B,OAGrC9yB,EAAWuW,cACXwc,EAAcv/B,IAAM6K,aACtB,SAACyG,GAEG9E,EAAS0D,GAAUiS,MAAM7Q,MAE7B,CAAC9E,IAGL,OACI,kBAAC,GAAD,KACI,kBAACia,GAAD,MACA,yBAAK7mB,UAAU,aACX,kBAAC,GAAD,CAAa4kB,YAAaA,IAC1B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIuK,SAAUU,GACV+P,kBAAgB,EAChBzB,cAAe,IAAI3P,GACnB4P,SAAUuB,IAET,gBAAGhB,EAAH,EAAGA,aAAcjP,EAAjB,EAAiBA,QAASmQ,EAA1B,EAA0BA,YAA1B,OACG,0BAAMzB,SAAUO,EAAc3+B,UAAU,yCACpC,4BAAQA,UAAU,qBACd,sCACE0vB,GAAWmQ,EAAc,GACvB,wBAAI7/B,UAAU,cAAd,4CAGR,0BAAMA,UAAU,8CACZ,kBAAC,GAAD,CACIA,UAAU,YACV4E,KAAK,QACLI,YAAY,gBACZD,KAAK,QACLue,KAAMwc,OAEV,kBAAC,GAAD,CACI9/B,UAAU,YACV4E,KAAK,WACLI,YAAY,WACZD,KAAK,WACLue,KAAMyc,KACNjF,aAAW,IAEf,kBAAC,IAAD,CAAMx3B,GAAG,oBAAT,oBAEJ,4BAAQtD,UAAU,yCACd,kBAACq3B,GAAD,CAAYr3B,UAAU,OAAO+E,KAAK,UAC9B,iDCvD3Bi7B,GAA+B,WACxC,IAAMpb,EAA4B,CAC9B,CAAEhgB,KAAM,OAAQyV,KAAM,KACtB,CAAEzV,KAAM,kBAAmByV,KAAMpM,OAAOjN,SAAS0+B,OAG/C9yB,EAAWuW,cACX8c,EAAsB7/B,IAAM6K,aAC9B,SAACwF,GACG7D,EAAS0D,GAAUoS,qBAAqBjS,MAE5C,CAAC7D,IAGL,OACI,kBAAC,GAAD,KACI,kBAACia,GAAD,MACA,yBAAK7mB,UAAU,aACX,kBAAC,GAAD,CAAa4kB,YAAaA,IAC1B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIuK,SAAUU,GACVsO,cAAe,IAAI7P,GACnB8P,SAAU6B,IAET,gBAAGtB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,EAAc3+B,UAAU,yCACpC,4BAAQA,UAAU,qBACd,+CACA,6EAEJ,0BAAMA,UAAU,8CACZ,kBAAC,GAAD,CACIA,UAAU,YACV4E,KAAK,QACLI,YAAY,gBACZD,KAAK,QACLue,KAAMwc,QAGd,4BAAQ9/B,UAAU,yCACd,kBAACq3B,GAAD,CAAYr3B,UAAU,OAAO+E,KAAK,UAC9B,8DC1C3Bm7B,GAA8B,SAAChgC,GACxC,IAAM0kB,EAA4B,CAC9B,CAAEhgB,KAAM,OAAQyV,KAAM,KACtB,CAAEzV,KAAM,iBAAkByV,KAAMpM,OAAOjN,SAAS0+B,OAG5C7tB,EAASsuB,cAATtuB,KAEFjF,EAAWuW,cACXid,EAAsBhgC,IAAM6K,aAC9B,SAACwF,GACGA,EAAKogB,eAAiBhf,EACtBjF,EAAS0D,GAAUqS,qBAAqBlS,MAE5C,CAAC7D,EAAUiF,IAGf,OACI,kBAAC,GAAD,KACI,kBAACgV,GAAD,MACA,yBAAK7mB,UAAU,aACX,kBAAC,GAAD,CAAa4kB,YAAaA,IAC1B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIuK,SAAUU,GACVsO,cAAe,IAAIxN,GACnByN,SAAUgC,IAET,gBAAGzB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,EAAc3+B,UAAU,yCACpC,4BAAQA,UAAU,qBACd,8CACA,gFAEJ,0BAAMA,UAAU,8CACZ,kBAAC,GAAD,CACIA,UAAU,OACV4E,KAAK,WACLI,YAAY,WACZD,KAAK,WACLue,KAAMyc,KACNjF,aAAW,IAEf,kBAAC,GAAD,CACIl2B,KAAK,kBACLI,YAAY,mBACZD,KAAK,WACLue,KAAMyc,KACNjF,aAAW,KAGnB,4BAAQ96B,UAAU,yCACd,kBAACq3B,GAAD,CAAYr3B,UAAU,OAAO+E,KAAK,UAC9B,0D,0CC9D3Bs7B,GAA0BzgC,IAAOC,IAAV,+oaAMAinB,KA0FAwZ,KAsIAxZ,M,wKChKrByZ,GAtDQ,WACnB,MAA0Bnb,oBAAS,GAAnC,oBAAOgB,EAAP,KAAeoa,EAAf,KAEMna,EAASpb,uBAAY,WACvBu1B,GAASpa,KACV,IASH,OACI,gCACI,kBAAC,IAAD,CAAQqa,OAAO,KAAKzgC,UAAU,2DAA2DumB,OAAK,EAACma,MAAM,OACjG,kBAAC,IAAD,CAAWla,OAAO,GACd,kBAAC,IAAD,CAAaxmB,UAAU,sBAAsBsD,GAAG,IAAIqjB,IAAKlB,KACrD,yBAAKrB,IAAI,MAAMC,IAAKC,EAAQ,QAEhC,kBAAC,IAAD,CAAe/gB,QAAS8iB,EAAQrmB,UAAU,SAC1C,kBAAC,IAAD,CAAUA,UAAU,uCAAuComB,OAAQA,EAAQQ,QAAM,GAC7E,kBAAC,IAAD,CAAK5mB,UAAU,mCAAmC4mB,QAAM,GACpD,kBAAC,IAAM7mB,SAAP,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAS2/B,KAAK,aACV,mDAGR,kBAAC,IAAD,KACI,kBAAC,IAAD,CAASA,KAAK,QACV,0CAGR,kBAAC,IAAD,KACI,kBAAC,IAAD,CAASA,KAAK,aACV,8CAGR,kBAAC,IAAD,KACI,kBAAC,IAAD,CAASA,KAAK,YACV,qDCiIzBiB,I,OA1LH,WACR,OACI,6BACI,kBAAC,IAAD,CAAuBC,YAAa,CAAC,KAAMC,UAAQ,EAAC7gC,UAAU,gCAC1D,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,gDAA8B,KAElC,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,+GACA,0EACA,+EACA,mDAKhB,kBAAC,IAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,yDAAuC,KAE3C,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,8GACA,sGACA,0FACA,gFACA,mEACA,iFACA,8GAuBhB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,wDAAsC,KAE1C,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,uIAIA,6FAKhB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,gEAA8C,KAElD,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,uIAIA,yFACA,uFAKhB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,yDAAuC,KAE3C,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,uIAIA,yFACA,qEACA,0EACA,kEACA,8GACA,0FAMpB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,uDAAqC,KAEzC,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,sGACA,qIAIA,uEACA,4BACK,IADL,2IAGwD,SAMxE,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,KACrB,IACD,+EAA6D,KAEjE,kBAAC,IAAD,CAAeC,YAAY,KACvB,yBAAK/gC,UAAU,uBACX,4BACI,uIAIA,yFACA,qEACA,0EACA,mEACA,gHACA,sFACA,oHACA,0FAKhB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAiB8gC,SAAS,MACrB,IACD,qEAAmD,KAEvD,kBAAC,IAAD,CAAeC,YAAY,MACvB,yBAAK/gC,UAAU,uBACX,4BACI,+EACA,2GACA,6FACA,qEACA,kEACA,0FCuGjBghC,G,4JA1QX,WACI,OACI,gBAAC,GAAD,KACI,gBAACX,GAAD,KACI,uBAAKrgC,UAAU,WACX,gBAAC,GAAD,MACA,2BAASA,UAAU,eACf,gBAAC,EAAD,KACI,uBAAKA,UAAU,OACX,uBAAKA,UAAU,yCACX,uBAAKA,UAAU,kBAIX,uBAAKA,UAAU,uBACV,IACD,uBAAKA,UAAU,sCAAf,kBACA,uBAAKA,UAAU,sCAAf,0BAGA,uBAAKA,UAAU,sCAAf,gCACkC,MAItC,qBAAGA,UAAU,cAAb,uIAIA,uBAAKA,UAAU,mBACX,gBAAC8C,EAAD,CACIiC,KAAK,SACL/E,UAAU,mBACV26B,GAAIlV,IACJniB,GAAG,UAJP,2BAe5B,2BAAS0I,GAAG,YACR,uBAAKhM,UAAU,uCACX,0CACA,iHAEJ,uBAAKA,UAAU,wCACX,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,uBAAKqkB,IAAKpa,KAASma,IAAI,UAAUG,MAAM,QAAQyU,OAAO,WAE1D,gBAAC,IAAD,KACI,uBAAKh5B,UAAU,QACX,uBAAKqkB,IAAK4c,KAAa7c,IAAI,eAAeG,MAAM,OAAOyU,OAAO,SAC9D,sBAAIh5B,UAAU,QAAd,oBACA,qBAAGA,UAAU,IAAb,8DAC+D,2BAAO,IADtE,oDAUpB,uBAAKA,UAAU,wBACX,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,uBAAKqkB,IAAKna,KAAWka,IAAI,YAAYG,MAAM,QAAQyU,OAAO,WAE9D,gBAAC,IAAD,KACI,uBAAKh5B,UAAU,QACX,uBAAKqkB,IAAK6c,KAAe9c,IAAI,iBAAiBG,MAAM,OAAOyU,OAAO,SAClE,sBAAIh5B,UAAU,QAAd,qBACA,qBAAGA,UAAU,IAAb,yDAC0D,2BAD1D,mEAEwD,2BAFxD,oBASpB,uBAAKA,UAAU,mCACX,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,uBAAKqkB,IAAK8c,KAAK/c,IAAI,MAAMG,MAAM,QAAQyU,OAAO,WAElD,gBAAC,IAAD,KACI,uBAAKh5B,UAAU,QACX,uBAAKqkB,IAAK+c,KAAShd,IAAI,WAAWG,MAAM,OAAOyU,OAAO,SACtD,sBAAIh5B,UAAU,QAAd,gBACA,qBAAGA,UAAU,IAAb,+CACgD,2BADhD,8DAE0C,2BAF1C,iBASpB,uBAAKA,UAAU,uBACX,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,uBAAKqkB,IAAKgd,KAAQjd,IAAI,SAASG,MAAM,QAAQyU,OAAO,WAExD,gBAAC,IAAD,KACI,uBAAKh5B,UAAU,QACX,uBAAKqkB,IAAKid,KAAYld,IAAI,cAAcG,MAAM,OAAOyU,OAAO,SAC5D,sBAAIh5B,UAAU,QAAd,mBACA,qBAAGA,UAAU,IAAb,2CAEI,2BAFJ,gEAEwE,IACpE,2BAHJ,yBAWxB,2BAASgM,GAAG,OACR,uBAAKhM,UAAU,6CACX,gBAAC,EAAD,KACI,uBAAKA,UAAU,0CACX,wDACA,iHAKJ,gBAAC,GAAD,SAKZ,gCAEA,2BAASA,UAAU,YAAYgM,GAAG,YAC9B,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,2BACI,uBACIoY,IAAI,SACJG,MAAM,QACNyU,OAAO,QACP3U,IAAKC,EAAQ,SAIzB,gBAAC,IAAD,KACI,2BACI,uBACIF,IAAI,SACJG,MAAM,QACNyU,OAAO,QACP3U,IAAKC,EAAQ,SAIzB,gBAAC,IAAD,KACI,2BACI,uBACIF,IAAI,SACJG,MAAM,QACNyU,OAAO,QACP3U,IAAKC,EAAQ,UAK7B,6BAGR,2BAAStkB,UAAU,yBACf,gBAAC,EAAD,KACI,gBAAC,IAAD,KACI,gBAAC,IAAD,KACI,2BACI,oCACA,2DACmC,2BADnC,mBAEoB,2BAChB,+BAHJ,oBAG8B,2BAC1B,+BAJJ,wBAQR,gBAAC,IAAD,KACI,2BACI,2CACA,iEAEI,2BAFJ,uBAGwB,2BACpB,+BAJJ,oBAI8B,2BAC1B,+BALJ,wBASR,gBAAC,IAAD,KACI,2BACI,mCACA,yDACiC,2BADjC,mBAEoB,2BAChB,+BAHJ,oBAG8B,2BAC1B,+BAJJ,wBAQR,gBAAC,IAAD,KACI,2BACI,kCACA,4DACoC,2BADpC,iBAEkB,2BACd,+BAHJ,oBAG8B,2BAC1B,+BAJJ,2BAWpB,2BAASA,UAAU,kCAAkCgM,GAAG,WACpD,uBAAKhM,UAAU,2BACX,gBAAC,EAAD,KACI,uBAAKA,UAAU,SACX,uBAAKA,UAAU,SACX,uBAAKA,UAAU,aAAf,mBACiB,IAAI6S,MAAO0uB,cAD5B,oDAKJ,uBAAKvhC,UAAU,SACX,uBAAKA,UAAU,aACX,mCADJ,KACoB,IAChB,qBACIA,UAAU,YACV0/B,KAAK,kCACL8B,IAAI,cAHR,iC,GAxPlBphC,aCfbqhC,GAA4B7hC,IAAOC,IAAV,k5FCczB6hC,GAAuB9hC,YAAO6hC,GAAP7hC,CAAH,iqCAkEpB+hC,GAA+B,WAAO,IAAD,MAC9C,EAAkC/2B,aAAY,SAACC,GAAD,OAA6BA,KAAnE+Q,EAAR,EAAQA,MAAOpG,EAAf,EAAeA,SAAU1K,EAAzB,EAAyBA,KACnBoS,EAAUtB,EAAMsB,QAAQvC,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBAChFlQ,EAAOG,EAAKC,SACZG,EAAI,UAAGJ,EAAKC,gBAAR,aAAG,EAAeG,KACtBkS,EAAiBxB,EAAMwB,eAEvBwkB,EAAmBxhC,IAAMuL,SAAQ,WACnC,cAAQhB,QAAR,IAAQA,OAAR,EAAQA,EAAMO,MACV,KAAK/B,GAAMG,MACX,KAAKH,GAAMM,eACP,OAAO+L,EAASA,SAASsP,MAAM,EAAG,GACtC,QACI,MAAO,MAEhB,CAACtP,EAASA,SAAU7K,IAEjBk3B,EAAel2B,mBACjB,6BAAM,CACF,CAAE/G,KAAM,UAAW0e,KAAME,KAAOse,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmB0hB,aAArB,QAA8B,EAAG7K,MAAO,WAC7E,CACItyB,KAAM,iBACN0e,KAAME,KACNse,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmBvb,cAArB,QAA+B,EACpCoyB,MAAO,cAGf,CAACtb,EAAMyE,cAGL2hB,EAAW,sBACVH,GADU,CAEb,CAAEj9B,KAAM,WAAY0e,KAAMG,KAAMqe,MAAK,iBAAE1kB,QAAF,IAAEA,OAAF,EAAEA,EAAgBlF,gBAAlB,QAA8B,MAAOgf,MAAO,WACjF,CACItyB,KAAK,mBACL0e,KAAMK,KACNme,MAAK,iBAAE1kB,QAAF,IAAEA,OAAF,EAAEA,EAAgB6kB,qBAAlB,QAAmC,MACxC/K,MAAO,aAITgL,EAAgBv2B,mBAClB,mDACOk2B,GADP,CAEI,CACIj9B,KAAM,aACN0e,KAAME,KACNse,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmB8hB,WAArB,QAA4B,EACjCjL,MAAO,WAEX,CACItyB,KAAM,WACN0e,KAAME,KACNse,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmB+hB,gBAArB,QAAiC,EACtClL,MAAO,eAGf,CAACtb,EAAMyE,YAAawhB,IAGlBQ,EACFn3B,IAAS/B,GAAMG,MAAQ04B,EAAc92B,IAAS/B,GAAMM,eAAiBy4B,EAAgB,GAEnFt1B,EAAWuW,cAQjB,OAPA/iB,IAAMsoB,WAAU,WACZ9b,EAASiJ,GAAcf,QACvBlI,EAAS0Q,GAAWe,cACpBzR,EAAS0Q,GAAWkB,kBACpB5R,EAAS0Q,GAAWgB,uBACrB,CAAC1R,IAGA,kBAAC,EAAD,CAAY01B,aAAa,GACrB,kBAACZ,GAAD,KACI,yBAAK1hC,UAAU,gCACX,yBAAKA,UAAU,QACX,kBAAC,GAAD,OAEJ,yBAAKA,UAAU,qCACX,kBAAC,GAAD,QAGR,yBAAKA,UAAU,qBAAf,OACKqiC,QADL,IACKA,OADL,EACKA,EAAO19B,KAAI,WAAqCsS,GAArC,IAAGrS,EAAH,EAAGA,KAAY4f,EAAf,EAASlB,KAAYwe,EAArB,EAAqBA,MAAO5K,EAA5B,EAA4BA,MAA5B,OACR,yBAAKl3B,UAAU,yBAAyBe,IAAKkW,GACzC,yBAAKjX,UAAU,sBACX,yBAAKA,UAAU,8CACX,kBAACwkB,EAAD,CAAM7gB,KAAM,GAAI3D,UAAU,OAAOuE,MAAO,CAAE2yB,WAC1C,0BAAMl3B,UAAU,iBAAiB4E,IAErC,yBAAK5E,UAAU,+CACX,8BAAO8hC,SAKvB,yBAAK9hC,UAAU,UACf,yBAAKA,UAAU,qCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,8CAEJ,yBAAKA,UAAU,+BACX,2BACI,kBAAC,IAAD,CAAMsD,GAAG,gBAAT,YACa,uBAAGtD,UAAU,yBAAyB4lB,cAAY,aAK3E,6BACI,kBAACwE,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAM,YAAwC,IAA9BC,EAA6B,EAApCrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,cAG3D,CACIH,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,YAAwC,IAAD,EAA7BC,EAA6B,EAApCrW,IAAOqW,SACZ,OACI,qCACKA,EAAS/d,qBADd,kBAEW+d,EAASxM,UAFpB,YAEiCwM,EAAShe,eAKtD,CACIxhB,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAA1B73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,YAAcvsB,EAAKg4B,oBAGxD,CACIJ,SAAU,iBACVC,KAAK,SAAD,oGAAC,EAAC,YAAgD,IAA5B/rB,EAA2B,EAA5C2V,IAAOqW,SACZ,OACI,kBAAC,IAAD,CACIn/B,GAAE,UACE,CAACoD,GAAea,IAAKb,GAAeE,YAAYklB,SAC5CrV,EAAOksB,gBADX,+BAG8BlsB,EAAOzK,IAHrC,sBAIqByK,EAAOzK,KAEhCzH,MAAO,CACH2yB,MAAO,yBAGX,8BACK,CAACxwB,GAAea,IAAKb,GAAeE,YAAYklB,SAC7CrV,EAAOksB,gBAEL,eACA,qBAO9BlyB,KAAMyM,EAAQ4H,MAAM,EAAG,MAI/B,uBAAG9kB,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,eAAeiB,MAAO,CAAE2yB,MAAO,SAAxC,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,YAItE,yBAAK5lB,UAAU,gCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,+CAEJ,yBAAKA,UAAU,+BACX,2BACI,kBAAC,IAAD,CAAMsD,GAAG,iBAAT,YACa,uBAAGtD,UAAU,yBAAyB4lB,cAAY,aAK3E,6BACI,kBAACwE,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,gBAG3D,CACIz/B,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GACH,IAAM5hB,EAAO4hB,EAAKH,IAAIqW,SAASG,gBAC/B,OAAOj4B,EACH,8BACKA,EAAK+Z,eAAL,UAAyB/Z,EAAKsrB,UAA9B,YAA2CtrB,EAAK8Z,WAErD,SAGZ,CACIxhB,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OACI,0BAAMl+B,MAAO,CAAE2yB,MAAO,YACjB9kB,EAAQE,cAAc+D,QAAQ,IAAK,UAKpD,CACIpT,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OACI,kBAAC,IAAD,CACIl+B,MAAO,CAAE2yB,MAAO,wBAChB5zB,GAAE,uBAAkB8O,EAAQpG,KAFhC,aAUhByE,KAAMmxB,IAEV,uBAAG5hC,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,gBAAgBiB,MAAO,CAAE2yB,MAAO,SAAzC,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,iBChTjFid,GAAgC,WACzC,IAAMj2B,EAAWuW,cACjB,EAAgCvY,aAAY,SAACC,GAAD,OAA6BA,KAAjE2O,EAAR,EAAQA,aAAcoC,EAAtB,EAAsBA,MAChBiB,EAAalR,mBAAQ,kBAAMiQ,EAAMoD,gBAAkB,KAAI,CAACpD,EAAMoD,iBAE9DqjB,EAAuB12B,mBACzB,qCAAM,CACF,CACI/G,KAAM,WACN0e,KAAMG,KACNqe,MAAK,oBAAEtoB,EAAa2H,wBAAf,aAAE,EAA+ByL,kBAAjC,QAA+C,EACpDsK,MAAO,wBAEX,CACItyB,KAAM,gBACN0e,KAAMG,KACNqe,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmByiB,YAArB,QAA6B,EAClC5L,MAAO,WAEX,CACItyB,KAAM,UACN0e,KAAME,KACNse,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmB0hB,aAArB,QAA8B,EACnC7K,MAAO,wBAEX,CACItyB,KAAM,kBACN0e,KAAMG,KACNqe,MAAK,oBAAElmB,EAAMyE,mBAAR,aAAE,EAAmB0iB,cAArB,QAA+B,EACpC7L,MAAO,cAGf,CAAC1d,EAAa2H,iBAAkBvF,EAAMyE,cAS1C,OANAqI,qBAAU,WACN9b,EAAS8N,GAAkB5F,QAC3BlI,EAAS0Q,GAAW0B,eAAe7V,GAAMY,SACzC6C,EAAS0Q,GAAWkB,oBACrB,CAAC5R,IAGA,kBAAC,EAAD,CAAY01B,aAAa,GACrB,kBAACb,GAAD,KACI,kBAACC,GAAD,KACI,yBAAK1hC,UAAU,gCACX,yBAAKA,UAAU,QACX,kBAAC,GAAD,OAEJ,yBAAKA,UAAU,qCACX,kBAAC,GAAD,QAGR,yBAAKA,UAAU,qBACVqiC,EAAM19B,KAAI,WAAqCsS,GAArC,IAAGrS,EAAH,EAAGA,KAAY4f,EAAf,EAASlB,KAAYwe,EAArB,EAAqBA,MAAO5K,EAA5B,EAA4BA,MAA5B,OACP,yBAAKl3B,UAAU,yBAAyBe,IAAKkW,GACzC,yBAAKjX,UAAU,sBACX,yBAAKA,UAAU,8CACX,kBAACwkB,EAAD,CAAM7gB,KAAM,GAAI3D,UAAU,OAAOuE,MAAO,CAAE2yB,WAC1C,0BAAMl3B,UAAU,iBAAiB4E,IAErC,yBAAK5E,UAAU,+CACX,0BAAMuE,MAAO,CAAE00B,SAAU,OAAQz0B,WAAY,SAAWs9B,SAKxE,yBAAK9hC,UAAU,UACf,yBAAKA,UAAU,qCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,+CAEJ,yBAAKA,UAAU,+BACX,2BACI,kBAAC,IAAD,CAAMsD,GAAG,6BAAT,YACa,uBAAGtD,UAAU,yBAAyB4lB,cAAY,aAK3E,6BACI,kBAACwE,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAM,YAAwC,IAA9BC,EAA6B,EAApCrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,cAG3D,CACIH,SAAU,eACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAC3CQ,EACwB,sBAFkB,EAA3C5W,IAAOqW,SAECxnB,aACH,kBACA,uBACV,OAAO,8BAAO+nB,OAGtB,CACI//B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA4D,IAAxCznB,EAAuC,EAAxDqR,IAAOqW,SACZ,OACI,kBAAC,IAAD,CAAMn/B,GAAE,mCAA8ByX,EAAYG,gBAAlD,qBAOhBzK,KAAM+I,EAAaA,aAAasL,MAAM,EAAG,MAIjD,uBAAG9kB,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,4BAA4BiB,MAAO,CAAE2yB,MAAO,SAArD,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,YAItE,yBAAK5lB,UAAU,gCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,iDAEJ,yBAAKA,UAAU,+BACX,2BACI,kBAAC,IAAD,CAAMsD,GAAG,kBAAT,YACa,uBAAGtD,UAAU,yBAAyB4lB,cAAY,aAK3E,6BACI,kBAACwE,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAAgD,IAAtCC,EAAqC,EAA5CrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,gBAG3D,CACIH,SAAU,gBAGlB9xB,KAAMoM,EAAWiI,MAAM,EAAG,KAE9B,uBAAG9kB,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,iBAAiBiB,MAAO,CAAE2yB,MAAO,SAA1C,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,kBCjJrFqd,GAA6C,SAAC/iC,GACvD,MAAkC0K,aAAY,SAACC,GAAD,OAA6BA,KAAnE+Q,EAAR,EAAQA,MAAOpG,EAAf,EAAeA,SAAU1K,EAAzB,EAAyBA,KACjBP,EAAgBnK,IAAM+jB,WAAW1Z,GAAYL,SAA7CG,YAERiD,QAAQ01B,IAAI,WAAY1tB,GAExB,IAAM2tB,EAAe3tB,EAASA,SAASjG,QAAO,SAAC6C,GAAD,OAAa7H,EAAY6H,EAAQ5G,UAAW,WAEpF43B,GADkBxnB,EAAMoD,gBAAkBpD,EAAMoD,gBAAmB,IAChCrE,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBAE3FwoB,EAAkBF,EAAaxoB,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBAEvFyoB,EAAmBH,EAAa5zB,QAClC,SAAC6C,GAAD,OAAsBA,EAAQE,gBAAkB/M,EAAgBqB,cAG9D28B,EAAkBJ,EAAa5zB,QAAO,SAAC6C,GAAD,OAAsBA,EAAQE,gBAAkB/M,EAAgBwB,UACtGy8B,EAAoBL,EAAa5zB,QACnC,SAAC6C,GAAD,OAAsBA,EAAQE,gBAAkB/M,EAAgBuB,mBAG9D28B,EAAkBJ,EAAgBve,MAAM,EAAG,GAC3C4e,EAAoBN,EAAkBte,MAAM,EAAG,GAC/C5Z,EAAQJ,EAAKC,UAAYD,EAAKC,SAASG,MAAS,QA6BhDm3B,EA3BQ,CACV,CACIz9B,KAAM,WACN0e,KAAMK,KACNme,MAAOqB,EAAahiC,OACpB+1B,MAAO,WAEX,CACItyB,KAAM,mBACN0e,KAAMK,KACNme,MAAO0B,EAAkBriC,OACzB+1B,MAAO,WAEX,CACItyB,KAAM,sBACN0e,KAAMK,KACNme,MAAOwB,EAAiBniC,OACxB+1B,MAAO,WAEX,CACItyB,KAAM,mBACN0e,KAAMK,KACNme,MAAOyB,EAAgBpiC,OACvB+1B,MAAO,YAMTtqB,EAAWuW,cAOjB,OANA/iB,IAAMsoB,WAAU,WACZ9b,EAAS0Q,GAAWqmB,eACpB/2B,EAAS0Q,GAAW0B,eAAe9T,IACnC0B,EAASiJ,GAAcf,UACxB,CAAClI,EAAU1B,IAGV,kBAACw2B,GAAD,KACI,yBAAK1hC,UAAU,qBAAf,OACKqiC,QADL,IACKA,OADL,EACKA,EAAO19B,KAAI,WAAqCsS,GAArC,IAAGrS,EAAH,EAAGA,KAAY4f,EAAf,EAASlB,KAAYwe,EAArB,EAAqBA,MAAO5K,EAA5B,EAA4BA,MAA5B,OACR,yBAAKl3B,UAAU,yBAAyBe,IAAKkW,GACzC,yBAAKjX,UAAU,sBACX,yBAAKA,UAAU,+CACX,kBAACwkB,EAAD,CAAM7gB,KAAM,GAAI3D,UAAU,OAAOuE,MAAO,CAAE2yB,WAC1C,8BAAOtyB,IAEX,yBAAK5E,UAAU,+CACX,0BAAMuE,MAAO,CAAE00B,SAAU,OAAQz0B,WAAY,SAAWs9B,SAKxE,yBAAK9hC,UAAU,UACf,yBAAKA,UAAU,gCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,+CAEJ,yBAAKA,UAAU,iCAEnB,6BACI,kBAACoqB,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAM,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,cAG3D,CACIz/B,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GACH,IAAM5hB,EAAO4hB,EAAKH,IAAIqW,SAASG,gBAC/B,OAAOj4B,EACH,8BAAOA,EAAK+Z,eAAL,UAAyB/Z,EAAKsrB,UAA9B,YAA2CtrB,EAAK8Z,WACvD,SAGZ,CACIxhB,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,YAAc9kB,EAAQE,mBAG3D,CACIrP,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OACI,kBAAC,IAAD,CACIl+B,MAAO,CAAE2yB,MAAO,wBAChB5zB,GAAE,uBAAkB8O,EAAQpG,KAFhC,aAUhByE,KAAMgzB,KAId,uBAAGzjC,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,gBAAgBiB,MAAO,CAAE2yB,MAAO,SAAzC,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,YAItE,yBAAK5lB,UAAU,gCACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,iDAEJ,yBAAKA,UAAU,+BACX,2BACI,kBAAC,IAAD,CAAMsD,GAAG,kBAAT,YACa,uBAAGtD,UAAU,yBAAyB4lB,cAAY,aAK3E,6BACI,kBAACwE,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAAgD,IAAtCC,EAAqC,EAA5CrW,IAAOqW,SACZ,OAAO,2BAAIrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,gBAG3D,CACIH,SAAU,gBAGlB9xB,KAAMizB,IAEV,uBAAG1jC,UAAU,eACT,kBAAC,IAAD,CAAMsD,GAAG,iBAAiBiB,MAAO,CAAE2yB,MAAO,SAA1C,WACY,uBAAGl3B,UAAU,yBAAyB4lB,cAAY,gBClL7Ege,GAAoC,SAAC1jC,GAC9C,IAAM0M,EAAWuW,cACTrY,EAASF,aAAY,SAACC,GAAD,OAA6BA,KAAlDC,KACFI,EAAQJ,EAAKC,UAAYD,EAAKC,SAASG,MAAS,GAChD24B,EAAe,CAAC,GAAD,OAAI16B,GAAMG,OAAV,UAAsBH,GAAMM,gBAA5B,UAAiDN,GAAMO,6BAW5E,OATAtJ,IAAMsoB,WAAU,WACZ9b,EAAS0Q,GAAW0B,eAAe9T,MACpC,CAACA,EAAM0B,IAEVxM,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAaE,kBACtB7L,EAAS0Q,GAAWiB,2BACrB,CAAC3R,IAGA,kBAAC,EAAD,KACI,kBAAC60B,GAAD,KACKoC,EAAa/X,SAAS5gB,IACnB,kBAAC,IAAMnL,SAAP,KACI,yBAAKC,UAAU,gCACX,yBAAKA,UAAU,QACX,kBAAC,GAAD,OAEJ,yBAAKA,UAAU,qCACX,kBAAC,GAAD,QAGPkL,IAAS/B,GAAMO,2BACZ,kBAAC,GAAD,MAEA,kBAAC,GAAD,U,oBCZtBo6B,GAAelkC,IAAOC,IAAV,yTAeLkkC,GAAqBnkC,IAAOC,IAAV,mSAgClBmkC,GAAmD,SAAC,GAA8B,IAAD,EAA3B5xB,EAA2B,EAA3BA,QAAS2I,EAAkB,EAAlBA,YACxE,EAA8B3a,IAAM+jB,WAAW1Z,GAAYL,SAAnDG,EAAR,EAAQA,YAAaI,EAArB,EAAqBA,KACfqH,EAAWpH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YACxDgK,EAAiBpR,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAAhEI,aACFpP,EAAWuW,cAEXnX,EAAE,UAAGoG,EAAQpG,UAAX,QAAiBm0B,cAAoC8D,WAE7D,EAA4B7e,mBAAS,IAArC,oBAAOjZ,EAAP,KAAe+3B,EAAf,KAEMv0B,EAAqB,GAE3BqM,EAAapH,SAAQ,SAAC1G,GAAD,OACjByB,EAAQ1O,KAAK,CAAEY,MAAOqM,EAASlC,GAAIgsB,MAAO9pB,EAAS+nB,UAAY,IAAM/nB,EAASuW,cAGlF,IAAM0f,EAA6B,GAEnC/xB,EAAQ+xB,iBAAiBvvB,SAAQ,SAACjK,GAAD,OAC7Bw5B,EAAiBljC,KAAK0J,EAAKi4B,gBAAgB3M,UAAY,IAAMtrB,EAAKi4B,gBAAgBne,aAOtF,IAAM2f,EAAYhkC,IAAMuL,SAAQ,WAC5B,OAAOwG,GAAiBC,EAASzH,KAElC,CAACyH,EAASA,EAAQE,cAAe3H,IAU9B05B,GARSjkC,IAAMuL,SACjB,mBACI,OAACoP,QAAD,IAACA,OAAD,EAACA,EAAaupB,mBACV,OAAJ35B,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMY,QACrBqI,EAAQE,gBAAkB/M,EAAgByB,WAC9C,CAAC+T,EAAa3I,EAASzH,IAGHvK,IAAM6K,YAAN,yCACpB,WAAOgF,GAAP,UAAA7C,EAAA,0DACQgF,EADR,mBAEYA,EAAQE,gBAAkBrC,EAFtC,uBAGYmC,EAAQE,cAAgBrC,EAHpC,SAIkBrD,EAASiJ,GAAcwB,OAAO,IAAIkb,GAAmBngB,KAJvE,WAKgBpG,EALhB,gCAK0BY,EAASiJ,GAAcU,UAAUvK,IAL3D,2CADoB,sDAUpB,CAACY,EAAUwF,KAGTmyB,EAAoB,yCAAG,6BAAAn3B,EAAA,6DACnBo3B,EAAqB,CACvBx4B,GAAIoG,EAAQpG,GACZsG,cAAeF,EAAQE,cACvBwJ,UAAW,IAGf5P,OAAO2b,KAAK1b,GAAQyI,SAAQ,SAAC7T,GACzByjC,EAAc1oB,UAAU7a,KAAKkL,EAAOpL,GAAP,UARR,SAWnB6L,EAASiJ,GAAcwB,OAAO,IAAIkb,GAAmBiS,KAXlC,WAYrBx4B,EAZqB,gCAYXY,EAASiJ,GAAcU,UAAUvK,IAZtB,2CAAH,qDAepBy4B,EAAoBrkC,IAAM6K,aAAY,WACxC2B,EAAS0Q,GAAWa,qBACrB,CAACvR,IAEJxM,IAAMsoB,WAAU,WACZ+b,MAED,CAAC73B,EAAU63B,IAEd,IAAMjuB,EAAuBpW,IAAMuL,SAC/B,6BAAM,CACF,CAAEwkB,SAAU,UAAWtuB,MAAK,oBAAEmZ,gBAAKhJ,EAASA,SAAU,CAAEhG,GAAIoG,EAAQ5G,mBAAxC,aAAE,EAAoD5G,YAAtD,QAA8D,OAC1F,CAAEurB,SAAU,cAAetuB,MAAOqY,GAAW9H,EAAQK,iBACrD,CAAE0d,SAAU,gBAAiBtuB,MAAOuQ,EAAQsyB,eAC5C,CACIvU,SAAU,cACVtuB,MAAOmY,GAAW5H,EAAQO,kBAE9B,CACIwd,SAAU,aACVtuB,MAAK,UAAEuQ,EAAQuyB,4BAAV,QAAkC,IAG3C,CACIxU,SAAU,YACVtuB,MAAK,UAAEuQ,EAAQwyB,0BAAV,QAAgC,IAGzC,CACIzU,SAAU,SACVtuB,MAAO8E,GAAmByL,EAAQE,eAC7B+D,QAAQ,WAAY,aACpBA,QAAQ,kBAAmB,qBAEpC,CACI8Z,SAAU,eACVtuB,MAAO,YAAK,IAAIgjC,IAAIV,IAA2B30B,KAAK,UAG5D,CAAC4C,EAASJ,EAASA,WAGvB,OACI,kBAAC8xB,GAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKngC,KAAM,GAAImhC,GAAI,GACdtuB,EAAQ7R,KAAI,WAAsBsS,GAAO,IAA1BkZ,EAAyB,EAAzBA,SAAUtuB,EAAe,EAAfA,MACtB,OACI,yBAAK7B,UAAU,aAAae,IAAKkW,GAC7B,2BAAIkZ,GACJ,8BAAOtuB,QAKvB,kBAAC,IAAD,CAAK8B,KAAM,GAAImhC,GAAI,EAAG9kC,UAAU,mDAC5B,kBAACoqB,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,aACRs/B,SAAU,aAEd,CACIt/B,OAAQ,YACRs/B,SAAU,YAEd,CACIt/B,OAAQ,cACRs/B,SAAU,eAEd,CACIt/B,OAAQ,UACRs/B,SAAU,WAEd,CACIt/B,OAAQ,cACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,qBAAGpW,IAAOqW,SACFsC,YACN,kBAAC,KAAD,CAAOphC,KAAM,GAAIuzB,MAAM,uBAAuBtzB,YAAa,IAE3D,kBAAC,KAAD,CAAGD,KAAM,GAAIC,YAAa,QAGtC,CACIX,OAAQ,uBACRs/B,SAAU,sBACVC,KAAK,SAAD,oGAAC,EAAC,YAAwD,IAAD,EAAnCwC,EAAmC,EAApD5Y,IAAOqW,SACNz2B,EAAE,mBAAeg5B,EAAUh5B,IAEjC,OACI,yBAAKA,GAAIA,EAAI4E,MAAK,UAAEo0B,EAAUC,2BAAZ,QAAmC,IAChDD,EAAUC,oBACP,kBAAC,KAAD,CAAMthC,KAAM,GAAIC,YAAa,IAE7B,kBAAC,KAAD,CAAGD,KAAM,GAAIC,YAAa,SAM9C,CACIX,OAAQ,sBACRs/B,SAAU,oBACVC,KAAK,SAAD,oGAAC,EAAC,oBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,wBACFuC,QADE,IACFA,GADE,UACFA,EAAWE,yBADT,aACF,EAA8BtgC,YAD5B,QACoC,QAGlD6L,KAAM2B,EAAQ+yB,YAAc,KAEhC,yBAAKnlC,UAAU,mCACX,yBAAKA,UAAU,QACX,uBAAGA,UAAU,QAAb,eACA,2BAAIsT,GAAelB,EAAQ2T,YAK1C3T,EAAQE,gBAAkB/M,EAAgBqB,aACtC,CAACuC,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,YAAYmiB,SAApD,OAA6DnhB,QAA7D,IAA6DA,OAA7D,EAA6DA,EAAMO,OAChE,yBAAK3G,MAAO,CAAEggB,MAAO,OAASvkB,UAAU,uCACpC,gDACA,6BACI,kBAAC,KAAD,CACIolC,mBAAmB,EACnBC,SAAO,EACP11B,QAASA,EACT1K,SAAU,SAACkH,GACP+3B,EAAU/3B,QAMlC,yBAAKnM,UAAU,eACVokC,GACG,kBAACthC,EAAD,CAAqBS,QAAS8gC,EAAgB/W,UAAK7oB,EAAWc,EAAgByB,WAC1E,yCAQPE,GAAiCkL,EAAQE,eAAenR,OAAS,GAC9DoJ,EAAY6H,EAAQ5G,UAAW,YAC5B4G,EAAQ+xB,iBAAiBhjC,OACxB,kBAAC,GAAD,CACInB,UAAU,OACVupB,iBAAkB,kBACd,kBAACzmB,EAAD,CAAqBiC,KAAK,UACtB,kDAIR,kBAACmkB,GAAD,CAAoBlpB,UAAU,yBAC1B,kBAAC,GAAD,CAAyBu4B,SAAO,IAChC,0BAAMv4B,UAAU,QAAQoS,EAAQE,cAAc+D,QAAQ,IAAK,OAE9DnP,GAAiCkL,EAAQE,eAAe3N,KAAI,SAACsL,EAAQgH,GAAT,OACzD,kBAACiS,GAAD,CACIlpB,UAAU,wBACVuD,QAAS8gC,EAAgB/W,UAAK7oB,EAAWwL,GACzClP,IAAKkW,GAEL,kBAAC,GAAD,CAAyBshB,SAAS,IAClC,0BAAMv4B,UAAU,QAAQiQ,EAAOoG,QAAQ,IAAK,WAIxD,MACPjE,EAAQE,gBAAkB/M,EAAgBqB,aACtC,CAACuC,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,YAAYmiB,SAApD,OAA6DnhB,QAA7D,IAA6DA,OAA7D,EAA6DA,EAAMO,OAChE,6BACI,kBAACpI,EAAD,CACI4pB,UAAWvgB,EAAOhL,OAClBnB,UAAU,WACVuD,QAASghC,EAAqBjX,UAAK7oB,IAEnC,sDChTnB6gC,GAAkD,SAAC,GAA6C,IAA3Clf,EAA0C,EAA1CA,OAAQoD,EAAkC,EAAlCA,UAAW+b,EAAuB,EAAvBA,iBACzEvzB,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SAER,OACI,kBAAC,GAAD,CAAaoU,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,eACrD,kBAAC,KAAD,CAAQue,SAAUU,GAAoBsO,cAAe,IAAIpJ,GAAmBqJ,SAAUmH,IACjF,gBAAG5G,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,YAAYozB,MAAM,cAAc4C,SAAO,KAE/D,yBAAK56B,UAAU,YACX,0BAAMuE,MAAO,CAAE00B,SAAU,KAAzB,eACA,kBAAC,GAAD,CAAer0B,KAAK,aAAag2B,SAAO,MAGhD,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,WAAWozB,MAAM,aAAa4C,SAAO,MAGjE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,gBAAgB4C,SAAO,MAGvE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,QAAQozB,MAAM,SAASjzB,KAAK,QAAQ61B,SAAO,MAGvE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,OAAOozB,MAAM,OAAO2C,GAAG,SAASC,SAAO,GACvD,4BAAQ/4B,MAAM,IAAd,kBACCqK,OAAOoD,QAAQjG,IAAoB1E,KAAI,WAAgBsS,GAAhB,wBAAE/L,EAAF,KAAQrJ,EAAR,YACpC,4BAAQA,MAAOqJ,EAAMnK,IAAKkW,EAAGyV,UAAWxhB,GACnCrJ,QAKjB,kBAAC,IAAD,CAAKi9B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQ/4B,MAAM,IAAd,sBACCmQ,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACV,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,UAOzB,kBAAC,IAAD,CAAa5E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAMpB,KAAM,GAAIC,YAAa,IAC7B,8CAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CC/DnB+gC,GAA0C,SAAC,GAKjD,IAJHC,EAIE,EAJFA,cACAC,EAGE,EAHFA,iBACAC,EAEE,EAFFA,WACAC,EACE,EADFA,iBAEQ5zB,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACFpF,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQqf,EAAejc,UAAWkc,EAAkB90B,MAAM,aACnE,kBAAC,KAAD,CACIue,SAAUU,GACVsO,cAAe,IAAI9H,GAAcsP,GACjCvH,SAAU,SAAC7hB,GACP,GAAIspB,mBAAQ,IAAIxP,GAAcsP,GAAappB,GAGvC,OAFA3P,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBAEpDwjB,GAAiB,GAG5BE,EAAiBrpB,MAGpB,gBAAGoiB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,YAAYozB,MAAM,aAAa4C,SAAO,KAE9D,yBAAK56B,UAAU,YACX,0BAAMuE,MAAO,CAAE00B,SAAU,KAAzB,eACA,kBAAC,GAAD,CAAer0B,KAAK,aAAag2B,SAAO,MAGhD,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,WAAWozB,MAAM,YAAY4C,SAAO,MAGhE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,eAAe4C,SAAO,MAGtE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,OAAOozB,MAAM,OAAO2C,GAAG,SAASC,SAAO,GACtD1uB,OAAOC,OAAO9C,IAAoB1E,KAAI,SAACuG,EAAM+L,GAAP,OACnC,4BAAQpV,MAAOqJ,EAAMnK,IAAKkW,GACrB/L,QAKjB,kBAAC,IAAD,CAAK4zB,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQ/4B,MAAM,IAAd,qBACCmQ,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACV,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,UAOzB,kBAAC,IAAD,CAAa5E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UAEtB,8CAEJ,4BACI/E,UAAU,uBACV+E,KAAK,SACLxB,QAASmiC,EAAiBpY,UAAK7oB,GAAW,IAE1C,+C,UC/EnBqhC,GAAwC,SAAC,GAAkE,IAAhElqB,EAA+D,EAA/DA,MAAOmqB,EAAwD,EAAxDA,cAAep1B,EAAyC,EAAzCA,KAAM0zB,EAAmC,EAAnCA,gBAAiB2B,EAAkB,EAAlBA,YACzFh0B,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACAjH,EAAaH,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAA5DC,SAER,OADAyC,QAAQ01B,IAAI,OAAQn4B,GAEhB,kBAACqf,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,eACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAAwC,IAA9BC,EAA6B,EAApCrW,IAAOqW,SACZ,OAAO,2BAAIjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGvD,CACI1Q,OAAQ,aACRs/B,SAAU,aAEd,CACIt/B,OAAQ,YACRs/B,SAAU,YAEd,CACIt/B,OAAQ,QACRs/B,SAAU,SAEd,CACIt/B,OAAQ,iBACRs/B,SAAU,kBAEd,CACIt/B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAAD,EAAzB73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OAAO,wCAAOznB,gBAAKhJ,EAAU,CAAEhG,GAAIrB,EAAKa,mBAAjC,aAAO,EAAwC5G,UAG9D,CACI3B,OAAQ,OACRs/B,SAAU,QAEd,CACIt/B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAA1B73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OACI93B,EAAKqB,MAAL,OAAYjB,QAAZ,IAAYA,OAAZ,EAAYA,EAAUiB,KAClB,kBAAC,IAAMjM,SAAP,KACI,kBAAC,GAAD,CACIwpB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,CACI3lB,QAAS,WACLwiC,EAAcp7B,GACdq7B,GAAY,KAGhB,6CAEK,OAARj7B,QAAQ,IAARA,OAAA,EAAAA,EAAUG,QAAS/B,GAAMO,4BACtB,kBAACwf,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UAAK7oB,EAAWkG,GAAOA,EAAK+rB,iBAErD,8BAAO/rB,EAAK+rB,eAAiB,aAAe,YAC5C,kBAAC,GAAD,CAA0B6B,QAAS5tB,EAAK+rB,yBAU5EjmB,KAAMmL,EACNjL,KAAMA,KCjFLs1B,GAAkB,WAC3B,IAAMrhB,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,YAAayV,KAAMpM,OAAOjN,SAAS0+B,OAG/C,EAA8Ct/B,IAAMglB,UAAS,GAA7D,oBAAO8gB,EAAP,KAAwBC,EAAxB,KACA,EAA0C/lC,IAAMglB,UAAS,GAAzD,oBAAOghB,EAAP,KAAsBV,EAAtB,KACA,EAA0BtlC,IAAMglB,SAAS,IAAzC,oBAAOvjB,EAAP,KACA,GADA,KACoCzB,IAAMglB,YAA1C,oBAAOugB,EAAP,KAAmBI,EAAnB,KACA,EAAmC3lC,IAAMglB,SAAS,IAAlD,oBAAOrP,EAAP,KAAmBswB,EAAnB,KACQvkC,EAAWqmB,cAAXrmB,OAOR,EAAkC1B,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACM4I,EAAWuW,cACjB,EAA6BvY,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAApEA,EAAR,EAAQA,MAAOqB,EAAf,EAAeA,UAETnH,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,QAAkBD,GAAgBsY,MAAQ,IAAG,CAACtY,IACjFmO,EAAuC7P,IAAMuL,SAC/C,kBAAO5J,QAAkBD,GAAgBmO,SACzC,CAACnO,IAGCyjC,EAAmBnlC,IAAM6K,aAC3B,SAACsR,GACG3P,EAAS0Q,GAAWG,WAAWlB,EAAa4pB,EAAmB7Y,UAAK7oB,GAAW,OAEnF,CAACmI,IAGCg5B,EAAmBxlC,IAAM6K,aAC3B,SAACsR,GACG3P,EAAS0Q,GAAWgpB,WAAW/pB,EAAampB,EAAiBpY,UAAK7oB,GAAW,OAEjF,CAACmI,IAGCy3B,EAAkBjkC,IAAM6K,aAC1B,SAACN,EAAYsF,GACLtF,EAAK+rB,iBAAmBzmB,IACxBtF,EAAK+rB,eAAiBzmB,EACtBrD,EAAS0Q,GAAWuB,iBAAiB,IAAI4X,GAAsB9rB,QAGvE,CAACiC,IAGC25B,EAAanmC,IAAM6K,aAAY,WACjC2B,EAAS0Q,GAAWqmB,YAAY7tB,EAAYC,MAC7C,CAACnJ,EAAUkJ,IAEd1V,IAAMsoB,WAAU,WAIZ,OAHA6d,IACA35B,EAASiI,GAAcC,QAEf7E,GACJ,IAAK,QACDjM,EAAa,GACb,MACJ,QACIA,EAAa,MAEtB,CAAC4I,EAAUqD,EAAQs2B,IAEtB,IAOMC,EAAuB5qB,EAAMrM,QAAO,SAAC5E,GACvC,OACKA,EAAKsrB,YAA4E,IAA/DtrB,EAAKsrB,UAAUwQ,cAAcC,QAAQ7kC,EAAM4kC,gBAC7D97B,EAAK2rB,QAA+E,IAAtE3rB,EAAK2rB,MAAM9C,WAAWiT,cAAcC,QAAQ7kC,EAAM4kC,kBAIzE,OACI,kBAAC,EAAD,CAAYnE,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IAErB,kBAAC,GAAD,CACIwB,OAAQ8f,EACR1c,UAAW2c,EACXZ,iBAAkBA,IAErBI,GACG,kBAAC,GAAD,CACIF,cAAeW,EACfV,iBAAkBA,EAClBC,WAAYA,EACZC,iBAAkBA,IAI1B,kBAAC1iC,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC8gC,GAAD,KACI,yBAAK/jC,UAAU,cAAcuE,MAAO,CAAE20B,KAAM,IACxC,wBAAIl5B,UAAU,iBAAd,aACA,kCAAI4b,QAAJ,IAAIA,OAAJ,EAAIA,EAAOza,OAAX,iBAEJ,yBAAKnB,UAAU,oCACX,kBAAC8C,EAAD,CAAqBS,QAAS4iC,EAAmB7Y,UAAK7oB,GAAW,IAC7D,kBAAC,KAAD,CAAMd,KAAM,GAAIC,YAAa,IAC7B,8CAKhB,kBAACV,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MAzGK,CACrB,CAAE7C,MAAO,EAAGwD,KAAM,YAAaC,MAAO,IACtC,CAAEzD,MAAO,EAAGwD,KAAM,YAAaC,MAAO,CAAC,SAAU,WAwGjCd,UAAWA,EACXC,aAAcA,EACdG,aApDC,SAACX,GAClB6iC,EAAa7iC,EAAEwJ,OAAOnL,QAoDNA,MAAOkU,EACP3R,aAlDC,WACjBwI,EAAS0Q,GAAWqmB,YAAY7tB,EAAYC,KAkD5B7R,YAAU,EACVG,qBAAmB,IAEvB,kBAACnB,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACXH,EAAarlC,OACV,kBAAC,GAAD,CACIya,MAAO4qB,EACP71B,KAAMsM,EACN8oB,cAAeA,EACf1B,gBAAiBA,EACjB2B,YAAaN,IAGjB,kDAGR,kBAAC,IAAD,CAASiB,MAAO,GACXH,EAAarlC,OACV,kBAAC,GAAD,CACIya,MAAO4qB,EACP71B,KAAMsM,EACN8oB,cAAeA,EACf1B,gBAAiBA,EACjB2B,YAAaN,IAGjB,wD,oCCtKvBkB,GAAoBhnC,IAAOo4B,MAAV,i+CAmFjB6O,GAA4C,SAAC,GAA8C,IAA5Cna,EAA2C,EAA3CA,SAAUoa,EAAiC,EAAjCA,UAAW9O,EAAsB,EAAtBA,MAAU93B,EAAY,kBACnG,EAAsBi4B,aAASj4B,GAA/B,oBAAO0vB,EAAP,KAAcjf,EAAd,KAEMynB,EAAaznB,EAAK0nB,SAAW1nB,EAAKlD,MAAwB,KAC1D6qB,EAAiC,OAAfF,EAAsB,GAAKA,EAAa,SAAW,WAE3E,OACI,kBAACwO,GAAD,CAAmB5mC,UAAW0sB,EAAW,WAAa,IAClD,kBAAC,KAAD,eAAO3nB,KAAK,WAAW2nB,SAAUA,GAAcxsB,IAC/C,yBAAKF,UAAW,sBAAwBs4B,GACnC1I,EAAM/tB,OAAS,kBAAC,KAAD,CAAO7B,UAAU,sBAAsB2D,KAAM,GAAIC,YAAa,KAEjFo0B,GAAS,0BAAMh4B,UAAU,wBAAwBg4B,IAChD8O,IAA4B,IAAf1O,GAAwB,0BAAMp4B,UAAU,kCAAkC2Q,EAAKlD,SClF7Fs5B,GAAwD,SAAC,GAA2B,IAAzB3gB,EAAwB,EAAxBA,OAAQoD,EAAgB,EAAhBA,UACtE5c,EAAWuW,cAEX6jB,EAAsB5mC,IAAM6K,aAC9B,SAAC+N,GACGpM,EAAS2L,GAAaU,cAAcD,EAAgBwQ,EAAU8D,UAAK7oB,GAAW,OAElF,CAACmI,EAAU4c,IAGf,OACI,kBAAC,GAAD,CAAapD,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,kBACrD,kBAAC,KAAD,CACIue,SAAUU,GACVsO,cAAe,IAAI1K,GACnB2K,SAAU4I,IAET,gBAAGrI,EAAH,EAAGA,aAAcxyB,EAAjB,EAAiBA,OAAjB,OACG,0BAAMiyB,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,OAAOozB,MAAM,eAAe4C,SAAO,KAE3D,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CAAe4E,KAAK,QAAQozB,MAAM,gBAAgBjzB,KAAK,SAAS61B,SAAO,MAG/E,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,cAAc4C,SAAO,EAACD,GAAG,eAGzE,yBAAK36B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,GACL,kBAAC,GAAD,CAAel6B,KAAK,gBAAgBozB,MAAM,eAAe2C,GAAG,SAASC,SAAO,GACxE,4BAAQ/4B,MAAO,EAAG6qB,UAAQ,GAA1B,gBAGCxgB,OAAOoD,QAAQ3H,IAAgBhD,KAAI,oCAAE9C,EAAF,KAAS+C,EAAT,YAChC,4BAAQ/C,MAAOA,EAAOd,IAAKc,GACtB+C,QAKjB,kBAAC,IAAD,CAAKk6B,GAAI,EAAG9+B,UAAU,6BAClB,kBAAC,GAAD,CAAcA,UAAU,sBAAsB4E,KAAK,wBACnD,yBAAK5E,UAAU,QACX,2BAAOA,UAAU,wBAAwBinC,QAAQ,oBAAjD,gCAMP96B,EAAOkkB,qBACJ,yBAAKrwB,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CACIl6B,KAAK,aACLozB,MAAM,cACNjzB,KAAK,SACL61B,SAAO,QAO/B,kBAAC,IAAD,CAAa56B,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAMpB,KAAM,GAAIC,YAAa,IAC7B,iDAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CC3EnByiC,GAAwD,SAAC,GAAoC,IAAlC9gB,EAAiC,EAAjCA,OAAQoD,EAAyB,EAAzBA,UAAWrR,EAAc,EAAdA,QACjFvL,EAAWuW,cAEXgkB,EAAsB/mC,IAAM6K,aAC9B,SAAC+N,GACGpM,EAAS2L,GAAaY,cAAcH,EAAgBwQ,EAAU8D,UAAK7oB,GAAW,OAElF,CAACmI,EAAU4c,IAGf,OACI,kBAAC,GAAD,CAAapD,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,kBACrD,kBAAC,KAAD,CACIue,SAAUU,GACVuX,oBAAkB,EAClBjJ,cAAe,IAAIxK,GAAmBxb,GACtCimB,SAAU,SAACplB,GACP,GAAI6sB,mBAAQ,IAAIlS,GAAmBxb,GAAUa,GAEzC,OADApM,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBACpDsH,GAAU,GAGrB2d,EAAoBnuB,MAGvB,gBAAG2lB,EAAH,EAAGA,aAAcxyB,EAAjB,EAAiBA,OAAjB,OACG,0BAAMiyB,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,OAAOozB,MAAM,eAAe4C,SAAO,KAE3D,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CAAe4E,KAAK,QAAQozB,MAAM,gBAAgBjzB,KAAK,SAAS61B,SAAO,MAG/E,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,cAAc2C,GAAG,WAAWC,SAAO,MAGnF,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,GACL,kBAAC,GAAD,CAAel6B,KAAK,gBAAgBozB,MAAM,eAAe2C,GAAG,SAASC,SAAO,GACxE,4BAAQ/4B,MAAM,GAAG6qB,UAAQ,GAAzB,gBAGCxgB,OAAOoD,QAAQ3H,IAAgBhD,KAAI,oCAAE9C,EAAF,KAAS+C,EAAT,YAChC,4BAAQ/C,MAAOA,EAAOd,IAAKc,GACtB+C,QAMjB,kBAAC,IAAD,CAAKk6B,GAAI,EAAG9+B,UAAU,6BAClB,kBAAC,GAAD,CAAcA,UAAU,sBAAsB4E,KAAK,wBACnD,yBAAK5E,UAAU,QACX,2BAAOA,UAAU,wBAAwBinC,QAAQ,oBAAjD,gCAKP96B,EAAOkkB,qBACJ,yBAAKrwB,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CACIl6B,KAAK,aACLozB,MAAM,cACNjzB,KAAK,SACL61B,SAAO,QAO/B,kBAAC,IAAD,CAAa56B,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAMpB,KAAM,GAAIC,YAAa,IAC7B,iDAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CC1FnB4iC,GAA8C,SAAC,GAAwD,IAAtDnvB,EAAqD,EAArDA,SAAUovB,EAA2C,EAA3CA,iBAAkBC,EAAyB,EAAzBA,mBAC9Ej9B,EAAclK,IAAM+jB,WAAW1Z,GAAYL,SAA3CE,UACFsC,EAAWuW,cAEXkhB,EAAkBjkC,IAAM6K,aAC1B,SAACkN,EAAkBlI,GACXkI,EAAQlI,SAAWA,IACnBkI,EAAQlI,OAASA,EACjBrD,EAAS2L,GAAaY,cAAc,IAAIwa,GAAmBxb,QAGnE,CAACvL,IAGL,OACI,kBAACwd,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,eACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,2BAAIvoB,GAAWuoB,EAAS5nB,kBAGvC,CACI5X,OAAQ,OACRs/B,SAAU,QAGd,CACIt/B,OAAQ,eACRs/B,SAAU,gBACVC,KAAM,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OAAgC96B,GAAe86B,EAASvO,iBAElE,CACIjxB,OAAQ,QACRs/B,SAAU,QACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,qCAAWA,EAAS1c,MAAMyhB,sBAGzC,CACIvkC,OAAQ,WACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GACH,IAAMkb,EAAelb,EAAKH,IAAIqW,SAASgF,aACvC,OACI,0BAAMznC,UAAU,6BACZ,kBAAC,KAAD,CAAOk3B,MAAM,UAAUvzB,KAAM,GAAI3D,UAAU,SAC3C,0BACIuE,MAAO,CACH2yB,MAAO,yBAGVuQ,EALL,oBAWhB,CACIxkC,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCrqB,EAA+B,EAAhDiU,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,KACI,kBAAC+C,EAAD,CACI63B,GAAIlV,IACJniB,GAAI,CACA+kB,SAAS,gBAAD,OAAkBlQ,EAAQnM,IAClCnB,MAAO,CAAE68B,OAAQ,aAErB1nC,UAAU,uBAEV,gDAEHsK,EAAUnB,GAAMY,QAAQ,IACrB,kBAACjH,EAAD,CACI63B,GAAIlV,IACJniB,GAAE,uBAAkB6U,EAAQnM,GAA1B,mBACFhM,UAAU,cAEV,+CAGR,kBAAC,GAAD,CACIupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,KACI,kBAAC,IAAD,CAAM5lB,GAAE,uBAAkB6U,EAAQnM,KAAlC,iBAEH1B,EAAUnB,GAAMG,QACb,kBAAC,IAAMvJ,SAAP,KACI,kBAACmpB,GAAD,CACI3lB,QAAS,WACL+jC,EAAiBnvB,GACjBovB,GAAmB,KAGvB,+CAEJ,kBAACre,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UAAK7oB,EAAW0T,GAAUA,EAAQlI,SAE3D,8BAAOkI,EAAQlI,OAAS,aAAe,YACvC,kBAAC,GAAD,CAA0BsoB,QAASpgB,EAAQlI,kBAU/EQ,KAAMyH,KC1HL6rB,GAAqBnkC,IAAOC,IAAV,wUAkBlB8nC,GAAwB,WACjC,IAAM/iB,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAMpM,OAAOjN,SAAS0+B,OAGlD,EAA8Ct/B,IAAMglB,UAAS,GAA7D,oBAAO8gB,EAAP,KAAwBC,EAAxB,KACA,EAA8C/lC,IAAMglB,UAAS,GAA7D,oBAAOwiB,EAAP,KAAwBL,EAAxB,KACA,EAA0CnnC,IAAMglB,WAAhD,oBAAOyiB,EAAP,KAAsBP,EAAtB,KAGA,EAAkClnC,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KAEM4I,EAAWuW,cACjB,EAA2BvY,aAAY,SAACC,GAAD,OAA6BA,KAA5DqN,EAAR,EAAQA,SAAUpN,EAAlB,EAAkBA,KAClB,EAAsC1K,IAAM+jB,WAAW1Z,GAAYL,SAA3DE,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,eACbO,EAAWD,EAAKC,SAEtB3K,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAaE,oBACvB,CAAC7L,IAEJ,IAAMk7B,EAAoB1nC,IAAMuL,SAC5B,kBACI4D,kBACI2I,EAASA,SAASyC,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,iBAC1E,SAAC5N,GAAD,OAAO3C,EAAUnB,GAAMG,QAAUkB,EAAeyC,EAAEinB,oBAG1D,CAAChc,EAAUA,EAASA,WAGxB,OACI,kBAAC,EAAD,CAAYoqB,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACrB,kBAAC,GAAD,CAAoBwB,OAAQ8f,EAAiB1c,UAAW2c,IACvD0B,GACG,kBAAC,GAAD,CAAoBzhB,OAAQwhB,EAAiBpe,UAAW+d,EAAoBpvB,QAAS0vB,IAEzF,kBAAC3kC,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,KACI,yBAAKjD,UAAU,gBACX,wBAAIA,UAAU,iBAAd,iBAEHsK,EAAUnB,GAAMG,QACb,yBAAKtJ,UAAU,SACX,kBAAC8C,EAAD,CAAqBS,QAAS4iC,EAAmB7Y,UAAK7oB,GAAW,IAC7D,kBAAC,KAAD,CAAMd,KAAM,GAAIC,YAAa,IAC7B,oDAOnB0G,EAAUnB,GAAMG,QACb,kBAACpG,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CAAqBG,MAhDhB,CAAC,CAAE7C,MAAO,EAAGwD,KAAM,iBAgDWb,UAAWA,EAAWC,aAAcA,IACvE,kBAACd,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,IACM,OAAjBmB,QAAiB,IAAjBA,OAAA,EAAAA,EAAmB3mC,QAChB,kBAAC,GAAD,CACI+W,SAAU4vB,EACVR,iBAAkBA,EAClBC,mBAAoBA,IAGxB,yDAOf,OAARx8B,QAAQ,IAARA,OAAA,EAAAA,EAAUG,QAAS/B,GAAMY,QACtB,kBAAC,IAAD,MACsB,OAAjB+9B,QAAiB,IAAjBA,OAAA,EAAAA,EAAmB3mC,QAAS,EACzB2mC,EAAkBnjC,KAAI,SAACwT,GAAD,OAClB,kBAAC,IAAD,CAAK0lB,GAAI,EAAG98B,IAAKoX,EAAQnM,IACrB,kBAAC,GAAD,CACI4E,MAAOuH,EAAQvT,KACftB,GAAE,uBAAkB6U,EAAQnM,GAA1B,mBACF2Z,KAAMxN,EAAQ4b,kBAK1B,wD,UC9FfgU,GAA8C,SAAC,GAAkD,IAAhDvyB,EAA+C,EAA/CA,SAAU7E,EAAqC,EAArCA,KAAMiqB,EAA+B,EAA/BA,QAASoN,EAAsB,EAAtBA,gBAC7Ep7B,EAAWuW,cACjB,EAA8B/iB,IAAM+jB,WAAW1Z,GAAYL,SAAnDO,EAAR,EAAQA,KAAMJ,EAAd,EAAcA,YAER09B,EAAsB7nC,IAAM6K,aAC9B,SAAC8V,GACGnU,EAASiJ,GAAcwB,OAAO0J,EAAgBinB,MAElD,CAACp7B,EAAUo7B,IAGT3D,EAAkBjkC,IAAM6K,aAC1B,SAACmH,EAAkBnC,GACXmC,EAAQE,gBAAkBrC,IAC1BmC,EAAQE,cAAgBrC,EACxBg4B,EAAoB,IAAI1V,GAAmBngB,OAGnD,CAAC61B,IAGCC,EAAetN,EACf,CACI,CACI33B,OAAQ,OACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,4BAAKrU,sBAAW5b,KAAOiwB,EAAShwB,gBAAgBiwB,iBAInE,CACI,CACIz/B,OAAQ,cACRs/B,SAAU,iBACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SACZ,OAAO,4BAAKvoB,GAAWuoB,EAAShwB,qBAGxC,CACIxP,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GACH,IAAM4b,EAAQ5b,EAAKH,IAAIqW,SAASG,gBAEhC,OAAOj4B,EAAO,8BAAOw9B,EAAMzjB,eAAN,UAA0ByjB,EAAMlS,UAAhC,YAA6CkS,EAAM1jB,WAAqB,SAGrG,CACIxhB,OAAQ,UACRs/B,SAAU,iBAIxB,OACI,kBAACnY,GAAD,CACIE,QAAO,UACA4d,EADA,CAEH,CACIjlC,OAAQ,gBACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAAyB,8BAAOjZ,GAAeiZ,EAAKH,IAAIqW,SAAS1c,YAE3E,CACI9iB,OAAQ,kBACRs/B,SAAU,aACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OACF,8BACKA,EAAKH,IAAIqW,SAAS0C,WAAWhkC,OAAS,EACjCorB,EAAKH,IAAIqW,SAAS0C,WAAWhkC,OAC7BorB,EAAKH,IAAIqW,SAAStqB,QAAQgc,WAAa5H,EAAKH,IAAIqW,SAAS7qB,mBAI3E,CACI3U,OAAQ,SACRs/B,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OACF,8BACK5lB,GAAmB4lB,EAAKH,IAAIqW,SAASnwB,eACjC+D,QAAQ,IAAK,KACbA,QAAQ,WAAY,kBASrC,CACIpT,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAD,EAA/BpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,MACK,UAAAmH,GAAiCkL,EAAQE,sBAAzC,eAAyDnR,QAAS,GAC/DoJ,EAAY6H,EAAQ5G,UAAW,YAC5B4G,EAAQ+xB,iBAAiBhjC,OACxB,kBAAC,GAAD,CACInB,UAAU,OACVupB,iBAAkB,kBACd,kBAACzmB,EAAD,CAAqB9C,UAAU,kBAC3B,kDAIR,kBAACkpB,GAAD,CAAoBlpB,UAAU,yBAC1B,kBAAC,GAAD,CAAyBu4B,SAAO,IAChC,0BAAMv4B,UAAU,QACX2G,GAAmByL,EAAQE,eACvB+D,QAAQ,IAAK,KACbA,QAAQ,WAAY,eAGhCnP,GAAiCkL,EAAQE,eAAe3N,KACrD,SAACsL,EAAQgH,GAAT,OACI,kBAACiS,GAAD,CACIlpB,UAAU,wBACVuD,QAAS8gC,EAAgB/W,UAAK7oB,EAAW2N,EAASnC,GAClDlP,IAAKkW,GAEL,kBAAC,GAAD,CAAyBshB,SAAS,IAClC,0BAAMv4B,UAAU,QACX2G,GAAmBsJ,GACfoG,QAAQ,IAAK,KACbA,QAAQ,WAAY,mBAM7C,MACR,kBAAC,GAAD,CACIrW,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,KACI,kBAAC,IAAD,CAAM5lB,GAAE,uBAAkB8O,EAAQpG,KAAlC,iBAEHoG,EAAQE,gBAAkB/M,EAAgBqB,YACvC,kBAAC,IAAM7G,SAAP,KACKwK,EAAY6H,EAAQ5G,UAAW,WAC5B,kBAAC0d,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UACrB7oB,EACA2N,EACA7M,EAAgB0B,iBAGpB,yCAGPkL,GAAiBC,EAASzH,IACvB,kBAACue,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UACrB7oB,EACA2N,EACA7M,EAAgByB,WAGpB,0CAGH,OAAJ2D,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMG,OAClB,kBAAC4f,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UACrB7oB,EACA2N,EACA7M,EAAgByB,WAGpB,kDAWxCyJ,KAAM23B,mBAAQ5yB,GAAU,SAACvI,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,QACxDlK,KAAMA,KCnNZmzB,GAAelkC,IAAOC,IAAV,8TAyBLwoC,GAA0E,SAAC,GAAiB,IAAflwB,EAAc,EAAdA,QAChF3B,EAAuB,CACzB,CAAE2Z,SAAU,eAAgBtuB,MAAOsW,EAAQvT,KAAM0jC,MAAM,GACvD,CAAEnY,SAAU,cAAetuB,MAAOsW,EAAQ4b,aAC1C,CAAE5D,SAAU,cAAetuB,MAAOyR,GAAe6E,EAAQ4N,OAAQuiB,MAAM,GACvE,CACInY,SAAU,eACVtuB,MAAO8F,GAAewQ,EAAQ+b,eAC9BoU,MAAM,IAGd,OACI,kBAAC,GAAD,KACK9xB,EAAQ7R,KAAI,WAA4BsS,GAAO,IAAhCkZ,EAA+B,EAA/BA,SAAUtuB,EAAqB,EAArBA,MAChB0mC,EADqC,EAAdD,KACV,IAAM,OACzB,OACI,yBAAKtoC,UAAU,aAAae,IAAKkW,GAC7B,8BAAOkZ,GACP,kBAACoY,EAAD,KAAM1mC,SC9BxBkiC,GAAqBnkC,IAAOC,IAAV,mSAiBX2oC,GAA4B,SAACtoC,GAAW,IAAD,EAC5B8L,EAAOm0B,cAAnBxnB,WACR,EAII/N,aAAY,SAACC,GAAD,OAA6BA,EAAMqN,YAH/BC,EADpB,EACIa,eACiBxD,EAFrB,EAEI8C,gBACqB3H,EAHzB,EAGImQ,oBAEJ,EAAsC1gB,IAAM+jB,WAAW1Z,GAAYL,SAA3DE,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,eAEboC,EAAWuW,cACXniB,EAAWmnB,cACXrS,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,IAAY8L,MAAM7M,EAASc,QAAgBsY,MAAQ,IAAG,CAACpZ,EAASc,SAEzG1B,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAakwB,WAAWz8B,MAClC,CAACY,EAAUZ,IAEd5L,IAAMsoB,WAAU,WACRvQ,IAAY3N,EAAe2N,EAAQ+b,iBACnCtnB,EACID,GAAmBuD,OACftH,GAAkBqa,QAClB,uDAIRtiB,EAAQ0V,QAAQ,oBAErB,CAACzJ,EAAUuL,EAAS3N,IAEvBpK,IAAMsoB,WAAU,WACRvQ,GAAWA,EAAQnM,MAAQA,GAC3BY,EAAS2L,GAAamwB,aAAavwB,EAAQnM,GAAI8J,MAEpD,CAACqC,EAASnM,EAAI8J,EAAYlJ,IAE7B,IAAMgY,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAM,iBAC9B,CACIzV,KAAI,iBAAEuT,QAAF,IAAEA,OAAF,EAAEA,EAASvT,YAAX,QAAmB,GACvByV,KAAMpM,OAAOjN,SAAS0+B,OAI9B,EAA8Ct/B,IAAMglB,UAAS,GAA7D,oBAAOwiB,EAAP,KAAwBL,EAAxB,KAOA,EAAkCnnC,IAAMglB,SAASpkB,EAAS6J,OAAmC,aAA1B7J,EAAS6J,MAAM68B,OAAwB,EAAI,GAA9G,oBAAO3jC,EAAP,KAAkBC,EAAlB,KAEA,OACI,kBAAC,EAAD,CAAYs+B,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACpBzM,GACG,kBAAC,IAAMpY,SAAP,KACI,kBAAC,GAAD,CAAoBqmB,OAAQwhB,EAAiBpe,UAAW+d,EAAoBpvB,QAASA,IACrF,kBAACjV,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,KACI,yBAAKjD,UAAU,gBACX,kBAACkD,EAAUE,iBAAX,MACA,wBAAIpD,UAAU,iBAAiBmY,EAAQvT,OAE1C0F,EAAUnB,GAAMG,QACb,yBAAKtJ,UAAU,SACX,kBAAC8C,EAAD,CAAqBS,QAASgkC,EAAmBja,UAAK7oB,GAAW,IAC7D,kBAAC,KAAD,CAAOd,KAAM,GAAIC,YAAa,IAC9B,kDAMpB,kBAACV,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CAAqBG,MA/BpB,CACrB,CAAE7C,MAAO,EAAGwD,KAAM,eAClB,CAAExD,MAAO,EAAGwD,KAAM,aA6BqCb,UAAWA,EAAWC,aAAcA,IACvE,kBAACd,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACZ,kBAAC,GAAD,CAA6BxuB,QAASA,KAE1C,kBAAC,IAAD,CAASwuB,MAAO,IACH,OAARnxB,QAAQ,IAARA,OAAA,EAAAA,EAAUrU,QACP,kBAAC,GAAD,CACIqU,SAAUA,EACV7E,KAAMA,EACNq3B,gBAAiB,kBAAMp7B,EAAS2L,GAAakwB,WAAWz8B,KACxD4uB,SAAO,IAGX,0EC/H/B+N,GAA0BpkC,IAAM1E,IAAT,8BCCvB+oC,GAA4B,SAAC1oC,GACtC,OACI,kBAACyoC,GAAD,KACI,gDCgBCE,GAA0C,SAAC,GAAwC,IAAtC3rB,EAAqC,EAArCA,QAASvM,EAA4B,EAA5BA,KAAM0zB,EAAsB,EAAtBA,gBAC7Dt5B,EAAaH,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAA5DC,SAER,OACI,kBAACqf,GAAD,CACIC,UAAQ,EACRC,QAAS,CACL,CACIiY,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAAwC,IAA9BC,EAA6B,EAApCrW,IAAOqW,SACZ,OAAO,2BAAIjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGvD,CACI4uB,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAAD,EAAzB73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,iBAAO93B,EAAKsrB,iBAAZ,QAAyBtrB,EAAK+Z,kBAGtC,CACI6d,SAAU,SAEd,CACIA,SAAU,mBAEd,CACIA,SAAU,iBACVC,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAA1B73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,YAAcvsB,EAAKg4B,oBAGxD,CACI1/B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAA1B73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,KACI,kBAAC+C,EAAD,CAAqB9C,UAAU,kBAC3B,kBAAC,IAAD,CACIsD,GAAE,UACE,CAACoD,GAAea,IAAKb,GAAeE,YAAYklB,SAC5CnhB,EAAKg4B,gBADT,+BAG8Bh4B,EAAKqB,IAHnC,sBAIqBrB,EAAKqB,KAE9BzH,MAAO,CACH2yB,MAAO,yBAGX,8BACK,CAACxwB,GAAea,IAAKb,GAAeE,YAAYklB,SAC7CnhB,EAAKg4B,gBAEH,eACA,iBAIjB,CAACx5B,GAAMG,MAAOH,GAAMM,gBAAgBqiB,SAApC,OAA6C/gB,QAA7C,IAA6CA,OAA7C,EAA6CA,EAAUG,OAEpD,kBAAC,GAAD,CACIqe,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAgBhC,kBAACulB,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UAAK7oB,EAAWkG,GAAOA,EAAK+rB,iBAErD,8BAAO/rB,EAAK+rB,eAAiB,aAAe,YAC5C,kBAAC,GAAD,CAA0B6B,QAAS5tB,EAAK+rB,yBASxEjmB,KAAMyM,EACNvM,KAAMA,KC9FLm4B,GAAsD,SAAC,GAK7D,IAJH1iB,EAIE,EAJFA,OACAoD,EAGE,EAHFA,UACA/S,EAEE,EAFFA,OACAsyB,EACE,EADFA,mBAEMn8B,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,eACrD,kBAAC,KAAD,CACIue,SAAUU,GACVuX,oBAAkB,EAClBjJ,cAAe,IAAIxI,GAAkBlf,GACrC2nB,SAAU,SAACzhB,GACP,GAAIkpB,mBAAQ,IAAIlQ,GAAkBlf,GAASkG,GAEvC,OADA/P,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBACpDsH,GAAU,GAGrBuf,EAAmBpsB,MAGtB,gBAAGgiB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,SACX,kBAAC,GAAD,CAAe4E,KAAK,gBAAgBozB,MAAM,gBAAgBjzB,KAAK,OAAO61B,SAAO,KAEjF,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CACI4E,KAAK,kBACLI,YAAY,qBACZD,KAAK,OACL41B,GAAG,SACH3C,MAAM,qBACN4C,SAAO,GAEP,4BAAQ/4B,MAAM,GAAG6qB,UAAQ,GAAzB,sBAGCvlB,GAAgBxC,KAAI,SAAC9C,EAAOoV,GAAR,OACjB,4BAAQpV,MAAOA,EAAOd,IAAKkW,GACtBpV,SAMrB,yBAAK7B,UAAU,YACX,yBAAKA,UAAU,SACX,kBAAC,GAAD,CACI4E,KAAK,sBACLozB,MAAM,sBACNjzB,KAAK,OACL61B,SAAO,KAGf,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CAAe4E,KAAK,cAAcozB,MAAM,eAAejzB,KAAK,OAAO61B,SAAO,MAIlF,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,GACL,kBAAC,GAAD,CACIl6B,KAAK,qBACLozB,MAAM,uBACNjzB,KAAK,OACL61B,SAAO,KAGqB,IAAnCnkB,EAAOuyB,yBACJ,kBAAC,IAAD,CAAKlK,GAAI,GACL,kBAAC,GAAD,CAAel6B,KAAK,eAAeozB,MAAM,cAAc2C,GAAG,SAASC,SAAO,GACtE,4BAAQ/4B,MAAM,GAAG6qB,UAAQ,GAAzB,eAGCxgB,OAAOoD,QAAQ3H,IAAgBhD,KAAI,oCAAE9C,EAAF,KAAS+C,EAAT,YAChC,4BAAQ/C,MAAOA,EAAOd,IAAKc,GACtB+C,UAQ7B,kBAAC,IAAD,CAAa5E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAOpB,KAAM,GAAIC,YAAa,IAC9B,8CAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CCxGnBwkC,GAA0B,WAAO,IAAD,EACnCrkB,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,cAAeyV,KAAMpM,OAAOjN,SAAS0+B,OAGjD,EAAwCt/B,IAAMglB,WAA9C,oBAAO8jB,EAAP,KAAqBC,EAArB,KACA,EAA8C/oC,IAAMglB,UAAS,GAA7D,oBAAOwiB,EAAP,KAAwBL,EAAxB,KACA,EAAmCnnC,IAAMglB,SAAS,IAAlD,oBAAOrP,EAAP,KAAmBswB,EAAnB,KACQvkC,EAAWqmB,cAAXrmB,OAUR,EAAkC1B,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACM4I,EAAWuW,cACjB,EAA8CvY,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAArFsB,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,YAAakD,EAA9B,EAA8BA,YAExB0oB,EAAqB3oC,IAAM6K,aAC7B,SAACsR,GACG,IAAMxX,EAAOmkC,EAAcF,wBAC3Bp8B,EAAS0Q,GAAWwB,aAAavC,EAAaxX,EAAMwiC,EAAmBja,UAAK7oB,GAAW,OAE3F,CAACmI,EAAUs8B,IAGTpzB,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,IAAY8L,MAAM/L,GAAgBsY,MAAQ,IAAG,CAACtY,IACjFyN,EAAqCnP,IAAMuL,SAAQ,kBAAO5J,IAAY8L,MAAM/L,GAAgByN,SAAQ,CAACzN,IAErGsnC,EAAehpC,IAAM6K,aAAY,WACnC2B,EAAS0Q,GAAWe,WAAW9O,EAAQuG,EAAYC,MACpD,CAACnJ,EAAUkJ,EAAYvG,IAEpB80B,EAAkBjkC,IAAM6K,aAC1B,SAACwL,EAAcxG,GACPwG,EAAOigB,iBAAmBzmB,IAC1BwG,EAAOigB,eAAiBzmB,EACxBrD,EACI0Q,GAAWuB,iBAAiB,IAAI4X,GAAsBhgB,IAAS,WAC3D2yB,WAKhB,CAACx8B,EAAUw8B,IAGfhpC,IAAMsoB,WAAU,WAIZ,OAHA0gB,IACAx8B,EAAS0Q,GAAWkB,kBAEZjP,GACJ,KAAK7I,GAAeE,WAChB5C,EAAa,GACb,MACJ,KAAK0C,GAAeY,OAChBtD,EAAa,GACb,MACJ,KAAK0C,GAAea,IAChBvD,EAAa,GACb,MACJ,KAAK0C,GAAec,YAChBxD,EAAa,GACb,MACJ,QACIA,EAAa,MAEtB,CAAC4I,EAAU2C,EAAQ65B,IAUtB,OACI,kBAAC,EAAD,CAAY9G,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACpBskB,GACG,kBAAC,GAAD,CACI9iB,OAAQwhB,EACRpe,UAAW+d,EACX9wB,OAAQyyB,EACRH,mBAAoBA,IAG5B,kBAAC7lC,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,IAAD,CAAK46B,GAAI,GACL,wBAAI79B,UAAU,iBAAd,wBACA,4CAAIqgB,QAAJ,IAAIA,OAAJ,EAAIA,EAAa0hB,aAAjB,QAA0B,EAA1B,mBAEJ,kBAAC,IAAD,CAAK/hC,UAAU,gCAEnB,kBAACkD,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MA5FK,CACrB,CAAE7C,MAAO,EAAGwD,KAAM,cAAeC,MAAO,IACxC,CAAEzD,MAAO,EAAGwD,KAAM,aAAcC,MAAO,CAAC,SAAU,eAClD,CAAEzD,MAAO,EAAGwD,KAAM,SAAUC,MAAO,CAAC,SAAU,WAC9C,CAAEzD,MAAO,EAAGwD,KAAM,MAAOC,MAAO,CAAC,SAAU,QAC3C,CAAEzD,MAAO,EAAGwD,KAAM,cAAeC,MAAO,CAAC,SAAU,iBAwFnCd,UAAWA,EACXC,aAAcA,EACdG,aAhCC,SAACX,GAClB6iC,EAAa7iC,EAAEwJ,OAAOnL,QAgCNA,MAAOkU,EACP3R,aA9BC,WACjBwI,EAAS0Q,GAAWe,WAAW9O,EAAQuG,EAAYC,KA8BnC7R,YAAU,EACVG,qBAAmB,IAEvB,kBAACnB,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACXzpB,EAAQ/b,OACL,kBAAC,GAAD,CACI+b,QAASA,EACTvM,KAAMwM,EACNgsB,gBAAiBA,EACjB9E,gBAAiBA,EACjBkD,mBAAoBA,IAGxB,oDAGR,kBAAC,IAAD,CAASZ,MAAO,GACXzpB,EAAQ/b,OACL,kBAAC,GAAD,CACI+b,QAASA,EACTvM,KAAMwM,EACNgsB,gBAAiBA,EACjB9E,gBAAiBA,EACjBkD,mBAAoBA,IAGxB,+DAGR,kBAAC,IAAD,CAASZ,MAAO,GACXzpB,EAAQ/b,OACL,kBAAC,GAAD,CACI+b,QAASA,EACTvM,KAAMwM,EACNgsB,gBAAiBA,EACjB9E,gBAAiBA,EACjBkD,mBAAoBA,IAGxB,2DAGR,kBAAC,IAAD,CAASZ,MAAO,GACXzpB,EAAQ/b,OACL,kBAAC,GAAD,CACI+b,QAASA,EACTvM,KAAMwM,EACNgsB,gBAAiBA,EACjB9E,gBAAiBA,EACjBkD,mBAAoBA,IAGxB,wDAGR,kBAAC,IAAD,CAASZ,MAAO,GACXzpB,EAAQ/b,OACL,kBAAC,GAAD,CACI+b,QAASA,EACTvM,KAAMwM,EACNgsB,gBAAiBA,EACjB9E,gBAAiBA,EACjBkD,mBAAoBA,IAGxB,sE,oBCpLvB8B,GAA8C,SAAC,GAAwB,IAAtB7zB,EAAqB,EAArBA,SAAU7E,EAAW,EAAXA,KACpE,OACI,kBAACyZ,GAAD,CACIC,UAAQ,EACR1Z,KAAMA,EACN2Z,QAAS,CACL,CACIrnB,OAAQ,OACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA2C,IAAjCC,EAAgC,EAAvCrW,IAAOqW,SAEZ,OAAO,4BAAKjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGxD,CACI1Q,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OAAO,8BAAOrwB,EAAQ+F,QAAQvT,UAGtC,CACI3B,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,YAAc9kB,EAAQE,mBAG3D,CACIrP,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAoD,IAAhCpwB,EAA+B,EAAhDga,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,KACI,kBAAC+C,EAAD,CACI63B,GAAIlV,IACJniB,GAAI,CACA+kB,SAAS,gBAAD,OAAkBjW,EAAQpG,IAClCnB,MAAO,CAAE68B,OAAQ,aAErB1nC,UAAU,uBAEV,qDAOxByQ,KAAM23B,mBAAQ5yB,GAAU,SAACvI,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,WCzDvDyuB,GAA6B/kC,IAAM1E,IAAT,kwBCmCjC0pC,GAA2B3pC,IAAOC,IAAV,+uBA8BjB2pC,GAA+B,WAAO,IAAD,cAC9C,EAAkCppC,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KAEA,EAAqC5D,IAAMglB,UAAS,GAApD,oBAAOqkB,EAAP,KAAkBC,EAAlB,KACA,EAAqCtpC,IAAMglB,UAAS,GAApD,oBAAOukB,EAAP,KAAkBC,EAAlB,KACA,EAA4BxpC,IAAMglB,SAAS,GAA3C,oBAAOvL,EAAP,KAAegwB,EAAf,KACA,EAAsDzpC,IAAMglB,SAAwB,MAApF,oBAA4B0kB,GAA5B,WACA,EAAgD1pC,IAAMglB,SAAwB,MAA9E,oBACA,GADA,UAC4ChlB,IAAMglB,UAAkB,IAApE,oBAAO2kB,EAAP,KAAwBC,EAAxB,KACA,EAA8B5pC,IAAMglB,SAAiB,GAArD,oBAAO6kB,EAAP,KAAgBC,EAAhB,KAEQpoC,EAAWqmB,cAAXrmB,OAEAw9B,EAAca,cAAdb,UACAttB,EAAapH,aAAY,qBAAGoH,YAA5BA,SAER,EAIIpH,aAAY,SAACC,GAAD,OAA6BA,EAAM2O,gBAF9BuB,GAFrB,EACIqG,gBADJ,EAEIzH,iBACA0H,GAHJ,EAGIA,oBAEU8oB,GAAiBhmB,qBAAW1Z,GAAYL,SAA9CO,KACR,GAIIC,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAHlCnF,GADjB,GACI8F,YACe/G,GAFnB,GAEIiH,cACiB9L,GAHrB,GAGIoM,gBAEEnQ,GAAWuW,cACXrN,GAAa1V,IAAMuL,SAAQ,kBAAQ5J,IAAY8L,MAAM/L,GAAgBsY,MAAQ,IAAG,CAACtY,IAQvF1B,IAAMsoB,WAAU,WACZ9b,GAAS0Q,GAAWqB,QAAQ2gB,IAC5B1yB,GAASiI,GAAcC,QAEL,IAAd/Q,EACA6I,GAAS0Q,GAAW8sB,cAAc9K,EAAWxpB,KACxB,IAAd/R,EACP6I,GACI8N,GAAkB2vB,4BAA4B/K,EAAWt1B,GAAiBsgC,MAAM,cAAUx0B,KAEzE,IAAd/R,IACP6I,GAAS8N,GAAkBykB,kBAAkBG,EAAWxpB,KACxDqE,GAAoBowB,iBAAiBjL,GAChCf,MAAK,YAAe,IAAD,EAAX9tB,EAAW,EAAXA,KACC+5B,EAAU,iBAAG/5B,QAAH,IAAGA,OAAH,EAAGA,EAAMw5B,QAAQA,eAAjB,QAA4B,EAC5Cz8B,QAAQ01B,IAAI,mCAAoCsH,GAChDN,EAAWM,MAEd/L,OAAM,SAACgM,GAAD,OAASj9B,QAAQ01B,IAAI,CAAEuH,cAEvC,CAAC79B,GAAU0yB,EAAWv7B,EAAW+R,KAEpC1V,IAAMsoB,WAAU,WACZvO,GAAoBowB,iBAAiBjL,GAChCf,MAAK,YAAe,IAAD,EAAX9tB,EAAW,EAAXA,KACLo5B,EAAS,iBAACp5B,QAAD,IAACA,OAAD,EAACA,EAAMw5B,QAAQA,eAAf,QAA0B,MAEtCxL,OAAM,SAACgM,GAAD,OAASj9B,QAAQ01B,IAAI,CAAEuH,aACnC,IACH,IACM7lC,GAAQ6R,GAAD,iBAAeA,SAAf,IAAeA,QAAf,EAAeA,GAAQiO,qBAAvB,yBAA2CjO,SAA3C,IAA2CA,QAA3C,EAA2CA,GAAQwf,UAAnD,mBAAgExf,SAAhE,IAAgEA,QAAhE,EAAgEA,GAAQgO,UAA9D,GAEjBG,GAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,cAAeyV,KAAM,gBAC7B,CACIzV,QACAyV,KAAMpM,OAAOjN,SAAS0+B,OAIxBz7B,GAAmB7D,IAAMuL,SAC3B,kBACI,CACIvK,MAAO,EACPwD,KAAK,cAET,CACIxD,MAAO,EACPwD,KAAK,SAET,CACIxD,MAAO,EACPwD,KAAK,kBAXb,oBAac,OAAN6R,SAAM,IAANA,QAAA,EAAAA,GAAQi0B,YAAYvpC,QAAS,CAAC,CAAEC,MAAO,EAAGwD,KAAM,UAAa,OAErE,CAAC6R,GAAQ7R,KAGP+lC,GAAavqC,IAAM6K,YAAN,yCACf,WAAOwL,GAAP,sBAAArJ,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAGXhL,EAAO6R,EAAOwf,UAAP,UAAsBxf,EAAOwf,UAA7B,YAA0Cxf,EAAOgO,UAAahO,EAAOiO,cALtF,SAQQ9X,GAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBARjB,SAU+BrS,MAAM,GAAD,OACrBrB,mCADqB,uBACwBiI,GAAUA,EAAOzK,IACjEiW,GAZZ,cAUc1U,EAVd,0BAgByCA,EAAS4U,OAhBlD,QAgBkBC,EAhBlB,OAiBYC,KAAOD,EAAgBxd,EAAO,QAjB1C,kDAmBYgI,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAnBxE,0DAsBQvD,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAtBpE,iEADe,sDA0Bf,CAACvD,KAGCg+B,GAAgB3/B,sBAAW,yCAC7B,WAAO8P,GAAP,wBAAA3N,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAGXhL,EALV,iBAKiBmW,QALjB,IAKiBA,OALjB,EAKiBA,EAAa2J,qBAL9B,QAK+C,GAL/C,SAQQ9X,GAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBARjB,SAU+BrS,MAAM,GAAD,OACrBrB,mCADqB,qDAEpBuM,GAAeA,EAAY/O,IAE/BiW,GAdZ,cAUc1U,EAVd,0BAkByCA,EAAS4U,OAlBlD,QAkBkBC,EAlBlB,OAmBYC,KAAOD,EAAgBxd,EAAO,QAnB1C,kDAqBYgI,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBArBxE,0DAwBQvD,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAxBpE,iEAD6B,sDA4B7B,CAACvD,KAGCi+B,GAAYzqC,IAAM6K,YAAN,yCACd,WAAO6sB,GAAP,oBAAA1qB,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAFrB,SAMQhD,GAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,uBAAkE4V,EAAKlzB,KAAvE,OANjB,SAQ+BiL,MAAM,GAAD,OAAIrB,mCAAJ,6BAAuDspB,EAAK9rB,IAAMiW,GARtG,cAQc1U,EARd,yBAWyCA,EAAS4U,OAXlD,OAWkBC,EAXlB,OAYYC,KAAOD,EAAgB0V,EAAKlzB,KAAOkzB,EAAK9V,UAZpD,kDAcYpV,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAdxE,0DAiBQvD,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAjBpE,iEADc,sDAqBd,CAACvD,KAGCk+B,GAA0B,yCAAG,iCAAA19B,EAAA,6DACzB6U,EADyB,gBAExBlV,GAAU6C,kBAFc,SAM3BhD,GAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANkB,SAQJrS,MAAM,GAAD,OACrBrB,mCADqB,sDACuDiI,IAAUA,GAAOzK,IAChGiW,GAVuB,cAQrB1U,EARqB,yBAcMA,EAAS4U,OAdf,OAcjBC,EAdiB,OAeF,oBACrBC,KAAOD,EAAgBL,yBAhBA,kDAkBvBnV,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlBrC,0DAqB3BvD,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArBjC,iEAAH,qDAyB1B46B,GAAgB,yCAAG,iCAAA39B,EAAA,6DACf6U,EADe,gBAEdlV,GAAU6C,kBAFI,SAMjBhD,GAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANQ,SAQMrS,MAAM,GAAD,OACrBrB,mCADqB,gDACiDiI,IAAUA,GAAOzK,IAC1FiW,GAVa,cAQX1U,EARW,yBAcgBA,EAAS4U,OAdzB,OAcPC,EAdO,OAeQ,kBACrBC,KAAOD,EAAgBL,uBAhBV,kDAkBbnV,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlB/C,0DAqBjBvD,GAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArB3C,iEAAH,qDAyBtB,OACI,kBAAC,EAAD,CAAYmyB,aAAa,GACrB,kBAAC,GAAD,CACIlc,OAAQqjB,EACRvL,WAAY,SAACr8B,GAAD,OAAWgoC,GAAU,SAAC3Z,GAAD,OAAUA,EAAOruB,MAClD2nB,UAAWkgB,EACXjzB,OAAQ6oB,IAEZ,kBAAC,GAAD,CACIlZ,OAAQujB,EACRzL,WAAY,SAAC8M,GAAD,OAlNOnpC,EAkN+BgR,KAAKhF,MAAMm9B,GAAYxX,WAjNjFhmB,QAAQ01B,IAAI,gCAAiCrhC,QAE7CioC,EAAuBjoC,GAHG,IAACA,GAmNnB2nB,UAAWogB,EACXnzB,OAAQ6oB,EACRxpB,WAAYA,KAEhB,kBAACwzB,GAAD,KACI,kBAAC,GAAD,CAAQ1kB,YAAaA,KACrB,kBAAC1hB,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACmB,IAAdc,GAAmBkmC,EAxL1B,KAyLU,kBAACV,GAAD,CAA0BvpC,UAAU,QAC/B+pC,GACG,kBAAC,GAAD,CACI7L,WAAY,SAACr8B,GAAD,OAAWqoC,GAAW,SAACha,GAAD,OAAUA,EAAOruB,MACnDukB,OAAQ2jB,EACRvgB,UAAWwgB,EACXvzB,OAAQ6oB,IAGhB,mHAGA,4BAAQ/7B,QAAS,kBAAMymC,GAAiB,KAAxC,gBAGR,kBAAC,IAAD,CAAKnM,GAAI,EAAG79B,UAAU,6BAClB,kBAACkD,EAAUE,iBAAX,MACA,wBAAIpD,UAAU,iBAAiB4E,MAElC,GASL,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKi5B,GAAI,GACL,yBAAK79B,UAAU,WACX,yBAAKA,UAAU,aAAf,WACY,OAANyW,SAAM,IAANA,QAAA,EAAAA,GAAQwf,WACJxf,GAAOwf,UAAU,GAAKxf,GAAOgO,SAAS,GAD1C,OAEIhO,SAFJ,IAEIA,QAFJ,EAEIA,GAAQiO,cAAcI,MAAM,EAAG,UAHzC,aACK,EAGEmmB,eAEP,4BAAKrmC,IACL,kCAAI6R,SAAJ,IAAIA,QAAJ,EAAIA,GAAQ6f,OACZ,yBAAKt2B,UAAU,wBACX,uBAAGA,UAAU,QACT,iDADJ,qBACoCyW,SADpC,IACoCA,QADpC,EACoCA,GAAQy0B,mBAD5C,QAC2D,OAE3D,uBAAGlrC,UAAU,QACT,gDADJ,iBAEKyW,SAFL,IAEKA,QAFL,EAEKA,GAAQ00B,iBAFb,QAE0B,OAE1B,uBAAGnrC,UAAU,QACT,kDADJ,oBAEKgb,gBAAKhJ,EAAU,CAAEhG,GAAE,OAAEyK,SAAF,IAAEA,QAAF,EAAEA,GAAQjL,mBAFlC,aAEK,EAA2C5G,YAFhD,QAEwD,OAExD,uBAAG5E,UAAU,QACT,4CADJ,OAEKyW,SAFL,IAEKA,QAFL,EAEKA,GAAQksB,iBAGA,OAAZwH,SAAY,IAAZA,QAAA,EAAAA,GAAcj/B,QAAS/B,GAAMG,OAC1B,uBAAGtJ,UAAU,QACT,gDADJ,kBAKR,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAK69B,GAAI,EAAG79B,UAAU,aAClB,kBAAC,IAAD,CAAQ2D,KAAK,KAAKuzB,MAAM,UAAUnyB,KAAK,WAC5B,OAAN0R,SAAM,IAANA,QAAA,EAAAA,GAAQwf,WACH,cACM,OAANxf,SAAM,IAANA,QAAA,EAAAA,GAAQ20B,qCACR,sBACA,eAIlB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKvN,GAAG,IAAI79B,UAAU,cACjByW,IACG,kBAAC3T,EAAD,CACI9C,UAAU,iBACVuD,QAAS,kBAAMqnC,GAAcn0B,MAE7B,kBAAC,KAAD,CAAM9S,KAAM,GAAIC,YAAa,IAC7B,gDAKhB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKi6B,GAAG,IAAI79B,UAAU,cAClB,uBACIqrC,UAAQ,EACR7J,IAAI,sBACJx0B,OAAO,SACP0yB,KAAI,UAAKlxB,mCAAL,uBAAkDiI,IAAUA,GAAOzK,IACvEzI,QAAS,SAACC,GACNA,EAAEC,iBACFknC,GAAWl0B,MAGf,kBAAC3T,EAAD,CAAqB9C,UAAU,kBAC3B,kBAAC,IAAD,CAAM2D,KAAM,GAAIC,YAAa,IAC7B,mDAOxB,kBAAC,IAAD,CAAKi6B,GAAI,GACL,kBAAC36B,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MAAOA,GACPF,UAAWA,EACXC,aAAcA,EACdM,aAA4B,IAAdP,EAAkB+mC,GAA6BC,KAEjE,kBAAC7nC,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,IACC,OAAZwD,SAAY,IAAZA,QAAA,EAAAA,GAAcj/B,QAAS/B,GAAMO,6BAClB,OAAZygC,SAAY,IAAZA,QAAA,EAAAA,GAAcj/B,QAAS/B,GAAMG,MACzB,kBAAC,IAAD,CAAMhG,GAAE,+BAA0Bg8B,IAC9B,kBAAC,IAAD,CACI5S,WAAgB,OAANjW,SAAM,IAANA,QAAA,EAAAA,GAAQigB,gBAClBQ,MAAM,UACNl3B,UAAU,UACV+E,KAAK,UAJT,iBASJ,KACHyQ,IAAYA,GAASrU,OAClB,kBAAC,GAAD,CAAiBqU,SAAUA,GAAU7E,KAAMA,KAE3C,qDAGR,kBAAC,IAAD,CAASg2B,MAAO,GACZ,kBAAC,GAAD,CAAa5c,UAAU,GAAvB,OACKtT,SADL,IACKA,QADL,EACKA,GAAQi0B,YAAY/lC,KAAI,SAACmzB,EAAM7gB,GAAP,OACrB,wBAAIlW,IAAKkW,GACL,wBAAIq0B,QAAS,GACT,yBAAKtrC,UAAU,UACX,yBAAKA,UAAU,QACX,yBACIqkB,IAAKC,EAAQ,KACbF,IAAI,SAGZ,yBAAKpkB,UAAU,QACX,2BAAI83B,EAAKlzB,KAAOkzB,EAAK9V,WAEzB,yBAAKhiB,UAAU,WACX,uBACIqrC,UAAQ,EACR7J,IAAI,sBACJx0B,OAAO,SACP0yB,KAAI,UAAKlxB,mCAAL,6BAAwDspB,EAAK9rB,IACjEzI,QAAS,SAACC,GACNA,EAAEC,iBACFonC,GAAU/S,KAGd,kBAAC,KAAD,CAAUn0B,KAAM,GAAI3D,UAAU,SAC9B,kDAOxB,4BACI,gCAIZ,kBAAC,IAAD,CAAS2mC,MAAO,IACC,OAAZwD,SAAY,IAAZA,QAAA,EAAAA,GAAcj/B,QAAS/B,GAAMQ,aAClB,OAAZwgC,SAAY,IAAZA,QAAA,EAAAA,GAAcj/B,QAAS/B,GAAMG,MACzB,kBAAC,IAAD,CACIojB,WAAgB,OAANjW,SAAM,IAANA,QAAA,EAAAA,GAAQigB,gBAClBQ,MAAM,UACNl3B,UAAU,UACVuD,QAAS,kBAAMmmC,GAAgB,KAJnC,eAQA,KACJ,yBAAK1pC,UAAU,eACX,gDAAsB6Z,EAAO2tB,mBAGhCzsB,EAAY5Z,OACT,kBAAC,GAAD,CACIqY,aAAcuB,EACdpK,KAAM0Q,KAGV,6DAGR,kBAAC,IAAD,CAASslB,MAAO,GACZ,kBAAC,IAAD,KACI,kBAAC,IAAD,CACI9I,GAAI,GACJ79B,UAAU,qDAEV,6BACI,kBAAC,IAAD,CACIk3B,MAAM,UACNl3B,UAAU,UACVuD,QAAS,WACLqmC,GAAgB,IAEpBld,SAAU3R,EAAY5Z,OAAS,GANnC,YAWJ,yBAAKnB,UAAU,8BACX,uBAAGA,UAAU,QACT,kDACA,6BACgB,OAAX+a,QAAW,IAAXA,GAAA,UAAAA,EAAc,UAAd,eAAkB2G,SACblP,KAAOuI,EAAY,GAAG2G,SAAS/N,OAC3B,iBAEJ,QAOzBoH,EAAY5Z,OACT,kBAAC,GAAD,CACIqY,aAAcuB,EACdpK,KAAM0Q,KAGV,yE,UC3iBnCkqB,GAAkChnC,IAAM1E,IAAT,otDCsC/B2rC,GAA2C,SAAC,GAIlD,IAAD,YAHQx/B,EAGR,EAHFkL,SACau0B,EAEX,EAFF7mB,YACA8mB,EACE,EADFA,sBAEMx0B,EAAgB,OAAGlL,QAAH,IAAGA,IAAMm0B,cAAiBb,UAC3B7oB,EAAW7L,aAAY,qBAAGgR,SAAvCW,YACiBxB,EAAgBnQ,aAAY,qBAAG4O,gBAAhD4H,gBAEApP,GAD4BpH,aAAY,qBAAG4K,YAA3CuL,eACanW,aAAY,qBAAGoH,YAA5BA,UACA1H,EAAc6Z,qBAAW1Z,GAAYL,SAArCE,UACFsC,EAAWuW,cAEXyB,EAAyB,OAAG6mB,QAAH,IAAGA,IAAU,CACxC,CAAE7mC,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,cAAeyV,KAAMpM,OAAOjN,SAAS0+B,OAG3C2E,EAAkBjkC,IAAM6K,aAC1B,SAACgF,GACOwG,GAAUA,EAAOigB,iBAAmBzmB,IACpCwG,EAAOigB,eAAiBzmB,EACxBrD,EACI0Q,GAAWuB,iBAAiB,IAAI4X,GAAsBhgB,IAAS,YAC5C,IAAXxG,GAAiBtP,EAAQ0V,QAAR,sBAA+BI,EAAOzK,YAK3E,CAACY,EAAU6J,IAGTo0B,EAAYzqC,IAAM6K,YAAN,yCACd,WAAO6sB,GAAP,oBAAA1qB,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAFrB,SAMQhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,uBAAkE4V,EAAKlzB,KAAvE,OANjB,SAQ+BiL,MAAM,GAAD,OAAIrB,mCAAJ,6BAAuDspB,EAAK9rB,IAAMiW,GARtG,cAQc1U,EARd,yBAWyCA,EAAS4U,OAXlD,OAWkBC,EAXlB,OAYYC,kBAAOD,EAAgB0V,EAAKlzB,KAAOkzB,EAAK9V,UAZpD,kDAcYpV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAdxE,0DAiBQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAjBpE,iEADc,sDAqBd,CAACvD,IAGC+9B,EAAavqC,IAAM6K,YAAN,yCACf,WAAOwL,GAAP,sBAAArJ,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAGXhL,EAAO6R,EAAOwf,UAAP,UAAsBxf,EAAOwf,UAA7B,YAA0Cxf,EAAOgO,UAAahO,EAAOiO,cALtF,SAQQ9X,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBARjB,SAU+BrS,MAAM,GAAD,OACrBrB,mCADqB,uBACwBiI,GAAUA,EAAOzK,IACjEiW,GAZZ,cAUc1U,EAVd,0BAgByCA,EAAS4U,OAhBlD,QAgBkBC,EAhBlB,OAiBYC,kBAAOD,EAAgBxd,EAAO,QAjB1C,kDAmBYgI,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAnBxE,0DAsBQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAtBpE,iEADe,sDA0Bf,CAACvD,IAYL,OATAxM,IAAMsoB,WAAU,WACZ9b,EAAS0Q,GAAWqB,QAAQzH,IAC5BtK,EAASiI,GAAcC,QAElB42B,GACD9+B,EAAS8N,GAAkBixB,uBAAuBz0B,MAEvD,CAACtK,EAAUsK,EAAUw0B,IAGpB,kBAAC,EAAD,CAAYpJ,aAAa,GACrB,kBAACiJ,GAAD,KACI,kBAAC,GAAD,CAAQ3mB,YAAaA,IAEjB,kBAAC,IAAM7kB,SAAP,KACI,kBAACmD,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC8gC,GAAD,KACI,yBAAK/jC,UAAU,0CACX,kBAACkD,EAAUE,iBAAX,MACA,yBAAKpD,UAAU,sBACX,wBAAIA,UAAU,iBAAd,+BACC+a,EACG,kBAAC,IAAMhb,SAAP,KACI,0BAAMC,UAAU,QAAhB,gCAAoC+a,QAApC,IAAoCA,OAApC,EAAoCA,EAAa/O,UAAjD,QAAuD,QAE3D,KACJ,uBACIzH,MAAO,CACH2yB,MAAO,yBAFf,OAKKzgB,QALL,IAKKA,GALL,UAKKA,EAAQsE,mBALb,aAKK,EAAqB6wB,iBAIlC,yBAAK5rC,UAAU,oBACX,uBACIqrC,UAAQ,EACR7J,IAAI,sBACJx0B,OAAO,SACP0yB,KAAI,UAAKlxB,mCAAL,uBAAkDiI,GAAUA,EAAOzK,IACvEzI,QAAS,SAACC,GACNA,EAAEC,iBACFknC,EAAWl0B,KAGf,kBAAC3T,EAAD,CAAqB9C,UAAU,kBAC3B,kBAAC,IAAD,CAAM2D,KAAM,GAAIC,YAAa,IAC7B,kDAMpB,yBAAK5D,UAAU,cACX,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAK69B,GAAG,KACJ,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKA,GAAG,KACJ,6BACW,OAANpnB,QAAM,IAANA,OAAA,EAAAA,EAAQwf,WAAR,UACQxf,EAAOwf,UADf,YAC4Bxf,EAAOgO,UADnC,OAEKhO,QAFL,IAEKA,OAFL,EAEKA,EAAQiO,eAElB,2BAAIlS,KAAM,OAACiE,QAAD,IAACA,OAAD,EAACA,EAAQoE,aAAalH,OAAO,WAG/C,2BACI,kBAAC,KAAD,CAAQhQ,KAAM,GAAIC,YAAa,EAAG5D,UAAU,SAC5C,qCAAOyW,QAAP,IAAOA,OAAP,EAAOA,EAAQof,qBAEnB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKgI,GAAG,KACJ,kBAAC,GAAD,CAAa9T,UAAU,IACZ,OAANtT,QAAM,IAANA,OAAA,EAAAA,EAAQ5L,QACL,4BACI,qCACA,4BAAK4L,EAAO5L,QAGpB,4BACI,4CACA,mCAAK4L,QAAL,IAAKA,OAAL,EAAKA,EAAQsf,cAEjB,4BACI,4CACA,mCAAKtf,QAAL,IAAKA,OAAL,EAAKA,EAAQy0B,cAEjB,4BACI,6CACA,mCAAKz0B,QAAL,IAAKA,OAAL,EAAKA,EAAQ6f,QAEjB,4BACI,8CACA,6CAAK7f,QAAL,IAAKA,OAAL,EAAKA,EAAQm1B,qBAAb,QAA8B,WAElC,4BACI,0CACA,6CAAKn1B,QAAL,IAAKA,OAAL,EAAKA,EAAQ00B,iBAAb,QAA0B,QAE9B,4BACI,4CACA,gDACKnwB,gBAAKhJ,EAAU,CAAEhG,GAAE,OAAEyK,QAAF,IAAEA,OAAF,EAAEA,EAAQjL,mBADlC,aACK,EAA2C5G,YADhD,QACwD,UAKpE,kBAAC,IAAD,CAAKi5B,GAAG,QACF,OAACpnB,QAAD,IAACA,OAAD,EAACA,EAAQi0B,YAAYvpC,SACnB,kBAAC,GAAD,CAAa4oB,UAAU,GACnB,4BACI,8CACA,8BAHR,OAKKtT,QALL,IAKKA,OALL,EAKKA,EAAQi0B,YAAY/lC,KAAI,SAACmzB,EAAM7gB,GAAP,OACrB,wBAAIlW,IAAKkW,GACL,wBAAIq0B,QAAS,GACT,yBAAKtrC,UAAU,eACX,yBAAKA,UAAU,WACX,yBACIqkB,IAAKC,EAAQ,KACbF,IAAI,SAGZ,yBAAKpkB,UAAU,kBACX,2BAAI83B,EAAKlzB,KAAOkzB,EAAK9V,WAEzB,yBAAKhiB,UAAU,sBACX,uBACIqrC,UAAQ,EACR7J,IAAI,sBACJx0B,OAAO,SACP0yB,KAAI,UAAKlxB,mCAAL,6BAAwDspB,EAAK9rB,IACjEzI,QAAS,SAACC,GACNA,EAAEC,iBACFonC,EAAU/S,KAGd,kBAAC,KAAD,CAAUn0B,KAAM,GAAI3D,UAAU,SAC9B,kDAOxB,4BACI,iCAMnBsK,EAAU,CAACnB,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,aAAa,GAAQ,KACpE,yBAAK3J,UAAU,UACTyW,GAAUA,EAAOksB,iBAAmBj8B,GAAea,MAC1C,OAANkP,QAAM,IAANA,OAAA,EAAAA,EAAQksB,kBAAmBj8B,GAAeE,YACvC,kBAAC9D,EAAD,CACIiC,KAAK,SACLxB,QAAS8gC,EAAgB/W,UAAK7oB,GAAW,IAF7C,WAQR,kBAAC,GAAD,CACI8kB,iBAAkB,kBACbjf,EAAU,CAACnB,GAAMO,6BAA6B,GAI3C,KAHA,kBAAC5G,EAAD,CAAqB9C,UAAU,gBAC3B,kDAKZ,kBAACkpB,GAAD,CACIlpB,UAAU,wBACVuD,QAAS8gC,EAAgB/W,UAAK7oB,GAAW,IAEzC,kBAAC,GAAD,CACI8zB,QAAS9hB,GAAUA,EAAOigB,iBAE9B,0BAAM12B,UAAU,QAAhB,WAEJ,kBAACkpB,GAAD,CACIlpB,UAAU,wBACVuD,QAAS8gC,EAAgB/W,UAAK7oB,GAAW,IAEzC,kBAAC,GAAD,CACI8zB,QAAS9hB,IAAWA,EAAOigB,iBAE/B,0BAAM12B,UAAU,QAAhB,uBCxS3C6rC,GAA4D,SAAC,GAKnE,IAJHpG,EAIE,EAJFA,cACAC,EAGE,EAHFA,iBACAE,EAEE,EAFFA,iBACAD,EACE,EADFA,WAEM/4B,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQqf,EAAejc,UAAWkc,EAAkB90B,MAAM,aACnE,kBAAC,KAAD,CACIutB,cAAe,IAAIxH,GAAqBgP,GACxCxW,SAAUU,GACVuO,SAAU,SAAC7hB,GACP,GAAIspB,mBAAQ,IAAIlP,GAAqBgP,GAAappB,GAG9C,OAFA3P,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBAEpDwjB,GAAiB,GAG5BE,EAAiBrpB,MAGpB,gBAAGoiB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,YAAYozB,MAAM,cAAc4C,SAAO,KAE/D,0BAAMr2B,MAAO,CAAE00B,SAAU,KAAzB,eACA,kBAAC,GAAD,CAAer0B,KAAK,aAAag2B,SAAO,KAE5C,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,WAAWozB,MAAM,aAAa4C,SAAO,MAGjE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,MACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,iBAAiB4C,SAAO,OAI5E,kBAAC,IAAD,CAAa56B,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UAEtB,iDAEJ,4BACI/E,UAAU,uBACV+E,KAAK,SACLxB,QAASmiC,EAAiBpY,UAAK7oB,GAAW,IAE1C,+C,oBCrDnBqnC,GAA+C,SAAC,GAAuD,IAArD1lB,EAAoD,EAApDA,OAAQoD,EAA4C,EAA5CA,UAAW/S,EAAiC,EAAjCA,OAAQsyB,EAAyB,EAAzBA,mBAChFn8B,EAAWuW,cAEjB,OACI,kBAAC,GAAD,CAAaiD,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,eACrD,kBAAC,KAAD,CACIue,SAAUU,GACVuX,oBAAkB,EAClBjJ,cAAe,IAAInI,GAA4Bvf,GAC/C2nB,SAAU,SAACzhB,GACP,GAAIkpB,mBAAQ,IAAI7P,GAA4Bvf,GAASkG,GAEjD,OADA/P,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBACpDsH,GAAU,GAGrBuf,EAAmBpsB,MAGtB,gBAAGgiB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,SACX,kBAAC,GAAD,CAAe0sB,UAAQ,EAAC9nB,KAAK,YAAYozB,MAAM,aAAajzB,KAAK,OAAO61B,SAAO,KAEnF,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CAAe0sB,UAAQ,EAAC9nB,KAAK,WAAWozB,MAAM,YAAYjzB,KAAK,OAAO61B,SAAO,MAGrF,yBAAK56B,UAAU,YACX,yBAAKA,UAAU,SACX,kBAAC,GAAD,CAAe4E,KAAK,cAAcozB,MAAM,eAAejzB,KAAK,OAAO61B,SAAO,KAE9E,yBAAK56B,UAAU,SACX,kBAAC,GAAD,CACI4E,KAAK,YACLI,YAAY,cACZgzB,MAAM,cACNjzB,KAAK,OACL41B,GAAG,SACHC,SAAO,EACPtX,KAAMyoB,MAEN,4BAAQlqC,MAAO,EAAG6qB,UAAQ,GAA1B,eAGC7jB,GAAclE,KAAI,SAAC9C,EAAOoV,GAAR,OACf,4BAAQpV,MAAOA,EAAOd,IAAKkW,GACtBpV,SAMrB,yBAAK7B,UAAU,YACX,yBAAKA,UAAU,SACX,kBAAC,GAAD,CACI4E,KAAK,iBACLozB,MAAM,wBACNhzB,YAAY,wBACZD,KAAK,OACLue,KAAM0oB,KACNpR,SAAO,OAKvB,kBAAC,IAAD,CAAa56B,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAOpB,KAAM,GAAIC,YAAa,IAC9B,8CAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CCzE1Bq/B,GAAelkC,IAAOC,IAAV,qZA0BLosC,GAA4B,WAAO,IAAD,EAK3C,EAAkC7rC,WAAe,GAAjD,oBAAO2D,EAAP,KAAkBC,EAAlB,KACA,EAA0C5D,YAAe,GAAzD,oBAAOgmC,EAAP,KAAsBV,EAAtB,KACA,EAA8CtlC,YAAe,GAA7D,oBAAO8rC,EAAP,KAAwBC,EAAxB,KACQ7hC,EAAclK,aAAiBqK,GAAYL,SAA3CE,UAER,EAAkCM,aAAY,SAACC,GAAD,OAA6BA,KAAnEC,EAAR,EAAQA,KAAM8Q,EAAd,EAAcA,MAAO5J,EAArB,EAAqBA,SACfo6B,EAAcxwB,EAAMW,YACpB8vB,EAAa,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAa1nB,cAC7B4nB,EAAYF,GAAW,UAAOA,EAAYnW,UAAnB,YAAgCmW,EAAY3nB,UACnEvZ,EAAI,OAAGkhC,QAAH,IAAGA,OAAH,EAAGA,EAAalhC,KAEpB0B,EAAWuW,cAEXopB,EAAYnsC,eAAkB,WAAO,IAAD,EACtCwM,EAAS0Q,GAAWqB,QAAX,UAAmB7T,EAAKC,gBAAxB,aAAmB,EAAeiB,OAC5C,CAACY,EAAU9B,EAAKC,WAEbyhC,EAA0BpsC,eAC5B,SAACmc,GACG3P,EACI0Q,GAAWmvB,kBAAkBlwB,GAAa,WACtCmpB,GAAiB,GACjB6G,UAIZ,CAAC3/B,EAAU2/B,IAGTxD,EAAqB3oC,eACvB,SAACmc,GACG,IAAMxX,EAAOqnC,EAAapD,wBAC1Bp8B,EACI0Q,GAAWwB,aAAavC,EAAaxX,GAAM,WACvConC,GAAmB,GACnBI,UAIZ,CAAC3/B,EAAUw/B,EAAaG,IAGtBG,EAA+BtsC,eACjC,SAACmc,GACG3P,EACI0Q,GAAW4B,uBAAuB3C,GAAa,WAC3C4vB,GAAmB,GACnBI,UAIZ,CAAC3/B,EAAU2/B,IAGfnsC,aAAgB,WACZmsC,IACA3/B,EAASiI,GAAcC,UACxB,CAAClI,EAAU9B,EAAMyhC,IAEpB,IAAM/1B,GACFtL,IAAS/B,GAAMY,OACT,CACI,CAAEomB,SAAU,YAAatuB,MAAOyqC,GAChC,CAAEnc,SAAU,UAAWtuB,MAAK,UAAEmQ,EAASA,SAASgJ,MAAK,SAACmT,GAAD,OAAOA,EAAEniB,MAAF,OAASogC,QAAT,IAASA,OAAT,EAASA,EAAa5gC,qBAAtD,aAAE,EAAgE5G,MAC9F,CAAEurB,SAAU,OAAQtuB,MAAOqJ,MAEnB,OAAXkhC,QAAW,IAAXA,OAAA,EAAAA,EAAanW,WACR,CAAC,CAAE9F,SAAU,YAAatuB,MAAOyqC,IACjC,CACI,CAAEnc,SAAU,gBAAiBtuB,MAAOwqC,GACpC,CAAElc,SAAU,qBAAsBtuB,MAAK,OAAEuqC,QAAF,IAAEA,OAAF,EAAEA,EAAaxW,mBAE9D+W,OAAO,CACL,CAAExc,SAAU,cAAetuB,MAAO8F,GAAeykC,EAAa7gC,eAC9D,CAAE4kB,SAAU,UAAWtuB,MAAK,OAAEuqC,QAAF,IAAEA,OAAF,EAAEA,EAAavW,uBAEvD8W,OAAO,CACL,CAAExc,SAAU,gBAAiBtuB,MAAK,OAAEuqC,QAAF,IAAEA,OAAF,EAAEA,EAAa9V,OACjD,CAAEnG,SAAU,eAAgBtuB,MAAK,OAAEuqC,QAAF,IAAEA,OAAF,EAAEA,EAAarW,aAChD,CAAE5F,SAAU,kBAAmBtuB,MAAO2Q,KAAM,OAAC45B,QAAD,IAACA,OAAD,EAACA,EAAavxB,aAAalH,OAAO,oBAWlF,OACI,gBAAC,EAAD,CAAY2uB,aAAa,GACrB,gBAAC,WAAD,KACK8J,GAAe9hC,EAAU,CAACnB,GAAMG,MAAOH,GAAMM,eAAgBN,GAAMO,8BAChE,gBAAC,GAAD,CACI+7B,cAAeW,EACfV,iBAAkBA,EAClBE,iBAAkB4G,EAClB7G,WAAYyG,IAInBA,GAAe9hC,EAAUnB,GAAMY,UAAYqiC,EAAYnW,UACpD,gBAAC,GAAD,CACI7P,OAAQ8lB,EACR1iB,UAAW2iB,EACX11B,OAAQ21B,EACRrD,mBAAoBA,IAGxB,gBAAC,GAAD,CACI3iB,OAAQ8lB,EACR1iB,UAAW2iB,EACX11B,OAAQ21B,EACRrD,mBAAoB2D,IAI5B,gBAAC,IAAD,CAAK1sC,UAAU,UACX,gBAAC,IAAD,CAAK69B,GAAI,GACL,gBAAC,GAAD,OAEJ,gBAAC,IAAD,CAAKA,GAAI,EAAG79B,UAAU,8BAClB,gBAAC,GAAD,QAGR,gBAAC,IAAD,CAAKA,UAAU,QACX,gBAAC,IAAD,CAAK69B,GAAI,GACL,gBAAC36B,EAAUC,QAAX,KACI,gBAACD,EAAUD,OAAX,KACI,gBAAC8gC,GAAD,KACI,uBAAK/jC,UAAU,gBACX,sBAAIA,UAAU,iBAAd,eAEJ,uBAAKA,UAAU,oCACVsK,EAAU,CACPnB,GAAMG,MACNH,GAAMM,eACNN,GAAMO,8BAEN,gBAAC5G,EAAD,CAAqBS,QAASmiC,EAAiBpY,UAAK7oB,GAAW,IAC3D,6CAIPyG,IAAS/B,GAAMY,QACZ,gBAACjH,EAAD,CAAqBS,QAAS4oC,EAAmB7e,UAAK7oB,GAAW,IAC7D,gDAMpB,gBAACvB,EAAUW,KAAX,KACI,gBAACX,EAAUY,UAAX,CAAqBG,MA9JxB,CACrB,CAAE7C,MAAO,EAAGwD,KAAM,eA6JyCb,UAAWA,EAAWC,aAAcA,IACvE,gBAACd,EAAUoC,QAAX,KACI,gBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,gBAAC,IAAD,CAAS2mC,MAAO,GACZ,gBAAC,GAAD,KACKnwB,EAAQ7R,KAAI,WAAsBsS,GAAO,IAA1BkZ,EAAyB,EAAzBA,SAAUtuB,EAAe,EAAfA,MACtB,OACI,uBAAK7B,UAAU,aAAae,IAAKkW,GAC7B,yBAAIkZ,GACJ,4BAAOtuB,kBC9MtD+qC,GAAkD,SAAC,GAA0B,IAAxB/vB,EAAuB,EAAvBA,WAAYlM,EAAW,EAAXA,KACpE+yB,EAAoB7mB,EACrBlC,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBACxDiK,MAAM,EAAG,GAEd,OACI,kBAACsF,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,eACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,4BAAKjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGjD,CACI1Q,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA0D,IAAtCqK,EAAqC,EAAtDzgB,IAAOqW,SACN79B,EACDioC,EAASliC,MAAQkiC,EAASliC,KAAK+Z,eAC/BmoB,EAASliC,MAAT,UAAoBkiC,EAASliC,KAAKsrB,UAAlC,YAA+C4W,EAASliC,KAAK8Z,UAClE,OAAO,8BAAO7f,OAGtB,CACI3B,OAAQ,QACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA0D,IAAtCqK,EAAqC,EAAtDzgB,IAAOqW,SACNnM,EAAQuW,EAASliC,MAAQkiC,EAASliC,KAAK2rB,MAC7C,OAAO,8BAAOA,OAGtB,CACIrzB,OAAQ,WACRs/B,SAAU,gBAGlB5xB,KAAMA,EACNF,KAAMizB,KCxCLoJ,GAA+B,WAAO,IAAD,EACtChrC,EAAWqmB,cAAXrmB,OACF8K,EAAWuW,cACXrY,EAAOF,aAAY,qBAAGE,QAC5B,EAA2DF,aAAY,qBAAGgR,SAAlEyB,EAAR,EAAQA,mBAAoCR,EAA5C,EAA4BmC,eACtB4F,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,iBAAkByV,KAAMpM,OAAOjN,SAAS0+B,OAIpD,EAAkCt/B,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KAEMkH,EAAQJ,IAAI,UAAIA,EAAKC,gBAAT,aAAI,EAAeG,OAAS,QACxCkP,EAAOha,IAAMuL,SAAQ,kBAAQ5J,QAAkBD,GAAgBsY,MAAQ,IAAG,CAACtY,IAMjF,OAJA1B,IAAMsoB,WAAU,WACZ9b,EAAS0Q,GAAW0B,eAAe9T,EAAM,CAAE6hC,WAAY3yB,OACxD,CAACxN,EAAU1B,EAAMkP,IAGhB,kBAAC,EAAD,KACI,kBAAC,GAAD,CAAQwK,YAAaA,IACrB,kBAAC1hB,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,IAAD,CAAK46B,GAAG,KACJ,wBAAI79B,UAAU,iBAAd,oBAGR,kBAACkD,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CAAqBG,MApBZ,CAAC,CAAE7C,MAAO,EAAGwD,KAAM,mBAoBOb,UAAWA,EAAWC,aAAcA,IACvE,kBAACd,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACX9pB,GAAcA,EAAW1b,OACtB,kBAAC,GAAD,CAAiB0b,WAAYA,EAAYlM,KAAM0M,EAAoBnS,KAAMA,IAEzE,6DC7CvB8hC,GAAS,kBAClB,yBAAKC,MAAM,6BAA6B1oB,MAAM,KAAKyU,OAAO,KAAKkU,QAAQ,YAAY/S,KAAK,QACpF,0BACIgT,EAAE,0kEACFhT,KAAK,cAKJiT,GAAY,kBACrB,yBAAKH,MAAM,6BAA6B1oB,MAAM,KAAKyU,OAAO,KAAKkU,QAAQ,YAAY/S,KAAK,QACpF,0BACIgT,EAAE,w1BACFhT,KAAK,e,SjDVZsB,K,kBAAAA,E,mBAAAA,E,oBAAAA,E,qBAAAA,Q,cAOAC,K,kBAAAA,E,oBAAAA,E,sBAAAA,E,uBAAAA,Q,KAOL,I,SkD8BYA,GlD9BN2R,IAAmB,qBACpB3R,GAAM4R,QAAU7R,GAAY6R,SADR,eAEpB5R,GAAM6R,SAAW9R,GAAY8R,UAFT,eAGpB7R,GAAM8R,UAAY/R,GAAY+R,WAHV,eAIpB9R,GAAM0R,UAAY3R,GAAY2R,WAJV,IAOnBK,GAAiC7tC,IAAOC,IAAV,kbAKN,qBAAG6tC,eAcpBC,GAA8F,SAAC,GAIrG,IAAD,EAHF/8B,EAGE,EAHFA,MACAiJ,EAEE,EAFFA,OACA+zB,EACE,EADFA,MAEMC,EAAmBj9B,EAAMk9B,MAAM,KAAK,GAC1C,OACI,6BACI,kBAACL,GAAD,CAAaC,YAAaL,GAAeQ,GAAmB7tC,UAAU,gBAClE,yBAAKA,UAAU,qDACX,6BACI,6BAAM4Q,GACN,yBAAK5Q,UAAU,kBACV4tC,E5F/Cc,SAAC/zB,GAExC,IAGMk0B,EAHcC,OAAOn0B,GAAQxD,QAAQ,MAAO,IAGdA,QAAQ,wBAAyB,KAKrE,MAFY,iBAAQ03B,G4FwCUE,CAA2B,OAACp0B,QAAD,IAACA,IAAU,GADtC,UAEAm0B,OAAOn0B,GAAQxD,QAAQ,oBAAqB,cAF5C,QAEsD,IAGnEw3B,IAAqBnS,GAAM0R,UAAY,kBAAC,GAAD,MAAgB,kBAAC,GAAD,UkDzDtEc,GAActuC,IAAOC,IAAV,kHAOXiE,GAAYlE,IAAOC,IAAV,8WAmBFyF,GAAU1F,IAAOC,IAAV,kW,SAiBR67B,O,qBAAAA,I,uBAAAA,I,0BAAAA,Q,KAML,IAAMyS,GAAoG,SAAC,GAI3G,IAHHzpC,EAGE,EAHFA,KACAX,EAEE,EAFFA,UACAC,EACE,EADFA,aAEA,OACI,kBAACkqC,GAAD,CAAaluC,UAAU,oEACnB,kBAAC,GAAD,CAAWA,UAAU,kCAChB0E,EAAKC,KAAI,gBAAGC,EAAH,EAAGA,KAAMxD,EAAT,EAASA,MAAT,OACN,yBACIL,IAAKK,EACLpB,UAAS,UAAK+D,IAAc3C,GAAS,SAA5B,cACTmC,QAAS,kBAAMS,EAAa5C,KAE5B,0BAAMpB,UAAU,QAAQ4E,UAYnCwpC,GAAgF,SAAC,GAIvF,IAHHjuC,EAGE,EAHFA,SAGE,EAFFitB,YAEE,EADFxN,SAIA,OACI,kBAAC,GAAD,CAAS5f,UAAU,QAIdG,I,4BCtFbkuC,KAAQC,SAASC,KAAYC,KAAeC,KAAaC,KAAYhT,KAAOiT,KAASC,MAE9E,I,wBCTKC,GDSCl/B,GAAU,CACnBqa,YAAY,EACZ8kB,QAAS,CACLC,OAAQ,CACJC,SAAU,OAEdp+B,MAAO,CACH8W,SAAS,EACTsb,KAAM,MAKLiM,GAAsE,SAAC,GAA8B,IAA5BC,EAA2B,EAA3BA,OAAQC,EAAmB,EAAnBA,MACpF1+B,EAAO,CACTy+B,SACAE,SAAU,CACN,CACIpX,MALiG,EAAZpnB,MAOrFy+B,aAAc,GAId5+B,KAAM0+B,EACN/P,gBAAiB,aAI7B,OACI,yBAAKp/B,UAAU,iCACX,yBAAKA,UAAU,YACX,kBAAC,KAAD,CAAK2P,QAASA,GAASc,KAAMA,OAMhC6+B,GAA4D,SAAC,GAAuB,IACvF7+B,EAAO,CACTy+B,OAFwF,EAApBA,OAGpEE,SAAU,CACN,CACI3+B,KALgF,EAAZ0+B,MAMpE/P,gBAAiB,CAAC,UAAW,UAAW,UAAW,UAAW,WAC9DsO,YAAa,CAAC,UAAW,UAAW,UAAW,UAAW,WAC1D6B,YAAa,KAIzB,OACI,yBAAKvvC,UAAU,sCACX,yBAAKA,UAAU,YACX,kBAAC,KAAD,CAAK2P,QAASA,GAASc,KAAMA,OEnDvC++B,GAAM5vC,YAAO0F,GAAP1F,CAAH,iKAsBI6vC,GAA0C,SAAC,GAKjD,IAJHC,EAIE,EAJFA,WACAC,EAGE,EAHFA,0BACAnwB,EAEE,EAFFA,WAGA,GADE,EADFowB,gBAEkCxvC,IAAMglB,SAAS,IAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACA,EAAgC5D,IAAMglB,SAAc,UAApD,oBAAOxF,EAAP,KAAiBwN,EAAjB,KAEQ9N,EAAwB1U,aAAY,SAACC,GAAD,OAA6BA,EAAMwU,cAAvEC,oBACF1S,EAAWuW,cAEjB,EAAmE7O,GAC/Do7B,EACA,OACA,gBAHYG,EAAhB,EAAQn7B,OAAqCo7B,EAA7C,EAAkCn7B,UAKlC,EACIL,GAAsBq7B,EAA2B,OAAQ,gBAD7CI,EAAhB,EAAQr7B,OAAmDs7B,EAA3D,EAAgDr7B,UAEhD,EAA2DL,GAAqB,OAC5EgL,QAD4E,IAC5EA,OAD4E,EAC5EA,EAAqB2wB,gBACrB,cACA,iBAHYC,EAAhB,EAAQx7B,OAAiCy7B,EAAzC,EAA8Bx7B,UAO9B,EAAkEL,GAAqB,OACnFgL,QADmF,IACnFA,OADmF,EACnFA,EAAqB8wB,kBACrB,cACA,cAHYC,EAAhB,EAAQ37B,OAA2CywB,EAAnD,EAAwCxwB,UAOxC,EAA4DL,GAAqB,OAC7EgL,QAD6E,IAC7EA,OAD6E,EAC7EA,EAAqBgxB,gBACrB,cACA,gBAIEC,GAPN,EAAQ77B,OAAR,EAAqCC,UAOLvU,IAAM6K,YAAN,wBAAkB,uBAAAmC,EAAA,sEACxCR,EAAS2S,GAAcixB,sBAAsBhxB,IADL,2CAE/C,CAAC5S,EAAU8iC,EAAYC,EAA2B/vB,KAErDxf,IAAMsoB,WAAU,WACZ6nB,MACD,CAACA,EAAyB/wB,IAE7B,IAcM7P,EAAU,CAAC,oBAAqB,6BACtC,EAA4CvP,IAAMglB,SAASzV,EAAQ,IAAnE,oBAAO8gC,EAAP,KAAuBC,EAAvB,KAMMC,EAAmBd,EAAiBlrC,KAAI,SAACwpB,GAAD,OAAOA,EAAE8c,iBACjD2F,EAAyBb,EAA+BprC,KAAI,SAACksC,GAAD,OAAOA,EAAE5F,iBAE3E,OACI,6BACI,kBAAC,GAAD,CAAYvmC,KA1BI,CAEpB,CAAEtD,MAAO,EAAGwD,KAAM,YAClB,CAAExD,MAAO,EAAGwD,KAAM,cAuBUb,UAAWA,EAAWC,aAAcA,IAY3DD,IAAc23B,GAAM6R,UACjB,kBAAC,GAAD,CAAU3tB,SAAUA,EAAUwN,YAAaA,GACvC,kBAAC,GAAD,CAAU8hB,OAAQgB,EAAcf,MAAOgB,EAAev/B,MAAM,cAUnE7M,IAAc23B,GAAM0R,WACjB,kBAAC,GAAD,CAAUxtB,SAAUA,EAAUwN,YAAaA,GACvC,kBAAC,GAAD,CAAU8hB,OAAQmB,EAAwBlB,MAAOhK,EAAYv0B,MAAM,eAI3E,kBAAC4+B,GAAD,KACI,yBAAKxvC,UAAU,qDACX,yBAAKA,UAAU,cAAf,iBACA,yBAAKA,UAAU,QACX,4BAAQ6B,MAAO4uC,EAAgBlsC,MAtD/B,CAChBW,aAAc,MACdE,QAAS,MACT0rC,OAAQ,iBACRvsB,MAAO,QACPkC,YAAa,QAiDsDxhB,SA3C5C,SAAC8rC,GACxBL,EAAkBK,EAAM/jC,OAAOnL,SA2CV8N,EAAQhL,KAAI,SAACqsC,GAAD,OACT,4BAAQjwC,IAAKiwC,EAAQnvC,MAAOmvC,GACvBA,SAMD,sBAAnBP,EAEG,kBAAC,GAAD,CAAUvB,OAAQyB,EAAkBxB,MAAOW,IAG3C,kBAAC,GAAD,CAAUZ,OAAQ0B,EAAwBzB,MAAOa,OC/I/DjM,GAAqBnkC,IAAOC,IAAV,sbAsBXoxC,GAAY,WACrB,IAAMrsB,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,YAAayV,KAAMpM,OAAOjN,SAAS0+B,OAG/C,EAAwBt/B,IAAMglB,SAAiD,IAA/E,oBAAOnS,EAAP,KAAai+B,EAAb,KAEQ7xB,EAAezU,aAAY,SAACC,GAAD,OAA6BA,EAAMwU,cAA9DA,WACFzS,EAAWuW,cAEXotB,EAA0BnwC,IAAM6K,aAAY,WAC9C2B,EAAS2S,GAAc4xB,mBACxB,CAACvkC,IAEJxM,IAAMsoB,WAAU,WACZ6nB,MACD,CAACA,IAEJ,IAAMa,EAAY,yCAAG,WAAO7hC,GAAP,UAAAnC,EAAA,6DAIjB8jC,EAAQ3hC,GAJS,SAKX3C,EAAS2S,GAAc4xB,cAAc5hC,IAL1B,2CAAH,sDAQlB,OACI,kBAAC,EAAD,KACI,yBAAKhL,MAAO,CAAEy0B,OAAQ,UAClB,kBAAC,GAAD,CAAQpU,YAAaA,IACrB,kBAAC,KAAD,CACIuZ,cAAe,CAAE1c,UAAW,GAAIC,QAAS,IACzC0c,SAAQ,yCAAE,WAAOjyB,GAAP,UAAAiB,EAAA,sDACNikC,IAASC,yBAAwB,WAC7B9jC,QAAQ01B,IAAI,OAAQ/2B,GAEpBilC,EAAa,CAAE3vB,UAAWtV,EAAOsV,UAAWC,QAASvV,EAAOuV,aAJ1D,2CAAF,wDAQP,YAA+B,IAA5Bid,EAA2B,EAA3BA,aAAcxyB,EAAa,EAAbA,OACd,OACI,kBAAC,GAAD,CAAoBnM,UAAU,QAC1B,0BAAMo+B,SAAUO,GACZ,+CACA,2BAAO3+B,UAAU,SAAjB,cAEI,kBAAC,KAAD,CAAOA,UAAU,QAAQ+E,KAAK,OAAOH,KAAK,eAE9C,2BAAO5E,UAAU,SAAjB,YAEI,kBAAC,KAAD,CAAOA,UAAU,QAAQ+E,KAAK,OAAOH,KAAK,aAE9C,kBAAC7B,GAAD,CACIwB,MAAO,CACHusC,OAAQ,yBACR5rC,aAAc,MACdqsC,aAAc,GAElB7kB,UAAWvgB,EAAOuV,QAAQvgB,SAAWgL,EAAOsV,UAAUtgB,OACtD4D,KAAK,UAPT,eAgBpB,yBAAK/E,UAAU,iCACX,yBAAKA,UAAU,sBACX,kBAAC,GAAD,CAAa6Z,OAAM,OAAEwF,QAAF,IAAEA,OAAF,EAAEA,EAAYmyB,aAAc5gC,MAAM,gBAAgBg9B,MAAO,KAEhF,yBAAK5tC,UAAU,sBACX,kBAAC,GAAD,CAAa6Z,OAAM,OAAEwF,QAAF,IAAEA,OAAF,EAAEA,EAAYoyB,iBAAkB7gC,MAAM,eAAeg9B,MAAO,KAEnF,yBAAK5tC,UAAU,qBACX,kBAAC,GAAD,CAAa6Z,OAAM,OAAEwF,QAAF,IAAEA,OAAF,EAAEA,EAAY7J,SAAU5E,MAAM,oBAErD,yBAAK5Q,UAAU,sBACX,kBAAC,GAAD,CAAa6Z,OAAM,OAAEwF,QAAF,IAAEA,OAAF,EAAEA,EAAY8lB,WAAYv0B,MAAM,sBAI3D,kBAAC,GAAD,CACI8+B,WAAYrwB,EAAWqwB,WACvBlwB,WAAYvM,EACZ08B,0BAA2BtwB,EAAWswB,+BCpH7C+B,GAAgB,WACzB,IAAM/mC,EAAOwZ,qBAAW1Z,GAAYL,SAASO,KAEvCgnC,EAAOhmC,mBAAQ,WACjB,OAAQhB,EAAKO,MACT,KAAK/B,GAAMK,WACX,KAAKL,GAAMI,QACX,KAAKJ,GAAMQ,WACP,OAAOk5B,GACX,KAAK15B,GAAMG,MACX,KAAKH,GAAMM,eACP,OAAOk4B,GACX,QACI,OAAOiC,MAEhB,CAACj5B,IAEJ,OAAO,kBAACgnC,EAAD,OCDEC,GAA0D,SAAC,GAA6C,IAA3Cp4B,EAA0C,EAA1CA,aAAc7I,EAA4B,EAA5BA,KAAMq3B,EAAsB,EAAtBA,gBACpFp7B,EAAWuW,cAEX8kB,EAAsB7nC,IAAM6K,aAC9B,SAAC8V,GACGnU,EAASiJ,GAAcwB,OAAO0J,EAAgBinB,MAElD,CAACp7B,EAAUo7B,IAGS5nC,IAAM6K,aAC1B,SAACmH,EAAkBnC,GACXmC,EAAQE,gBAAkBrC,IAC1BmC,EAAQE,cAAgBrC,EACxBg4B,EAAoB,IAAI1V,GAAmBngB,OAGnD,CAAC61B,IAGL,OACI,kBAAC7d,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,OACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,4BAAKrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,gBAG5D,CACIz/B,OAAQ,UACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAAD,EAApCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,yBAAtB,UAAiDuL,EAASoP,iBAA1D,QAAuE,WAGtF,CACI5uC,OAAQ,UACRs/B,SAAU,eACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,4BAAKA,EAASxnB,kBAI7B,CACIhY,OAAQ,gBACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAA6B,8BAAOjZ,GAAeiZ,EAAKH,IAAIqW,SAAS5oB,aAE/E,CACI5W,OAAQ,aACRs/B,SAAU,WACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAA6B,8BAAOA,EAAKH,IAAIqW,SAASqP,cAEhE,CACI7uC,OAAQ,SACRs/B,SAAU,SACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,aAA6B,wCAAOA,EAAKH,IAAIqW,SAASxyB,cAAzB,QAAmC,cAE1E,CACIhN,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAAwD,IAApCpwB,EAAmC,EAApDga,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,KACI,kBAAC,GAAD,CACIC,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,KACI,kBAAC,IAAD,CAAM5lB,GAAE,uBAAkB8O,EAAQ8I,gBAAlC,wBAQ5BzK,KAAM23B,mBAAQ5uB,GAAc,SAACvM,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,QAC5DlK,KAAMA,KCrFLohC,GAA8D,SAAC,GAAyC,IAAvCv4B,EAAsC,EAAtCA,aAAc7I,EAAwB,EAAxBA,KAAMqhC,EAAkB,EAAlBA,YACxFplC,EAAWuW,cACXxiB,EAAUsxC,cACRtnC,EAASwZ,qBAAW1Z,GAAYL,SAAhCO,KACFu9B,GACE,OAAJv9B,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMY,QAAWioC,EAoC1B,CACI,CACI/uC,OAAQ,YACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAA6B,8BAAOA,EAAKH,IAAIqW,SAASoP,eAEhE,CACI5uC,OAAQ,SACRs/B,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,aAA6B,wCAAOA,EAAKH,IAAIqW,SAASmJ,qBAAzB,QAA0C,eA5CrF,CACI,CACI3oC,OAAQ,SACRs/B,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,aAA6B,wCAAOA,EAAKH,IAAIqW,SAASmJ,qBAAzB,QAA0C,cAEjF,CACI3oC,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA4D,IAAxCznB,EAAuC,EAAxDqR,IAAOqW,SACZ,OACI,kBAAC,GAAD,CACIziC,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,CACI3lB,QAAS,WACLqJ,EAAS2M,GAAoBgC,aAAa,CAACR,QAActW,IACzD9D,EAAQM,KAAR,mCACgC8Z,EAAYG,cAD5C,iBACkEH,EAAYpB,oBAJtF,mBA+B9B,OACI,kBAACyQ,GAAD,CACIE,QAAO,CACH,CACIrnB,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,4BAAKjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGjD,CACI1Q,OAAQ,SACRs/B,SAAU,SACVC,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,qCAAWA,EAAS5oB,OAAO2tB,sBAGnC,CACIvkC,OAAQ,aACRs/B,SAAU,QACVC,KAAK,SAAD,oGAAC,EAAC,kBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OAA8C,wCAAOA,EAASyP,aAAhB,QAAyB,WAEjF,CACIjvC,OAAQ,iBACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OAA8C,wCAAOA,EAAS0P,iBAAhB,QAA6B,YAtBlF,OAwBAjK,GAEPz3B,KAAM23B,mBAAQ5uB,GAAc,SAACvM,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,QAC5DlK,KAAMA,KCvFLyhC,GAAiD,SAAC,GAA6C,IAA3C54B,EAA0C,EAA1CA,aAAc7I,EAA4B,EAA5BA,KAAMq3B,EAAsB,EAAtBA,gBAC3Ep7B,EAAWuW,cAEW/iB,IAAM6K,aAC9B,SAAC8V,GACGnU,EAASiJ,GAAcwB,OAAO0J,EAAgBinB,MAElD,CAACp7B,EAAUo7B,IAGf,OACI,kBAAC5d,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,8BAAOrU,sBAAW5b,KAAOiwB,EAAS5nB,aAAa6nB,gBAGvD,CACIz/B,OAAQ,SACRs/B,SAAU,SACVC,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,qCAAWA,EAAS5oB,OAAO2tB,sBAGnC,CACIvkC,OAAQ,aACRs/B,SAAU,QACVC,KAAK,SAAD,oGAAC,EAAC,kBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OAA8C,wCAAOA,EAASyP,aAAhB,QAAyB,WAEjF,CACIjvC,OAAQ,iBACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OAA8C,wCAAOA,EAAS0P,iBAAhB,QAA6B,WAErF,CACIlvC,OAAQ,SACRs/B,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,aAA6B,wCAAOA,EAAKH,IAAIqW,SAASmJ,qBAAzB,QAA0C,cAEjF,CACI3oC,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA4D,IAAxCznB,EAAuC,EAAxDqR,IAAOqW,SACZ,OACI,kBAAC,IAAM1iC,SAAP,KACI,kBAAC,GAAD,CACIC,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACb,EAAD,CACI63B,GAAIlV,IACJzlB,UAAU,iBACVsD,GAAE,mCAA8ByX,EAAYG,gBAHhD,uBAaxBzK,KAAM23B,mBAAQ5uB,GAAc,SAACvM,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,QAC5DlK,KAAMA,KCtEL0hC,GAA4C,SAAC,GAAuC,IAArC74B,EAAoC,EAApCA,aAAc7I,EAAsB,EAAtBA,KAAM2hC,EAAgB,EAAhBA,UACtE3xC,EAAUsxC,cACVrlC,EAAWuW,cAEXovB,EAAuB,SAACn7B,EAAuBgD,GACjDD,GAAoBq4B,sBAAsBp7B,EAAegD,GACpDmkB,MAAK,SAAChxB,GACHC,QAAQ01B,IAAI,iCAAkC31B,GAC9CX,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,2CAE9Duc,OAAM,SAAChxB,GACJD,QAAQC,MAAM,2BAA4BA,GAC1Cb,EACID,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sDAS7D+3B,EAAsCoK,EACtC,CACI,CACIrvC,OAAQ,WACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAAD,EAApCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,yBAAtB,UAAiDuL,EAASoP,iBAA1D,QAAuE,WAUtF,CACI5uC,OAAQ,aACRs/B,SAAU,QACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAAD,EAApCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,yBAAtB,UAAiDuL,EAASyP,aAA1D,QAAmE,WAIlF,CACIjvC,OAAQ,aACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,8BAAOA,EAAS0P,UAAY,MAAQ,cAGnD,CACIlvC,OAAQ,iBACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAAD,EAApCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,0BAAMl+B,MAAO,CAAE2yB,MAAO,yBAAtB,UAAiDuL,EAAS0P,iBAA1D,QAAuE,WAGtF,CACIlvC,OAAQ,iBACRs/B,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAAD,EAApCC,EAAoC,EAA3CrW,IAAOqW,SAINvL,EAAmC,SAA3BuL,EAASmJ,cAA2B,uBAAyB,UAC3E,OAAO,0BAAMrnC,MAAO,CAAE2yB,UAAf,UAAyBuL,EAASmJ,qBAAlC,QAAmD,eAItE,CAyCI,CACI3oC,OAAQ,YAAgB,EAAbgpB,OAEP,OAAIzS,EAAapO,MAAK,SAACghB,GAAD,OAAiC,IAAxBA,EAAIzS,mBACxB,iBAEJ,MAEX4oB,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IACb,EADxBC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAiC,IAA7BA,EAAS9oB,gBAEL,0BAAMpV,MAAO,CAAE2yB,MAAO,yBAAtB,UACKuL,EAAS0P,iBADd,QAC2B,iBAI5B,SAGf,CACIlvC,OAAQ,YAAgB,EAAbgpB,OAEP,OAAIzS,EAAapO,MAAK,SAACghB,GAAD,OAAiC,IAAxBA,EAAIzS,mBAIxB,iBAEJ,MAEX4oB,SAAU,gBACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,GAAiC,IAA7BA,EAAS9oB,gBAAuB,CAChC,IAAMud,EAAmC,SAA3BuL,EAASmJ,cAA2B,uBAAyB,UAC3E,OAAO,0BAAMrnC,MAAO,CAAE2yB,UAAUuL,EAASmJ,eAE7C,OAAO,UAKzB,OACI,kBAACxhB,GAAD,CACIE,QAAO,CACH,CACIrnB,OAAQ,OACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,8BAAOvoB,GAAWuoB,EAAS5nB,kBAG1C,CACI5X,OAAQ,UACRs/B,SAAU,eACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,8BAAOA,EAASxnB,kBAG/B,CACIhY,OAAQ,SACRs/B,SAAU,iBAEd,CACIt/B,OAAQ,SACRs/B,SAAU,SACVC,KAAK,SAAD,oGAAC,EAAC,YAA+C,IAArCC,EAAoC,EAA3CrW,IAAOqW,SACZ,OAAO,8BAAOnvB,GAAemvB,EAAS5oB,cAvB3C,OAiCAquB,EAjCA,CAkCH,CACIjlC,OAAQ,YAEJ,MAAkB,oBAFE,EAAbgpB,OAEIjgB,IAA4BwN,EAAapO,MAAK,SAACghB,GAAD,OAAiC,IAAxBA,EAAIzS,mBAC3D,KAEJ,UAEX4oB,SAAU,kBACVC,KAAK,SAAD,oGAAC,EAAC,YAA4D,IAAxCznB,EAAuC,EAAxDqR,IAAOqW,SACZ,OAAoC,IAAhC1nB,EAAYpB,gBACL,KAEyB,YAA7BoB,EAAYE,aACf,kBAAC,GAAD,CACIjb,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,KACI,kBAACpmB,EAAD,CACI9C,UAAU,iBACVuE,MAAO,CAAEmpC,YAAa,SACtBnqC,QAAS,WACLqJ,EAAS2M,GAAoBgC,aAAa,CAACR,QAActW,IACzD9D,EAAQM,KAAR,mCACgC8Z,EAAYG,cAD5C,iBACkEH,EAAYpB,oBANtF,iBAaJ,kBAACuP,GAAD,KACmC,SAA9BnO,EAAY6wB,eACT,kBAAC9oC,EAAD,CACI9C,UAAU,iBACVuE,MAAO,CAAEmpC,YAAa,SACtBnqC,QAAS,kBACLwX,EAAYo3B,WACZI,EAAqBx3B,EAAYo3B,UAAU3e,WAAY,KAG3D,4CAKgB,IAAhCzY,EAAYpB,gBACc,OAA1BoB,EAAYo3B,UACR,kBAAC,GAAD,CACInyC,UAAU,OACVupB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,KACI,kBAACpmB,EAAD,CACI63B,GAAIlV,IACJzlB,UAAU,iBACVuE,MAAO,CAAEmpC,YAAa,SACtBpqC,GAAE,mCAA8ByX,EAAYG,cAA1C,iBAAgEH,EAAYpB,kBAJlF,iBASJ,kBAACuP,GAAD,KACmC,SAA9BnO,EAAY6wB,eACT,kBAAC9oC,EAAD,CACI9C,UAAU,iBACVuE,MAAO,CAAEmpC,YAAa,SACtBnqC,QAAS,kBACLwX,EAAYo3B,WACZI,EAAqBx3B,EAAYo3B,UAAU3e,WAAY,KAG3D,4CAMhB,kBAAC1wB,EAAD,CACI63B,GAAIlV,IACJzlB,UAAU,iBACVsD,GAAE,mCAA8ByX,EAAYG,cAA1C,iBAAgEH,EAAYpB,kBAHlF,gBAQJ,WAIhBlJ,KAAM+I,EACN7I,KAAMA,KCjSL8hC,GAAmE,SAAC,GAI1E,IAHHj5B,EAGE,EAHFA,aACA7I,EAEE,EAFFA,KAGM/D,GADJ,EADFolC,YAEiB7uB,eAGjB,GAFgB8uB,cACC9tB,qBAAW1Z,GAAYL,SAAhCO,KAC+BvK,IAAMglB,UAAS,IAAtD,oBAAOstB,EAAP,KAAkBC,EAAlB,KACA,EAA0DvyC,IAAMglB,SAAiB,GAAjF,oBAAOwtB,EAAP,KAA8BC,EAA9B,KACQvT,EAAca,cAAdb,UASFwT,EAAuB7nC,sBAAW,yCACpC,WAAO8nC,GAAP,oBAAA3lC,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAFrB,SAMQhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANjB,SAQ+BrS,MAAM,GAAD,OACrBrB,mCADqB,sDACuDukC,GAC/E9wB,GAVZ,cAQc1U,EARd,yBAcyCA,EAAS4U,OAdlD,OAckBC,EAdlB,OAeYC,KAAOD,EAAD,kBAA4B2wB,EAA5B,SAflB,kDAiBYnmC,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAjBxE,0DAoBQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BApBpE,iEADoC,sDAwBpC,CAACvD,IAGL,OACI,oCACI,kBAAC,GAAD,CACIwZ,OAAQssB,EACRlpB,UAAWmpB,EACXrT,UAAWA,EACXtzB,GAAI4mC,EACJ98B,WAzCO,IA4CX,kBAACsU,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,4BAAKjwB,KAAOiwB,EAAShhB,WAAW9N,OAAO,sBAG/C,CACI1Q,OAAQ,SACRs/B,SAAU,SACVC,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,qCAAWA,EAAS5oB,OAAO2tB,sBAGnC,CACIvkC,OAAQ,yBACRs/B,SAAU,uBACVC,KAAK,SAAD,oGAAC,EAAC,kBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,OACF,wCAAOA,EAASuQ,4BAAhB,QAAwC,cAGhD,CACI/vC,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,MACgC,SAAlCA,EAASuQ,qBACL,kBAAClwC,EAAD,CAAqB9C,UAAU,QAAQuD,QAAS,kBApEjDyI,EAoEyEy2B,EAASz2B,GAnEzG6mC,EAAyB7mC,QACzB2mC,GAAkB,GAFI,IAAC3mC,IAoEC,WAGA,SAGZ,CACI/I,OAAQ,cACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAUC,EAAV,EAAGrW,IAAOqW,SAAV,MACgC,SAAlCA,EAASuQ,qBACL,kBAAClwC,EAAD,CACI9C,UAAU,iBACVuD,QAAS,kBAAMuvC,EAAqBrQ,EAASz2B,MAE7C,kBAAC,KAAD,CAAMrI,KAAM,GAAIC,YAAa,IAC7B,8CAEJ,UAGhB6M,KAAM23B,mBAAQ5uB,GAAc,SAACvM,GAAD,OAAO,IAAI4F,KAAK5F,EAAE4N,eAAc,QAC5DlK,KAAMA,MC7GhBozB,GAAqBnkC,IAAOC,IAAV,6ZAqBXozC,GAA0C,WACnD,IAAMrmC,EAAWuW,cACjB,EAA0BiC,mBAAS,IAAnC,oBAAOvjB,EAAP,KACA,GADA,KACoCujB,mBAAS,CACzC3D,UAAW,GACXC,QAAS,MAFb,oBAAOlC,EAAP,KAAmB0zB,EAAnB,KAIA,EAAkC9yC,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACA,EAAoC5D,IAAMglB,SAAS,IAAnD,oBAAOrP,EAAP,KAAmBo9B,EAAnB,KACA,EAAiDvoC,aAAY,SAACC,GAAD,OAA6BA,EAAM2O,gBAAxFG,EAAR,EAAQA,gBAAiB0H,EAAzB,EAAyBA,oBACjBvf,EAAWqmB,cAAXrmB,OACFgU,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,IAAY8L,MAAM/L,GAAgBsY,MAAQ,IAAG,CAACtY,IAQvF4mB,qBAAU,WACN9b,EAAS8N,GAAkB04B,0BAA0BrvC,EAAY,EAAxD,cAA6D+R,cAAe0J,GAAczJ,MACpG,CAACnJ,EAAU7I,EAAW+R,EAAY0J,IAErC,IAQM6zB,EAAwC15B,EAAgBpK,QAAO,SAACwL,GAClE,OAAOA,EAAYu4B,eAAyF,IAAzEv4B,EAAYu4B,aAAa7M,cAAcC,QAAQ7kC,EAAM4kC,kBAGtF8M,EAAiB,yCAAG,iCAAAnmC,EAAA,6DAChB6U,EADgB,gBAEflV,GAAU6C,kBAFK,SAMlBhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANS,SAQKrS,MAAM,GAAD,OACrBrB,mCADqB,6CAExByT,GAVc,cAQZ1U,EARY,yBAceA,EAAS4U,OAdxB,OAcRC,EAdQ,OAeO,uBACrBC,kBAAOD,EAAgBL,4BAhBT,kDAkBdnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlB9C,0DAqBlBvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArB1C,iEAAH,qDAyBjBqjC,EAAe,yCAAG,iCAAApmC,EAAA,6DACd6U,EADc,gBAEblV,GAAU6C,kBAFG,SAMhBhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANO,SAQOrS,MAAM,GAAD,OACrBrB,mCADqB,2CAExByT,GAVY,cAQV1U,EARU,yBAciBA,EAAS4U,OAd1B,OAcNC,EAdM,OAeS,oBACrBC,kBAAOD,EAAgBL,yBAhBX,kDAkBZnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlBhD,0DAqBhBvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArB5C,iEAAH,qDAyBfsjC,EAAa,yCAAG,iCAAArmC,EAAA,6DACZ6U,EADY,gBAEXlV,GAAU6C,kBAFC,SAMdhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANK,SAQSrS,MAAM,GAAD,OACrBrB,mCADqB,kDAExByT,GAVU,cAQR1U,EARQ,yBAcmBA,EAAS4U,OAd5B,OAcJC,EAdI,OAeW,6BACrBC,kBAAOD,EAAgBL,kCAhBb,kDAkBVnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlBlD,0DAqBdvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArB9C,iEAAH,qDAwCnB,OACI,kBAAC,EAAD,CAAYmyB,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAa,KACrB,kBAAC1hB,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,uBAEI,kBAAC,KAAD,CACIk7B,cAAe,CAAE1c,UAAW,GAAIC,QAAS,IACzC0c,SAAQ,yCAAE,WAAOjyB,GAAP,UAAAiB,EAAA,sDACNikC,IAASC,yBAAwB,WAC7B3vC,EAAU,OAAQ,GAClBuxC,EAAc,CAAEzxB,UAAWtV,EAAOsV,UAAWC,QAASvV,EAAOuV,aAH3D,2CAAF,wDAOP,YAA+B,IAA5Bid,EAA2B,EAA3BA,aAAcxyB,EAAa,EAAbA,OACd,OACI,0BAAMiyB,SAAUO,GACZ,0CACA,2BAAO3+B,UAAU,SAAjB,cAEI,kBAAC,KAAD,CAAO+E,KAAK,OAAOH,KAAK,eAE5B,2BAAO5E,UAAU,SAAjB,YAEI,kBAAC,KAAD,CAAO+E,KAAK,OAAOH,KAAK,aAE5B,kBAAC7B,GAAD,CACIwB,MAAO,CACHusC,OAAQ,yBACR5rC,aAAc,MACdqsC,aAAc,GAElB7kB,UAAWvgB,EAAOuV,QAAQvgB,SAAWgL,EAAOsV,UAAUtgB,OACtD4D,KAAK,UAPT,gBAiBxB,kBAAC7B,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MA/JK,CACrB,CAAEW,KAAM,mBAAoBxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,IACtD,CAAED,KAAM,iBAAkBxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,IACpD,CAAED,KAAM,wBAAyBxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,KA6J3Cd,UAAWA,EACXC,aAAcA,EACdG,aAxJC,SAACX,GAClB2vC,EAAc3vC,EAAEwJ,OAAOnL,QAwJPuC,aArJC,WACjBwI,EAAS8N,GAAkB04B,0BAA0BrvC,EAAY,EAAxD,cAA6D+R,cAAe0J,GAAczJ,KAqJnFlU,MAAOkU,EACPzR,aACkB,IAAdP,EAAkBwvC,EAAkC,IAAdxvC,EAAkB0vC,EAAgBD,EAE5EtvC,YAAU,EACVG,qBAAmB,IAGvB,kBAACnB,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACX0M,EAAuBlyC,OAAS,EAC7B,kBAAC,GAAD,CACImxC,WAAS,EACT94B,aAAc65B,EACd1iC,KAAM0Q,IAGV,yDAIR,kBAAC,IAAD,CAASslB,MAAO,GACX0M,EAAuBlyC,OAAS,EAC7B,kBAAC,GAAD,CACIqY,aAAc65B,EACd1iC,KAAM0Q,IAGV,yDAIR,kBAAC,IAAD,CAASslB,MAAO,GACX0M,EAAuBlyC,OAAS,EAC7B,kBAAC,GAAD,CACIqY,aAAc65B,EACd1iC,KAAM0Q,IAGV,+DCvPvBqyB,GAER,SAAC,GAAa,EAAX/oC,KAAY,IAChB,EAAoCya,mBAAS,CACzC3D,UAAW,aACXC,QAAS,cAFb,oBAAOlC,EAAP,KAIA,GAJA,KAIkC4F,mBAAS,IAA3C,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACA,EAAiD4G,aAAY,qBAAG4O,gBAAxDG,EAAR,EAAQA,gBAAiB0H,EAAzB,EAAyBA,oBACnBzU,EAAWuW,cACTrhB,EAAWqmB,cAAXrmB,OACFgU,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,QAAkBD,GAAgBsY,MAAQ,IAAG,CAACtY,IAiBvF,OALA4mB,qBAAU,WACN,IAAM3jB,EAAqB,IAAdhB,EAAkB,EAAkB,IAAdA,EAAkB,EAAI,EACzD6I,EAAS8N,GAAkB04B,0BAA0BruC,EAAM,CAAE+Q,aAAY0J,kBAC1E,CAACzb,EAAW6I,EAAUkJ,EAAY0J,IAGjC,kBAAC,EAAD,CAAY8iB,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAZkB,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAM,gCAW1B,kBAACnX,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,yBAAKjD,UAAU,gBACX,wBAAIA,UAAU,iBAAd,sBAIR,kBAACkD,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CAAqBG,MA1BZ,CACrB,CAAEW,KAAM,WAAYxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,IAC9C,CAAED,KAAM,QAASxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,IAC3C,CAAED,KAAM,gBAAiBxD,MAAO,EAAGyD,MAAO,CAAC,OAAQ,KAuBJd,UAAWA,EAAWC,aAAcA,IAEvE,kBAACd,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACXhtB,EAAgBxY,OACb,kBAAC,GAAD,CACIqY,aAAcG,EACdhJ,KAAM0Q,IAGV,gEAGR,kBAAC,IAAD,CAASslB,MAAO,GACXhtB,EAAgBxY,OACb,kBAAC,GAAD,CAAwBqY,aAAcG,EAAiBhJ,KAAM0Q,IAE7D,yEAGR,kBAAC,IAAD,CAASslB,MAAO,GACXhtB,EAAgBxY,OACb,kBAAC,GAAD,CACIqY,aAAcG,EACdhJ,KAAM0Q,IAGV,uFCrDvBsyB,GAA0C,SAAC,GAA+D,IAAD,IAA5DC,EAA4D,EAA5DA,UAAwBnI,EAAoC,EAAjD7mB,YAAqB8mB,EAA4B,EAA5BA,sBAChF1/B,EAAE,OAAG4nC,QAAH,IAAGA,IAAazT,cAAoC8D,WAC9CkG,EAAiBhmB,qBAAW1Z,GAAYL,SAA9CO,KAGR,GAFwBC,aAAY,qBAAGgR,SAA/BW,YACa3R,aAAY,qBAAGoH,YAA5BA,SACyCpH,aAAY,SAACC,GAAD,OAA6BA,EAAM2O,iBAAxFG,EAAR,EAAQA,gBAAiB0H,EAAzB,EAAyBA,oBACnBzU,EAAWuW,cAGjB/iB,IAAMsoB,WAAU,WAAO,IAAD,EAClB9b,EAASiI,GAAcC,QACvBlI,EAAS0Q,GAAWqB,QAAX,UAAmBhF,EAAgB,UAAnC,aAAmB,EAAoBuB,kBAKjD,CAACtO,EAAUZ,EAAI0/B,EAAuB/xB,IACzC,IAAMk6B,EAASzzC,IAAMuL,SACjB,yBAAM,UAACgO,EAAgB,UAAjB,aAAC,EAAoBiyB,iBAA6B,OAAZzB,QAAY,IAAZA,OAAA,EAAAA,EAAcj/B,QAAS/B,GAAMY,SACzE,CAAC4P,EAAiBwwB,IAGhBS,EAAgBxqC,IAAM6K,YAAN,yCAClB,WAAO8P,EAA0BiH,GAAjC,wBAAA5U,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAGXyK,EACW,YAAb2H,GAEmB,YAAbA,EADA,qCAGA,GAEJpd,EAZV,UAYoB+U,EAAgB,GAAG+K,cAZvC,cAY0D/K,EAAgB,GAAGsB,aAZ7E,cAY+Ff,GACvFP,EAAgB,GAAGkB,cAb3B,SAiBQjO,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBAjBjB,SAkB+BrS,MAAM,GAAD,OAAIrB,oCAAJ,OAAqC6L,GAArC,OAA4CU,EAAY/O,IAAMiW,GAlBlG,cAkBc1U,EAlBd,0BAqByCA,EAAS4U,OArBlD,QAqBkBC,EArBlB,OAsBYC,KAAOD,EAAgBxd,EAAO,QAtB1C,kDAwBYgI,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAxBxE,0DA2BQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BA3BpE,iEADkB,wDA+BlB,CAACvD,IA4BCgY,GAzBaxkB,IAAM6K,YAAN,wBAAkB,uCAAAmC,EAAA,6DAC3B6U,EAD2B,gBAE1BlV,GAAU6C,kBAFgB,SAM7BhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANoB,SAQNrS,MAAM,GAAD,OACrBrB,mCADqB,8CACqCmL,EAAgB,UADrD,aACqC,EAAoB3N,IACjFiW,GAVyB,cAQvB1U,EARuB,yBAcIA,EAAS4U,OAdb,OAcnBC,EAdmB,OAenBL,EAfmB,UAeJpI,EAAgB,UAfZ,aAeJ,EAAoB+K,cACzCrC,KAAOD,EAAgBL,EAAe,QAhBb,kDAkBzBnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAlBnC,0DAqB7BvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BArB/B,iEAuBlC,CAACvD,EAAU+M,IAEiB,OAAG8xB,QAAH,IAAGA,IAAU,CACxC,CAAE7mC,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAM,mBAGlC,OAAKV,EAAgBxY,OAKjB,kBAAC,EAAD,CAAYmhC,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IAEjB,kBAAC,IAAM7kB,SAAP,KACI,kBAACmD,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,KACI,yBAAKjD,UAAU,yCACX,kBAACkD,EAAUE,iBAAX,OAEJ,yBAAKpD,UAAU,oBACV2Z,EAAgBxY,OAAS,KACrB,UAAAwY,EAAgB,UAAhB,eAAoBiyB,gBACqC,UAA1D,UAAAjyB,EAAgB,UAAhB,eAAoBiyB,cAAckI,qBAC9B,kBAAChxC,EAAD,CACI9C,UAAU,iBACVuD,QAAS,kBAAMqnC,EAAcjxB,EAAgB,GAAI,aAEjD,kBAAC,KAAD,CAAMhW,KAAM,GAAIC,YAAa,IAC7B,8CAGJ,kBAACd,EAAD,CACI9C,UAAU,iBACVuD,QAAS,kBAAMqnC,EAAcjxB,EAAgB,GAAI,aAEjD,kBAAC,KAAD,CAAMhW,KAAM,GAAIC,YAAa,IAC7B,kDAgBxB,kBAACV,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,KACI,yBAAK9D,UAAU,uCAAf,iBAEJ,kBAACkD,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAW,EAAG/D,UAAU,gBAChC,kBAAC,IAAD,CAAS2mC,MAAO,GACZ,kBAAC,GAAD,KACKhtB,EAAgBxY,OACb,kBAAC,GAAD,CACIqY,aAAcG,EACdq4B,aAAW,EACXrhC,KAAM0Q,IAGV,+DAIPwyB,GACG,kBAAC/wC,EAAD,CACIS,QAnJxB,kBAAM0K,OAAO8lC,KAAK,yCAA0C,WAoJpC/mC,OAAO,SACP0f,UAAW/S,EAAgBxY,QAE3B,iDAxEjC,kBAAC,IAAD,CAAUmC,GAAG,+BAsFfwgC,GAAelkC,IAAOC,IAAV,yTC/LZm0C,GAAoC,WAC7C,IAAQrpC,EAASvK,IAAM+jB,WAAW1Z,GAAYL,SAAtCO,KAER,OAAW,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMY,OAAS,kBAAC,GAAD,CAA2BY,KAAMA,IAAW,kBAAC,GAAD,OCY/Eo5B,GAAqBnkC,IAAOC,IAAV,6ZAqBXo0C,GAAyB,WAClC,IAAMrvB,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAMpM,OAAOjN,SAAS0+B,OAIlD,EAAkCt/B,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACA,EAAoC5D,IAAMglB,SAAS,IAAnD,oBAAOrP,EAAP,KAAmBo9B,EAAnB,KACQxoC,EAASvK,IAAM+jB,WAAW1Z,GAAYL,SAAtCO,KACR,EAA2BC,aAAY,SAACC,GAAD,OAA6BA,EAAM2K,YAAlEA,EAAR,EAAQA,SAAU7E,EAAlB,EAAkBA,KACV7O,EAAWqmB,cAAXrmB,OAeF2hC,EAbmBrjC,IAAMuL,SAAQ,WACnC,cAAQhB,QAAR,IAAQA,OAAR,EAAQA,EAAMO,MACV,KAAK/B,GAAMG,MACX,KAAKH,GAAMY,OACP,OAAOyL,EACX,KAAKrM,GAAMM,eACX,KAAKN,GAAMO,2BACP,OAAO6F,kBAAOiG,EAAU,CAAEhK,UAAWb,EAAKa,YAC9C,QACI,MAAO,MAEhB,CAACgK,EAAU7K,IAE2BgQ,MAAK,SAACvN,EAAGwN,GAAJ,OAAU/H,KAAKhF,MAAM+M,EAAEC,aAAehI,KAAKhF,MAAMT,EAAEyN,gBAE3FjO,EAAWuW,cACXrN,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,IAAY8L,MAAM/L,GAAgBsY,MAAQ,IAAG,CAACtY,IAEvF1B,IAAMsoB,WAAU,WACZ9b,EAASiJ,GAAcf,KAAKgB,EAAYC,MACzC,CAACnJ,EAAUkJ,IAEd,IAYMy9B,EAAiB,yCAAG,iCAAAnmC,EAAA,6DAChB6U,EADgB,gBAEflV,GAAU6C,kBAFK,SAMlBhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANS,SAQKrS,MAAM,GAAD,OAAIrB,mCAAJ,qCAAuEyT,GARjF,cAQZ1U,EARY,yBAWeA,EAAS4U,OAXxB,OAWRC,EAXQ,OAYO,WACrBC,kBAAOD,EAAgBL,gBAbT,kDAednV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAf9C,0DAkBlBvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAlB1C,iEAAH,qDAsBvB,OACI,kBAAC,EAAD,CAAYmyB,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACrB,kBAAC1hB,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,KAEI,wBAAIjD,UAAU,iBAAd,gBAEA,kBAAC,KAAD,CACIm+B,cAAe,CAAE1c,UAAW,GAAIC,QAAS,IACzC0c,SAAQ,yCAAE,WAAOjyB,GAAP,UAAAiB,EAAA,sDACNikC,IAASC,yBAAwB,WAtCxC,IAAC/hC,EAuCU5N,EAAU,OAAQ,GAvC5B4N,EAwCuB,CAAEkS,UAAWtV,EAAOsV,UAAWC,QAASvV,EAAOuV,SAvCxF9U,EAASiJ,GAAcf,KAAKgB,EAAYC,EAAYxG,OAoCtB,2CAAF,wDAOP,YAA+B,IAA5BovB,EAA2B,EAA3BA,aAAcxyB,EAAa,EAAbA,OACd,OACI,0BAAMiyB,SAAUO,GACZ,0CACA,2BAAO3+B,UAAU,SAAjB,cAEI,kBAAC,KAAD,CAAO+E,KAAK,OAAOH,KAAK,eAE5B,2BAAO5E,UAAU,SAAjB,YAEI,kBAAC,KAAD,CAAO+E,KAAK,OAAOH,KAAK,aAE5B,kBAAC7B,GAAD,CACIwB,MAAO,CACHusC,OAAQ,yBACR5rC,aAAc,MACdqsC,aAAc,GAElB7kB,UAAWvgB,EAAOuV,QAAQvgB,SAAWgL,EAAOsV,UAAUtgB,OACtD4D,KAAK,UAPT,gBAiBxB,kBAAC7B,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MAhHK,CAAC,CAAE7C,MAAO,EAAGwD,KAAM,iBAiHxBb,UAAWA,EACXC,aAAcA,EACdG,aAtFC,SAACX,GAClB2vC,EAAc3vC,EAAEwJ,OAAOnL,QAsFPuC,aAnFC,WACjBwI,EAASiJ,GAAcf,KAAKgB,EAAYC,KAmFxBlU,MAAOkU,EACP7R,YAAU,EACVG,qBAAmB,EACnBC,aAAcivC,IAElB,kBAACrwC,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACXlD,EAAgBtiC,OACb,kBAAC,GAAD,CAAeqU,SAAUiuB,EAAiB9yB,KAAMA,IAEhD,2DCnJ9BmzB,GAAelkC,IAAOC,IAAV,yTA+CLq0C,IAhCqBt0C,IAAOC,IAAV,mSAgC4C,SAAC,GAA8B,IAAD,EAA3BuS,EAA2B,EAA3BA,QAAS2I,EAAkB,EAAlBA,YACnF,EAA8B3a,IAAM+jB,WAAW1Z,GAAYL,SAAnDG,EAAR,EAAQA,YAAaI,EAArB,EAAqBA,KACfqH,EAAWpH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YACxDgK,EAAiBpR,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAAhEI,aACFpP,EAAWuW,cAEXnX,EAAE,UAAGoG,EAAQpG,UAAX,QAAiBm0B,cAAoC8D,WAE7D,EAA4B7e,mBAAS,IAArC,oBAAOjZ,EAAP,KAAe+3B,EAAf,KAEMv0B,EAAqB,GAE3BqM,EAAapH,SAAQ,SAAC1G,GAAD,OACjByB,EAAQ1O,KAAK,CAAEY,MAAOqM,EAASlC,GAAIgsB,MAAO9pB,EAAS+nB,UAAY,IAAM/nB,EAASuW,cAGlF,IAAM0f,EAA6B,GAEnC/xB,EAAQ+xB,iBAAiBvvB,SAAQ,SAACjK,GAAD,OAC7Bw5B,EAAiBljC,KAAK0J,EAAKi4B,gBAAgB3M,UAAY,IAAMtrB,EAAKi4B,gBAAgBne,aAGtFjX,QAAQ01B,IAAI,WAAY9wB,GACxB5E,QAAQ01B,IAAI,cAAenoB,GAM3B,IAAMqpB,EAAYhkC,IAAMuL,SAAQ,WAC5B,OAAOwG,GAAiBC,EAASzH,KAElC,CAACyH,EAASA,EAAQE,cAAe3H,IAU9B05B,GARSjkC,IAAMuL,SACjB,mBACI,OAACoP,QAAD,IAACA,OAAD,EAACA,EAAaupB,mBACV,OAAJ35B,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMY,QACrBqI,EAAQE,gBAAkB/M,EAAgByB,WAC9C,CAAC+T,EAAa3I,EAASzH,IAGHvK,IAAM6K,YAAN,yCACpB,WAAOgF,GAAP,UAAA7C,EAAA,0DACQgF,EADR,mBAEYA,EAAQE,gBAAkBrC,EAFtC,uBAGYmC,EAAQE,cAAgBrC,EAHpC,SAIkBrD,EAASiJ,GAAcwB,OAAO,IAAIkb,GAAmBngB,KAJvE,WAKgBpG,EALhB,gCAK0BY,EAASiJ,GAAcU,UAAUvK,IAL3D,2CADoB,sDAUpB,CAACY,EAAUwF,KAGTmyB,EAAoB,yCAAG,6BAAAn3B,EAAA,6DACnBo3B,EAAqB,CACvBx4B,GAAIoG,EAAQpG,GACZsG,cAAeF,EAAQE,cACvBwJ,UAAW,IAGf5P,OAAO2b,KAAK1b,GAAQyI,SAAQ,SAAC7T,GACzByjC,EAAc1oB,UAAU7a,KAAKkL,EAAOpL,GAAP,UARR,SAWnB6L,EAASiJ,GAAcwB,OAAO,IAAIkb,GAAmBiS,KAXlC,WAYrBx4B,EAZqB,gCAYXY,EAASiJ,GAAcU,UAAUvK,IAZtB,2CAAH,qDAepBy4B,EAAoBrkC,IAAM6K,aAAY,WACxC2B,EAAS0Q,GAAWa,qBACrB,CAACvR,IAEJxM,IAAMsoB,WAAU,WACZ+b,MAED,CAAC73B,EAAU63B,IAEd,IAAMjuB,EAAuBpW,IAAMuL,SAC/B,qCAAM,CACF,CAAEwkB,SAAU,WAAYtuB,MAAK,oBAAEmZ,gBAAKhJ,EAASA,SAAU,CAAEhG,GAAIoG,EAAQ5G,mBAAxC,aAAE,EAAoD5G,YAAtD,QAA8D,OAC3F,CAAEurB,SAAU,gBAAiBtuB,MAAOqY,GAAW9H,EAAQyI,cACvD,CAAEsV,SAAU,iBAAkBtuB,MAAK,OAAEuQ,QAAF,IAAEA,OAAF,EAAEA,EAASwF,eAC9C,CAAEuY,SAAU,cAAetuB,MAAK,OAAEuQ,QAAF,IAAEA,GAAF,UAAEA,EAAS+F,eAAX,aAAE,EAAkBgc,YACpD,CACIhE,SAAU,sBACVtuB,OAAO,iBAACuQ,QAAD,IAACA,OAAD,EAACA,EAASwF,qBAAV,QAA2B,IAA3B,iBAAiCxF,QAAjC,IAAiCA,GAAjC,UAAiCA,EAAS+F,eAA1C,aAAiC,EAAkBgc,kBAAnD,QAAiE,IAE5E,CACIhE,SAAU,0BACVtuB,MAAO,OAGX,CACIsuB,SAAU,aACVtuB,MAAK,UAAEuQ,EAAQuyB,4BAAV,QAAkC,IAG3C,CACIxU,SAAU,YACVtuB,MAAK,UAAEuQ,EAAQwyB,0BAAV,QAAgC,IAGzC,CACIzU,SAAU,SACVtuB,MAAO8E,GAAmByL,EAAQE,eAC7B+D,QAAQ,WAAY,aACpBA,QAAQ,kBAAmB,qBAEpC,CACI8Z,SAAU,eACVtuB,MAAO,YAAK,IAAIgjC,IAAIV,IAA2B30B,KAAK,UAG5D,CAAC4C,EAASJ,EAASA,WAGvB,OACI,kBAAC,GAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAKrO,KAAM,GAAImhC,GAAI,GACdtuB,EAAQ7R,KAAI,WAAsBsS,GAAO,IAA1BkZ,EAAyB,EAAzBA,SAAUtuB,EAAe,EAAfA,MACtB,OACI,yBAAK7B,UAAU,aAAae,IAAKkW,GAC7B,2BAAIkZ,GACJ,8BAAOtuB,QAKvB,kBAAC,IAAD,CAAK8B,KAAM,GAAImhC,GAAI,EAAG9kC,UAAU,mDA8D5B,yBAAKA,UAAU,mCACX,yBAAKA,UAAU,QACX,uBAAGA,UAAU,QAAb,eACA,2BAAIsT,GAAelB,EAAQ2T,YAK1C3T,EAAQE,gBAAkB/M,EAAgBqB,aACtC,CAACuC,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,YAAYmiB,SAApD,OAA6DnhB,QAA7D,IAA6DA,OAA7D,EAA6DA,EAAMO,OAChE,yBAAK3G,MAAO,CAAEggB,MAAO,OAASvkB,UAAU,uCACpC,gDACA,6BACI,kBAAC,KAAD,CACIolC,mBAAmB,EACnBC,SAAO,EACP11B,QAASA,EACT1K,SAAU,SAACkH,GACP+3B,EAAU/3B,QAMlC,yBAAKnM,UAAU,eACVokC,GACG,kBAACthC,EAAD,CAAqBS,QAAS8gC,EAAgB/W,UAAK7oB,EAAWc,EAAgByB,WAC1E,yCAQPE,GAAiCkL,EAAQE,eAAenR,OAAS,GAC9DoJ,EAAY6H,EAAQ5G,UAAW,YAC5B4G,EAAQ+xB,iBAAiBhjC,OACxB,kBAAC,GAAD,CACInB,UAAU,OACVupB,iBAAkB,kBACd,kBAACzmB,EAAD,CAAqBiC,KAAK,UACtB,kDAIR,kBAACmkB,GAAD,CAAoBlpB,UAAU,yBAC1B,kBAAC,GAAD,CAAyBu4B,SAAO,IAChC,0BAAMv4B,UAAU,QAAQoS,EAAQE,cAAc+D,QAAQ,IAAK,OAE9DnP,GAAiCkL,EAAQE,eAAe3N,KAAI,SAACsL,EAAQgH,GAAT,OACzD,kBAACiS,GAAD,CACIlpB,UAAU,wBACVuD,QAAS8gC,EAAgB/W,UAAK7oB,EAAWwL,GACzClP,IAAKkW,GAEL,kBAAC,GAAD,CAAyBshB,SAAS,IAClC,0BAAMv4B,UAAU,QAAQiQ,EAAOoG,QAAQ,IAAK,WAIxD,MACPjE,EAAQE,gBAAkB/M,EAAgBqB,aACtC,CAACuC,GAAMK,WAAYL,GAAMI,QAASJ,GAAMQ,YAAYmiB,SAApD,OAA6DnhB,QAA7D,IAA6DA,OAA7D,EAA6DA,EAAMO,OAChE,6BACI,kBAACpI,EAAD,CACI4pB,UAAWvgB,EAAOhL,OAClBnB,UAAU,WACVuD,QAASghC,EAAqBjX,UAAK7oB,IAEnC,uDCtTnB0vC,GAAmC,SAAC,GAK1C,IAAD,MAJFP,EAIE,EAJFA,UACAnK,EAGE,EAHFA,UACagC,EAEX,EAFF7mB,YACA8mB,EACE,EADFA,sBAEM1/B,EAAE,OAAG4nC,QAAH,IAAGA,IAAazT,cAAoC8D,WACpC7xB,EAAYxH,aAAY,SAACC,GAAD,OAA6BA,EAAM2K,YAA3EuL,eACR,EAIInW,aAAY,SAACC,GAAD,OAA6BA,EAAM2O,gBAH9BuB,EADrB,EACIqG,gBACAzH,EAFJ,EAEIA,gBACA0H,EAHJ,EAGIA,oBAEJ,EAA8BjhB,IAAM+jB,WAAW1Z,GAAYL,SAAnDO,EAAR,EAAQA,KAAMJ,EAAd,EAAcA,YACRqC,EAAWuW,cAEXwnB,EAAavqC,IAAM6K,YAAN,yCACf,WAAOmpC,GAAP,0BAAAhnC,EAAA,6DACU6U,EADV,gBAEWlV,GAAU6C,kBAFrB,SAMQhD,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAA5C,yBANjB,SAQ+BrS,MAAM,GAAD,OACrBrB,mCADqB,oCACqC4D,GAAWA,EAAQpG,IAChFiW,GAVZ,cAQc1U,EARd,yBAcyCA,EAAS4U,OAdlD,OAckBC,EAdlB,OAeqC+lB,EAAUiM,EAA3BxR,gBACF7gB,EAhBlB,iBAgBiComB,QAhBjC,IAgBiCA,OAhBjC,EAgBiCA,EAAOzjB,qBAhBxC,yBAgB4DyjB,QAhB5D,IAgB4DA,OAhB5D,EAgB4DA,EAAOlS,UAhBnE,mBAgBgFtrB,QAhBhF,IAgBgFA,OAhBhF,EAgBgFA,EAAM8Z,UAC1EpC,kBAAOD,EAAgBL,EAAe,QAjBlD,kDAmBYnV,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,sBAnBxE,0DAsBQvD,EAASD,GAAmBuD,OAAOtH,GAAkBuH,MAAO,2BAtBpE,iEADe,sDA0Bf,CAACvD,EAAUwF,EAASzH,IAGxBvK,IAAMsoB,WAAU,WACR1c,GAAIY,EAASiJ,GAAcU,UAAUvK,IACzCY,EAASiI,GAAcC,QAElB42B,GACD9+B,EAAS8N,GAAkBixB,wBAAyB3/B,MAEzD,CAACY,EAAUZ,EAAI0/B,IAElBtrC,IAAMsoB,WAAU,WACRtW,IAAY7H,EAAY6H,EAAQ5G,UAAW,SAAW4G,EAAQC,qBAAR,OAA8B1H,QAA9B,IAA8BA,OAA9B,EAA8BA,EAAMqB,MAC1FY,EACID,GAAmBuD,OAAOtH,GAAkBqa,QAAS,gDAEzDrW,EAAS2I,GAAee,SACxB3V,EAAQM,KAAK,gCAElB,CAACmR,EAASzH,EAAMJ,EAAaqC,IAEhC,IAAMgY,EAAyB,OAAG6mB,QAAH,IAAGA,IAAU,CACxC,CAAE7mC,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAM,6BAC9B,CACIzV,KAAK,GAAD,OAAMwN,GAAWA,EAAQ+F,SAAW/F,EAAQ+F,QAAQvT,MAAS,kBACjEyV,KAAMpM,OAAOjN,SAAS0+B,OAIxB2U,EAAkB,OAAGjiC,QAAH,IAAGA,GAAH,UAAGA,EAAS+F,eAAZ,aAAG,EAAkBkY,oBAE7C,OACI,kBAAC,EAAD,CAAYiS,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACpBxS,GACG,kBAAC,IAAMrS,SAAP,KACI,kBAACmD,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC8gC,GAAD,KACI,yBAAK/jC,UAAU,0CACX,kBAACkD,EAAUE,iBAAX,MACA,yBAAKpD,UAAU,sBACX,wBAAIA,UAAU,kBAAiB,UAAAoS,EAAQ+F,eAAR,eAAiBvT,OAAQ,kBACxD,0BAAM5E,UAAU,QACZ,gDADJ,qBACmC+a,QADnC,IACmCA,OADnC,EACmCA,EAAa/O,UADhD,QACsD,SAI9D,yBAAKhM,UAAU,oBACV+a,IACI,CAACxV,EAAgBqB,YAAYklB,SAAS1Z,EAAQE,iBAC9CyI,EAAY6wB,eACsC,UAAxC,OAAX7wB,QAAW,IAAXA,OAAA,EAAAA,EAAa6wB,cAAckI,qBACvB,kBAAChxC,EAAD,CACI9C,UAAU,sBACVuD,QAAS,kBACL0S,GAAgBq+B,cACZliC,EAAQ0P,UADZ,UAEO/G,EAAY2J,cAFnB,cAGQ3J,EAAYE,aAHpB,cAIUf,GAAWa,EAAYF,cAC7BjO,EACA,aAIR,kBAAC,KAAD,CAAMjJ,KAAM,GAAIC,YAAa,IAbjC,eAiBA,kBAACd,EAAD,CACI9C,UAAU,sBACVuD,QAAS,kBACL0S,GAAgBq+B,cACZliC,EAAQ0P,UADZ,UAEO/G,EAAY2J,cAFnB,cAGQ3J,EAAYE,aAHpB,cAIUf,GAAWa,EAAYF,cAC7BjO,EACA,aAIR,kBAAC,KAAD,CAAMjJ,KAAM,GAAIC,YAAa,IAbjC,gBAiBR,kBAACd,EAAD,CACI9C,UAAU,sBACVuD,QAAS,SAACC,GACNA,EAAEC,iBACFknC,EAAWv4B,KAGf,kBAAC,IAAD,CAAMzO,KAAM,GAAIC,YAAa,IAC7B,4CAKhB,kBAACV,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,KACI,yBAAK9D,UAAU,uCACX,yDACA,2BAAKoS,EAAQ+yB,YAAc/yB,EAAQ+yB,WAAWhkC,QAAW,MAAzD,mBAGR,kBAAC+B,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAW,EAAG/D,UAAU,gBAChC,kBAAC,IAAD,CAAS2mC,MAAO,GACX8C,EACG,kBAAC,GAAD,CACIjwB,aAAcG,EACdhJ,KAAM0Q,IAEVgzB,EACA,kBAAC,GAAD,CACIjiC,QAASA,EACT2I,YAAaA,IAGjB,kBAAC,GAAD,CACI3I,QAASA,EACT2I,YAAaA,YC3LhDw5B,GAAuC,WAChD,IAAM3nC,EAAWuW,cACjB,EAA0BiC,oBAAS,GAAnC,oBAAcovB,GAAd,WACQt5B,EAAkBilB,cAAlBjlB,cACF1B,EAAe5O,aAAY,SAACC,GAAD,OAA6BA,EAAM2O,gBAC5D1X,EAAWqmB,cAAXrmB,OACR,EAA6B1B,IAAMuL,SAC/B,uBAAO,CACHmK,YAAc/T,QAAkBD,GAAgBsY,MAAQ,EACxDrV,KAAI,WAAIhD,QAAkBD,GAAgBiD,YAAtC,QAA8C,KAEtD,CAACjD,IALGgU,EAAR,EAAQA,WAAY/Q,EAApB,EAAoBA,KAOKgW,EAAgBvB,EAAjC4H,gBAcR,OAZAsH,qBAAU,WACO,IAAT3jB,EACA6H,EAAS8N,GAAkBixB,uBAAuBzwB,GAAe,kBAAMs5B,GAAS,OAChE,IAATzvC,GACP6H,EAAS8N,GAAkB2vB,4BAA4BnvB,EAAenW,GAAM,kBAAMyvC,GAAS,SAEhG,CAAC5nC,EAAUsO,EAAepF,IAOzB,kBAAC,IAAM/V,SAAP,KACc,IAATgF,EACG,kBAAC,GAAD,CAAyBmS,SAAQ,OAAE6D,QAAF,IAAEA,OAAF,EAAEA,EAAaG,cAAe0J,YAAa,GAAI8mB,uBAAqB,IAC5F,IAAT3mC,EACA,kBAAC,GAAD,CAAwB6uC,UAAS,OAAE74B,QAAF,IAAEA,OAAF,EAAEA,EAAaG,cAAe0J,YAAa,GAAI8mB,uBAAqB,IAErG,kBAAC,GAAD,CACIjC,UAAoB,IAAT1kC,EACX6uC,UAAS,OAAE74B,QAAF,IAAEA,OAAF,EAAEA,EAAaG,cACxB0J,YAAa,GACb8mB,uBAAqB,M,qBCxCnC+I,GAAY,eAAClwB,EAAD,uDAAS,EAAG2S,EAAZ,uDAAoB,UAAW3yB,EAA/B,uDAAuC,QAAvC,MAAoD,CAClEgrC,YAAahrB,EACbmpB,YAAaxW,EACbwd,YAAanwC,IAGXowC,GAAO,SAAC,GAAD,IAAGx0C,EAAH,EAAGA,SAAH,OACT,kBAAC,IAAD,CACIoE,MAAO,CACHmjB,QAAS,OACTktB,cAAe,QAGlBz0C,IAIH00C,GAAU,SAAC,GAAD,IAAGjwC,EAAH,EAAGA,KAAM/C,EAAT,EAASA,MAAOizC,EAAhB,EAAgBA,OAAhB,OACZ,kBAAC,IAAD,CACIvwC,MAAK,2BACDmjB,QAAS,OACTktB,cAAe,MACfrwB,MAAO,MACPgtB,aAAc,EACd9qB,YAAa,EACbrhB,QAAS,aACNqvC,MACAK,IAGP,kBAAC,IAAD,CACIvwC,MAAO,CACH66B,gBAAiB,QACjB7a,MAAO,IACPkC,YAAa,IAGjB,kBAAC,IAAD,CAAMliB,MAAO,CAAE00B,SAAU,KAAOr0B,EAAKqmC,gBAEzC,kBAAC,IAAD,CACI1mC,MAAO,CACH66B,gBAAiB,QACjBlG,KAAM,IAGV,kBAAC,IAAD,CAAM30B,MAAO,CAAE00B,SAAU,KAAO,GAAKp3B,MAK3CkzC,GAAY,SAAC,GAAD,IAAGnwC,EAAH,EAAGA,KAAM2f,EAAT,EAASA,MAAO2U,EAAhB,EAAgBA,KAAhB,OACd,kBAAC,IAAD,CACI30B,MAAO,CACH66B,gBAAiB,QACjBh6B,QAAS,YACTmf,QACAgrB,YAAa,EACb7B,YAAa,UACbxU,SAGJ,kBAAC,IAAD,CAAM30B,MAAO,CAAE00B,SAAU,KAAOr0B,EAAKqmC,iBAIvC+J,GAAY,SAAC,GAAD,IAAGnzC,EAAH,EAAGA,MAAO0iB,EAAV,EAAUA,MAAO2U,EAAjB,EAAiBA,KAAjB,OACd,kBAAC,IAAD,CACI30B,MAAO,CACHa,QAAS,YACT6vC,gBAAiB,EACjBC,iBAAkB,EAClBC,gBAAiB,UACjBC,iBAAkB,UAClB7wB,QACA2U,SAGJ,kBAAC,IAAD,CAAM30B,MAAO,CAAE00B,SAAU,KAAOp3B,KAU3BwzC,GAA2B,SAAC,GAAwC,IAAD,MAArCt6B,EAAqC,EAArCA,YAAa/I,EAAwB,EAAxBA,SAAUwE,EAAc,EAAdA,QACxD87B,EAAY3mC,mBAAQ,kBAAM6K,GAAW,sBAAuBA,IAAS,CAACA,IACtEC,EAAS67B,EAAa97B,EAAoBosB,gBAAmBpsB,EAC7D8+B,EAAU3pC,mBAAQ,8CAAMqP,gBAAKhJ,EAAU,CAAEhG,GAAE,OAAEwK,QAAF,IAAEA,OAAF,EAAEA,EAAShL,mBAApC,aAAM,EAA4C5G,YAAlD,QAA0D,QAAO,CAACoN,EAAUwE,IAC9FvD,GAAO,IAAIJ,MAAO0uB,cAElBxN,EAAcpoB,mBAAQ,WAAO,IAAD,IAC9B,MAAoC,sBAA7BoP,EAAYE,aAAZ,UACEF,EAAYE,aADd,wBACiCzE,SADjC,iBACgC,EAAsB2B,eADtD,aACgC,EAA+BvT,KAD/D,eAC0E0wC,GAC3Ev6B,EAAYE,eACnB,CAACzE,EAAS8+B,EAASv6B,EAAYE,eAElC,OACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAM1W,MAAOuwC,GAAOrlC,MAChB,kBAAC,IAAD,CAAO4U,IAAKkxB,KAAMhxC,MAAO,CAAEy0B,OAAQ,GAAIzU,MAAO,MAC9C,kBAAC,IAAD,CAAMhgB,MAAOuwC,GAAOU,QAChB,kBAAC,IAAD,CAAMjxC,MAAO,CAAEC,WAAY,OAAQy0B,SAAU,GAAIwc,UAAW,SAAUlE,aAAc,IAApF,yCAGCe,GAAa,kBAAC,IAAD,CAAM/tC,MAAO,CAAEkxC,UAAW,SAAUxc,SAAU,GAAIsY,aAAc,IAAM+D,GACpF,kBAAC,IAAD,CAAM/wC,MAAO,CAAEkxC,UAAW,SAAUxc,SAAU,GAAIsY,aAAc,IAC3Dx2B,EAAYE,eAGrB,kBAAC,IAAD,CAAM1W,MAAO,CAAE2yB,MAAO,UAAWue,UAAW,SAAUxc,SAAU,KAAhE,WACA,kBAAC,IAAD,CACI10B,MAAO,CACHmjB,QAAS,OACTktB,cAAe,MACfc,eAAgB,gBAChBtW,gBAAiB,QACjBh6B,QAAS,YACTC,UAAW,GACXksC,aAAc,EACdtY,SAAU,KAGd,kBAAC,IAAD,MACA,kBAAC,IAAD,CAAM10B,MAAO,CAAE2yB,MAAO,YAAtB,yBAAgDnc,EAAY/O,UAA5D,QAAkE,QAEtE,kBAAC,IAAD,KACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAS8oC,OAAQ,CAAEruB,YAAa,IAAM7hB,KAAK,OAAO/C,MAAOkZ,EAAY2J,gBACrE,kBAAC,GAAD,CAAS9f,KAAK,eAAe/C,MAAK,UAAEkZ,EAAYo3B,iBAAd,QAA2B,SAEjE,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI2C,OAAQ,CAAEruB,YAAa,IACvB7hB,KAAK,UACL/C,MAAK,iBAAE4U,QAAF,IAAEA,OAAF,EAAEA,EAAQof,0BAAV,QAAgC,QAEzC,kBAAC,GAAD,CAASjxB,KAAK,eAAe/C,MAAOqY,GAAWa,EAAYF,gBAE/D,kBAAC,GAAD,KACI,kBAAC,GAAD,CAASi6B,OAAQ,CAAEruB,YAAa,IAAM7hB,KAAK,eAAe/C,MAAK,OAAE4U,QAAF,IAAEA,OAAF,EAAEA,EAAQsf,gBAGjF,kBAAC,IAAD,CACIxxB,MAAO,CACHmjB,QAAS,OACTktB,cAAe,MACfc,eAAgB,gBAChBtW,gBAAiB,QACjBh6B,QAAS,YACTqhB,YAAa,EACbphB,UAAW,GACXksC,aAAc,EACdtY,SAAU,GACV/B,MAAO,YAGX,kBAAC,IAAD,eAEJ,kBAAC,IAAD,CACI3yB,MAAO,CACHmjB,QAAS,OACTktB,cAAe,MACfrD,aAAc,IAGlB,kBAAC,GAAD,CAAW3sC,KAAK,MAAM2f,MAAO,KAC7B,kBAAC,GAAD,CAAW3f,KAAK,cAAcs0B,KAAM,IACpC,kBAAC,GAAD,CAAWt0B,KAAK,WAAW2f,MAAO,KAClC,kBAAC,GAAD,CAAW3f,KAAK,OAAO2f,MAAO,KAC9B,kBAAC,GAAD,CAAW3f,KAAK,SAAS2f,MAAO,MAEpC,kBAAC,IAAD,CACIhgB,MAAO,CACHggB,MAAO,OACP6a,gBAAiB,QACjB1X,QAAS,OACTktB,cAAe,MACf5b,OAAQ,MAGZ,kBAAC,GAAD,CAAWn3B,MAAM,IAAI0iB,MAAO,KAC5B,kBAAC,GAAD,CAAW1iB,MAAOkyB,EAAamF,KAAM,IACrC,kBAAC,GAAD,CAAWr3B,MAAOkZ,EAAY+2B,SAAUvtB,MAAO,KAC/C,kBAAC,GAAD,CAAW1iB,MAAOywC,EAAa97B,EAAoB2B,QAAQ4N,MAAQ,MAAOxB,MAAO,KACjF,kBAAC,GAAD,CAAW1iB,MAAOkZ,EAAYlB,OAAQ0K,MAAO,MAEjD,kBAAC,IAAD,CAAMhgB,MAAO,CAAEc,UAAW,GAAI4zB,SAAU,KAAxC,gDACA,kBAAC,IAAD,CAAM10B,MAAO,CAAEc,UAAW,GAAI4zB,SAAU,IAAxC,iBACqBhmB,EADrB,sDAaV6hC,GAASa,IAAWzlC,OAAO,CAC7BT,KAAM,CACFmmC,WAAY,GACZC,cAAe,GACfC,kBAAmB,IAGvBN,OAAQ,CACJjE,aAAc,M,8BjB1NV1C,K,qBAAAA,E,oCAAAA,E,sBAAAA,E,8CAAAA,E,+CAAAA,E,wBAAAA,E,sBAAAA,E,oBAAAA,E,8BAAAA,E,cAAAA,E,kCAAAA,E,yCAAAA,E,sBAAAA,E,kCAAAA,E,oBAAAA,E,gCAAAA,E,oCAAAA,E,4BAAAA,E,sBAAAA,E,oBAAAA,E,wCAAAA,E,4BAAAA,E,4CAAAA,E,kCAAAA,E,oBAAAA,E,oBAAAA,E,sBAAAA,E,8BAAAA,E,UAAAA,E,kCAAAA,E,sBAAAA,E,kBAAAA,E,0CAAAA,E,oCAAAA,E,8BAAAA,E,kCAAAA,E,oBAAAA,E,8CAAAA,E,sBAAAA,E,0BAAAA,E,0BAAAA,E,oCAAAA,E,kCAAAA,E,kDAAAA,E,sBAAAA,E,kDAAAA,E,wCAAAA,E,eAAAA,Q,KAmDL,I,SkBlCKkH,GlBkCCC,IAAW,qBACnBnH,GAASoH,SAAW,aADD,eAEnBpH,GAASqH,iBAAmB,oBAFT,eAGnBrH,GAASsH,UAAY,aAHF,eAInBtH,GAASuH,sBAAwB,yBAJd,eAKnBvH,GAASwH,uBAAoB,wBALV,eAMnBxH,GAASyH,WAAa,cANH,eAOnBzH,GAAS0H,UAAY,aAPF,eAQnB1H,GAAS2H,SAAW,YARD,eASnB3H,GAAS4H,cAAgB,iBATN,eAUnB5H,GAAS6H,MAAQ,SAVE,eAWnB7H,GAAS8H,gBAAkB,mBAXR,eAYnB9H,GAAS+H,oBAAsB,sBAZZ,eAanB/H,GAASgI,UAAY,aAbF,eAcnBhI,GAASiI,gBAAkB,mBAdR,eAenBjI,GAASkI,SAAW,YAfD,eAgBnBlI,GAASmI,eAAiB,kBAhBP,eAiBnBnI,GAASoI,iBAAmB,oBAjBT,eAkBnBpI,GAASqI,aAAe,gBAlBL,eAmBnBrI,GAASsI,UAAY,aAnBF,eAoBnBtI,GAASuI,SAAW,YApBD,eAqBnBvI,GAASwI,mBAAqB,sBArBX,eAsBnBxI,GAASyI,aAAe,gBAtBL,eAuBnBzI,GAAS0I,qBAAuB,wBAvBb,eAwBnB1I,GAAS2I,gBAAkB,mBAxBR,eAyBnB3I,GAAS4I,SAAW,YAzBD,eA0BnB5I,GAAS6I,SAAW,YA1BD,eA2BnB7I,GAAS8I,UAAY,aA3BF,eA4BnB9I,GAAS+I,cAAgB,iBA5BN,eA6BnB/I,GAASgJ,IAAM,OA7BI,eA8BnBhJ,GAASiJ,gBAAkB,mBA9BR,eA+BnBjJ,GAASkJ,UAAY,aA/BF,eAgCnBlJ,GAASmJ,QAAU,WAhCA,eAiCnBnJ,GAASoJ,oBAAsB,uBAjCZ,eAkCnBpJ,GAASqJ,iBAAmB,oBAlCT,eAmCnBrJ,GAASsJ,cAAgB,iBAnCN,eAoCnBtJ,GAASuJ,gBAAkB,mBApCR,eAqCnBvJ,GAASwJ,SAAW,YArCD,eAsCnBxJ,GAASyJ,sBAAwB,yBAtCd,eAuCnBzJ,GAAS0J,UAAY,aAvCF,eAwCnB1J,GAAS2J,YAAc,eAxCJ,eAyCnB3J,GAAS4J,YAAc,eAzCJ,eA0CnB5J,GAAS6J,iBAAmB,oBA1CT,eA2CnB7J,GAAS8J,gBAAkB,mBA3CR,eA4CnB9J,GAAS+J,wBAA0B,2BA5ChB,eA6CnB/J,GAASgK,UAAY,aA7CF,eA8CnBhK,GAASiK,wBAA0B,2BA9ChB,eA+CnBjK,GAASkK,mBAAqB,sBA/CX,eAgDnBlK,GAASmK,MAAQ,SAhDE,ImBvBXC,GAAqC,SAAC,GAAwD,IAAD,EAArD9gC,EAAqD,EAArDA,QAAS+gC,EAA4C,EAA5CA,qBAAsBC,EAAsB,EAAtBA,QAChF,GADsG,EAAb1iC,OACvCrW,IAAMglB,SAAmC,KAA3F,oBAAOg0B,EAAP,KAA0BC,EAA1B,KACA,EAAoCj0B,oBAAS,GAA7C,oBAAOk0B,EAAP,KAAoBC,EAApB,KACA,EAAwDn5C,IAAMglB,SAC1D,IAAIuN,GAAuBxa,IAD/B,oBAAOqhC,EAAP,KAA6BC,EAA7B,KAGM7sC,EAAWuW,cACTnR,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACAkG,EAAatN,aAAY,SAACC,GAAD,OAA6BA,KAAtDqN,SACR,EAAkD9X,IAAMglB,SAAiB,GAAzE,oBAAO8f,EAAP,KAEMwU,GAFN,KAE+BxhC,IAAQ,UAAIA,EAASA,SAAS8C,MAAK,SAAC2+B,GAAD,OAAOA,EAAE3tC,MAAQk5B,YAA5C,aAAI,EAA4Dnf,QAOjG6zB,EAAkB,SAACx4C,GACrB,IAAMy4C,EAAoBT,EAAkBt0B,MAAM,EAAG1jB,GAAOurC,OAAOyM,EAAkBt0B,MAAM1jB,EAAQ,IACnGi4C,EAAqBQ,IAgBzB,OARAz5C,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAaE,oBACvB,CAAC7L,IAEJxM,IAAMsoB,WAAU,WACZ9b,EAASiI,GAAcC,UACxB,CAAClI,IAEA0sC,EAEI,kBAAC,GAAD,CAAalzB,OAAQkzB,EAAa1oC,MAAM,+BAA+B4Y,UAAW+vB,GAC9E,yBAAKv5C,UAAU,QAAf,0BAMR,kBAAC,IAAMD,SAAP,KAEI,kBAACmD,EAAUW,KAAX,CAAgB7D,UAAU,QACtB,kBAACkD,EAAUY,UAAX,KACI,yBAAK9D,UAAU,QACX,uFAGR,kBAAC,KAAD,CACImvB,SAAUU,GACVuX,oBAAkB,EAClBjJ,cAAe,IAAIxL,GAAuB6mB,GAC1Cpb,SA7CG,SAAChsB,EAAiCiqB,GACjDgd,EAAqBD,EAAkBzM,OAAOv6B,IAC9CqnC,EAAwBrnC,GACxBiqB,EAAQyd,eA4CK,YAA8C,IAA3Cnb,EAA0C,EAA1CA,aAAcxyB,EAA4B,EAA5BA,OAA4B,EAApB0yB,cACtB,OACI,0BAAMT,SAAUO,GACZ,yBAAK3+B,UAAU,qBACX,yBAAKA,UAAU,QACX,yDAEJ,yBAAKA,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQlO,UAAQ,EAAC7qB,MAAM,IAAvB,qBAGCmQ,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACV,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,QAKjB,kBAAC,IAAD,CAAKk6B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CACIj5B,KAAK,iBACLozB,MAAM,cACN1U,KAAMy2B,KACN5d,QAAS,IAAItpB,KACb+nB,SAAO,KAGf,kBAAC,IAAD,CAAKkE,GAAI,EAAGjB,GAAI,GACZ,0BAAMt5B,MAAO,CAAE00B,SAAU,KAAzB,iBACA,kBAAC,GAAD,CAAer0B,KAAK,gBAAgBg2B,SAAO,KAE/C,kBAAC,IAAD,CAAKkE,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAgBj5B,KAAK,kBAAkBozB,MAAM,cAAciE,QAAM,EAACrB,SAAO,MAGjF,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,UAAUozB,MAAM,UAAU4C,SAAO,EAACD,GAAG,UACrD,4BAAQjO,UAAQ,EAAC7qB,MAAM,IAAvB,qBAGCqK,OAAOoD,QAAQ0mC,IAAarxC,KAAI,oCAAEq1C,EAAF,KAAO/iC,EAAP,YAC7B,4BAAQlW,IAAKkW,EAAGpV,MAAOm4C,GAClBA,SAMrB,yBAAKh6C,UAAU,QACX,mDAEJ,yBAAKA,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,YAAYozB,MAAM,aAAa4C,SAAO,KAE9D,kBAAC,IAAD,CAAKkE,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,WAAWozB,MAAM,YAAY4C,SAAO,KAE5D,kBAAC,IAAD,CAAKkE,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,cAAcozB,MAAM,cAAc4C,SAAO,EAACD,GAAG,UAC7D,4BAAQjO,UAAQ,EAAC7qB,MAAM,IAAvB,wBAGCqK,OAAOoD,QAAQhH,IAAe3D,KAAI,oCAAEqH,EAAF,KAAMpH,EAAN,YAC/B,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,QAKjB,kBAAC,IAAD,CAAKk6B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,SAASozB,MAAM,SAAS4C,SAAO,EAACD,GAAG,UACnD,4BAAQjO,UAAQ,EAAC7qB,MAAM,IAAvB,mBAGCqK,OAAOoD,QAAQvH,IAAYpD,KAAI,oCAAEqH,EAAF,KAAMpH,EAAN,YAC5B,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,SAMrB,yBAAK5E,UAAU,QACX,gEAEJ,yBAAKA,UAAU,QACX,yBAAKA,UAAU,UACX,6BACI,kBAAC,GAAD,CAAc4E,KAAK,cAAcozB,MAAM,gBAE3C,yBAAKh4B,UAAU,QACX,kBAAC,GAAD,CAAc4E,KAAK,SAASozB,MAAM,cAI7C7rB,EAAOimB,QACJ,yBAAKpyB,UAAU,QACX,kBAAC,GAAD,CACIA,UAAU,OACV4E,KAAK,sBACLg2B,SAAO,EACPD,GAAG,cAwDf,yBAAK36B,UAAU,uCACX,yBAAKA,UAAU,IACX,0BAAMA,UAAU,QACZ,yCAEJ,8BAAOsT,GAAe6E,EAAQ4N,MAAQqzB,EAAkBj4C,UAE5D,yBAAKnB,UAAU,QACX,0BAAMA,UAAU,QACZ,iCAEJ,8BAAOsT,GAAc,OAAComC,QAAD,IAACA,IAA0B,KAEpD,yBAAK15C,UAAU,QACX,0BAAMA,UAAU,QACZ,qCAEJ,8BACKsT,GACG8lC,EAAkBj4C,OAASgX,EAAQ4N,OAAnC,OACK2zB,QADL,IACKA,IAA0B,OAK/C,yBAAK15C,UAAU,8BACX,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,uDAWhC,kBAAC7B,EAAUW,KAAX,CAAgB7D,UAAU,QACrBo5C,EAAkBj4C,OACf,yBAAKnB,UAAU,qBACX,yBAAKA,UAAU,QACX,iDAEJ,kBAACoqB,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,MACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAAwCA,EAAKH,IAAIhrB,MAAQ,MAEnE,CACI6B,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFuC,EAAUtP,UAAY,IAAMsP,EAAUxP,aAE9C,CACIvyB,OAAQ,UACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,iBACFznB,gBAAKhJ,EAAU,CAAEhG,GAAIg5B,EAAUlT,mBAD7B,aACF,EAA6CltB,SAErD,CACI3B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,qBAAGpW,IAAOqW,SACFwX,YAElB,CACIh3C,OAAQ,aACRs/B,SAAU,iBAEd,CACIt/B,OAAQ,cACRs/B,SAAU,iBACVC,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFvoB,GAAW8qB,EAAU3R,oBAE7B,CACIpwB,OAAQ,cACRs/B,SAAU,kBACVC,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFzoB,GAAWgrB,EAAU5R,qBAE7B,CACInwB,OAAQ,aACRs/B,SAAU,sBACVC,KAAK,SAAD,oGAAC,EAAC,YAAqE,IAAjDwC,EAAgD,EAAjE5Y,IAAOqW,SACZ,OACI,6BACKuC,EAAUkV,YACP,6CACClV,EAAUmV,oBAGX,8BAAOnV,EAAUmV,qBAFjB,kBAAC,KAAD,CAAGx2C,KAAM,GAAIC,YAAa,SAc9C,CACIX,OAAQ,SACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OACF,kBAAC,IAAMxsB,SAAP,KACI,kBAAC+C,EAAD,CACI9C,UAAU,iBACVuD,QAASq2C,EAAgBtsB,UAAK7oB,EAAW8nB,EAAKH,IAAIhrB,QAElD,kBAAC,KAAD,CAAQuC,KAAM,YAMlC8M,KAAM2oC,KAId,yBAAKp5C,UAAU,qBACX,qEAKZ,kBAAC,KAAD,CACImvB,SAAU,SAAChjB,GACP,OAAOA,EAAOiuC,SAAW,GAAK,CAAEA,SAAU,6CAE9Cjc,cAAe,CAAEic,UAAU,GAC3Bhc,SA3UW,WACnB8a,EAAqBE,GACrBD,OA2US,gBAAGxa,EAAH,EAAGA,aAAcvuB,EAAjB,EAAiBA,OAAjB,OACGgpC,EAAkBj4C,OAAS,GACvB,0BAAMi9B,SAAUO,GACZ,yBAAK3+B,UAAU,mCACX,kBAAC,GAAD,CAAc4E,KAAK,WAAWkiC,WAAS,EAAC9O,MAAO,mDAC/C,4BAAQh4B,UAAU,WAAW+E,KAAK,SAASxB,QAAS,kBAAMg2C,GAAa,KAAvE,yBAIHnpC,GAAUA,EAAOgqC,UAAY,0BAAMp6C,UAAU,sBAAsBoQ,EAAOgqC,UAC3E,kBAAC/iB,GAAD,CAAYtyB,KAAK,SAAS/E,UAAU,cAChC,iD,8BChX1BupC,GAA2B3pC,IAAOC,IAAV,+uBA+BjBw6C,GAAiD,SAAC,GAMxD,IALHjB,EAKE,EALFA,kBACA11C,EAIE,EAJFA,OACA+S,EAGE,EAHFA,OACA0iC,EAEE,EAFFA,QACAmB,EACE,EADFA,WAEA,EAA4Cl1B,oBAAS,GAArD,oBAAO2kB,EAAP,KAAwBC,EAAxB,KACA,EAA8B5kB,mBAAS,GAAvC,oBAAO6kB,EAAP,KAAgBC,EAAhB,KACA,EAA4B9kB,oBAAS,GAArC,oBAGQlN,GAHR,UACoBioB,cAECv1B,aAAY,SAACC,GAAD,OAA6BA,KAAtDqN,UAEFqiC,EAA4B,SAAC5iC,GAC/B,IADqD,EACjDoO,EAAQ,EADyC,eAEjC7N,EAASA,UAFwB,IAErD,2BAAuC,CAAC,IAA/BC,EAA8B,QAC/BA,EAAQnM,KAAO2L,IACfoO,EAAQ5N,EAAQ4N,QAJ6B,8BAQrD,OAAOA,GAWLy0B,EARmC,WACrC,IAD2C,EACvCzY,EAAQ,EAD+B,eAE1BqX,GAF0B,IAE3C,2BAAoC,CAAC,IAA5BqB,EAA2B,QAChC1Y,GAASwY,EAA0BE,EAAKnoB,sBAHD,8BAK3C,OAAOyP,EAG4B2Y,GAEjC30B,EAAQ3lB,IAAMuL,SAChB,wBAAMytC,EAAkBj4C,QAAlB,UAA2Bi4C,EAAkB,UAA7C,aAA2B,EAAsBxnB,QAAQ7L,OAAQy0B,IACvE,CAACpB,IAEGpnC,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACFpF,EAAWuW,cAEXw3B,EAAmB,yCAAG,qCAAAvtC,EAAA,6DAClBwtC,EAAkD,GAExDxB,EAAkBxkC,SAAQ,SAACimC,GACvB,IAAMC,EAAOnoB,GAAuBooB,YAAYF,GAEhD,GAAIC,KAAQF,EAAZ,CAA0B,IAAD,EACrB,UAAAA,EAAYE,UAAZ,SAAmB9nB,WAAW/xB,KAAK45C,EAAiB5nB,mBADxD,CAKA,IAAM7gB,EAAUyoC,EAAiBG,YACjC5oC,EAAQ1C,WACRkrC,EAAYE,GAAQ1oC,MAGpBoD,EAAWtJ,OAAOC,OAAOyuC,GAhBL,SAkBAhuC,EAASiJ,GAAc3F,OAAOsF,EAAUiB,IAlBxC,UAkBlBhG,EAlBkB,OAmBgB,QAApC,UAAAA,EAAI,MAAU,UAAd,eAAkB2G,eAnBE,wBAoBd6jC,EApBc,6BAoBOxqC,EAAI,MAAU,IApBrB,IAoByBsK,YAAY,gBAAMtK,EAAI,MAAU,MApBzD,UAqBd6pC,EAAWW,GArBG,4CAAH,qDAyBnBC,EAAuB,yCAAG,uBAAA9tC,EAAA,sEACtButC,IADsB,uBAEtBxB,IAFsB,2CAAH,qDAa7B,OARAzwB,qBAAU,WACNvO,GAAoBowB,iBAAiB9zB,GAChC8nB,MAAK,YAAe,IAAD,EAAX9tB,EAAW,EAAXA,KACLy5B,EAAU,iBAACz5B,QAAD,IAACA,OAAD,EAACA,EAAMw5B,QAAQA,eAAf,QAA0B,MAEvCxL,OAAM,SAACgM,GAAD,OAASj9B,QAAQ01B,IAAI,CAAEuH,aACnC,IAGC,kBAAC,IAAM1qC,SAAP,KAEKkqC,EAAUlkB,GACP,kBAAC,GAAD,CAA0B/lB,UAAU,QAC/B+pC,GACG,kBAAC,GAAD,CACI7L,WAAY,SAACr8B,GAAD,OAAWqoC,GAAW,SAACha,GAAD,OAAUA,EAAOruB,MACnDukB,OAAQ2jB,EACRoR,mBAAiB,EACjB3xB,UAAWwgB,EACXvzB,OAAQA,IAGhB,wJAKA,4BAAQlT,QAAS,kBAAMymC,GAAiB,KAAxC,gBAGR,kBAAC9mC,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,KACI,yBAAK9D,UAAU,uCACX,wFACA,2BAAIo5C,EAAkBj4C,OAAtB,mBAGR,yBAAKnB,UAAU,0BACX,kBAACoqB,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,MACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAAwCA,EAAKH,IAAIhrB,MAAQ,MAEnE,CACI6B,OAAQ,OACRu/B,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFuC,EAAUtP,UAAY,IAAMsP,EAAUxP,aAE9C,CACIvyB,OAAQ,UACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,iBACFznB,gBAAKhJ,EAAU,CAAEhG,GAAIg5B,EAAUlT,mBAD7B,aACF,EAA6CltB,SAErD,CACI3B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,qBAAGpW,IAAOqW,SACFwX,YAElB,CACIh3C,OAAQ,aACRs/B,SAAU,iBAEd,CACIt/B,OAAQ,cACRs/B,SAAU,iBACVC,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFvoB,GAAW8qB,EAAU3R,oBAE7B,CACIpwB,OAAQ,cACRs/B,SAAU,kBACVC,KAAK,SAAD,oGAAC,EAAC,gBAAoBwC,EAApB,EAAG5Y,IAAOqW,SAAV,OACFzoB,GAAWgrB,EAAU5R,qBAY7B,CACInwB,OAAQ,uBACRs/B,SAAU,sBACVC,KAAK,SAAD,oGAAC,EAAC,YAAqE,IAAjDwC,EAAgD,EAAjE5Y,IAAOqW,SACZ,OACI,6BACKuC,EAAUkV,YACP,6CACClV,EAAUmV,oBAGX,8BAAOnV,EAAUmV,qBAFjB,kBAAC,KAAD,CAAGx2C,KAAM,GAAIC,YAAa,UAelD6M,KAAM2oC,IAEV,yBAAKp5C,UAAU,wCACX,0CAAgBsT,GAAeyS,KAEnC,yBAAK/lB,UAAU,mCACX,6BACI,kBAAC8C,EAAD,CAAqB9C,UAAU,WAAWuD,QAASG,GAC/C,+CAEHumC,GAAWlkB,GACR,kBAACjjB,EAAD,CAAqBS,QAASo3C,GAC1B,8CAOvB1Q,EAAUlkB,GACP,yBAAK/lB,UAAU,QACX,6BACI,kDAEJ,yBAAKA,UAAU,QACX,yBACIuE,MAAO,CAAE62C,SAAU,SACnBp7C,UAAU,qDAEV,6BACI,kBAAC,GAAD,CAAyBu4B,SAAO,EAAC50B,KAAK,YAE1C,yBAAK3D,UAAU,6BACX,yBAAKukB,MAAO,IAAKyU,OAAQ,GAAI3U,IAAKg3B,OAClC,yBAAKr7C,UAAU,QAAf,oBAIZ,yBAAKA,UAAU,QACX,kBAAC8C,EAAD,CAAqBS,QAAS23C,GAC1B,8CClRtB56C,GAAYV,IAAOC,IAAV,mJAYFy7C,GAA4D,SAAC,GAAwB,EAAtB53C,OAAuB,IAAD,UAAd0O,EAAc,EAAdA,QAChF,OACI,kBAAC,GAAD,KACI,6BACI,+CAEJ,yBAAKpS,UAAU,uCACX,6BACI,6BACI,yBAAKA,UAAU,MAAf,OAAqBoS,QAArB,IAAqBA,GAArB,UAAqBA,EAAS2I,mBAA9B,aAAqB,EAAsB3D,eAC3C,0CAEJ,yBAAKpX,UAAU,QACX,yBAAKA,UAAU,MAAf,iBAAqBoS,QAArB,IAAqBA,GAArB,UAAqBA,EAAS2I,mBAA9B,aAAqB,EAAsB6wB,qBAA3C,QAA4D,UAC5D,sCAGJ,yBAAK5rC,UAAU,QACX,yBAAKA,UAAU,MAAf,iBAAqBoS,QAArB,IAAqBA,GAArB,UAAqBA,EAAS2I,mBAA9B,aAAqB,EAAsBm3B,aAA3C,QAAoD,KACpD,mCAGJ,yBAAKlyC,UAAU,QACX,yBAAKA,UAAU,MAAf,wCACA,4CAGR,yBAAKA,UAAU,IACX,6BACI,yBAAKA,UAAU,MAAMsT,GAAc,OAAClB,QAAD,IAACA,OAAD,EAACA,EAAS2T,QAC7C,gDAIZ,yBAAK/lB,UAAU,QACX,sEACA,4BACI,gEACA,mFACA,+EAEJ,yBAAKA,UAAU,QACX,kBAAC8C,EAAD,CAAqBS,QAAS,kBAAM5C,EAAQ0V,QAAQ,+BAChD,2DCpCXklC,GAAsC,SAAC,GAAuD,IAArDpjC,EAAoD,EAApDA,QAASqjC,EAA2C,EAA3CA,oBAAqBrC,EAAsB,EAAtBA,QAAS1iC,EAAa,EAAbA,OACzF,EAAgDrW,IAAMglB,SAClD,IAAIkO,IADR,oBAAOunB,EAAP,KAAyBY,EAAzB,KAGA,EAAkDr7C,IAAMglB,SAAqC,IAA7F,oBAAOg0B,EAAP,KAA0BF,EAA1B,KACA,EAAoC9zB,oBAAS,GAA7C,oBAAOk0B,EAAP,KAAoBC,EAApB,KACMmC,EAAet7C,IAAMm5B,QAAO,GAClC,EAAwDn5B,IAAMglB,SAC1D,IAAIkO,IADR,oBAGA,GAHA,UAGwClzB,IAAMglB,UAAS,IAAvD,oBAAOu2B,EAAP,KAAqBC,EAArB,KACMhvC,EAAWuW,cACTnR,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACqBpH,aAAY,SAACC,GAAD,OAA6BA,KAA9DqN,SAER1K,QAAQ01B,IAAI,UAAW/qB,GACvB,IAAM0jC,EAAkB1jC,EAAUA,EAAQgc,WAAa,EACvD3mB,QAAQ01B,IAAI,YAAa2Y,GAEzBz7C,IAAMsoB,WAAU,WAEZ,OADAgzB,EAAa/4C,SAAU,EAChB,WACH+4C,EAAa/4C,SAAU,KAE5B,IAeH,GARAvC,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAaE,oBACvB,CAAC7L,IAEJxM,IAAMsoB,WAAU,WACZ9b,EAASiI,GAAcC,UACxB,CAAClI,IAEA0sC,EACA,OACI,kBAAC,GAAD,CAAalzB,OAAQkzB,EAAa1oC,MAAM,+BAA+B4Y,UAAW+vB,GAC9E,yBAAKv5C,UAAU,QAAf,0BAKZ,IAAM87C,EAA4B,SAAC/K,EAA4ClS,GAE3EA,EAAc,gBADA9kB,SAASg3B,EAAM/jC,OAAOnL,SA+BxC,OACI,kBAAC,IAAM9B,SAAP,KAEI,kBAACmD,EAAUW,KAAX,CAAgB7D,UAAU,QACtB,kBAACkD,EAAUY,UAAX,KACI,0BAAM9D,UAAU,QAAhB,+BACA,yBAAKA,UAAU,QACX,uGAGR,kBAAC,KAAD,CACImvB,SAAUU,GACVuX,oBAAkB,EAClBjJ,cAAe,IAAI7K,GACnB8K,SAAU,SAACjyB,EAAD,GAA2C,IAAhCkyB,EAA+B,EAA/BA,cAAeyb,EAAgB,EAAhBA,UAC1B1nC,EAAoC,CACtC8E,SAAUT,EACVqb,UAAW3lB,EAAO2lB,UAClBD,UAAW1Z,EAAQnM,GACnB4L,cAAezL,EAAOyL,eAG1B4jC,EAAoBppC,GAjDd,SAACA,IAUO,IARDgnC,EAAkB54B,WAC3C,SAACu7B,GAAD,OACIA,EAAgBjqB,YAAc1f,EAAQ0f,WAEtCiqB,EAAgBnkC,gBAAkBxF,EAAQwF,iBAM9CpK,QAAQ01B,IAAI,iCAIZgW,EAAqB,GAAD,mBAAKE,GAAL,CAAwBhnC,KAE5CwpC,GAAgB,IAgCJI,CAAkB5pC,GAClB0nC,IAEAtsC,QAAQ01B,IAAI,qBAAsB9wB,GAElCisB,GAAc,MAGjB,YAA4D,IAAD,QAAxDM,EAAwD,EAAxDA,aAAcxyB,EAA0C,EAA1CA,OAA0C,EAAlC0yB,cAAkC,EAAnB16B,aACrC,OACI,0BAAMi6B,SAAUO,GACZ,yBAAK3+B,UAAU,qBACX,yBAAKA,UAAU,QACX,+CAEJ,yBAAKA,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,EAAGjB,GAAI,GACZ,kBAAC,GAAD,CAAej5B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQlO,UAAQ,EAAC7qB,MAAM,IAAvB,qBAGCmQ,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACV,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,SAgBrB,yBAAK5E,UAAU,QACX,6CAEJ,yBAAKA,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAI,EAAGjB,GAAI,GACZ,0BAAMt5B,MAAO,CAAE00B,SAAU,KAAzB,uBACA,kBAAC,GAAD,CACIr0B,KAAK,kBACLg2B,SAAO,EACP/4B,MAAOg6C,GAAmB,EAC1BnvB,UAAQ,KAGhB,kBAAC,IAAD,CAAKoS,GAAI,EAAGjB,GAAI,GACZ,0BAAMt5B,MAAO,CAAE00B,SAAU,KAAzB,qBACA,kBAAC,GAAD,CACIr0B,KAAK,gBACLG,KAAK,SACLlD,MAAOsK,EAAOyL,cACdgjB,SAAO,EACPz2B,aAAc23C,MAI1B,yBAAK97C,UAAU,uCACX,yBAAKA,UAAU,IACX,0BAAMA,UAAU,QACZ,yCAEJ,8BAAOsT,GAAe6E,EAAQ4N,SAElC,yBAAK/lB,UAAU,QACX,0BAAMA,UAAU,QACZ,iCAEJ,8BACKsT,IACG,UAACnH,EAAOyL,qBAAR,QAAyB,GAAK,EACY,MAAnC,UAACzL,EAAOyL,qBAAR,QAAyB,GAAK,GAAc,IAC7C,KAIlB,yBAAK5X,UAAU,QACX,0BAAMA,UAAU,QACZ,qCAEJ,8BACKsT,GACG6E,EAAQ4N,QACH,UAAC5Z,EAAOyL,qBAAR,QAAyB,GAAK,EACW,MAAnC,UAACzL,EAAOyL,qBAAR,QAAyB,GAAK,GAAc,IAC7C,OAK1B,yBAAK5X,UAAU,8BACX,kBAAC8C,EAAD,CAAqBiC,KAAK,SAAS2nB,SAAUivB,GACzC,qDAUhC,kBAACz4C,EAAUW,KAAX,CAAgB7D,UAAU,QACrBo5C,EAAkBj4C,OACf,yBAAKnB,UAAU,qBACX,yBAAKA,UAAU,QACX,8CAEJ,kBAACoqB,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,MACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAA0CA,EAAKH,IAAIhrB,MAAQ,MAQrE,CACI6B,OAAQ,UACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAoBpwB,EAApB,EAAGga,IAAOqW,SAAV,OACF,wCAAOznB,gBAAKhJ,EAAU,CAAEhG,GAAIoG,EAAQ0f,mBAApC,aAAO,EAA2CltB,UAU1D,CACI3B,OAAQ,kBACRs/B,SAAU,iBAEd,CACIt/B,OAAQ,gBAMZ,CACIA,OAAQ,SAaRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OACF,kBAAC,IAAMxsB,SAAP,KACI,kBAAC+C,EAAD,CACI9C,UAAU,iBACVuD,QAAS,kBArMrB04C,EAqMkD1vB,EAAKH,IAAIqW,SApMvFyW,EAAqBE,EAAkB7pC,QAAO,SAAC6C,GAAD,OAAaA,IAAY6pC,WACvEL,GAAgB,GAFW,IAACK,IAuMY,kBAAC,KAAD,CAAQt4C,KAAM,YAMlC8M,KAAM2oC,KAId,yBAAKp5C,UAAU,qBACX,kEAIZ,kBAAC,KAAD,CACImvB,SAAU,SAAChjB,GACP,OAAOA,EAAOiuC,SAAW,GAAK,CAAEA,SAAU,6CAE9Cjc,cAAe,CAAEic,UAAU,GAC3Bhc,SA3QW,WACnBqd,EAAoBZ,GACpB1B,OA2QS,gBAAGxa,EAAH,EAAGA,aAAcvuB,EAAjB,EAAiBA,OAAjB,OACG,0BAAMguB,SAAUO,GACZ,yBAAK3+B,UAAU,mCACX,kBAAC,GAAD,CAAc4E,KAAK,WAAWkiC,WAAS,EAAC9O,MAAO,mDAC/C,4BAAQh4B,UAAU,WAAW+E,KAAK,SAASxB,QAAS,kBAAMg2C,GAAa,KAAvE,yBAIHnpC,GAAUA,EAAOgqC,UAAY,0BAAMp6C,UAAU,sBAAsBoQ,EAAOgqC,UAC3E,kBAAC/iB,GAAD,CAAYtyB,KAAK,SAAS/E,UAAU,aAAa0sB,UAAWivB,GACxD,iDCjTtBpS,GAA2B3pC,IAAOC,IAAV,+uBA+BjBq8C,GAA4D,SAAC,GAMnE,IAAD,UALFrB,EAKE,EALFA,iBACAn3C,EAIE,EAJFA,OACA+S,EAGE,EAHFA,OAEA6jC,GACE,EAFFnB,QAEE,EADFmB,YAEA,EAA4Cl1B,oBAAS,GAArD,oBAAO2kB,EAAP,KAAwBC,EAAxB,KACA,EAA8B5kB,mBAAS,GAAvC,oBAAO6kB,EAAP,KAAgBC,EAAhB,KACA,EAA4B9kB,oBAAS,GAArC,oBACA,GADA,UACgCA,mBAAmC,IAAIkO,KAAvE,oBAGkBnb,GAHlB,UACoBgoB,cAEUv1B,aAAY,SAACC,GAAD,OAA6BA,KAA/DqN,UAGAlG,GADa,YAAGmG,EAAQa,sBAAX,aAAG,EAAwBmb,WAC3BvpB,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,UACFmqC,EAAW,UAAGtB,EAAiBjjC,qBAApB,QAAqC,EAEhDhL,EAAWuW,cAEXi5B,EAAyB,yCAAG,+BAAAhvC,EAAA,6DAG9BktC,EAFMloC,EAAUyoC,GADc,kBAKFjuC,EAAS4K,GAAeC,yBAAyBrF,EAASqE,IALxD,cAKpBhG,EALoB,OAM1BjD,QAAQ01B,IAAI,YAAazyB,GANC,SAOpB6pC,EAAW7pC,GAPS,yDAS1BjD,QAAQC,MAAM,iCAAd,MAT0B,0DAAH,qDAkB/Bib,qBAAU,WACNvO,GAAoBowB,iBAAiB9zB,GAChC8nB,MAAK,YAAe,IAAD,EAAX9tB,EAAW,EAAXA,KACLy5B,EAAU,iBAACz5B,QAAD,IAACA,OAAD,EAACA,EAAMw5B,QAAQA,eAAf,QAA0B,MAEvCxL,OAAM,SAACgM,GAAD,OAASj9B,QAAQ01B,IAAI,CAAEuH,aACnC,IAEH,IAeM4R,GAFY,oBAAGlkC,EAAQa,sBAAX,aAAG,EAAwB+M,aAA3B,QAAoC,GAbrB,SAACu2B,GAC9B,IAAIC,EAAgB,EASpB,OAPID,EAAc,IACdC,EAAgB,IACZD,EAAc,IACdC,GAAqC,KAAnBD,EAAc,KAIjCC,EAIIC,CAAyBL,GAExC,OACI,kBAAC,IAAMp8C,SAAP,KAEKkqC,EAAUoS,GACP,kBAAC,GAAD,CAA0Br8C,UAAU,QAC/B+pC,GACG,kBAAC,GAAD,CACI7L,WAAY,SAACr8B,GAAD,OAAWqoC,GAAW,SAACha,GAAD,OAAUA,EAAOruB,MACnDukB,OAAQ2jB,EACRoR,mBAAiB,EACjB3xB,UAAWwgB,EACXvzB,OAAQA,IAGhB,wJAKA,4BAAQlT,QAAS,kBAAMymC,GAAiB,KAAxC,gBAGR,kBAAC9mC,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,KACI,yBAAK9D,UAAU,uCACX,wFACA,6CAGR,yBAAKA,UAAU,0BACX,kBAACoqB,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,MACRu/B,KAAK,SAAD,oGAAC,EAAC,SAACjW,GAAD,OAA0CA,EAAKH,IAAIhrB,MAAQ,MAQrE,CACI6B,OAAQ,UACRs/B,SAAU,YACVC,KAAK,SAAD,oGAAC,EAAC,kBAAoBpwB,EAApB,EAAGga,IAAOqW,SAAV,OACF,wCAAOznB,gBAAKhJ,EAAU,CAAEhG,GAAIoG,EAAQ0f,mBAApC,aAAO,EAA2CltB,UAU1D,CACI3B,OAAQ,kBACRs/B,SAAU,iBAEd,CACIt/B,OAAQ,iBAMhBwN,KAAM,CAACoqC,KAEX,yBAAK76C,UAAU,wCACX,0CAAgBsT,GAAe+oC,KAEnC,yBAAKr8C,UAAU,mCACX,6BACI,kBAAC8C,EAAD,CAAqB9C,UAAU,WAAWuD,QAASG,GAC/C,+CAEHumC,GAAWoS,GACR,kBAACv5C,EAAD,CAAqBS,QAAS64C,GAC1B,iD,SLrLxBrG,O,6BAAAA,I,uCAAAA,I,8BAAAA,Q,KAML,I,GMfF0G,GNeQC,GAA8B,WACvC,MAAkCvc,cAA1BxnB,EAAR,EAAQA,WAAY2mB,EAApB,EAAoBA,UACInnB,EAAYvN,aAAY,SAACC,GAAD,OAA6BA,EAAMqN,YAA3Ec,eACUN,EAAgB9N,aAAY,SAACC,GAAD,OAA6BA,EAAMqN,YAAzEA,SACR,EAA8B9X,IAAMglB,SAAS,IAA7C,oBAAOhT,EAAP,KAAgBkoC,EAAhB,KAEM1tC,EAAWuW,cACjB,EAAkD/iB,IAAMglB,SAAmC,IAA3F,oBAAOg0B,EAAP,KAA0BF,EAA1B,KACA,EAAoD94C,IAAMglB,SACtD,IAAIkO,IADR,oBAAOqpB,EAAP,KAA2BC,EAA3B,KAIAx8C,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAakwB,WAAW9vB,MAClC,CAAC/L,EAAU+L,IAEd,IAAMkkC,EAAkBnkC,EAAYsC,MAAK,SAAC7C,GAAD,OAAaA,EAAQnM,KAAO+N,SAASpB,MACxE0X,IAAsBwsB,GAAkBA,EAAgBxsB,oBAYxDzL,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAM,iBAC9B,CACIzV,KAAK,GAAD,OAAMuT,GAAWA,EAAQvT,MAAS,IACtCyV,KAAK,gBAAD,OAAkB1B,IAE1B,CACI/T,KAAK,iBACLyV,KAAMpM,OAAOjN,SAAS0+B,OAI9B,EAAsCt/B,IAAMglB,SAAwB2wB,GAAc+G,aAAlF,oBAAO7iB,EAAP,KAAoB8iB,EAApB,KAEA,OACI,kBAAC,EAAD,CAAYza,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACpBzM,GACG,kBAAC,IAAMpY,SAAP,KACI,kBAACmD,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,IAAD,CAAK46B,GAAI,EAAG79B,UAAU,6BAClB,kBAACkD,EAAUE,iBAAX,CACIC,OAAQ,kBAAM42B,IAAgB8b,GAAciH,kBAC5C/6C,OAAQ,WACAg4B,IAAgB8b,GAAciH,kBAC9BD,EAAehH,GAAc+G,gBAKzC,wBAAI98C,UAAU,iBAAiBmY,EAAQvT,QAG/C,6BACI,kBAAC,IAAD,CAAYb,UAAWk2B,EAAaj6B,UAAU,gBAC1C,kBAAC,IAAD,CAAS2mC,MAAOoP,GAAc+G,aACzBzsB,EACG,kBAAC,GAAD,CACIlY,QAASA,EACT1B,OAAQ6oB,EACRkc,oBAAqBoB,EACrBzD,QAAS4D,EAAezvB,UAAK7oB,EAAWsxC,GAAciH,oBAG1D,kBAAC,GAAD,CACI7kC,QAASA,EACT1B,OAAQ6oB,EACR4Z,qBAAsBA,EACtBC,QAAS4D,EAAezvB,UAAK7oB,EAAWsxC,GAAciH,qBAIlE,kBAAC,IAAD,CAASrW,MAAOoP,GAAciH,kBACzB3sB,EACG,kBAAC,GAAD,CACIwqB,iBAAkB8B,EAClBlmC,OAAQ6oB,EACR57B,OAAQq5C,EAAezvB,UAAK7oB,EAAWsxC,GAAc+G,aACrD3D,QAAS4D,EAAezvB,UAAK7oB,EAAWsxC,GAAckH,aACtD3C,WAAYA,IAGhB,kBAAC,GAAD,CACIlB,kBAAmBA,EACnB3iC,OAAQ6oB,EACR57B,OAAQq5C,EAAezvB,UAAK7oB,EAAWsxC,GAAc+G,aACrD3D,QAAS4D,EAAezvB,UAAK7oB,EAAWsxC,GAAckH,aACtD3C,WAAYA,KAIxB,kBAAC,IAAD,CAAS3T,MAAOoP,GAAckH,aAC1B,kBAAC,GAAD,CACIv5C,OAAQq5C,EAAezvB,UAAK7oB,EAAWsxC,GAAc+G,aACrD1qC,QAASA,WOrH3C2xB,GAAqBnkC,IAAOC,IAAV,wUAkBXq9C,GAA8B,WAAO,IAAD,EACvCt4B,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,eAAgByV,KAAMpM,OAAOjN,SAAS0+B,OAE1CJ,EAAca,cAAdb,UAEF1yB,EAAWuW,cACTjL,EAAatN,aAAY,SAACC,GAAD,OAA6BA,KAAtDqN,SAMR,OAJA9X,IAAMsoB,WAAU,WACZ9b,EAAS2L,GAAaE,oBACvB,CAAC7L,IAGA,kBAAC,EAAD,CAAY01B,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IACrB,kBAAC1hB,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC,GAAD,KACI,yBAAKjD,UAAU,gBACX,wBAAIA,UAAU,iBAAd,mBAKZ,kBAAC,IAAD,MACK,UAAAkY,EAASA,gBAAT,eAAmB/W,QAAS,EACzB+W,EAASA,SAASvT,KAAI,SAACwT,GAAD,OAClB,kBAAC,IAAD,CAAK0lB,GAAI,EAAG98B,IAAKoX,EAAQnM,IACrB,kBAAC,GAAD,CACI4E,MAAOuH,EAAQvT,KACfmhB,MAAOzS,GAAe6E,EAAQ4N,OAE9BziB,GACI6U,EAAQkY,oBAAR,8BAC6BlY,EAAQnM,GADrC,uCACsEszB,GADtE,8BAE6BnnB,EAAQnM,GAFrC,2BAE0DszB,GAE9D3Z,KAAMxN,EAAQ4b,kBAK1B,yD,SDjEnB0oB,O,2CAAAA,I,iDAAAA,I,4BAAAA,Q,KAUE,IElBKU,G,kEAAAA,O,2BAAAA,I,8BAAAA,Q,KCsBZC,0BAAeC,KAAgCC,MAExC,I,qBCdMC,GAA4B,WACrC,IAAM34B,EAA4B,CAC9B,CAAEhgB,KAAM,OAAQyV,KAAM,KACtB,CAAEzV,KAAM,iBAAkByV,KAAMpM,OAAOjN,SAAS0+B,OAGpD,EAAoCt/B,IAAMglB,SAAyB,MAAnE,oBAAOo4B,EAAP,KAAmBC,EAAnB,KACM7wC,EAAWuW,cACXu6B,EAAQC,cAERC,EAAex9C,IAAM6K,aACvB,SAACpJ,GACG47C,EAAc57C,KAElB,CAAC47C,IAYL,OATA/0B,qBAAU,WACN9b,EACI0D,GAAUuS,YAAa66B,EAAcG,OAAOhsC,KAAM,CAC9CiR,UAAW86B,EAAatwB,UAAK7oB,GAAW,GACxCse,OAAQ66B,EAAatwB,UAAK7oB,GAAW,QAG9C,CAACmI,EAAU8wC,EAAOE,IAGjB,kBAAC,GAAD,KACI,kBAAC/2B,GAAD,MACA,yBAAK7mB,UAAU,aACX,kBAAC,GAAD,CAAa4kB,YAAaA,IAC1B,kBAAC,GAAD,KACoB,OAAf44B,EAAsB,KACnB,yBAAKx9C,UAAU,yCACX,4BAAQA,UAAU,gBACbw9C,EACG,kBAAC,IAAMz9C,SAAP,KACI,yBACIC,UAAU,mDACVuE,MAAO,CACHggB,MAAO,IACPyU,OAAQ,IACRD,WAAY,UACZ7zB,aAAc,SAGlB,yBAAKmf,IAAKyJ,KAAOvJ,MAAO,GAAIH,IAAI,wCAEpC,yBAAKpkB,UAAU,QACX,4BACI,6DAGR,kBAAC,GAAD,CAAag6B,MAAO,EAAGC,YAAa,KAGxC,yBAAKj6B,UAAU,QACX,4BACI,2DAKhB,0BAAMA,UAAU,QACZ,uBAAGA,UAAU,eACRw9C,EAAa,gCAAkC,mCAGxD,4BAAQx9C,UAAU,yCACd,kBAAC,IAAD,CAAMsD,GAAG,UACL,uDC5EvBw6C,GAAb,0IACI,WAAiCC,GAAjC,2FACWhxC,GAAU4E,KAA6C,YAAaosC,IAD/E,2CADJ,8DCIaC,GAAb,2FACI,SAAqBD,GACjB,gDAAO,WAAOnxC,GAAP,UAAAQ,EAAA,+EAEwB4G,GACnB8pC,GAAgBG,aAAaF,GAC7BnxC,EACA,qBALL,kBAQc6D,KARd,uBASK9D,GAAmBuD,OAAOtH,GAAkBuO,QAAS,gCAArDxK,CAAsFC,GAT3F,kBAWYjM,EAAQ0V,QAAQ,MAX5B,aAcO,IAAIlG,MAAM,4BAdjB,4FAAP,0DAFR,KCIa+tC,GAA+B,WACxC,IAAMt5B,EAA4B,CAC9B,CAAEhgB,KAAM,OAAQyV,KAAM,KACtB,CAAEzV,KAAM,kBAAmByV,KAAMpM,OAAOjN,SAAS0+B,OAG/C9yB,EAAWuW,cACTtR,EAASsuB,cAATtuB,KAEFssC,EAAqB/9C,IAAM6K,YAAN,yCACvB,WAAO8yC,GAAP,UAAA3wC,EAAA,sDACIR,EAASoxC,GAAcI,OAAOL,IADlC,2CADuB,sDAIvB,CAACnxC,IAGL,OACI,kBAAC,GAAD,KACI,kBAACia,GAAD,MACA,yBAAK7mB,UAAU,aACX,kBAAC,GAAD,CAAa4kB,YAAaA,IAC1B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIuK,SAAUU,GACVsO,cAAe,IAAI/J,GAAoBviB,GACvCusB,SAAU+f,IAET,gBAAGxf,EAAH,EAAGA,aAAcjP,EAAjB,EAAiBA,QAASmQ,EAA1B,EAA0BA,YAA1B,OACG,0BAAMzB,SAAUO,EAAc3+B,UAAU,yCACpC,4BAAQA,UAAU,qBACd,+DACE0vB,GAAWmQ,EAAc,GACvB,wBAAI7/B,UAAU,cAAd,4CAGR,0BAAMA,UAAU,0BAA0BuE,MAAO,CAAEggB,MAAO,MACtD,yBAAKvkB,UAAU,2BACX,uBAAGA,UAAU,eAAb,mCACA,kBAAC,GAAD,CAAoB44B,IAAK,EAAGC,IAAK,EAAGC,KAAM,KAE9C,kBAAC,GAAD,CACI94B,UAAU,OACV4E,KAAK,mBACLozB,MAAM,eACNY,IAAK,EACLC,IAAK,IAET,kBAAC,GAAD,CACI74B,UAAU,OACV4E,KAAK,gBACLozB,MAAM,YACNY,IAAK,EACLC,IAAK,IAET,kBAAC,GAAD,CACI74B,UAAU,OACV4E,KAAK,gBACLozB,MAAM,YACNY,IAAK,EACLC,IAAK,IAET,yBAAK74B,UAAU,QACX,uBAAGA,UAAU,eAAb,4CACA,yBAAKA,UAAU,UACX,kBAAC,GAAD,CACIA,UAAU,OACV4E,KAAK,WACLozB,MAAM,MACNn2B,MAAO4F,GAASktB,MAEpB,kBAAC,GAAD,CACI30B,UAAU,OACV4E,KAAK,WACLozB,MAAM,KACNn2B,MAAO4F,GAAS42C,KAEpB,kBAAC,GAAD,CACIr+C,UAAU,OACV4E,KAAK,WACLozB,MAAM,QACNn2B,MAAO4F,GAAS62C,UAI5B,6BACI,uBAAGt+C,UAAU,eAAb,oCACA,kBAAC,GAAD,CAAe4E,KAAK,eAAe+1B,GAAG,eAG9C,4BAAQ36B,UAAU,yCACd,kBAACq3B,GAAD,CAAYtyB,KAAK,UACb,yDCpF3BugC,GAAkD,SAAC,GAA6C,IAA3Clf,EAA0C,EAA1CA,OAAQoD,EAAkC,EAAlCA,UAAW+b,EAAuB,EAAvBA,iBACzEvzB,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACUrH,EAASC,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAAlEC,SAEFosB,EAASnlB,EAASgJ,MAAK,SAACs6B,GAAD,OAAaA,EAAQtpC,MAAR,OAAerB,QAAf,IAAeA,OAAf,EAAeA,EAAMa,cAE/D,OACI,kBAAC,GAAD,CAAa4a,OAAQA,EAAQoD,UAAWA,EAAW5Y,MAAM,mBACrD,kBAAC,KAAD,CAAQue,SAAUU,GAAoBsO,cAAe,IAAI1I,GAAuB2I,SAAUmH,IACrF,gBAAG5G,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,YAAYozB,MAAM,cAAc4C,SAAO,KAE/D,yBAAK56B,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,WAAWozB,MAAM,aAAa4C,SAAO,MAGjE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,gBAAgB4C,SAAO,KAEnE,kBAAC,IAAD,CAAKkE,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,QAAQozB,MAAM,SAASjzB,KAAK,QAAQ61B,SAAO,MAGvE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,OAAOozB,MAAM,OAAO2C,GAAG,SAASC,SAAO,GACvD,4BAAQ/4B,MAAM,IAAd,mBACA,4BAAQA,MAAO+H,GAAsBC,UAArC,cAQR,kBAAC,IAAD,CAAKi1B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQ/4B,MAAM,IAAd,wBACK,OAAJ8I,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMG,MAClB,4BAAQzH,MAAK,OAAEs1B,QAAF,IAAEA,OAAF,EAAEA,EAAQnrB,IAAvB,OAA4BmrB,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAQvyB,MAEpCoN,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACT,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,UAQ7B,kBAAC,IAAD,CAAa5E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UACtB,kBAAC,KAAD,CAAMpB,KAAM,GAAIC,YAAa,IAC7B,kDAEJ,4BACI5D,UAAU,uBACV+E,KAAK,SACLxB,QAASimB,EAAU8D,UAAK7oB,GAAW,IAEnC,+CC/DnB+gC,GAA0C,SAAC,GAKjD,IAJHC,EAIE,EAJFA,cACAC,EAGE,EAHFA,iBACAC,EAEE,EAFFA,WACAC,EACE,EADFA,iBAEQ5zB,EAAapH,aAAY,SAACC,GAAD,OAA6BA,EAAMmH,YAA5DA,SACUrH,EAASC,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAAlEC,SAEF6B,EAAWuW,cAEXgU,EAASnlB,EAASgJ,MAAK,SAACs6B,GAAD,OAAaA,EAAQtpC,MAAR,OAAerB,QAAf,IAAeA,OAAf,EAAeA,EAAMa,cAE/D,OACI,kBAAC,GAAD,CAAa4a,OAAQqf,EAAejc,UAAWkc,EAAkB90B,MAAM,iBACnE,kBAAC,KAAD,CACIue,SAAUU,GACVsO,cAAe,IAAI9H,GAAcsP,GACjCvH,SAAU,SAAC7hB,GACP,GAAIspB,mBAAQ,IAAIxP,GAAcsP,GAAappB,GAGvC,OAFA3P,EAASD,GAAmBuD,OAAOtH,GAAkBsZ,KAAM,yBAEpDwjB,GAAiB,GAG5BE,EAAiBrpB,MAGpB,gBAAGoiB,EAAH,EAAGA,aAAH,OACG,0BAAMP,SAAUO,GACZ,kBAAC,IAAD,KACI,yBAAK3+B,UAAU,YACX,yBAAKA,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,YAAYozB,MAAM,aAAa4C,SAAO,KAE9D,yBAAK56B,UAAU,YACX,kBAAC,GAAD,CAAe4E,KAAK,WAAWozB,MAAM,YAAY4C,SAAO,MAIhE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,cAAcozB,MAAM,eAAe4C,SAAO,KAElE,kBAAC,IAAD,CAAKkE,GAAG,KACJ,kBAAC,GAAD,CAAepS,UAAQ,EAAC9nB,KAAK,QAAQozB,MAAM,QAAQ4C,SAAO,MAGlE,yBAAK56B,UAAU,YACX,kBAAC,IAAD,CAAK8+B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,OAAOozB,MAAM,OAAO2C,GAAG,SAASC,SAAO,GACvD,4BAAQ/4B,MAAM,IAAd,iBACA,4BAAQA,MAAO+H,GAAsBC,UAArC,cAQR,kBAAC,IAAD,CAAKi1B,GAAG,KACJ,kBAAC,GAAD,CAAel6B,KAAK,YAAYozB,MAAM,UAAU2C,GAAG,SAASC,SAAO,GAC/D,4BAAQ/4B,MAAM,IAAd,sBACK,OAAJ8I,QAAI,IAAJA,OAAA,EAAAA,EAAMO,QAAS/B,GAAMG,MAClB,4BAAQzH,MAAK,OAAEs1B,QAAF,IAAEA,OAAF,EAAEA,EAAQnrB,IAAvB,OAA4BmrB,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAQvyB,MAEpCoN,EAASrN,KAAI,gBAAGqH,EAAH,EAAGA,GAAIpH,EAAP,EAAOA,KAAP,OACT,4BAAQ/C,MAAOmK,EAAIjL,IAAKiL,GACnBpH,UAQ7B,kBAAC,IAAD,CAAa5E,UAAU,qDACnB,kBAAC8C,EAAD,CAAqBiC,KAAK,UAEtB,kDAEJ,4BACI/E,UAAU,uBACV+E,KAAK,SACLxB,QAASmiC,EAAiBpY,UAAK7oB,GAAW,IAE1C,+CCxFnB85C,GAA+C,SAAC,GAMtD,IALH3iC,EAKE,EALFA,MACAmqB,EAIE,EAJFA,cACAp1B,EAGE,EAHFA,KACA0zB,EAEE,EAFFA,gBACA2B,EACE,EADFA,YAEQj7B,EAAaH,aAAY,SAACC,GAAD,OAA6BA,EAAMC,QAA5DC,SAER,OACI,kBAACqf,GAAD,CACIE,QAAS,CACL,CACIrnB,OAAQ,eACRs/B,SAAU,cACVC,KAAK,SAAD,oGAAC,EAAC,YAAwC,IAA9BC,EAA6B,EAApCrW,IAAOqW,SACZ,OAAO,2BAAIjwB,KAAOiwB,EAAS5nB,aAAalH,OAAO,sBAGvD,CACI1Q,OAAQ,aACRs/B,SAAU,aAEd,CACIt/B,OAAQ,YACRs/B,SAAU,YAEd,CACIt/B,OAAQ,QACRs/B,SAAU,SAEd,CACIt/B,OAAQ,iBACRs/B,SAAU,kBAQd,CACIt/B,OAAQ,OACRs/B,SAAU,QAEd,CACIt/B,OAAQ,UACRu/B,KAAK,SAAD,oGAAC,EAAC,YAA8C,IAA1B73B,EAAyB,EAA1CyhB,IAAOqW,SACZ,OACI93B,EAAKqB,MAAL,OAAYjB,QAAZ,IAAYA,OAAZ,EAAYA,EAAUiB,KAClB,kBAAC,IAAMjM,SAAP,KACI,kBAAC,GAAD,CACIwpB,iBAAkB,WACd,OACI,kBAACzmB,EAAD,CAAqB9C,UAAU,SAC3B,kBAAC,KAAD,CAAc2D,KAAM,QAKhC,kBAACulB,GAAD,CACI3lB,QAAS,WACLwiC,EAAcp7B,GACdq7B,GAAY,KAGhB,4CAEJ,kBAAC9c,GAAD,CACI3lB,QAAS8gC,EAAgB/W,UAAK7oB,EAAWkG,GAAOA,EAAK+rB,iBAErD,8BAAO/rB,EAAK+rB,eAAiB,aAAe,YAC5C,kBAAC,GAAD,CAA0B6B,QAAS5tB,EAAK+rB,yBASxEjmB,KAAMmL,EACNjL,KAAMA,KClFL6tC,GAAuB,WAChC,IAAM55B,EAA4B,CAC9B,CAAEhgB,KAAM,YAAayV,KAAM,kBAC3B,CAAEzV,KAAM,YAAayV,KAAMpM,OAAOjN,SAAS0+B,OAG/C,EAA8Ct/B,IAAMglB,UAAS,GAA7D,oBAAO8gB,EAAP,KAAwBC,EAAxB,KACA,EAA0C/lC,IAAMglB,UAAS,GAAzD,oBAAOghB,EAAP,KAAsBV,EAAtB,KACA,EAA0BtlC,IAAMglB,SAAS,IAAzC,oBAAOvjB,EAAP,KACA,GADA,KACoCzB,IAAMglB,YAA1C,oBAAOugB,EAAP,KAAmBI,EAAnB,KACA,EAAmC3lC,IAAMglB,SAAS,IAAlD,oBAAOrP,EAAP,KAAmBswB,EAAnB,KACQvkC,EAAWqmB,cAAXrmB,OAOR,EAAkC1B,IAAMglB,SAAS,GAAjD,oBAAOrhB,EAAP,KAAkBC,EAAlB,KACM4I,EAAWuW,cACjB,EAAqCvY,aAAY,SAACC,GAAD,OAA6BA,EAAM+Q,SAA5EE,EAAR,EAAQA,UAAWkB,EAAnB,EAAmBA,cAEbuoB,EAAmBnlC,IAAM6K,aAC3B,SAACsR,GACG,IAAMkiC,EAAe,gBAAQliC,GAC7B3P,EACI0Q,GAAWG,WAAWghC,EAAwCtY,EAAmB7Y,UAAK7oB,GAAW,OAGzG,CAACmI,IAGC8xC,EAAuBt+C,IAAM6K,aAC/B,SAAC0zC,GACG/xC,EACI0Q,GAAWgpB,WAAWqY,EAAgBjZ,EAAiBpY,UAAK7oB,GAAW,IAAQ,WAC3Em6C,UAIZ,CAAChyC,IAGCkJ,EAAa1V,IAAMuL,SAAQ,kBAAQ5J,QAAkBD,GAAgBsY,MAAQ,IAAG,CAACtY,IACjFmO,EAAuC7P,IAAMuL,SAC/C,kBAAO5J,QAAkBD,GAAgBmO,SACzC,CAACnO,IAGC88C,EAAiBx+C,IAAM6K,aAAY,WACrC2B,EAAS0Q,GAAWY,aAAapI,EAAYC,MAC9C,CAACnJ,EAAUkJ,IAERuuB,EAAkBjkC,IAAM6K,aAC1B,SAACiD,EAAgB+B,GACT/B,EAASwoB,iBAAmBzmB,IAC5B/B,EAASwoB,eAAiBzmB,EAC1BrD,EACI0Q,GAAWuB,iBAAiB,IAAI4X,GAAsBvoB,IAAW,WAC7D0wC,WAKhB,CAAChyC,EAAUgyC,IAGfx+C,IAAMsoB,WAAU,WAIZ,OAHAk2B,IACAhyC,EAASiI,GAAcC,QAEf7E,GACJ,IAAK,QACDjM,EAAa,GACb,MACJ,QACIA,EAAa,MAEtB,CAAC4I,EAAUqD,EAAQ2uC,IAEtB,IAQMpY,EAAuB1qB,EAAUvM,QAAO,SAAC5E,GAC3C,OACKA,EAAKsrB,YAA4E,IAA/DtrB,EAAKsrB,UAAUwQ,cAAcC,QAAQ7kC,EAAM4kC,gBAC7D97B,EAAK2rB,QAA+E,IAAtE3rB,EAAK2rB,MAAM9C,WAAWiT,cAAcC,QAAQ7kC,EAAM4kC,kBAIzE,OACI,kBAAC,EAAD,CAAYnE,aAAa,GACrB,kBAAC,GAAD,CAAQ1d,YAAaA,IAErB,kBAAC,GAAD,CACIwB,OAAQ8f,EACR1c,UAAW2c,EACXZ,iBAAkBA,IAErBI,GACG,kBAAC,GAAD,CACIF,cAAeW,EACfV,iBAAkBA,EAClBC,WAAYA,EACZC,iBAAkB8Y,IAI1B,kBAACx7C,EAAUC,QAAX,KACI,kBAACD,EAAUD,OAAX,KACI,kBAAC8gC,GAAD,KACI,yBAAK/jC,UAAU,cAAcuE,MAAO,CAAE20B,KAAM,IACxC,wBAAIl5B,UAAU,iBAAd,iBACA,kCAAIwmC,QAAJ,IAAIA,OAAJ,EAAIA,EAAcrlC,OAAlB,iBAEJ,yBAAKnB,UAAU,oCACX,kBAAC8C,EAAD,CAAqBS,QAAS4iC,EAAmB7Y,UAAK7oB,GAAW,IAC7D,kBAAC,KAAD,CAAMd,KAAM,GAAIC,YAAa,IAC7B,kDAKhB,kBAACV,EAAUW,KAAX,KACI,kBAACX,EAAUY,UAAX,CACIG,MArHK,CACrB,CAAE7C,MAAO,EAAGwD,KAAM,gBAAiBC,MAAO,KAqH1Bd,UAAWA,EACXC,aAAcA,EACdG,aArDC,SAACX,GAClB6iC,EAAa7iC,EAAEwJ,OAAOnL,QAqDNA,MAAOkU,EACP3R,aAnDC,WACjBwI,EAAS0Q,GAAWY,aAAapI,EAAYC,KAmD7B7R,YAAU,EACVG,qBAAmB,IAEvB,kBAACnB,EAAUoC,QAAX,KACI,kBAAC,IAAD,CAAYvB,UAAWA,EAAW/D,UAAU,gBACxC,kBAAC,IAAD,CAAS2mC,MAAO,GACXH,EAAarlC,OACV,kBAAC,GAAD,CACIya,MAAO4qB,EACP71B,KAAMqM,EACN+oB,cAAeA,EACf1B,gBAAiBA,EACjB2B,YAAaN,IAGjB,wDCvIpCmZ,IAAKvQ,SAAS,CACVwQ,OAAQ,SACRz6B,IAAK,sEAGM,yBACX,gBAAC5Z,GAAYC,SAAb,KACI,gBAAC,GAAD,MACA,gBAAC,IAAD,KACI,gBAACoe,GAAD,CAAei2B,OAAK,EAAC1kC,KAAK,IAAI2kC,UAAWhe,KACzC,gBAAClY,GAAD,CAAei2B,OAAK,EAAC1kC,KAAK,SAAS2kC,UAAWvf,KAC9C,gBAAC3W,GAAD,CAAei2B,OAAK,EAAC1kC,KAAK,mBAAmB2kC,UAAWhf,KACxD,gBAAClX,GAAD,CAAezO,KAAK,wBAAwB2kC,UAAW9e,KACvD,gBAACpX,GAAD,CAAezO,KAAK,yBAAyB2kC,UAAWd,KACxD,gBAACp1B,GAAD,CAAezO,KAAK,sBAAsB2kC,UAAWzB,KAGrD,gBAAC10B,GAAD,CAAgBxO,KAAK,eAAe2kC,UAAW/S,KAC/C,gBAACpjB,GAAD,CAAgBxO,KAAK,iBAAiB2kC,UAAWtN,KACjD,gBAAC7oB,GAAD,CAAgBxO,KAAK,aAAa2kC,UAAW/Y,GAAiB/6B,KAAM/B,GAAMG,QAC1E,gBAACuf,GAAD,CACIxO,KAAK,iBACL2kC,UAAWR,GACXtzC,KAAM,CAAC/B,GAAMG,MAAOH,GAAMO,8BAE9B,gBAACmf,GAAD,CACIxO,KAAK,kBACL2kC,UAAWlS,GACX5hC,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,eAAgBN,GAAMO,2BAA4BP,GAAMY,UAEtF,gBAAC8e,GAAD,CACIxO,KAAK,oCACL2kC,UAAWxT,GACXtgC,KAAM/B,GAAMG,QAEhB,gBAACuf,GAAD,CAAgBxO,KAAK,gBAAgB2kC,UAAWrX,GAAaz8B,KAAM,CAAC/B,GAAMY,OAAQZ,GAAMG,SACxF,gBAACuf,GAAD,CACIxO,KAAK,2BACL2kC,UAAWxW,GACXt9B,KAAM,CAAC/B,GAAMY,OAAQZ,GAAMG,SAE/B,gBAACuf,GAAD,CACIxO,KAAK,eACL2kC,UAAW/V,GACX/9B,KAAI,CAAG/B,GAAMG,MAAOH,GAAMM,gBAAtB,mBAAyCK,OAEjD,gBAAC+e,GAAD,CACIxO,KAAK,kCACL2kC,UAAWxT,GACXtgC,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,kBAE9B,gBAACof,GAAD,CACIxO,KAAK,yBACL2kC,UAAWxV,GACXt+B,KAAM,CAAC/B,GAAMG,MAAOH,GAAMM,kBAE9B,gBAACof,GAAD,CACIxO,KAAK,gBACL2kC,UAAW/K,GACX/oC,KAAM,CAAC/B,GAAMY,OAAQZ,GAAMG,MAAOH,GAAMO,2BAA4BP,GAAMM,kBAE9E,gBAACof,GAAD,CACIxO,KAAK,2BACL2kC,UAAW7K,GACXjpC,KAAM,CAAC/B,GAAMY,OAAQZ,GAAMG,MAAOH,GAAMO,2BAA4BP,GAAMM,kBAE9E,gBAACof,GAAD,CACIxO,KAAK,kCACL2kC,UAAW9B,KAEf,gBAACr0B,GAAD,CACIxO,KAAK,4DACL2kC,UAAWtC,KAEf,gBAAC7zB,GAAD,CACIxO,KAAK,wEACL2kC,UAAWtC,KAGf,gBAAC7zB,GAAD,CACIxO,KAAK,4BACL2kC,UAAWhL,GACX9oC,KAAM,CACF/B,GAAMK,WACNL,GAAMI,QACNJ,GAAMQ,WACNR,GAAMG,MACNH,GAAMO,8BAId,gBAACmf,GAAD,CACIxO,KAAK,iBACL2kC,UAAW/N,GACX/lC,KAAM,CAAC/B,GAAMM,eAAgBN,GAAMG,MAAOH,GAAMO,8BAQpD,gBAACmf,GAAD,CACIxO,KAAK,0CACL2kC,UAAWzK,GACXrpC,KAAM,CACF/B,GAAMK,WACNL,GAAMI,QACNJ,GAAMQ,WACNR,GAAMG,MACNH,GAAMO,8BAGd,gBAAC,IAAD,CAAO2Q,KAAK,WAAW2kC,UAAW3J,KAElC,gBAAC,IAAD,CAAOh7B,KAAK,KACR,gBAAC,GAAD,QAGR,gBAAC,GAAD,QCjJF4kC,GAAcC,QACa,cAA7BjxC,OAAOjN,SAASm+C,UAEiB,UAA7BlxC,OAAOjN,SAASm+C,UAEhBlxC,OAAOjN,SAASm+C,SAASzB,MAAM,2DA6BvC,SAAS0B,GAAgBC,GACrBC,UAAUC,cACLjR,SAAS+Q,GACT9gB,MAAK,SAACihB,GACHA,EAAaC,cAAgB,WACzB,IAAMC,EAAmBF,EAAaG,WACtCD,EAAiBE,cAAgB,WACE,cAA3BF,EAAiB70C,QACby0C,UAAUC,cAAcM,WAKxBryC,QAAQ01B,IAAI,6CAKZ11B,QAAQ01B,IAAI,4CAM/BzE,OAAM,SAAChxB,GACJD,QAAQC,MAAM,4CAA6CA,M,mDCrDhE,GCTQ,SAAwB9M,EAAkBuR,GACrD,IAAM4tC,EAAa,CAACC,KAAOC,aAAiBr/C,IAEtCs/C,EAAcC,aAAgB,6BAC7BhgC,IAD4B,IAE/BigC,OAAQC,YAAcz/C,MAGpB0/C,EAAY,GACZC,EAAoC,qBAAXryC,OAAyB,KAAQA,OAC5DqyC,GAAmBA,EAAgBC,8BACnCF,EAAUp/C,KAAKq/C,EAAgBC,gCAGnC,IAAMlwC,EAAQmwC,aAAYP,EAAaQ,KAAO,WAAP,GAAQC,KAAe,WAAf,EAAmBZ,IAA3B,OAA2CO,KAGlF,MAAO,CAAEhwC,QAAOswC,UADEC,aAAavwC,IDPCwwC,CAAelgD,GAApC0P,GAAR,GAAQA,MAAOswC,GAAf,GAAeA,UAEtBtP,SACI,gBAAC,IAAD,CAAUhhC,MAAOA,IACb,gBAAC,IAAD,CAAa6Q,QAAS,KAAMy/B,UAAWA,IACnC,gBAAC,IAAD,CAAiBhgD,QAASA,GACtB,gBAAC,GAAD,KACI,gBAAC,GAAD,UAKhBH,SAASsgD,eAAe,SDVb,WACX,GAA6C,kBAAmBxB,UAAW,CAIvE,GADkB,IAAIyB,IADVvyC,GACmBP,OAAOjN,SAASwyB,YACjCwtB,SAAW/yC,OAAOjN,SAASggD,OAIrC,OAGJ/yC,OAAOgzC,iBAAiB,QAAQ,WAC5B,IAAM5B,EAAK,UAAM7wC,GAAN,sBAEPywC,GAwChB,SAAiCI,GAE7BxvC,MAAMwvC,GACD9gB,MAAK,SAAChxB,GAEH,IAAM2zC,EAAc3zC,EAASY,QAAQqD,IAAI,gBACjB,MAApBjE,EAAS0C,QAAmBixC,IAAsD,IAAvCA,EAAYxa,QAAQ,cAE/D4Y,UAAUC,cAAc4B,MAAM5iB,MAAK,SAACihB,GAChCA,EAAa4B,aAAa7iB,MAAK,WAC3BtwB,OAAOjN,SAASqgD,eAKxBjC,GAAgBC,MAGvB5gB,OAAM,WACHjxB,QAAQ01B,IAAI,oEAzDRoe,CAAwBjC,GAGxBD,GAAgBC,OCPhCkC,K","file":"static/js/main.14db78ef.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo_faan.89243a01.png\";","module.exports = __webpack_public_path__ + \"static/media/check (1).3db3797d.svg\";","module.exports = __webpack_public_path__ + \"static/media/admin_bg.fe5a292c.jpg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAejAAAHowEwL7LFAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMZQTFRF//////8AgL9AgNVVgMxNicROgMhbiLtVj79QhsJVhbxZir9VhL1Vh79Yir1XiMFViMFYhr5WisBYicBWiL5WiMBXhsFWiMBWib9Wh8FWicBXiMBYiL9WiMBXiMFYh8BYiMBXiMFWh8FXicFYiL9XicBXiMBXh79YiMBXh79XicBXiMBWiMBXh8FYiMBYiMBXiMBXiMBXiMBXiMBXiMBXiMBXiMBXiMBXiMBXh8BXiMBXiMBXiMBXiMBXiMBXiMBXiMBXiMBXft67ZwAAAEF0Uk5TAAEEBgoNDg8QFRcYGyAjLTo7PUFHSUpNUGJqenx+g4aJi5OXmJmeoKGkqqu2wMPHy9LU1tfZ29zf4O7v8/T1+f1X30g8AAAA2UlEQVQYGXXBCVLCQBAF0I/GOCoYVGQxUSAIKGhcEDAYl3//S1mVrbqYnvcg9RbrLFsvenAYsTSCKmItgmbL2hYKn4IPm6FgYDMUDGyGgoGtTaEN24TCBLY5hTlsMYV72M5/Wfu5hOKBtQ40F6y8QPfO0jV0HRae4ZIy14dLylwfDoffzN1A1xiy8HEKzdUrK7vIx77gidLu9hiSN/vjnq+wgdpRQsXjASpTqu5Q+aTqDaUzOpyg0KJDCwVvRdXKQ6k5TmlJx00IQXcQxstkk2WbZBmHg26Awj8Dxm6yJheTFAAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/departures.d92cb42e.svg\";","module.exports = __webpack_public_path__ + \"static/media/doc.62113e20.svg\";","module.exports = __webpack_public_path__ + \"static/media/patternmm.bd4f7e1f.svg\";","module.exports = __webpack_public_path__ + \"static/media/fqa-bg.865feeb2.png\";","module.exports = __webpack_public_path__ + \"static/media/arrivalService.352952f7.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/departureService.383dc06d.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/carService.57e68e20.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/loungeService.17f2ee21.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABHNCSVQICAgIfAhkiAAAEixJREFUeF7tnQuYVGUZx7+Z2V12WS5yEVmuCyTeEOQimeYtFStTM7MszTCTyizNMstMyVRUki52UczEbpqWmebl0RRFJfGWmiSF0splWUFQWHcXdnZm+v+G8+nxODtzzjCXszTf87zP7Axnznm/7/+99/cbIqYyQrUCkVBxU2HGVAAJ2SaoAFIBJGQrEDJ2KhJSASRkKxAydioSsoMAEtU8qrLMJal/6wrZXHsEO/lKyEc1u49nmWGz/u2bPWIFQsZkvoBcrXl8OctcXtS/7RWyufYIdvIF5E+a3ccctbRJr52e2S7X+4N7xAqEjMl8AKnVHO51FrxJr3NEyzzzatf7p0I21x7BTj6A7KyZ3S2aJnpa9BkRKqqYY6Bufrhod1HvYj5I906JkPp/iO5z3hf5kW/fPh9AxuvrfxbtKVokOlG0togcH6R7/0K0hygffreHtef05RNEqOCSjHwmuK84u1k0VoSk4G11FInbD+i+N4mGOPfnOV57VYxHo5ZrnA2A9M8UPSlCeoo68gHkCHF0o6hB9FvRKUVidKju+4joPaItoj+KHnL+Luqi6OaDRLj2h4oSogWib4jeKPaDswGyjx7udV3ZIdNFnxfVizDuvxG57/OY3jflyfhO+t4Bov6i/UVnOPe5Xq/ENa/ned+gX2M+SOXjokbRayKcF1QzMRYOS1vQm/q5Phsgl+oG5/u5ieeak/X+dwG/h6E+1Zl0X893N+j9l0S3BrxnIS7/um7ygww3Qo0Rhz0sIitRsBEGQEjDfEHEBhiQYWar9dks0T0Fm7X/G31Sl2IvM43N+hD7eb//2+W+Mhsgl+jr3xFtFWEzcAMxdMeKMLYMds/LItQMksEIKiFIB5NCRZH/IguAV/M50bSavtVtI0+e9GTdIY0tuadT2Cs2LWwatuqap/DyGL8UPevwSVCM4b9dhJfJGhVk+AHkTT0JdYJRRbf/SDTTefpuev2PiB18rfNZUECwG6+I+oluEx3v3OcPev1E3cA60zBrqqmajA9R2tG+dJ1ZfTFaKT2QlltEjc4r3iYAHSdqKhRn2QA5Tw+5XNTZZ+c+50yeN+O25tteHNR057K5ia7UB/V5ctxpEycNPbxx45Oz7j27s7XzXH0WZxFF7By/Y7AuXCVixwHqF50vbgNkQG1y2Kyp7bEpDSXPHrc9v656zaWLcF7cgGDs2ZwHiv4pYgMVLE7JBgg7HQ8qNe74PV6sP2FCc7xlc82aKxfvtbm5dVC/+urkyOuPXWSikWTLVY+N3bCkuVHX4gUByN/8oqHrsgISq4ltGHzE2GsGnDIRlVnSse7G5/bfePdL54QFEFIV9+PQNpw00fQ9arzpWt9m1l7xqOlY02r67jbINFy8zZSsn7fYvL5kDX+iej4l+nuAlcsKiO7DjU8XlcOos7mQVIZVWWWTEOzDsuqGvmboGfuauvGDTGfLm2bNnEdMXK+DZ4wzA0+bsg2Qc+8zr68k/ZMWYXJbpBz8jqyARKJmbe/GAeeOuPTAhX5vWKjrms57+OitKzddExZAMLavxQbUxoacOtn0mT7cxFdtNitnLzTJtrgZeuIE0++4PUwsnjAvnX2vib9GgtcQFOIABNGpWQGp3am2a8TpUzbWTBteME/GL2Ctz66tXTXnUZKpoZAQ4oP1ooH99xthhpw53cSfazFNcxenuRt/1nvlqI4ykQ3tZsX5D5j4G2Q30moF9ZLWXz5HdqMePi+rbCqL9UQFTagb2c8Mv+Qw0/rYSvPqfDLuSjDNnWGio/pLfbWalRcuNIlN6Q1MEEW6I0iKI7uE9O8VH3n61Jba6cPSIljKsfmp5vpXrlw8wnlm2W0IfNwhOrpWu3TEvCNN+61LTfNdy03t7oPNqO+Rd5OfK1995VWLTaItTp7rOtFXRUHUSy6jXs5IPVRGnfX+GTu+OhYxo687xmyWdKx7fLWpn9Jghp/3/jQgHU83mzVXLzHJji5yOkTu3xIFSVPnAqScXpY7dRIKCSHlPJeF33vuEWaFAGlbvtHUjd3JjJxDFl4pzwdXmLU3PGuSnQnqFBeJCCaDjAogrtXKVQ8hT0OByIy54EDz6rVPm/b17WbApF3MzudvS/G03bHMrL35BZNMpNDxZztqKxcgROXVIp5P7eFfIj77lXMPovJfi0jehUVCThIvfxFRp4E3cm9LRbj55PPQEGzK7SqgeQHBs7KpAhaV2kc66m6QV7Xu6idMIpkygw8ebYbKFWZsuGWpablnuUmlTKveYtBhmgGDuF4UeOwgkXiY6DTRVBGpdp7ZRwQvTAaH4N+ikaIxorAA8oB4obYPX4QENAoyN6qYvMI3a0V241Fn/q6p+/vTC8g4fe0K11dZsBm8r9t1oOmQumL0HlJveo+BJ0nIK2+YjpZ0rYY81hMim5Wlukbm1gaJ+PNniXCLbUnWD5dhAcQPr2xCNhMJWKQ9cP7NCwgZTBa1EANgKO+SWh/mMIh0xEQwjpqifcg6ANRCcN28LaphBGSd+EQK7IIj5XThNDoLh6STuf6KiGqj7+EFZJK+eWeWb7OYiC36nkXNFgASVH5NRCGH7CjSx+JTAaSLBGcBNcdADVwlsql3rkG9oT7DAggbrE5ECQIVRUGNOVCeYKB2f+zMgVICc6XETWWxybkm54sXEBaAdpvuBmqHwhVJLOwDKejuBiqMghauM5LHbmJXzRPdJbKlT4zkT0QUvrgekacwRtkWiSpnHOJ2eykvoIbxJAkW4f+HIkB51VkEwKJtCNefDcg1NILMFPkKBXJ5Wc5z3noZrr9+L8LFwphla1rj3jQmMAF2FtcT5uORuJkbrfcENXhd7EKyxQDHc5hcWCQEvlBDlCVw7dmcSAe5JBof7GAee4smOh8wb+b3jOuabv8sJiCI7XwRu8zPQC8fIrJdkOkClTNZ3OkgNRY/z/NzDa1AGGeGDQxZM2okl4mQaD8DI4/6zjmKCQg76AbRUSJEF3H3eh14cUgPO42UywIR0gOYAEJlkveWck6oCBdgNxmooSsdXlg3ewIA3pgbKto9kBRcUa51l6azslhMQKyEsMsJGn8qWuLhhriFQhj+9EwRDgVqkDIudgQHIiyDMjNlbRKogMAGwoiz2S4U4TW6B/YVyWaNQyEhMPJdEb1duIUYQG+ei04OgkQ3IBhPJoiDwT3w0DDs5RoEpx8RISmo1W+LkHxcWgsIpdO3uiEcRm/UK1E8Q7WKdCtqzlFMCeHhnBGhaQ5ngIofBtFtAC0gthlulP4dtQCASBXeF4D68lByzja/C4iPcMlJnWAz4J8+Mlpc2WRIiBcQVNVKESr5eRHhhK9RbEBQP6RSUEvsLgzjQy7OLCDEI6gzxLyXCIBwJ63O9jWZIl5EDxLSTrsTkkLvAC1AuOqZAEFVARYbiQ3lO+FabEBYozNFGEAYhzlS9Da/ZQHh32AeycDAcw0TsoFjEdfa963JSs8WYd8ABSOO4fYCwmdsLpJ9BMeA5rvpoxSAkM2lSRlGqbmTG7PVPwuIe1XQvUhHOdVUdyjhEWLYiY/s8AKCvSARiQ3EVSd95Pv8TCkAgfF05VFEJRF9SjTOyARId4sR1s+9gBAMk81gkJXAW3RnvLPOo1SA4PriLvK8C0TkgXZEQEidUMamjoO6wubYcoSvDVUqQEiPoEcxji+ISC24AUGF4d56D4/6mkSZLnqfnovUuyWEMzW4xLwyF3Jxbq8yJ6ulAoSdQwqCrnFsAy7jClGmOCQn0yG5wB0YWreXbDWHi5gvuThc5UCjVIBg0KnPo1vxpD4rogy6IwHC8TuCxu+LWFeOUyAtgUapAIEpEnULnN0DEFQOLSC4uhyTs320gSZRpouJkcgqWJXF8Tf6DziegBFHCzQF5a2UgFBDgWGOVZNe/5CIHA+pE9QYqXkiYlvwCTqXUl3PmrHYpHeIyC0g8E+KfVcRXiR1pcCueykB2UUMck6Q2gAGj44W9DCA9ORhASF6BwhblCMgDjxKCQh2hOoZQRWFKCLeYxxA2ElMDPsSlKfAky7QFyglUP+3gNC4wQkrxqdF6fapoCPo5INUDDPxMlsfkj4h7UDEi3uIhFBPoNuFXea36BN0roW8npQObi+OigUEG0kOi7lxlOO/+Tyw1IDgBmLIWXQAoBsFj8udfs9nHuX4jtftZbMdIiJNAiB55eFKDYg7z0POitwQUXxPB4T8HOqKgpo3X+d/s9TXDy01IBh2DB+BE7+Tgh7GjvR0QJB86j7YQGzHqaIgJwAsaJNLDQhpayJ0ClFU0ADiyB0AEHfNg4Qi9jFw16K+M7XUgLATEGkalWkHwoiTdujpEvJzzQE3F2+RMjX1HNt3Zne/j9eaPcsBCM3IlHLJhqK+iEt6OiDYD+IqpILyrm0d8gGC+5IRdeUAhGicviYayDgyR4d9TwfkQc2BMjVd5+SwbDwSEJDgQdj2xiEwSAEHl5d8D6d1+dm+ngwI86C5b4KIIwkzRRTk8hrlkBACQWIRdCztPRj4QgGC00AjOI0SRNEQng+LhjqB6EnGA8pDx79jjW0cQiBI7ME8qH3gYfFbjXmNcgBCWgEX0XbC0zwQFBAWniZtmp6RWgJM7kPLDg16dLuQqiEA5VqAsKebKIbRkc8zaZImjUMTHJuDowN+E4IWEO5NpoHn46TMFD2UFxr6UjkAoYhDdZCJs0js5lyAsMv5jUccAFqFSLkACAtuCWlg8f3MiWdbibFAITmAgjtONhrK1pzgjtS5F3zg0gMItZG8hh/m3TfeXhvC8+jCWODhlt/l4PgBQRWLSscGwSMNEQSOh4oABGC8A9XDgqA67CKjomxrEYvPc23ikvsjPQBoXzOtA/fDNqB+CGLxCJEsJIzrSb9D7oGEUEfvMSpropil6N8oYqFYOHtiigIPQRX1Ejyv/UTeo298hwVh59IZSPMdf0OoH4wqTXbUVNjx9owjzyBNg32hmxD1QpqD+7PJyCAgcRwc4hWpdQ/45Hn0WyFB2KCLnXvYTDVAswkw6BxdSP+0RdBRagmhg4/fMWQSfxVRHyEm+bCISbOY9HHZjnPmw65n53HUjiIQOxUgiGPQ3exa3202GRYIsCg0YX8ACnBowuBQKrk3QLOSCd9IDosNsLxS5aT/innRHMdnqNZtP3kRcJQSENQDAKCCMKJ4W0wEw9wkcoPAAtOdgq3Bp8c99mtsAy5BzstZZHJV1HHwpNwDlUZ7LPEUGQca5BiUo2l2CDy8gGCYsv2WHruHBmh2DjuBGKK7waLitVjR5VlEsNgQVAo1aRabXBatpgykAJWGzmaS27PzAy9Gji8gSdRAOO9CVA44SOpFIhrJOVrBKWPUFu2jaIDAwwsIdWCQ7W43Ahg1Y3vw0Xvew80AnhMdGO5TvTQAUDXELUXdoJe5H/od9/MgUZCfdgo84QJ9AQ+Ldleknk2H/WJzAhrlaTzBQKdvLV9eQIp1LNo+D6NKFzkJOLfHRDGHFiHSKmGSiu7ww35wktjbd4XEkIkgX5dX4OkFxHpBhdhIGF0MXSafHElBxMeIkBKA4AhxTwDDvTa0MlHxxPBjT5Aastl52zsvILxHfRRiwFS2FAXPQsS9Z/MK8exS3gNJh/Kpf7yLz6BeVikn+n/5rAogIYO9AkgFkJCtQMjYqUhIBZCQrUDI2KlISAWQkK1AyNipSEgFkJCtQMjYqUhIBZCQrUDI2KlISMgB6WdiNUdHI5Fp6quor6D1TrT0Y9EdyVRKvybdSUUz+/8AUV29j0lEjozGImO0ju/olknn5lOmPZlKPmMS8dv1jr6A9HCvecRU1VxuuuL6Ya5UoVLwIdt/BWFnUzRac1ky2UmHTOaUe6/+40zn5lv0c9/U47Ps60hHtKpqfrIrzu8xpnF6++JevcaZrVtpccn0nzsWZCY7yk0i0djLqWSCZr3MR7irel1hurZyht2PkombXn0nmK2t/PeD7i/U7KVGQn6PhPJkZWRZgUi0al0q2cVZ9YznCKPVva9LxtvpPPEzJBk1agjspKnDDUhjrYmsvsmkuuiY8IOsn4ftiNd0mVhsvkkkUDOZ/yeEqrr9TWLL7VJZ9v+v6m4dUpFI1f2p1AiteVO6O8ez8LWjTVXirEgqdUAqlaQhoTJcKxCJRDsjqciiZDKmX+veQh9vdyMq50h9A8lTZBn0S0jJd2/wSFQARJaYREy/nLflrSPUFUkI2ZarAFIBJGQrEDJ2KhISMkD+B1SuJpciBS6UAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAABACAYAAACeELDCAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAWKADAAQAAAABAAAAQAAAAACU2LZpAAAEqElEQVR4Ae2Zy3EcRxBEIVEW0QdddKENvOgiB2iC7pIBcoEX3mgF3aE+SIBvI1Gq6u2e6R1iNrojZrMqq7o+uUMECT48rLMUWAosBZYCS4GlwFJgiwI/bLk0cOfW9QdGaab+24zuCM4UYGatHStNuzpF9L2i9NzvyZmmyoZCPUL25KStty5f3at4b96T4/mz7R6xqpyKL2fcsmx2J3LRZ4CKJ34UVkJFPvqaL+PKuUcXjvnuV7aae6wc5jsEoljuV7bG9Fhz7JHFYy7+M/7+7muzU0fwz59/ffjt7S8dmXXKX18+P7z/9Eed0Bv58PGnb6mICVIh+vAv8McXXu0gpjJk40esK5wvEnfzvbUN8eZmfEutpKqQN6xyWnVfeyzulL2xysn4y249Al+SHw2aCnkUh5d9LyfbSWKKb4rqAvT+iNAdGgqjPVLH+79mWztlu2pm9r86/+gb7AVjc4/dgx33635rffnWmxcb6B4cKI5vWvY9He2IPuwLak/ZOs49M/Y54w1uNrBeZzNdQM0+/Q2OgnjDaPNNxztn9vmTGXfVTnBX9xsVhsLC+FxtdrKEuJ/v3r1Kj8AUjkXjADF+dr9nv0qby+49AivZC9HYeY9fip/cYCdHbN+9uWavwFlBmgmxm81OFvS94n7RL1cbEVhFYmEfomxy4kC2X9Sgud6owCqWNci4ZuMTBLOdMq65yhaBVVCNhps1J3ndwc37bhUYOWh8j2JP2W2vwAi9sFBgCVwIM4teAs9SsqizBC6EmUUvgWcpWdRZAhfCzKKXwLOULOrsFVi/hOYpWpyWZq9Nv2hn660C05w6946b990icPaNZtzZRc92yrjmnqMCxwbyI9dseLJgtt/Qvq3fIRDj3+TSRra+FD2y3xiKk0+cHNDrPKYd/ssiFwbhhP88PqBsPX8bKibfc2TrCN1+Iv2j93+VVUQC6VBUPjycUAMqJpS4+K9VYGZ2ZJ/H8V8IKJ7jNtz/sEdgFUJcL8AQjlFU5SMsNSJ6zVvaCOLI7Jo7s+G4E+er+Etej8CX5G9DSCAK+wDYGlbHhczs56zjP5lTnbERGISPyJ3uqUcEVjMXF1s8oqqxi6mYfkzoOO/+U/CAD82iE9FFxRZie77bT8WufYwIHGvFZvI1lAvJl+AcdeDwb43Mqz7YQn9cVOfJH56xZ0lyHGXr4e3kbwogcVCDydYBn73jPxHLMYqJ0EIdfPLE+X356dn7BscmGgRRQTVGVDAd5kAyzo1wGWos8odHHBFYTSQQzdzOhEXMiAwJj39rZG764DvKjo/ney58E0cEViE1cGGz4uQgIKhct7O7R3EIpX7YwmhH3/NlXz09AqtJJgzNvQm5oGLxbvT9/hF2nBs/w8jF+YhH/uKPLBtz8SOqeMbRlBj+0ZiJAgdqJuyIzAuPn+LosjHf/cpWY4+lg3wnMorkfmVrVI81R9+yeHYnctFniIonfhRWAkU++pov48q5ty5c3at4H6Anx/Nn2z0CVTkVX864d9me+z055YAHBHpE68lJR525/Mxa6bAHk5tF9TlvLcqt6/sue+wpYu4ZYN1dCiwFlgJLgaXAUmAp8FKB/wAzFhd/j2As4AAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/folder.ac94bb01.svg\";","module.exports = __webpack_public_path__ + \"static/media/award03.6e5c05a0.jpeg\";","module.exports = __webpack_public_path__ + \"static/media/award1.89243a01.png\";","module.exports = __webpack_public_path__ + \"static/media/award3.a7957eeb.jpeg\";","import styled from 'styled-components';\n\nexport const LayoutStyleWrapper = styled.div`\n height: 92vh;\n\n @media only screen and (min-width: 970px) {\n .layoutWrapper {\n display: block;\n width: calc(100% - 300px);\n flex: 1;\n height: 100%;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 300px;\n background: #fff;\n\n .mainWrapper {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n width: 100%;\n min-height: 100vh;\n background: #ccc;\n position: relative;\n align-items: stretch;\n background: #fff;\n }\n\n .bodyContent {\n padding: 3rem 2rem 2rem 4rem;\n flex: 1 0 70%;\n width: 70%;\n max-width: 100%;\n height: 100%;\n min-height: 100vh;\n background: #fff;\n }\n\n .bodyContentSwitch {\n padding: 3rem 2rem 2rem 4rem;\n flex: 1 0 70%;\n width: 100%;\n max-width: 100%;\n height: 100%;\n min-height: 100vh;\n background: #fff;\n }\n }\n\n .rightSidebar {\n background: #fefdfb 0% 0% no-repeat padding-box;\n border: 1px solid #dddddd;\n color: #000;\n padding: 3rem 2rem 2rem 2rem;\n line-height: 2rem;\n flex: 1 0 30%;\n width: 30%;\n max-width: 30%;\n min-height: 100vh;\n\n h4 {\n font-weight: bold;\n font-size: 18px;\n }\n\n .quickDiv {\n background-color: #ffffff;\n border: 3px solid #f4f4f4;\n border-radius: 14px;\n padding: 0.75em 1em;\n margin-top: 1em;\n\n & > * + * {\n margin-top: 0.65em;\n }\n\n .header {\n color: #a1a1a1;\n font-size: 13px;\n font-size: 400;\n }\n\n p {\n font-size: 16px;\n font-weight: 600;\n line-height: 1.5rem;\n }\n }\n\n .contactDiv {\n margin-top: 2rem;\n\n p {\n font-size: 13px;\n font-weight: bold;\n }\n\n .btn-btn {\n i {\n font-size: 11px;\n }\n\n span {\n font-size: 12px;\n letter-spacing: 1.2px;\n }\n }\n }\n }\n }\n\n @media only screen and (max-width: 970px) {\n display: flex;\n flex-direction: column;\n\n .layoutWrapper {\n position: relative;\n height: 100%;\n\n .bodyContent,\n .bodyContentSwitch {\n background: #fff;\n padding: 2rem 2rem 175px;\n }\n }\n\n .rightSidebar {\n display: none;\n }\n }\n`;\n","import React from 'react';\nimport { SidebarMenu, TopNavigation } from '../index';\nimport { LayoutStyleWrapper } from './auth-layout.style';\n\ntype Props = {\n showSidebar?: boolean;\n};\n\nclass AuthLayout extends React.Component {\n public render() {\n return (\n \n \n \n \n
\n
\n
{this.props.children}
\n
\n
\n
\n
\n );\n }\n}\n\nexport default AuthLayout;\n","import React from 'react';\nimport './Container.scss';\n\nclass Container extends React.Component<{}, {}> {\n public render() {\n const { children } = this.props;\n\n return
{children}
;\n }\n}\n\nexport default Container;\n","import React from 'react';\nimport { Button } from 'reactstrap';\nimport './CustomButton.scss';\n\ntype Props = {\n title: string;\n type: string;\n disable: boolean;\n};\n\nclass CustomButton extends React.Component {\n public render() {\n const { title, type, disable } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nexport default CustomButton;\n","import { Action, createBrowserHistory, Location, LocationState, Path } from 'history';\nimport * as queryString from 'query-string';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\nexport const history = createBrowserHistory({ basename: baseUrl });\n\nclass PathLocationManager {\n private pastLocations: Location[] = [];\n private readonly key = 'appLocationHistory';\n\n constructor() {\n this.pastLocations = [];\n }\n\n public push(location: Location) {\n this.pastLocations.push(location);\n }\n\n public pop() {\n this.pastLocations.pop();\n }\n\n public length() {\n return this.pastLocations.length;\n }\n\n public setLocation(index: number, location: Location) {\n this.pastLocations[index] = location;\n }\n\n public getLocation(index: number) {\n return this.pastLocations[index];\n }\n\n public setLocations(locations: Location[]) {\n this.pastLocations = locations;\n }\n\n private dumpToSessionStorage() {\n sessionStorage.setItem(this.key, JSON.stringify(this.pastLocations));\n }\n}\n\nconst pastLocations = new PathLocationManager();\n\nfunction updatePastLocations(location: Location, action: Action) {\n switch (action) {\n case 'PUSH':\n // first location when app loads and when pushing onto history\n pastLocations.push(location);\n break;\n case 'REPLACE':\n // only when using history.replace\n pastLocations.setLocation(pastLocations.length() - 1, location);\n break;\n case 'POP': {\n // happens when using the back button, or forward button\n pastLocations.pop();\n // location according to pastLocations\n const appLocation = pastLocations.getLocation(pastLocations.length() - 1);\n if (!(appLocation && appLocation.key === location.key)) {\n // If the current location doesn't match what the app thinks is the current location,\n // blow up the app history.\n pastLocations.setLocations([location]);\n }\n break;\n }\n default:\n }\n}\n\nhistory.listen(updatePastLocations);\n\nexport function isPreviousLocationWithinApp(): boolean {\n return pastLocations.length() > 1;\n}\n\nexport function goBackOrPush(location: Path, state?: LocationState): void {\n if (isPreviousLocationWithinApp()) {\n history.goBack();\n } else {\n history.push(location, state);\n }\n}\n\nexport function setSearch>(param: keyof SearchParams, value: any) {\n if (!param) {\n return history.push({ search: '' });\n }\n\n const search = queryString.parse(history.location.search) as unknown as SearchParams;\n search[param] = value;\n\n history.push({\n search: `?${queryString.stringify(search)}`,\n });\n}\n","type Arg = string | undefined | boolean | null | Arg[];\n\nexport const generateClassNames = (...classNames: Arg[]): string => {\n return classNames.reduce((acc, current) => {\n if (!current) {\n return acc;\n }\n\n if (Array.isArray(current)) {\n return generateClassNames(...current);\n }\n\n return acc + ' ' + current;\n }, '');\n};\n","export enum Airports {\n ABV,\n YOL,\n QUO,\n QOW,\n MIU,\n IBA,\n CBQ,\n BNI,\n BCU,\n JOS,\n SKO,\n PHC,\n LOS,\n KAN,\n KAD,\n ILR,\n ENU,\n ABB,\n}\n\nexport const AirportsMap = {\n [Airports.ABV]: 'Nnamdi Azikiwe International Airport',\n [Airports.YOL]: 'Yola Airport',\n [Airports.QUO]: 'Akwa Ibom International Airport',\n [Airports.QOW]: 'Sam Mbakwe International Cargo Airport',\n [Airports.MIU]: 'Maiduguri International Airport',\n [Airports.IBA]: 'Ibadan Airport',\n [Airports.CBQ]: 'Margaret Ekpo International Airport',\n [Airports.BNI]: 'Benin Airport',\n [Airports.BCU]: 'Sir Abubakar Tafawa Balewa Airport',\n [Airports.JOS]: 'Yakubu Gowon Airport',\n [Airports.SKO]: 'Sadiq Abubakar III International Airport',\n [Airports.PHC]: 'Port Harcourt International Airport',\n [Airports.LOS]: 'Murtala Muhammed International Airport',\n [Airports.KAN]: 'Mallam Aminu Kano International Airport',\n [Airports.KAD]: 'Kaduna International Airport',\n [Airports.ILR]: 'Ilorin International Airport',\n [Airports.ENU]: 'Akanu Ibiam International Airport',\n [Airports.ABB]: 'Asaba International Airport',\n};\n","import { Button } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const CustomPrimaryButton = styled(Button)`\n background: var(--primary-color);\n height: 40px !important;\n font-weight: bold;\n color: white;\n border-radius: 5px;\n border: 1px solid var(--primary-color);\n outline: none !important;\n appearance: none;\n display: inline-flex;\n justify-content: center;\n text-transform: uppercase;\n letter-spacing: 1.4px;\n align-items: center;\n padding: 0 15px;\n box-shadow: none;\n min-width: max-content;\n font-size: 14px !important;\n margin-right: 5px;\n\n :hover,\n :focus,\n :active {\n color: white !important;\n background: var(--primary-color) !important;\n border-color: var(--primary-color) !important;\n box-shadow: none;\n }\n\n :disabled {\n background: #848484;\n cursor: not-allowed;\n }\n\n &.small {\n height: 28px !important;\n text-transform: none;\n letter-spacing: 0;\n font-weight: normal !important;\n }\n\n &.inverted {\n background: white;\n color: var(--primary-color);\n\n :hover,\n :focus,\n :active {\n background: white !important;\n color: var(--primary-color) !important;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const AppLayoutStyle = styled.div`\n .tab-header {\n border-bottom: 1px solid #dadada;\n padding: 0rem 2rem 0rem 2rem;\n }\n\n .tab-nav {\n border: 0;\n }\n\n @media (max-width: 600px) {\n .tab-nav__item {\n margin-right: 1rem;\n border: 0;\n }\n }\n\n @media (min-width: 600px) {\n .tab-nav__item {\n margin-right: 3rem;\n border: 0;\n }\n }\n\n .tab-nav__link {\n font-weight: normal;\n font-size: 14px;\n color: #222222 !important;\n padding: 1.5rem 0px 1.5rem;\n border: 0;\n cursor: pointer;\n width: auto;\n text-align: center;\n }\n\n .tab-nav__link.active {\n border-bottom: 2px solid #18a956;\n color: #18a956 !important;\n }\n\n .tab-nav__serachContainer {\n display: flex;\n gap: 1rem;\n align-self: center;\n }\n\n .tab-nav__serachWrapper {\n border: 2px solid #dadada;\n align-self: center;\n padding: 0.5rem 2rem 0.5rem 0.5rem;\n border-radius: 10px;\n display: flex;\n align-items: center;\n }\n\n .tab-nav__searchIcon {\n cursor: pointer;\n color: gray;\n }\n\n .tab-nav__searchInput {\n border: 0;\n outline: none;\n margin-left: 3px;\n }\n\n .tab-body {\n padding: 1rem 2rem 1rem 2rem;\n }\n\n .content-body {\n background: #ffffff 0% 0% no-repeat padding-box;\n border: 1px solid #dadada;\n border-radius: 7px;\n margin-top: 1rem;\n height: 100%;\n }\n\n .tab__content__row {\n padding: 2rem;\n border-bottom: 1px solid #dadada;\n\n :last-of-type,\n :last-child {\n border: none;\n }\n }\n`;\n\nexport const Header = styled.div`\n @media (min-width: 601px) {\n margin-bottom: 2rem;\n align-items: flex-start;\n }\n\n @media (max-width: 600px) {\n }\n\n .header__title {\n font-weight: bold;\n font-size: 19px;\n margin: 0;\n }\n\n .header__back-button {\n height: 35px;\n width: 35px;\n display: flex;\n margin-right: 10px;\n align-items: center;\n justify-content: center;\n background: #f0f0f0;\n color: black;\n border-radius: 100%;\n }\n`;\n","import React from 'react';\nimport { ChevronLeft, Search, Send } from 'react-feather';\nimport { Link } from 'react-router-dom';\nimport { Nav, NavItem, NavLink } from 'reactstrap';\nimport { history, isPreviousLocationWithinApp } from '../../util/history';\nimport { generateClassNames } from '../../util/misc/generate-class-names';\nimport { CustomPrimaryButton } from '../utilities/custom-primary-button/custom-primary-button';\nimport { AppLayoutStyle, Header } from './app-layout-style';\n\nexport interface TabLink {\n index: number;\n name: string;\n query?: [] | [string, any];\n}\n\nconst Wrapper: React.FC = ({ children }) => {\n return {children};\n};\n\nconst Body: React.FC<{ className?: string }> = ({ children, className }) => {\n return
{children}
;\n};\n\nconst TabHeader: React.FC<{\n links?: TabLink[];\n activeTab?: number;\n setActiveTab?: React.Dispatch>;\n searchable?: boolean;\n handleChange?: (e: React.ChangeEvent) => void;\n value?: string;\n handleSearch?: () => void;\n handleExport?: () => void;\n isSearchNotOnChange?: boolean;\n}> = ({\n activeTab,\n setActiveTab,\n links,\n children,\n searchable,\n handleChange,\n value,\n handleSearch,\n handleExport,\n isSearchNotOnChange,\n}) => {\n return (\n
\n {links && activeTab !== undefined && setActiveTab && (\n \n )}\n {children}\n
\n );\n};\n\nconst TabBody: React.FC> = ({ className, ...props }) => {\n return
;\n};\n\nconst HeaderBackButton: React.FC<{\n showIf?: () => boolean;\n action?: () => void;\n}> = ({ showIf, action }) => {\n return showIf?.() || isPreviousLocationWithinApp() ? (\n {\n e.preventDefault();\n\n if (action && showIf?.()) {\n action();\n return;\n }\n\n history.goBack();\n }}\n >\n \n \n ) : null;\n};\n\nexport const AppLayout = {\n Wrapper,\n Header,\n HeaderBackButton,\n Body,\n TabHeader,\n TabBody,\n};\n","export enum BookingStatuses {\n Processing = 'Processing',\n PaymentReceived = 'Payment_Received',\n ServiceRendered = 'Service_Rendered',\n NoShow = 'No_Show',\n FlightCanceled = 'Flight_Canceled',\n Canceled = 'Canceled',\n}\n\nexport const BookingStatusesMap = {\n [BookingStatuses.Processing]: BookingStatuses.Processing,\n [BookingStatuses.PaymentReceived]: 'Payment Received',\n [BookingStatuses.ServiceRendered]: 'Service Rendered',\n [BookingStatuses.NoShow]: 'No Show',\n [BookingStatuses.Canceled]: BookingStatuses.Canceled,\n [BookingStatuses.FlightCanceled]: BookingStatuses.FlightCanceled,\n};\n\nexport const BookingStatusAdminAvailableState: Record = {\n [BookingStatuses.Processing]: [\n BookingStatuses.ServiceRendered,\n BookingStatuses.NoShow,\n BookingStatuses.FlightCanceled,\n BookingStatuses.Canceled,\n ],\n [BookingStatuses.PaymentReceived]: [],\n [BookingStatuses.ServiceRendered]: [],\n [BookingStatuses.NoShow]: [],\n [BookingStatuses.Canceled]: [],\n [BookingStatuses.FlightCanceled]: [],\n};\n","export enum ClientStatuses {\n Processing = 'Processing',\n Inactive = 'Inactive',\n Active = 'Active',\n New = 'New',\n Deactivated = 'Deactivated',\n}\n\nexport const ClientStatusesMap = {\n [ClientStatuses.Processing]: ClientStatuses.Processing,\n [ClientStatuses.Inactive]: ClientStatuses.Inactive,\n [ClientStatuses.Active]: ClientStatuses.Active,\n [ClientStatuses.New]: ClientStatuses.New,\n [ClientStatuses.Deactivated]: ClientStatuses.Deactivated,\n};\n","export const BusinessNatures = [\n 'Agriculture',\n 'Aviation',\n 'Commercial and Retail',\n 'Construction',\n 'Education and Training',\n 'Energy and Power Generation',\n 'Fashion',\n 'Financial Services',\n 'Haulage and Logistics',\n 'Healthcare',\n 'ICT',\n 'Manufacturing',\n 'Media and Entertainment',\n 'Oil and Gas',\n 'Professional Services',\n 'Real Estate',\n 'Telecommunications',\n 'Tourism and Hospitality',\n 'Transportation',\n 'Waste Management',\n 'Others',\n];\n","export enum ClientTypes {\n International = 1,\n Domestic,\n}\n\nexport const ClientTypesMap = {\n [ClientTypes.International]: 'International',\n [ClientTypes.Domestic]: 'Domestic',\n};\n","export enum EOptions {\n Yes,\n No,\n Maybe,\n}\n","export enum Genders {\n Male = 'Male',\n Female = 'Female',\n}\n\nexport const GendersMap = {\n [Genders.Male]: 'Male',\n [Genders.Female]: 'Female',\n};\n","export enum GovernmentStaffTypes {\n State = 'State',\n Federal = 'Federal',\n}\n\nexport const GovernmentStaffTypesMap = {\n [GovernmentStaffTypes.State]: 'State',\n [GovernmentStaffTypes.Federal]: 'Federal',\n};\n","export enum Honorifics {\n Mr = 'Mr.',\n Mrs = 'Mrs.',\n Master = 'Master',\n Miss = 'Ms.',\n Dr = 'Dr.',\n}\n\nexport const HonorificsMap = {\n [Honorifics.Mr]: 'Mr.',\n [Honorifics.Mrs]: 'Mrs.',\n [Honorifics.Master]: 'Master',\n [Honorifics.Miss]: 'Ms.',\n [Honorifics.Dr]: 'Dr.',\n};\n","export enum MeansOfId {\n NationalId = 'National identification card',\n NationalPassport = 'National passport',\n VoterCard = 'Voter card',\n DriversLicense = \"Driver's license\",\n}\n\nexport const MeansOfIdList = [\n MeansOfId.NationalId,\n MeansOfId.NationalPassport,\n MeansOfId.VoterCard,\n MeansOfId.DriversLicense,\n];\n","export enum NotificationTypes {\n Success,\n Info,\n Error,\n Warning,\n}\n","export const NigerianStates = [\n 'Abia',\n 'Adamawa',\n 'Akwa Ibom',\n 'Anambra',\n 'Bauchi',\n 'Bayelsa',\n 'Benue',\n 'Borno',\n 'Cross River',\n 'Delta',\n 'Ebonyi',\n 'Edo',\n 'Ekiti',\n 'Enugu',\n 'FCT - Abuja',\n 'Gombe',\n 'Imo',\n 'Jigawa',\n 'Kaduna',\n 'Kano',\n 'Katsina',\n 'Kebbi',\n 'Kogi',\n 'Kwara',\n 'Lagos',\n 'Nasarawa',\n 'Niger',\n 'Ogun',\n 'Ondo',\n 'Osun',\n 'Oyo',\n 'Plateau',\n 'Rivers',\n 'Sokoto',\n 'Taraba',\n 'Yobe',\n 'Zamfara',\n];\n","export enum Roles {\n Admin = 'Admin',\n Commercial = 'Commercial',\n Auditor = 'Auditor',\n Accountant = 'Accountant',\n Client = 'Client',\n AirportManager = 'Airport Manager',\n AirportProtocolCoordinator = 'Airport Protocol Coordinator',\n Protocol = 'Protocol',\n}\n\nexport const CreateUserRolesMap = {\n [Roles.Admin]: Roles.Admin,\n [Roles.Auditor]: Roles.Auditor,\n [Roles.Accountant]: Roles.Accountant,\n [Roles.AirportManager]: Roles.AirportManager,\n [Roles.AirportProtocolCoordinator]: Roles.AirportProtocolCoordinator,\n [Roles.Commercial]: Roles.Commercial,\n};\n\nexport const CreateProtocolRoleMap = {\n [Roles.Protocol]: Roles.Protocol,\n};\n\nexport const RolesMap = {\n ...CreateUserRolesMap,\n [Roles.Client]: Roles.Client,\n};\n\nexport const NewRoles = [Roles.Accountant, Roles.Auditor, Roles.Commercial];\n","export enum ServiceCategories {\n Arrival = 1,\n Departure,\n}\n\nexport const ServiceCategoriesMap = {\n [ServiceCategories.Arrival]: 'Arrival',\n [ServiceCategories.Departure]: 'Departure',\n};\n","export enum TransactionTypes {\n Bookings = 0,\n Registration = 1,\n Fund = 2,\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { AuthenticatedUser } from '../models/response';\nimport { ApplicationState } from '../store';\nimport { ClientTypes, Roles } from '../util/constants';\n\ntype AccessTypes = 'view' | 'manage';\n\ninterface AuthContextState {\n user?: AuthenticatedUser;\n canAccess: (role: Roles | Roles[], strict?: boolean) => boolean;\n isInAirport: (airportId: number, access: AccessTypes) => boolean;\n isClientOfType: (clientType: ClientTypes) => boolean;\n}\n\nconst initialState: AuthContextState = {\n canAccess: () => false,\n isInAirport: () => false,\n isClientOfType: () => false,\n};\n\nconst Context = React.createContext(initialState);\n\nconst Provider: React.FC = ({ children }) => {\n const { authUser: user } = useSelector((state: ApplicationState) => state.auth);\n\n const returnAccessLevel = React.useCallback(\n (role: Roles, strict?: boolean) => {\n if (strict) {\n // In case you need an exact match\n return user?.role === role;\n }\n\n switch (user?.role) {\n case Roles.Admin:\n return true;\n case Roles.Client:\n return role === Roles.Client;\n case Roles.AirportProtocolCoordinator:\n return role === Roles.AirportProtocolCoordinator;\n case Roles.AirportManager:\n return role === Roles.AirportManager;\n case Roles.Accountant:\n case Roles.Auditor:\n case Roles.Commercial:\n return role === Roles.Accountant || role === Roles.Auditor || role === Roles.Commercial;\n default:\n return false;\n }\n },\n [user]\n );\n\n const canAccess = React.useCallback(\n (role: Roles | Roles[], strict?: boolean) => {\n if (!user) {\n return false;\n }\n\n if (Array.isArray(role)) {\n return role.some((_role) => returnAccessLevel(_role, strict));\n }\n\n return returnAccessLevel(role, strict);\n },\n [user, returnAccessLevel]\n );\n\n const isClientOfType = React.useCallback(\n (clientType: ClientTypes) => {\n return (\n canAccess(Roles.Admin) ||\n (canAccess(Roles.Client) && user?.clientTypeId === ClientTypes.International) ||\n user?.clientTypeId === clientType\n );\n },\n [user, canAccess]\n );\n\n // Airport managers can view resources whether or not they are from\n // their airports but cannot manage them\n // Airport protocol coordinators can see and manage resources in their\n // airports ONLY\n const isInAirport = React.useCallback(\n (airportId: number, access: AccessTypes = 'view') => {\n switch (user?.role) {\n case Roles.Admin:\n return true;\n case Roles.AirportProtocolCoordinator:\n return user.airportId === airportId;\n case Roles.AirportManager: {\n if (access === 'manage') return false;\n return true;\n }\n case Roles.Accountant:\n case Roles.Auditor:\n case Roles.Commercial:\n return true;\n default:\n return false;\n }\n },\n [user]\n );\n\n const contextState = React.useMemo(\n () => ({ user, canAccess, isClientOfType, isInAirport }),\n [user, canAccess, isClientOfType, isInAirport]\n );\n return {children};\n};\n\nexport const AuthContext = {\n Context,\n Provider,\n Consumer: Context.Consumer,\n};\n","import { SystemNotification } from '../../models/response';\n\nexport interface NotificationsState {\n notifications: SystemNotification[];\n idCounter: number;\n}\n\nexport enum NotificationsActionNames {\n ADD = 'NOTIFICATIONS_ADD',\n REMOVE = 'NOTIFICATIONS_REMOVE',\n}\n","import { flatten } from 'lodash';\nimport { NotificationTypes } from '../../util/constants';\n\nexport type AcceptableNotificationContentTypes =\n | string\n | string[]\n | Record\n | Record\n | undefined;\n\nexport class SystemNotification {\n public id!: number;\n public content: string[];\n\n constructor(public type: NotificationTypes, content: AcceptableNotificationContentTypes, public sticky?: boolean) {\n if (!content) {\n this.content = [];\n return;\n }\n\n if (typeof content === 'string') {\n this.content = [content];\n return;\n }\n\n if (Array.isArray(content)) {\n this.content = content;\n return;\n }\n\n this.content = flatten(Object.values(content)).map((message) => {\n return message;\n });\n }\n}\n","import { SystemNotification } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { NotificationsActionNames } from './notifications.types';\n\nexport class NotificationsActions {\n public static add(notification: SystemNotification): ReduxAction {\n return {\n type: NotificationsActionNames.ADD,\n payload: notification,\n };\n }\n\n public static remove(id: number): ReduxAction {\n return {\n type: NotificationsActionNames.REMOVE,\n payload: id,\n };\n }\n}\n","import { store } from '..';\nimport { AuthThunk } from '../store/auth/auth.thunk';\nimport { NotificationsThunk } from '../store/notifications/notifications.thunk';\nimport { NotificationTypes } from './constants';\nimport { extract, save } from './local-storage';\n\nexport interface QueryParams extends Record {}\n\nexport interface ApiResponse {\n ok: boolean;\n status: number;\n message: string;\n meta?: {\n perPage: number;\n totalPages: number;\n pageSize: number;\n totalCount: number;\n pageNumber: number;\n nextPage: number;\n previousPage: number;\n firstPage: number;\n lastPage: number;\n };\n data?: T;\n errors?: Record;\n}\n\ninterface ApiRequest {\n body?: T;\n query?: QueryParams;\n model?: T;\n}\n\nexport enum HttpMethods {\n Get = 'GET',\n Post = 'POST',\n Patch = 'PATCH',\n Delete = 'DELETE',\n}\n\nfunction LogRequests() {\n const styles = `\n color: green;\n font-weight: bold;\n font-size: 14px;\n letter-spacing: 1px;\n `;\n\n return function (target: Function, _: string, descriptor: PropertyDescriptor) {\n const originalFunction: Function = descriptor.value;\n descriptor.value = async function (...args: any[]) {\n try {\n const [method, endpoint, request] = args;\n const response = await originalFunction.call(target, ...args);\n if (process.env.NODE_ENV !== 'production') {\n console.log(`%c Made [${method}] API call to [${endpoint}]:`, styles, {\n request,\n response,\n });\n }\n return response;\n } catch (error) {\n console.error(error);\n }\n };\n\n return descriptor;\n };\n}\n\nconst LOCAL_STORAGE_TOKEN_KEY = 'API_TOKEN';\n\nexport class ApiClient {\n private static abortController = new AbortController();\n private static token: string | null = null;\n private static sessionTimeout: NodeJS.Timeout | null = null;\n public static timedOut: boolean = false;\n\n private static extractToken() {\n if (!this.token) {\n this.token = extract(LOCAL_STORAGE_TOKEN_KEY) as string;\n }\n }\n\n public static getBearerToken() {\n return `Bearer ${this.token}`;\n }\n\n public static getFetchConfig(formData?: boolean) {\n const host = `${window.location.protocol}//${window.location.host}`;\n const headers: Headers = new Headers();\n\n if (!formData) {\n headers.append('Accept', 'application/json');\n headers.append('Content-Type', 'application/json');\n }\n\n if (this.token) {\n headers.append('Authorization', this.getBearerToken());\n }\n\n const corsOptions: Partial = {\n mode: 'cors',\n };\n\n const isOrigin = process.env.REACT_APP_ROOT_URL === host;\n\n const options: RequestInit = {\n headers,\n signal: this.abortController.signal,\n ...(isOrigin ? {} : corsOptions),\n };\n\n return options;\n }\n\n public static setToken(token: string) {\n this.token = token;\n save(LOCAL_STORAGE_TOKEN_KEY, token);\n }\n\n public static unsetToken() {\n this.token = null;\n localStorage.removeItem(LOCAL_STORAGE_TOKEN_KEY);\n this.abort();\n }\n\n @LogRequests()\n private static async request(\n method: HttpMethods,\n endpoint: string,\n request?: ApiRequest,\n isFormData?: boolean\n ): Promise> {\n this.abortController = new AbortController();\n const base = process.env.REACT_APP_BASE_URL;\n this.extractToken();\n this.resetSessionTimeout();\n\n const requestContent: { body?: string | FormData } = {};\n\n if (request && request.query) {\n const query = Object.entries(request.query)\n .filter(([_, value]) => !!value)\n .map(([field, value]) => field + '=' + value)\n .join('&');\n endpoint += query ? '?' + query : '';\n }\n\n if (request && request.body) {\n if ('finalize' in request.body) {\n (request.body as any).finalize();\n }\n\n requestContent.body = isFormData ? (request.body as unknown as FormData) : JSON.stringify(request.body);\n }\n\n try {\n const options: RequestInit = {\n ...this.getFetchConfig(isFormData),\n method,\n ...requestContent,\n };\n\n const response = await fetch(base + '/' + endpoint, options);\n const responseContent = (await response.json()) as ApiResponse;\n\n if (response.status >= 400 && response.status !== 401) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n responseContent.errors ?? responseContent.message\n )(store.dispatch);\n }\n\n if (response.status === 401) {\n AuthThunk.clearSession()(store.dispatch);\n this.unsetToken();\n }\n\n return {\n errors: responseContent.errors,\n data: responseContent.data,\n ok: response.status === 200, // 200 is Http OK status code\n status: response.status,\n meta: responseContent.meta,\n message: (responseContent as any).title ? (responseContent as any).title : responseContent.message,\n };\n } catch (error) {\n return {\n ok: false,\n status: 500,\n message: (error as any).message,\n };\n }\n }\n\n public static abort() {\n this.abortController.abort();\n this.cancelTimeout();\n }\n\n public static resetSessionTimeout() {\n this.timedOut = false;\n\n if (this.sessionTimeout) clearTimeout(this.sessionTimeout);\n if (this.token) {\n const TIMEOUT_DURATION = process.env.NODE_ENV === 'development' ? 10 * 60 * 1000 : 20 * 60 * 1000; // 20 Minutes\n this.sessionTimeout = setTimeout(() => {\n AuthThunk.clearSession()(store.dispatch);\n this.abort();\n }, TIMEOUT_DURATION);\n }\n }\n\n public static cancelTimeout() {\n if (this.sessionTimeout) clearTimeout(this.sessionTimeout);\n this.sessionTimeout = null;\n }\n\n public static get(endpoint: string, query?: QueryParams) {\n return this.request(HttpMethods.Get, endpoint, { query });\n }\n\n public static post(endpoint: string, body?: RequestType, isFormData?: boolean) {\n return this.request(HttpMethods.Post, endpoint, { body }, isFormData);\n }\n\n public static patch(\n endpoint: string,\n body?: RequestType,\n isFormData?: boolean\n ) {\n return this.request(HttpMethods.Patch, endpoint, { body }, isFormData);\n }\n\n public static delete(endpoint: string) {\n return this.request(HttpMethods.Delete, endpoint);\n }\n}\n\nApiClient.resetSessionTimeout();\n","import { Dispatch } from 'redux';\nimport { AcceptableNotificationContentTypes, SystemNotification } from '../../models/response';\nimport { NotificationTypes } from '../../util/constants';\nimport { NotificationsActions } from './notifications.actions';\n\nexport class NotificationsThunk {\n public static create(type: NotificationTypes, content: AcceptableNotificationContentTypes, sticky?: boolean) {\n return (dispatch: Dispatch) => {\n dispatch(NotificationsActions.add(new SystemNotification(type, content, sticky)));\n };\n }\n\n public static dismiss(id: number) {\n return (dispatch: Dispatch) => {\n dispatch(NotificationsActions.remove(id));\n };\n }\n}\n","export const extract = (key: string) => {\n const value = localStorage.getItem(key);\n try {\n return value && (JSON.parse(value) as T);\n } catch (e) {\n return null;\n }\n};\n\nexport const save = (key: string, value: T) => {\n localStorage.setItem(key, JSON.stringify(value));\n};\n","import { Airport } from '../models/response';\nimport { ApiClient } from '../util/api-client';\n\nexport class AirportsService {\n public static async list() {\n return ApiClient.get('airports');\n }\n}\n","import { Airport } from '../../models/response';\n\nexport interface AirportsState {\n airports: Airport[];\n}\n\nexport enum AirportsActionNames {\n LIST = 'LIST',\n}\n","import { ForgetPasswordModel, ResetPasswordModel, UserLoginModel } from '../models/request';\nimport { AuthenticatedUser } from '../models/response';\nimport { ApiClient } from '../util/api-client';\n\nexport class AuthService {\n public static async logIn(login: UserLoginModel) {\n return ApiClient.post('users/auth', login);\n }\n\n public static async requestPasswordReset(data: ForgetPasswordModel) {\n return ApiClient.post('users/forgot-password', data);\n }\n\n public static async requestResetPassword(data: ResetPasswordModel) {\n return ApiClient.patch('users/password-reset', data);\n }\n\n public static async verifyEmail(code: string) {\n return ApiClient.get('users/email-verification/' + code);\n }\n}\n","import { Airport } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { AirportsActionNames } from './airports.types';\n\nexport class AirportsActions {\n public static list(airports: Airport[]): ReduxAction {\n return {\n type: AirportsActionNames.LIST,\n payload: airports,\n };\n }\n}\n","export interface LoadingState {\n tasks: Record;\n}\n\nexport enum LoadingActionNames {\n SET_LOADING = 'SET_LOADING',\n SET_DONE = 'SET_DONE',\n}\n","import { Airport } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { AirportsActionNames, AirportsState } from './airports.types';\n\nconst initialState: AirportsState = {\n airports: [],\n};\n\nexport const airportsReducer = (state = initialState, action: ReduxAction): AirportsState => {\n switch (action.type) {\n case AirportsActionNames.LIST: {\n return { ...state, airports: action.payload as Airport[] };\n }\n\n default: {\n return state;\n }\n }\n};\n","import moment from 'moment';\nimport { AuthenticatedUser, Booking } from '../../models/response';\nimport { BookingStatuses, Roles } from '../constants';\n\nconst MIN_HOURS_BEFORE_CANCELLATION = 6;\n\nexport const canCancelBooking = (booking: Booking, user: AuthenticatedUser) => {\n if (\n user.role !== Roles.Client ||\n user.id !== booking.applicationUserId ||\n booking.bookingStatus !== BookingStatuses.Processing\n ) {\n return false;\n }\n\n const dateSection = moment(booking.date_Of_Travel);\n const timeSection = moment(booking.date_Of_Arrival);\n\n const cancellationCutoff = moment(\n Date.UTC(\n dateSection.year(),\n dateSection.month(),\n dateSection.date(),\n timeSection.hours(),\n timeSection.minutes()\n )\n ).subtract(MIN_HOURS_BEFORE_CANCELLATION, 'h');\n\n if (moment().isSameOrAfter(cancellationCutoff)) {\n return false;\n }\n\n return true;\n};\n","type AcceptableCurrency = 'NGN' | 'USD' | 'GBP';\n\nexport const formatCurrency = (value: number | string, currency: AcceptableCurrency = 'NGN') => {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n });\n return formatter.format(+value);\n};\n","import { ReduxAction } from '../common/redux-action';\nimport { LoadingActionNames } from './loading.types';\n\nexport class LoadingActions {\n public static setLoading(id: string, message?: string): ReduxAction {\n return {\n type: LoadingActionNames.SET_LOADING,\n payload: { id, message },\n };\n }\n\n public static setDone(id: string): ReduxAction {\n return {\n type: LoadingActionNames.SET_DONE,\n payload: { id },\n };\n }\n}\n","import { AuthenticatedUser } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface AuthState {\n authUser?: AuthenticatedUser;\n}\n\nexport enum AuthActionNames {\n LOG_IN = 'AUTH_LOG_IN',\n LOG_OUT = 'AUTH_LOG_OUT',\n}\n\nexport interface LogInAction extends ReduxAction {}\nexport interface LogOutAction extends ReduxAction {}\n","import { uniqueId } from 'lodash';\nimport { Dispatch } from 'redux';\nimport { LoadingActions } from '../../store/loading/loading.actions';\n\nexport const generateLoader = async (promise: Promise, dispatch: Dispatch, message?: string) => {\n const id = uniqueId();\n dispatch(LoadingActions.setLoading(id));\n const returnValue = await promise;\n dispatch(LoadingActions.setDone(id));\n return returnValue;\n};\n","import { createAcronym } from './generateAcronym';\n\nexport const generateChartMetadata = (data: any[], titleKey: string, valueKey: string, useAcronym?: boolean) => {\n const lebels: string[] = [];\n const dataValue: number[] = [];\n\n data?.forEach((data: any) => {\n lebels.push(data[titleKey] ?? '');\n dataValue.push(data[valueKey]);\n });\n\n return { lebels, dataValue };\n};\n","import { Dispatch } from 'redux';\nimport { AirportsService } from '../../services/airports.service';\nimport { NotificationTypes } from '../../util/constants';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { AirportsActions } from './airports.actions';\n\nexport class AirportsThunk {\n public static list() {\n return async (dispatch: Dispatch) => {\n const response = await generateLoader(AirportsService.list(), dispatch, 'Fetching airports');\n\n if (response.data) {\n dispatch(AirportsActions.list(response.data));\n return;\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'Failed to fetch airports')(dispatch);\n };\n }\n}\n","import { AuthenticatedUser } from '../../models/response';\nimport { AuthActionNames, LogInAction, LogOutAction } from './auth.types';\n\nexport class AuthActions {\n public static logIn(authUser: AuthenticatedUser): LogInAction {\n return {\n type: AuthActionNames.LOG_IN,\n payload: { authUser },\n };\n }\n\n public static logOut(): LogOutAction {\n return {\n type: AuthActionNames.LOG_OUT,\n };\n }\n}\n","import { Booking } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface BookingsState {\n bookings: Booking[];\n meta: ApiResponse['meta'];\n bookingDetails?: Booking;\n}\n\nexport enum BookingActionNames {\n GET_ALL = 'BOOKING_GET_ALL',\n GET_ONE = 'BOOKING_GET_ONE',\n CLEAR = 'BOOKING_CLEAR',\n ADD = 'BOOKING_ADD',\n UPDATE = 'BOOKING_UPDATE',\n}\n\nexport interface GetAllBookingsAction extends ReduxAction> {}\n\nexport interface GetOneBookingAction extends ReduxAction {}\n\nexport interface ClearBookingAction extends ReduxAction {}\n\nexport interface AddBookingAction extends ReduxAction {}\n\nexport interface UpdateBookingAction extends ReduxAction {}\n","import { persistReducer } from 'redux-persist';\nimport storage from 'redux-persist/lib/storage';\nimport { ReduxAction } from '../common/redux-action';\nimport { AuthActionNames, AuthState } from './auth.types';\n\nconst AUTH_REDUCER_KEY = 'AUTH_REDUCER';\n\nconst initialState: AuthState = {\n authUser: undefined,\n};\n\nconst reducer = (state = initialState, action: ReduxAction) => {\n switch (action.type) {\n case AuthActionNames.LOG_IN: {\n return { ...action.payload };\n }\n\n case AuthActionNames.LOG_OUT: {\n return { ...initialState };\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport const authReducer = persistReducer({ key: AUTH_REDUCER_KEY, storage }, reducer);\n","import { Booking } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport {\n AddBookingAction,\n BookingActionNames,\n ClearBookingAction,\n GetAllBookingsAction,\n GetOneBookingAction,\n UpdateBookingAction,\n} from './bookings.types';\n\nexport class BookingActions {\n public static list(bookings: ApiResponse): GetAllBookingsAction {\n return {\n type: BookingActionNames.GET_ALL,\n payload: bookings,\n };\n }\n\n public static retrieve(booking: Booking): GetOneBookingAction {\n return {\n type: BookingActionNames.GET_ONE,\n payload: booking,\n };\n }\n\n public static clear(): ClearBookingAction {\n return {\n type: BookingActionNames.CLEAR,\n };\n }\n\n public static add(booking: Booking): AddBookingAction {\n return {\n type: BookingActionNames.ADD,\n payload: booking,\n };\n }\n\n public static update(booking: Booking): UpdateBookingAction {\n return {\n type: BookingActionNames.UPDATE,\n payload: booking,\n };\n }\n}\n","import { PBooking } from '../../models/response/bookings/pbooking';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface PBookingsState {\n booking: { serviceId: 0; airportId: 0; clientId: ''; additionalOdc: 0 };\n meta: ApiResponse['meta'];\n}\n\nexport enum PBookingActionNames {\n GET_ALL = 'PBOOKING_GET_ALL',\n GET_ONE = 'PBOOKING_GET_ONE',\n CLEAR = 'PBOOKING_CLEAR',\n ADD = 'PBOOKING_ADD',\n UPDATE = 'PBOOKING_UPDATE',\n}\n\nexport interface AddPBookingAction extends ReduxAction {}\n","import { merge } from 'lodash';\nimport { Booking } from '../../models/response';\nimport { PBooking } from '../../models/response/bookings/pbooking';\nimport { AuthActionNames } from '../auth';\nimport { ReduxAction } from '../common/redux-action';\nimport { BookingActionNames, BookingsState } from './bookings.types';\n\nconst initialState: BookingsState = {\n bookings: [],\n meta: undefined,\n};\n\nexport const bookingsReducer = (\n state = initialState,\n action: ReduxAction\n): BookingsState => {\n switch (action.type) {\n case BookingActionNames.GET_ALL: {\n return {\n ...state,\n bookings: action.payload.data,\n meta: action.payload.meta,\n };\n }\n\n case BookingActionNames.GET_ONE: {\n return {\n ...state,\n bookingDetails: action.payload as Booking,\n };\n }\n\n case BookingActionNames.CLEAR: {\n return {\n ...state,\n bookingDetails: undefined,\n };\n }\n\n case BookingActionNames.ADD: {\n const _state = { ...state };\n _state.bookings.unshift(action.payload);\n return _state;\n }\n\n case BookingActionNames.UPDATE: {\n const _state = { ...state };\n const bookingIndex = _state.bookings.findIndex((_) => _.id === (action.payload as Booking).id);\n\n if (_state.bookingDetails && _state.bookingDetails?.id === action.payload.id) {\n merge({}, _state.bookingDetails, action.payload);\n }\n\n if (bookingIndex < 0) {\n return state;\n }\n\n merge({}, _state.bookings[bookingIndex], action.payload);\n _state.bookings[bookingIndex].bookingStatus = action.payload.bookingStatus;\n return _state;\n }\n\n case AuthActionNames.LOG_OUT: {\n return { ...initialState };\n }\n\n default: {\n return state;\n }\n }\n};\n","import { Dispatch } from 'redux';\nimport { store } from '../..';\nimport { CreateBookingModel, UpdateBookingModel } from '../../models/request';\nimport { BookingsService } from '../../services';\nimport { NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { BookingActions } from './bookings.actions';\nimport {\n AddBookingAction,\n ClearBookingAction,\n GetAllBookingsAction,\n GetOneBookingAction,\n UpdateBookingAction,\n} from './bookings.types';\n\nexport class BookingsThunk {\n public static list(pageNumber?: number, searchTerm?: string, filterDates?: any) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n BookingsService.list(store.getState().auth.authUser?.role, pageNumber, searchTerm, {\n ...filterDates,\n }),\n dispatch,\n 'Fetching bookings'\n );\n\n if (response.data) {\n if (\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(BookingActions.list(response));\n return;\n }\n\n throw new Error('Fetching bookings failed. Kindly Refresh');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static retrieve(id: number) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch(BookingActions.clear());\n\n const response = await generateLoader(\n BookingsService.retrieve(id),\n dispatch,\n 'Fetching booking details'\n );\n\n if (response.data) {\n dispatch(BookingActions.retrieve(response.data));\n return;\n }\n } catch (error) {}\n };\n }\n\n public static create(details: CreateBookingModel | CreateBookingModel[], client: string, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n return new Promise(async (resolve, reject) => {\n try {\n let nw: any = details;\n let newDetails: any = [];\n const tr = Array.isArray(nw);\n if (tr) {\n nw.map((dt: any, i: any) => {\n dt.clientId = client;\n newDetails.push(dt);\n });\n } else {\n newDetails = details;\n }\n const response = await generateLoader(\n BookingsService.create(newDetails),\n dispatch,\n 'Creating booking'\n );\n\n if (response.data) {\n if (closeModal) closeModal();\n NotificationsThunk.create(NotificationTypes.Success, 'Booking made successfully')(dispatch);\n if (response.data['item2'][0]?.invoiceNumber !== null) {\n dispatch(BookingActions.add(response.data['item1'][0]));\n } else {\n history.replace('/app/bookings');\n }\n return resolve(response.data);\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'Booking creation failed')(dispatch);\n throw new Error('Booking creation failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n reject(error);\n }\n });\n };\n }\n\n public static update(details: UpdateBookingModel, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(BookingsService.update(details), dispatch, 'Updating booking');\n\n if (response.data) {\n if (closeModal) closeModal();\n NotificationsThunk.create(NotificationTypes.Success, 'Booking updated successfully')(dispatch);\n dispatch(BookingActions.update(response.data));\n return;\n }\n\n throw new Error('Booking update failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static cancel(id: number, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(BookingsService.cancel(id), dispatch, 'Canceling booking');\n\n if (response.data) {\n if (closeModal) closeModal();\n\n NotificationsThunk.create(NotificationTypes.Success, 'Booking Canceled successfully')(dispatch);\n\n return;\n }\n\n throw new Error('Booking update failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n}\n","import { PBookingActionNames, AddPBookingAction } from './pbooking.types';\nimport { ApiResponse } from '../../util/api-client';\nimport { PBooking } from '../../models/response/bookings/pbooking';\n\nexport class PBookingActions {\n public static add(booking: PBooking): AddPBookingAction {\n return {\n type: PBookingActionNames.ADD,\n payload: booking,\n };\n }\n}\n","import { Booking, Service } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface ServiceState {\n services: Service[];\n serviceDetails?: Service;\n serviceBookings: Booking[];\n serviceBookingsMeta?: ApiResponse['meta'];\n}\n\nexport enum ServiceActionNames {\n LIST = 'SERVICE_LIST',\n ADD = 'SERVICE_ADD',\n RETRIEVE = 'SERVICE_RETRIEVE',\n CLEAR = 'SERVICE_CLEAR',\n UPDATE = 'SERVICE_UPDATE',\n GET_BOOKINGS = 'SERVICE_GET_BOOKINGS',\n}\n\nexport interface GetAllAction extends ReduxAction {}\n\nexport interface GetOneAction extends ReduxAction {}\n\nexport interface ClearAction extends ReduxAction {}\n\nexport interface AddServiceAction extends ReduxAction {}\n\nexport interface UpdateServiceAction extends ReduxAction {}\n","import { CreatePorthacourtBooking } from '../../models/request/bookings/create-porthacourt-booking.model';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { NotificationTypes } from '../../util/constants';\nimport { BookingsService } from '../../services';\nimport { Dispatch } from 'redux';\nimport { store } from '../..';\nimport { AddPBookingAction } from './pbooking.types';\nimport { history } from '../../util/history';\n\nexport class PBookingsThunk {\n public static createporthacourtbooking(details: CreatePorthacourtBooking, client: string, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n return new Promise(async (resolve, reject) => {\n try {\n const newDetails = { ...details, clientId: client };\n\n const response = await generateLoader(\n BookingsService.createporthacourtbooking(newDetails),\n dispatch,\n 'Creating porthacourt booking'\n );\n\n if (response.data) {\n if (closeModal) closeModal();\n NotificationsThunk.create(\n NotificationTypes.Success,\n 'Porthacourt Booking made successfully'\n )(dispatch);\n history.replace('/app/bookings');\n return resolve(response.data);\n } else {\n // Handle case where response data is empty\n const errorMessage = response.message || 'Unknown error';\n throw new Error(errorMessage);\n }\n } catch (error) {\n console.error('Error creating porthacourt booking:', error);\n NotificationsThunk.create(NotificationTypes.Error, 'Porthacourt Booking creation failed')(dispatch);\n reject(error); // Reject the promise with the error\n }\n });\n };\n }\n}\n","import { merge } from 'lodash';\nimport { PBooking } from '../../models/response/bookings/pbooking';\nimport { PBookingActionNames, PBookingsState } from './pbooking.types';\nimport { ReduxAction } from '../common/redux-action';\nimport { AuthActionNames } from '../auth';\n\nconst initialState: PBookingsState = {\n booking: { serviceId: 0, airportId: 0, clientId: '', additionalOdc: 0 },\n meta: undefined,\n};\n\nexport const pbookingsReducer = (\n state = initialState,\n action: ReduxAction\n): PBookingsState => {\n switch (action.type) {\n case PBookingActionNames.ADD: {\n return {\n ...state,\n booking: { ...state.booking, [action.payload.id]: action.payload },\n };\n }\n default: {\n return state; // Add a default return statement\n }\n }\n};\n","import { ReduxAction } from '../common/redux-action';\nimport { LoadingActionNames, LoadingState } from './loading.types';\n\nconst initialState: LoadingState = {\n tasks: {},\n};\n\nexport const loadingReducer = (state = initialState, action: ReduxAction): LoadingState => {\n switch (action.type) {\n case LoadingActionNames.SET_LOADING: {\n const _state = { ...state };\n _state.tasks[action.payload.id] = action.payload.message;\n return _state;\n }\n\n case LoadingActionNames.SET_DONE: {\n const _state = { ...state };\n delete _state.tasks[action.payload.id];\n return _state;\n }\n\n default: {\n return state;\n }\n }\n};\n","import { filter } from 'lodash';\nimport { SystemNotification } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { NotificationsActionNames, NotificationsState } from './notifications.types';\n\nconst initialState: NotificationsState = {\n notifications: [],\n idCounter: 1,\n};\n\nexport const notificationsReducer = (\n state = initialState,\n action: ReduxAction\n): NotificationsState => {\n switch (action.type) {\n case NotificationsActionNames.ADD: {\n const _state = { ...state };\n const notification = action.payload as SystemNotification;\n notification.id = _state.idCounter;\n _state.notifications.push(notification);\n _state.idCounter++;\n return _state;\n }\n\n case NotificationsActionNames.REMOVE: {\n const _state = { ...state };\n const id = action.payload as number;\n _state.notifications = filter(_state.notifications, (_) => _.id !== id);\n return _state;\n }\n\n default: {\n return state;\n }\n }\n};\n","import { Booking, Service } from '../../models/response';\nimport {\n AddServiceAction,\n ClearAction,\n GetAllAction,\n GetOneAction,\n ServiceActionNames,\n ServiceState,\n UpdateServiceAction,\n} from './services.types';\n\nexport class ServiceActions {\n public static allServices(services: any): GetAllAction {\n return {\n type: ServiceActionNames.LIST,\n payload: services,\n };\n }\n\n public static viewService(service: any): GetOneAction {\n return {\n type: ServiceActionNames.RETRIEVE,\n payload: service,\n };\n }\n\n public static clearService(): ClearAction {\n return {\n type: ServiceActionNames.CLEAR,\n };\n }\n\n public static addService(service: Service): AddServiceAction {\n return {\n type: ServiceActionNames.ADD,\n payload: service,\n };\n }\n\n public static updateService(service: Service): UpdateServiceAction {\n return {\n type: ServiceActionNames.UPDATE,\n payload: service,\n };\n }\n\n public static getServiceBookings(bookings: Booking[], meta: ServiceState['serviceBookingsMeta']) {\n return {\n type: ServiceActionNames.GET_BOOKINGS,\n payload: { bookings, meta },\n };\n }\n}\n","import { Booking, Transaction, User } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\n\ntype Details = User | Booking;\n\nexport interface TransactionsState {\n transactions: Transaction[];\n transactionsMeta?: ApiResponse['meta'];\n openTransaction?: Transaction;\n transactionType: Transaction[];\n transactionTypeMeta?: ApiResponse['meta'];\n details?: Details;\n clientId?: Transaction[];\n}\n\nexport interface TransactionRetrievalPayload {\n transaction?: Transaction;\n details?: Details;\n}\n\nexport enum TransactionsActionNames {\n LIST = 'TRANSACTIONS_LIST',\n RETRIEVE = 'TRANSACTIONS_RETRIEVE',\n RETRIEVE_TYPE = 'RETRIEVE_TYPE',\n PAY_RENEWAL_ID = 'PAY_RENEWAL_ID',\n}\n","import { AuthActionNames } from '..';\nimport { Service } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { ServiceActionNames, ServiceState } from './services.types';\n\nconst initialState: ServiceState = {\n services: [],\n serviceBookings: [],\n};\n\nexport const serviceReducer = (\n state = initialState,\n action: ReduxAction\n) => {\n switch (action.type) {\n case ServiceActionNames.LIST: {\n return {\n ...state,\n services: action.payload,\n };\n }\n\n case ServiceActionNames.RETRIEVE: {\n return {\n ...state,\n serviceDetails: action.payload,\n };\n }\n\n case ServiceActionNames.CLEAR: {\n return {\n ...state,\n serviceDetails: undefined,\n };\n }\n\n case ServiceActionNames.ADD: {\n const _state = { ...state };\n _state.services.unshift(action.payload);\n console.table(_state.services);\n return _state;\n }\n\n case ServiceActionNames.UPDATE: {\n const _state = { ...state };\n const serviceIndex = _state.services.findIndex((_) => _.id === (action.payload as Service).id);\n\n if (serviceIndex < 0) {\n return state;\n }\n\n _state.services[serviceIndex] = action.payload;\n\n if (_state.serviceDetails && _state.serviceDetails.id === action.payload.id) {\n _state.serviceDetails = action.payload;\n }\n\n return _state;\n }\n\n case ServiceActionNames.GET_BOOKINGS: {\n return {\n ...state,\n serviceBookings: action.payload.bookings,\n serviceBookingsMeta: action.payload.meta,\n };\n }\n\n case AuthActionNames.LOG_OUT: {\n return { ...initialState };\n }\n\n default: {\n return state;\n }\n }\n};\n","import { Dispatch } from 'redux';\nimport { CreateServiceModel, UpdateServiceModel } from '../../models/request';\nimport { BookingsService, ServicesService } from '../../services';\nimport { NotificationTypes } from '../../util/constants';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { ServiceActions } from './services.actions';\nimport { history } from '../../util/history';\nimport { AddServiceAction, ClearAction, GetAllAction, GetOneAction, UpdateServiceAction } from './services.types';\nimport { Service } from '../../models/response';\n\nexport class ServiceThunk {\n public static getAllServices() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(ServicesService.getAllServices(), dispatch, 'Fetching services');\n\n if (response.ok) {\n dispatch(ServiceActions.allServices(response.data));\n return;\n }\n\n throw new Error('Fetching services failed. Kindly Refresh');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static getService(service_id: any) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch(ServiceActions.clearService());\n\n const response = await generateLoader(\n ServicesService.getSingleService(service_id),\n dispatch,\n 'Fetching service information'\n );\n\n if (response.ok) {\n dispatch(ServiceActions.viewService(response.data));\n return;\n }\n } catch (error) {}\n };\n }\n\n public static getClientService() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n ServicesService.getClientService(),\n dispatch,\n 'Fetching service information'\n );\n\n if (response.ok) {\n dispatch(ServiceActions.allServices(response.data));\n return;\n }\n } catch (error) {}\n };\n }\n\n public static createService(serviceDetails: CreateServiceModel, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n ServicesService.createService(serviceDetails),\n dispatch,\n 'Creating service'\n );\n\n if (response.data) {\n if (closeModal) closeModal();\n\n NotificationsThunk.create(NotificationTypes.Success, 'Service created successfully')(dispatch);\n\n dispatch(ServiceActions.addService(response.data));\n return;\n }\n\n throw new Error('Service creation failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static updateService(serviceDetails: UpdateServiceModel, closeModal?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n ServicesService.updateService(serviceDetails),\n dispatch,\n 'Upating service'\n );\n\n if (response.data) {\n if (closeModal) closeModal();\n\n NotificationsThunk.create(NotificationTypes.Success, 'Service updated successfully')(dispatch);\n\n dispatch(ServiceActions.updateService(response.data));\n return;\n }\n\n throw new Error('Service update failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static listBookings(serviceId: Service['id'], pageNumber?: number) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n BookingsService.getBookingsByServiceId(serviceId, pageNumber),\n dispatch,\n 'Fetching bookings'\n );\n\n if (response.data) {\n if (\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(ServiceActions.getServiceBookings(response.data, response.meta));\n return;\n }\n\n throw new Error('Fetching bookings failedy. Kindly Refresh');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n}\n","import { Transaction } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\nimport { TransactionRetrievalPayload, TransactionsActionNames } from './transactions.types';\n\nexport class TransactionsActions {\n public static list(\n transactions: Transaction[],\n meta: ApiResponse['meta']\n ): ReduxAction {\n return {\n type: TransactionsActionNames.LIST,\n payload: { transactions, meta },\n };\n }\n\n public static retrieve(\n details: TransactionRetrievalPayload\n ): ReduxAction {\n return {\n type: TransactionsActionNames.RETRIEVE,\n payload: details,\n };\n }\n\n public static retrieveType(\n transactions: Transaction[],\n meta: ApiResponse['meta']\n ): ReduxAction {\n return {\n type: TransactionsActionNames.RETRIEVE_TYPE,\n payload: { transactions, meta },\n };\n }\n\n public static payRenewalId(\n transactions: Transaction[],\n meta: ApiResponse['meta']\n ): ReduxAction {\n return {\n type: TransactionsActionNames.PAY_RENEWAL_ID,\n payload: { transactions, meta },\n };\n }\n}\n","import { Booking, BookingServicesStat, ClientStats, User, UserActivity } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface UsersState {\n usersBookings: Booking[];\n userBookingMeta?: ApiResponse['meta'];\n users: User[];\n protocols: User[];\n allProtocols: User[];\n usersMeta?: ApiResponse['meta'];\n protocolsMeta?: ApiResponse['meta'];\n clients: User[];\n clientsMeta: ApiResponse['meta'];\n clientStats?: ClientStats;\n clientBookingStats?: BookingServicesStat;\n userDetails?: User;\n userActivities?: UserActivity[];\n userActivitiesMeta?: ApiResponse['meta'];\n dashboardStats?: any;\n}\n\nexport enum UsersActionNames {\n ADD_USER = 'USERS_ADD_USER',\n GET_CLIENTS = 'USERS_GET_CLIENTS',\n GET_PROTOCOLS = 'USERS_GET_PROTOCOLS',\n GET_ALL_PROTOCOLS = 'USERS_GET_ALL_PROTOCOLS',\n GET_CLIENT_STATS = 'USERS_GET_CLIENT_STATS',\n GET_USERS = 'USERS_GET_USERS',\n GET_USER = 'USERS_GET_USER',\n GET_USERBOOKINGS = 'USERS_GET_USERBOOKINGS',\n GET_DASHBOARD_STATS = 'USERS_GET_DASHBOARD_STATS',\n CHANGE_STATUS = 'USERS_CHANGE_STATUS',\n UPDATE = 'USERS_UPDATE',\n GET_CLIENT_BOOKING_STAT = 'GET_CLIENT_BOOKING_STAT',\n UPDATE_CLIENT = 'USERS_UPDATE_CLIENT',\n GET_ACTIVITIES = 'USERS_GET_ACTIVITIES',\n}\n\nexport interface AddUserAction extends ReduxAction {}\nexport interface GetClientsAction extends ReduxAction {}\nexport interface GetClientBookingStatsAction extends ReduxAction {}\nexport interface GetUsersAction extends ReduxAction {}\nexport interface GetUserAction extends ReduxAction {}\nexport interface GetProtocolAction extends ReduxAction {}\nexport interface GetAllProtocolAction extends ReduxAction {}\nexport interface GetUserBookings extends ReduxAction {}\nexport interface ChangeUserStatusAction extends ReduxAction {}\nexport interface UpdateUserAction extends ReduxAction {}\nexport interface UpdateClientAction extends ReduxAction {}\nexport interface GetUserActivities extends ReduxAction {}\n","import { Transaction } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport { ReduxAction } from '../common/redux-action';\nimport { TransactionRetrievalPayload, TransactionsActionNames, TransactionsState } from './transactions.types';\n\nconst initialState: TransactionsState = {\n transactions: [],\n transactionType: [],\n};\n\nexport const transactionsReducer = (\n state = initialState,\n action: ReduxAction\n): TransactionsState => {\n switch (action.type) {\n case TransactionsActionNames.LIST: {\n const { transactions, meta: transactionsMeta } = action.payload as {\n transactions: Transaction[];\n meta: ApiResponse['meta'];\n };\n\n return { ...state, transactions, transactionsMeta };\n }\n\n case TransactionsActionNames.RETRIEVE: {\n const { transaction, details } = action.payload as TransactionRetrievalPayload;\n return { ...state, openTransaction: transaction, details };\n }\n\n case TransactionsActionNames.RETRIEVE_TYPE: {\n const { transactions, meta } = action.payload as {\n transactions: Transaction[];\n meta: ApiResponse['meta'];\n };\n\n return { ...state, transactionType: transactions, transactionTypeMeta: meta };\n }\n case TransactionsActionNames.PAY_RENEWAL_ID: {\n const { transactions, meta } = action.payload as {\n transactions: Transaction[];\n meta: ApiResponse['meta'];\n };\n\n return { ...state, transactionType: transactions, transactionTypeMeta: meta };\n }\n default: {\n return state;\n }\n }\n};\n","type AcceptableCurrency = 'NGN' | 'USD' | 'GBP';\n\nexport const formatCurrency = (value: number | string, currency: AcceptableCurrency = 'NGN') => {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n });\n\n return formatter.format(+value);\n};\n\nexport const formatCurrencyWithNairaSign = (amount: string | number) => {\n // Convert the number to a string and remove any non-digit characters\n const cleanAmount = String(amount).replace(/\\D/g, '');\n\n // Insert a comma every three digits from the right\n const formattedAmount = cleanAmount.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n // Add the Naira sign prefix\n const result = `₦ ${formattedAmount}`;\n\n return result;\n};\n\nexport const convertCurrencyToDecimal = (amount: string) => {\n const numberString = amount.replace(/,/g, '');\n const number = parseInt(numberString);\n return number as any;\n};\n","import moment, { Moment } from 'moment';\n\nexport const formatTime = (time: string | Date | Moment) => {\n return moment(time).format('hh:mm A');\n};\n\nexport const formatDate = (time: string | Date | Moment) => {\n return moment(time).format('Do MMMM, YYYY');\n};\n","import { Transaction, User } from '../models/response';\nimport { ApiClient, QueryParams } from '../util/api-client';\nimport { TransactionTypes } from '../util/constants';\nimport { FundWalletModel, WalletBalanceModel } from '../models/request';\nimport { convertCurrencyToDecimal } from '../util/misc/formatters';\nimport { RenewalsModel } from '../components/wallet/renewal';\nimport { PaymentsModel } from '../components/wallet/payment';\n\nexport class TransactionsService {\n public static list(page?: number) {\n const query = page ? `?pageNumber=${page}` : '';\n\n return ApiClient.get('transactions/services' + query);\n }\n\n public static retrieveByTransactionId(id: Transaction['transactionId']) {\n return ApiClient.get('transactions/services/' + id);\n }\n\n public static retrieveTransactionTypeById(id: User['id'], type: TransactionTypes, page?: number) {\n return ApiClient.get(`transactions/services-by-type/${type}/${id}?PageNumber=${page}`);\n }\n\n public static getTransactionByType(type: number, page: number) {\n return ApiClient.get(`transactions/services-by-type/${type}?PageNumber=${page}`);\n }\n\n public static getTransactionByDate(type: number, query: QueryParams, searchTerm?: string) {\n const path = `transactions/services-by-type-date/${type}`;\n const url = searchTerm ? `transactions/services-by-type-date/search/${type}/${searchTerm}` : path;\n return ApiClient.get(url, query);\n }\n\n public static fundWallet(model: FundWalletModel) {\n const covartedModel = convertCurrencyToDecimal(model.amount);\n model.amount = covartedModel;\n return ApiClient.post('users/fund-wallet', model);\n }\n\n public static getWalletBalance(client: string) {\n return ApiClient.get(`transactions/wallet-balance/${client}`);\n }\n\n public static exportBookingTransaction() {\n return ApiClient.get(`booking-services/export-bookings`);\n }\n\n public static renewalDate(model: RenewalsModel) {\n return ApiClient.post('renewals', model);\n }\n\n public static payment(clientId: string, id: number) {\n const endpoint = `renewals/pay/${clientId}/${id}`;\n return ApiClient.patch(endpoint);\n }\n\n public static payRenewalId(clientId: string, page: number) {\n return ApiClient.get(`renewals/get-client-renewal/${clientId}?PageNumber=${page}`);\n }\n\n public static refreshInvoicePayment(invoicenumber: string, page: number) {\n return ApiClient.get(`transactions/invoice-status/${invoicenumber}?PageNumber=${page}`);\n }\n}\n","import { find } from 'lodash';\nimport { Dispatch } from 'redux';\nimport { Transaction } from '../../models/response';\nimport { BookingsService } from '../../services';\nimport { TransactionsService } from '../../services/transactions.service';\nimport { QueryParams } from '../../util/api-client';\nimport { NotificationTypes, TransactionTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { TransactionsActions } from './transactions.actions';\n\nexport class TransactionsThunk {\n public static list(pageNumber?: number) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n TransactionsService.list(pageNumber),\n dispatch,\n 'Fetching transactions'\n );\n\n if (response.data) {\n if (\n response.data?.length &&\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(\n TransactionsActions.list(\n response.data.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated)),\n response.meta\n )\n );\n return;\n }\n } catch {\n NotificationsThunk.create(NotificationTypes.Error, 'Failed to fetch transactions')(dispatch);\n }\n };\n }\n\n public static fetchPayRenewalId(clientId: string, pageNumber: number) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n TransactionsService.payRenewalId(clientId, pageNumber),\n dispatch,\n 'Fetching user Renewals'\n );\n\n if (response.status === 200 && response.data) {\n if (\n response.data?.length &&\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(\n TransactionsActions.payRenewalId(\n response.data.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated)),\n response.meta\n )\n );\n return;\n }\n } catch (error) {\n console.error('Error fetching data:', error);\n NotificationsThunk.create(NotificationTypes.Error, 'Failed to fetch transactions')(dispatch);\n }\n };\n }\n\n public static retrieve(id: string | number) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(TransactionsService.list(), dispatch, 'Fetching transaction');\n\n if (!response.data) {\n throw new Error('Error fetching transaction. Kindly Refresh');\n }\n\n dispatch(TransactionsActions.list(response.data, response.meta));\n const transaction = find(response.data, { id: +id });\n\n if (!transaction) {\n throw new Error('Error fetching transaction. Kindly Refresh');\n }\n\n if (transaction.transactType === 'Protocol Services') {\n const response = await generateLoader(\n BookingsService.retrieve(+transaction.transactionId),\n dispatch,\n 'Fetching booking details'\n );\n\n if (!response.data) {\n throw new Error('Booking does not exist');\n }\n\n dispatch(TransactionsActions.retrieve({ transaction, details: response.data }));\n } else {\n // Awaiting end\n }\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, (error as any)?.message)(dispatch);\n }\n };\n }\n\n public static retrieveByTrasactionId(id: string | number, cb?: () => any) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch(TransactionsActions.retrieve({ transaction: undefined }));\n\n const response = await generateLoader(\n TransactionsService.retrieveByTransactionId('' + id),\n dispatch,\n 'Fetching transaction'\n );\n\n if (!response.data) {\n throw new Error('Error fetching transaction. Kindly Refresh');\n }\n\n dispatch(TransactionsActions.retrieve({ transaction: response.data[0] }));\n cb?.();\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, (error as any)?.message)(dispatch);\n }\n };\n }\n\n public static retrieveTransactionTypebyId(\n id: Transaction['transactionId'],\n type: TransactionTypes,\n cb?: () => any,\n page?: number\n ) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch(TransactionsActions.retrieve({ transaction: undefined }));\n\n const response = await generateLoader(\n TransactionsService.retrieveTransactionTypeById(id, type, page),\n dispatch,\n 'Fetching transaction'\n );\n\n if (!response.data) {\n throw new Error('Error fetching transaction. Kindly Refresh');\n }\n\n if (type === TransactionTypes.Registration) {\n dispatch(TransactionsActions.retrieve({ transaction: response.data[0] }));\n } else {\n dispatch(TransactionsActions.retrieveType(response.data, response.meta));\n }\n cb?.();\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, (error as any)?.message)(dispatch);\n }\n };\n }\n\n public static retrieveByTransactionType(id: number, query: QueryParams, searchTerm?: string) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n TransactionsService.getTransactionByDate(id, query, searchTerm),\n dispatch,\n 'Fetching Transactions'\n );\n\n if (!response.data) {\n throw new Error(' Error fetching transaction. Kindly Refresh');\n }\n\n dispatch(TransactionsActions.retrieveType(response.data, response.meta));\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, (error as any)?.message)(dispatch);\n }\n };\n }\n\n public static clearTransaction() {\n return async (dispatch: Dispatch) => {\n dispatch(TransactionsActions.retrieve({ transaction: undefined }));\n };\n }\n}\n","import { BookingServicesStat, ClientStats, User } from '../../models/response';\nimport { ApiResponse } from '../../util/api-client';\nimport {\n AddUserAction,\n GetAllProtocolAction,\n GetClientsAction,\n GetProtocolAction,\n GetUserAction,\n GetUserActivities,\n GetUserBookings,\n GetUsersAction,\n UpdateClientAction,\n UpdateUserAction,\n UsersActionNames,\n} from './users.types';\n\nexport class UsersActions {\n public static addUser(user: User): AddUserAction {\n return {\n type: UsersActionNames.ADD_USER,\n payload: user,\n };\n }\n\n public static getUsers(users: ApiResponse): GetUsersAction {\n return {\n type: UsersActionNames.GET_USERS,\n payload: users,\n };\n }\n\n public static getProtocols(protocols: ApiResponse): GetProtocolAction {\n return {\n type: UsersActionNames.GET_PROTOCOLS,\n payload: protocols,\n };\n }\n\n public static getAllProtocols(allProtocols: ApiResponse): GetAllProtocolAction {\n return {\n type: UsersActionNames.GET_ALL_PROTOCOLS,\n payload: allProtocols,\n };\n }\n\n public static getClients(users: ApiResponse): GetClientsAction {\n return {\n type: UsersActionNames.GET_CLIENTS,\n payload: users,\n };\n }\n\n public static getClientStats(stats: ClientStats) {\n return {\n type: UsersActionNames.GET_CLIENT_STATS,\n payload: stats,\n };\n }\n\n public static getClientBookingStats(stats: BookingServicesStat) {\n return {\n type: UsersActionNames.GET_CLIENT_BOOKING_STAT,\n payload: stats,\n };\n }\n\n public static getDashboardStats(stats: any) {\n return {\n type: UsersActionNames.GET_DASHBOARD_STATS,\n payload: stats,\n };\n }\n\n public static getUser(userDetails: any): GetUserAction {\n return {\n type: UsersActionNames.GET_USER,\n payload: userDetails,\n };\n }\n\n public static getUserBooking(usersBookings: any): GetUserBookings {\n return {\n type: UsersActionNames.GET_USERBOOKINGS,\n payload: usersBookings,\n };\n }\n\n public static updateUser(userDetails: User | undefined): UpdateUserAction {\n return {\n type: UsersActionNames.UPDATE,\n payload: userDetails,\n };\n }\n\n public static updateClient(clientDetails: User | undefined): UpdateClientAction {\n return {\n type: UsersActionNames.UPDATE_CLIENT,\n payload: clientDetails,\n };\n }\n\n public static getUserActivities(activities: any): GetUserActivities {\n return {\n type: UsersActionNames.GET_ACTIVITIES,\n payload: activities,\n };\n }\n}\n","import { Reporting, ReportingInterval } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface ReportingState {\n reportings: Reporting;\n reportingsIntervals: ReportingInterval;\n}\n\nexport enum ReportingActionNames {\n REPRTING_GET = 'GET REPRTING STATS',\n REPRTING_GET_INTERVAL = 'GET REPRTING STATS INTERVAL',\n}\n\nexport interface ReportingAction extends ReduxAction {}\nexport interface ReportingIntervalAction extends ReduxAction {}\n","import { omit } from 'lodash';\nimport { User } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\nimport { UsersActionNames, UsersState } from './users.types';\n\nconst initialState: UsersState = {\n usersBookings: [],\n userBookingMeta: undefined,\n users: [],\n protocols: [],\n allProtocols: [],\n protocolsMeta: undefined,\n usersMeta: undefined,\n clients: [],\n clientsMeta: undefined,\n dashboardStats: undefined,\n userActivitiesMeta: undefined,\n};\n\nexport const usersReducer = (state = initialState, action: ReduxAction): UsersState => {\n switch (action.type) {\n case UsersActionNames.ADD_USER: {\n const _state = { ...state };\n _state.users.unshift(action.payload);\n return _state;\n }\n\n case UsersActionNames.GET_USERS: {\n return {\n ...state,\n users: action.payload.data,\n usersMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.GET_PROTOCOLS: {\n return {\n ...state,\n protocols: action.payload.data,\n protocolsMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.GET_ALL_PROTOCOLS: {\n return {\n ...state,\n allProtocols: action.payload.data,\n // protocolsMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.GET_CLIENTS: {\n return {\n ...state,\n clients: action.payload.data,\n clientsMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.GET_CLIENT_STATS: {\n return {\n ...state,\n clientStats: action.payload,\n };\n }\n\n case UsersActionNames.GET_CLIENT_BOOKING_STAT: {\n return {\n ...state,\n clientBookingStats: action.payload,\n };\n }\n\n case UsersActionNames.GET_ACTIVITIES: {\n return {\n ...state,\n userActivities: action.payload.data,\n userActivitiesMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.GET_DASHBOARD_STATS: {\n return {\n ...state,\n dashboardStats: action.payload,\n };\n }\n\n case UsersActionNames.GET_USER: {\n return {\n ...state,\n userDetails: action.payload,\n };\n }\n\n case UsersActionNames.GET_USERBOOKINGS: {\n return {\n ...state,\n usersBookings: action.payload.data,\n userBookingMeta: action.payload.meta,\n };\n }\n\n case UsersActionNames.UPDATE:\n case UsersActionNames.UPDATE_CLIENT: {\n const _state = { ...state };\n const userIndex = _state.users.findIndex((_) => _.id === (action.payload as User).id);\n\n if (userIndex < 0) {\n return state;\n }\n\n const currentUser = _state.users[userIndex];\n const updatedUser = (_state.users[userIndex] = {\n ...currentUser,\n ...omit(action.payload, ['clientFiles']),\n });\n\n if (_state.userDetails && _state.userDetails.id === action.payload.id) {\n _state.userDetails = updatedUser;\n }\n\n return _state;\n }\n\n default: {\n return state;\n }\n }\n};\n","import { Dispatch } from 'redux';\nimport {\n ChangeUserStatusModel,\n CreateProtocolModel,\n CreateUserModel,\n EditUserModel,\n EditUserProfileModel,\n UpdateIndividualClientModel,\n} from '../../models/request';\nimport { UpdateClientModel } from '../../models/request/users/update-client.model';\nimport { UsersService } from '../../services';\nimport { QueryParams } from '../../util/api-client';\nimport { ClientStatuses, NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { UsersActions } from './users.actions';\nimport {\n AddUserAction,\n GetAllProtocolAction,\n GetClientsAction,\n GetProtocolAction,\n GetUserAction,\n GetUserActivities,\n GetUserBookings,\n GetUsersAction,\n UpdateClientAction,\n UpdateUserAction,\n} from './users.types';\n\nexport class UsersThunk {\n public static createUser(userDetails: CreateUserModel | CreateProtocolModel, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.createUser(userDetails),\n dispatch,\n 'Creating user account'\n );\n\n if (response.data) {\n callback?.();\n NotificationsThunk.create(NotificationTypes.Success, response.message)(dispatch);\n dispatch(UsersActions.addUser(response.data));\n return;\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'User creation failed')(dispatch);\n throw new Error('User creation failed');\n } catch (error) {}\n };\n }\n\n public static UpdateUser(userDetails: EditUserModel, closeModelCalback?: () => void, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.updateUser(userDetails),\n dispatch,\n 'Updating user account'\n );\n\n if (response.ok) {\n closeModelCalback?.();\n callback?.();\n\n NotificationsThunk.create(NotificationTypes.Success, 'User updated successfully')(dispatch);\n\n dispatch(UsersActions.updateUser(response.data));\n\n return;\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'Updating user account failed')(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong')(dispatch);\n }\n };\n }\n\n public static createCorporateOrganization(details: FormData) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.createCorporateOrganization(details),\n dispatch,\n 'Creating corporate organization account'\n );\n\n if (response.ok) {\n history.replace('/registration-success', {\n successfulRegistration: true,\n });\n return;\n }\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong')(dispatch);\n }\n };\n }\n\n public static createGovernmentOfficial(details: FormData) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.createGovernmentOfficial(details),\n dispatch,\n 'Creating government official account'\n );\n\n if (response.ok) {\n history.replace('/registration-success', {\n successfulRegistration: true,\n });\n return;\n }\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong')(dispatch);\n }\n };\n }\n\n public static createIndividual(details: FormData) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.createIndividual(details),\n dispatch,\n 'Creating individual account'\n );\n\n if (response.ok) {\n history.replace('/registration-success', {\n successfulRegistration: true,\n });\n return;\n }\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong')(dispatch);\n }\n };\n }\n\n public static getAllUsers(pageNumber?: number, searchTerm?: string) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.getUsers(pageNumber, searchTerm),\n dispatch,\n 'Fetching users'\n );\n\n if (response.ok) {\n if (\n response.data?.length &&\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(UsersActions.getUsers(response));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching all users failed. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static getProtocols(pageNumber?: number, searchTerm?: string) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.getProtocols(pageNumber, searchTerm),\n dispatch,\n 'Fetching Protocols'\n );\n\n if (response.ok) {\n if (\n response.data?.length &&\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(UsersActions.getProtocols(response));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching all protocols failed. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static getAllProtocols() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(UsersService.getAllProtocols(), dispatch, 'Fetching Protocols');\n\n if (response.ok) {\n dispatch(UsersActions.getAllProtocols(response));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching all protocols failed. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static getClients(filter?: ClientStatuses, pageNumber?: number, searchTerms?: string) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.getClients(filter, pageNumber, searchTerms),\n dispatch,\n 'Fetching clients'\n );\n\n if (response.data) {\n if (\n response.data?.length &&\n response.meta &&\n pageNumber &&\n (pageNumber > response.meta.lastPage || pageNumber < response.meta.firstPage)\n ) {\n history.replace('?page=1');\n return;\n }\n\n dispatch(UsersActions.getClients(response));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching all clients failed. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static getDashboardStats() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(UsersService.getDashboardStats(), dispatch, 'Fetching stats');\n\n if (response.data) {\n dispatch(UsersActions.getDashboardStats(response.data));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Fetching stats failed. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static getClientBookingStats() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(UsersService.getClientBookingStats(), dispatch, 'Fetching Stats');\n\n if (response.data) {\n dispatch(UsersActions.getClientBookingStats(response.data));\n return;\n }\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Error fetching stats. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static getClientStats() {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(UsersService.getClientStats(), dispatch, 'Fetching client stats');\n\n if (response.data) {\n dispatch(UsersActions.getClientStats(response.data));\n return;\n }\n\n throw new Error();\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching client stats failed. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static getUser(user_id: string | undefined) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.viewUser(user_id),\n dispatch,\n 'Fetching user information'\n );\n\n if (response.ok) {\n dispatch(UsersActions.getUser(response.data));\n return;\n }\n\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching user details failed. Kindly Refresh'\n )(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static getUserBoking(user_id: string | undefined, page?: number) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.getUserBooking(user_id, page),\n dispatch,\n 'Fetching user Bookings'\n );\n\n if (response.ok) {\n dispatch(UsersActions.getUserBooking(response));\n return;\n }\n\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching user bookings failed. Kindly Refresh'\n )(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static changeUserStatus(userDetails: ChangeUserStatusModel, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.changeUserStatus(userDetails),\n dispatch,\n 'Updating status'\n );\n\n if (response.ok) {\n callback?.();\n\n NotificationsThunk.create(NotificationTypes.Success, 'Status changed successfully')(dispatch);\n\n dispatch(UsersActions.updateUser(response.data));\n return;\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'Updating status failed. Kindly Refresh')(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static updateClient(clientDetails: UpdateClientModel, type: number, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.updateClient(clientDetails, type),\n dispatch,\n `Updating client's details`\n );\n\n if (response.ok) {\n if (callback) callback();\n NotificationsThunk.create(NotificationTypes.Success, 'Client updated successfully')(dispatch);\n\n dispatch(UsersActions.updateClient(response.data));\n return;\n }\n\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Updating client status failed. Kindly Refresh'\n )(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static userActivities(role: string, queryParams?: QueryParams) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await UsersService.userActivities(role, queryParams);\n\n if (response && response.ok) {\n dispatch(UsersActions.getUserActivities(response));\n return;\n }\n\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Fetching user activities failed. Kindly Refresh'\n )(dispatch);\n } catch (error) {\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Error fetching activity logs. Kindly Refresh'\n )(dispatch);\n }\n };\n }\n\n public static updateIndividualClient(clientDetails: UpdateIndividualClientModel, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.updateIndividualClient(clientDetails),\n dispatch,\n `Updating client's details`\n );\n\n if (response.ok) {\n if (callback) callback();\n NotificationsThunk.create(NotificationTypes.Success, 'Client updated successfully')(dispatch);\n\n dispatch(UsersActions.updateClient(response.data));\n return;\n }\n\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Updating client status failed. Kindly Refresh'\n )(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n\n public static UpdateUserProfile(userDetails: EditUserProfileModel, callback?: () => void) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n UsersService.updateUserProfile(userDetails),\n dispatch,\n 'Updating profile'\n );\n\n if (response && response.ok) {\n callback?.();\n\n NotificationsThunk.create(NotificationTypes.Success, 'Profile updated successfully')(dispatch);\n\n dispatch(UsersActions.updateUser(response.data));\n\n return;\n }\n\n NotificationsThunk.create(NotificationTypes.Error, 'Updating profile failed. Kindly Refresh')(dispatch);\n } catch (error) {\n NotificationsThunk.create(NotificationTypes.Error, 'Something went wrong. Kindly Refresh')(dispatch);\n }\n };\n }\n}\n","import { Dispatch } from 'redux';\nimport { ReduxAction } from '../common/redux-action';\nimport { ReportingAction, ReportingActionNames, ReportingIntervalAction, ReportingState } from './reporting.types';\nimport { ReportingService } from '../../services';\nimport { generateLoader } from '../../util/misc';\nimport { Reporting } from '../../models/response';\n\nconst initialState: ReportingState = {\n reportings: {} as any,\n reportingsIntervals: {} as any,\n};\n\nexport class ReportinThunk {\n public static getReportings(dateFilter?: { startDate: string; endDate: string }) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(ReportingService.getReporting(dateFilter), dispatch);\n\n if (response.data) {\n dispatch(ReportingActions.getReporting(response.data));\n return;\n }\n\n throw new Error('Get failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static getReportingsInterval(interval: { startDate: string; endDate: string }) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(ReportingService.getReportinginterval(interval), dispatch);\n\n if (response.data) {\n dispatch(ReportingActions.getReportingInterval(response.data));\n return;\n }\n\n throw new Error('Get failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n}\n\nexport class ReportingActions {\n public static getReporting(reportings: Reporting): ReportingAction {\n return {\n type: ReportingActionNames.REPRTING_GET,\n payload: { reportings },\n };\n }\n\n public static getReportingInterval(reportingsIntervals: any): ReportingIntervalAction {\n return {\n type: ReportingActionNames.REPRTING_GET_INTERVAL,\n payload: { reportingsIntervals },\n };\n }\n}\n\nexport const reportingReducer = (state = initialState, action: ReduxAction) => {\n switch (action.type) {\n case ReportingActionNames.REPRTING_GET: {\n return { ...action.payload };\n }\n\n case ReportingActionNames.REPRTING_GET_INTERVAL: {\n return { ...state, ...action.payload };\n }\n\n default: {\n return state;\n }\n }\n};\n","import { VCard } from '../../models/response';\nimport { ReduxAction } from '../common/redux-action';\n\nexport interface VcardState {\n vcards: VCard[];\n}\n\nexport enum VcardActionNames {\n GET_ALL = 'GET VCARDS STATS',\n GET_ONE = 'GET AIRPOTS VCARDS',\n ADD = 'CREATE VCARDS',\n}\n\nexport interface GetAllVcards extends ReduxAction {}\nexport interface GetAirpotVcard extends ReduxAction {}\nexport interface CreateVcard extends ReduxAction {}\n","import { VCard } from '../../models/response';\nimport { CreateVcard, GetAirpotVcard, GetAllVcards, VcardActionNames } from './vcard.types';\n\nexport class VcardActions {\n public static get(vcards: VCard[]): GetAllVcards {\n return {\n type: VcardActionNames.GET_ALL,\n payload: { vcards },\n };\n }\n\n public static getOne(vcards: VCard[]): GetAirpotVcard {\n return {\n type: VcardActionNames.GET_ONE,\n payload: { vcards },\n };\n }\n\n public static add(vcards?: VCard): CreateVcard {\n return {\n type: VcardActionNames.ADD,\n payload: vcards as any,\n };\n }\n}\n","import { ReduxAction } from '../common/redux-action';\nimport { VcardActionNames, VcardState } from './vcard.types';\n\nconst initialState: VcardState = {\n vcards: [],\n};\n\nexport const vcardReducer = (state = initialState, action: ReduxAction) => {\n switch (action.type) {\n case VcardActionNames.GET_ALL: {\n return { ...action.payload };\n }\n\n case VcardActionNames.GET_ONE: {\n return { ...action.payload };\n }\n\n default: {\n return state;\n }\n }\n};\n","import { airportsReducer, AirportsState } from './airports';\nimport { authReducer, AuthState } from './auth';\nimport { bookingsReducer, BookingsState, PBookingsState, pbookingsReducer } from './bookings';\nimport { loadingReducer, LoadingState } from './loading';\nimport { notificationsReducer, NotificationsState } from './notifications';\nimport { serviceReducer, ServiceState } from './services';\nimport { transactionsReducer, TransactionsState } from './transactions';\nimport { usersReducer, UsersState } from './users';\nimport { ReportingState, reportingReducer } from './reporting';\nimport { VcardState, vcardReducer } from './vcard';\n\nexport * from './airports';\nexport * from './auth';\nexport * from './bookings';\nexport * from './loading';\nexport * from './notifications';\nexport * from './services';\nexport * from './transactions';\nexport * from './users';\nexport * from './reporting';\nexport * from './vcard';\n\n// The top-level state object\nexport interface ApplicationState {\n auth: AuthState;\n airports: AirportsState;\n users: UsersState;\n services: ServiceState;\n bookings: BookingsState;\n loading: LoadingState;\n notifications: NotificationsState;\n transactions: TransactionsState;\n reportings: ReportingState;\n vcard: VcardState;\n booking: PBookingsState;\n}\n\n// Whenever an action is dispatched, Redux will update each top-level application state property using\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\n// acts on the corresponding ApplicationState property type.\nexport const reducers = {\n auth: authReducer,\n airports: airportsReducer,\n users: usersReducer,\n services: serviceReducer,\n bookings: bookingsReducer,\n loading: loadingReducer,\n notifications: notificationsReducer,\n transactions: transactionsReducer,\n reportings: reportingReducer,\n vcard: vcardReducer,\n booking: pbookingsReducer,\n};\n\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\n// correctly typed to match your store.\nexport type AppThunkAction = (dispatch: (action: TAction) => void, getState: () => ApplicationState) => void;\n","import saveAs from 'file-saver';\nimport { CreateBookingModel, UpdateBookingModel } from '../models/request';\nimport { CreatePorthacourtBooking } from '../models/request/bookings/create-porthacourt-booking.model';\nimport { PBooking } from '../models/response/bookings/pbooking';\nimport { Booking, Service } from '../models/response';\nimport { NotificationsThunk } from '../store';\nimport { ApiClient } from '../util/api-client';\nimport { NotificationTypes, Roles } from '../util/constants';\n\nexport class BookingsService {\n public static async list(role?: Roles, page?: number, searchTerm?: string, filter?: any) {\n const url = `booking-services${role === Roles.Client ? '/client' : ''}`;\n const searchPath = `/search-bookings/${searchTerm}`;\n const filterbByDate = `stardDate=${filter.startDate}&endDate=${filter.endDate}`;\n\n const initialQuery = page ? `?pageNumber=${page}` : '';\n const query = searchTerm && searchTerm !== '' ? `${searchPath}?pageNumber=${page}` : initialQuery;\n const modifiedquery = filter.startDate ? `${query}&${filterbByDate}` : query;\n\n return ApiClient.get(url + modifiedquery);\n }\n\n public static async getBookingsByServiceId(id: Service['id'], page?: number) {\n const url = `booking-services/booking-by-service/${id}`;\n const query = page ? `?pageNumber=${page}` : '';\n return ApiClient.get(url + query);\n }\n\n public static async retrieve(id: number) {\n return ApiClient.get(`booking-services/${id}`);\n }\n\n public static async create(data: any) {\n if (Array.isArray(data)) {\n return ApiClient.post('booking-services/create-bookings', data);\n }\n\n return ApiClient.post('booking-services', data);\n }\n\n public static async createporthacourtbooking(data: any) {\n return ApiClient.post(\n 'booking-services/create-portharcourt-bookings',\n data\n );\n }\n\n public static async update(data: UpdateBookingModel) {\n return ApiClient.patch(`booking-services`, data);\n }\n\n public static async cancel(id: number) {\n return ApiClient.delete(`booking-services/${id}`);\n }\n\n public static async exportBooking(batchCode: string, documentName: string, dispatch: any, fileType: string) {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n const path =\n fileType === 'invoice'\n ? '/booking-services/export-receipt/' // if fileType is invoice return '/tras....../'\n : fileType === 'receipt'\n ? '/booking-services/export-receipt/' // else if fileType is reciept return '/tras....../'\n : ''; // elase return emplty string\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n const response = await fetch(`${process.env.REACT_APP_BASE_URL}${path}${batchCode}`, config);\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, documentName + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n }\n}\n","import { CreateServiceModel, UpdateServiceModel } from '../models/request';\nimport { Service } from '../models/response';\nimport { ApiClient } from '../util/api-client';\n\nexport class ServicesService {\n public static async getAllServices() {\n return ApiClient.get('services');\n }\n\n public static async getSingleService(service_id: string) {\n return ApiClient.get(`services/${service_id}`);\n }\n\n public static async getClientService() {\n return ApiClient.get(`services/services-user`);\n }\n public static async createService(data: CreateServiceModel) {\n return ApiClient.post('services', data);\n }\n\n public static async updateService(data: UpdateServiceModel) {\n return ApiClient.patch('services', data);\n }\n}\n","import {\n ChangeUserStatusModel,\n CreateProtocolModel,\n CreateUserModel,\n EditUserModel,\n EditUserProfileModel,\n UpdateClientModel,\n UpdateIndividualClientModel,\n} from '../models/request';\nimport { BookingServicesStat, ClientStats, User, UserActivity } from '../models/response';\nimport { ApiClient, QueryParams } from '../util/api-client';\nimport { ClientStatuses, Roles } from '../util/constants';\n\nexport class UsersService {\n public static async getDashboardStats() {\n return ApiClient.get('users/dashboard-stats');\n }\n\n public static async createGovernmentOfficial(userDetails: FormData) {\n return ApiClient.post('users/government', userDetails, true);\n }\n\n public static async createCorporateOrganization(userDetails: FormData) {\n return ApiClient.post('users/corporate', userDetails, true);\n }\n\n public static async createIndividual(userDetails: FormData) {\n return ApiClient.post('users/individual', userDetails, true);\n }\n\n public static async createUser(userDetails: CreateUserModel | CreateProtocolModel) {\n return ApiClient.post('users/users', userDetails);\n }\n\n public static async getClients(filter?: ClientStatuses, page?: number, searchTerms?: string) {\n const query = page ? `?pageNumber=${page}` : '';\n const endpoint = filter ? `clientByStatus/${filter}` : 'clients';\n const path = searchTerms ? `search/${searchTerms}` : endpoint;\n\n return ApiClient.get('users/' + path + query);\n }\n\n public static async getClientBookingStats() {\n return ApiClient.get('booking-services/stats');\n }\n\n public static async getClientStats() {\n return ApiClient.get('users/status-stats');\n }\n\n public static async getUsers(page?: number, searchTerm?: string) {\n const query = page ? `?pageNumber=${page}` : '';\n const path = searchTerm ? `search/users/faan/${searchTerm}` : 'users';\n return ApiClient.get('users/' + path + query);\n }\n\n public static async getProtocols(page?: number, searchTerm?: string) {\n const query = page ? `?pageNumber=${page}` : '';\n const endpoint = 'protocols/';\n const path = searchTerm ? `search/${searchTerm}` : '';\n return ApiClient.get('users/' + endpoint + path + query);\n }\n\n public static async getAllProtocols() {\n return ApiClient.get('users/all/protocols');\n }\n\n public static async changeUserStatus(userDetails: ChangeUserStatusModel) {\n return ApiClient.patch('users/activation', userDetails);\n }\n\n public static async viewUser(user_id: string | undefined) {\n return ApiClient.get<[]>(`users/users/${user_id}`);\n }\n\n public static async getUserBooking(user_id: string | undefined, page?: number) {\n return ApiClient.get<[]>(`booking-services/client/${user_id}?pageNumber=${page}`);\n }\n\n public static async updateUser(data: EditUserModel) {\n return ApiClient.patch('users/user', data);\n }\n\n public static async updateUserProfile(data: EditUserProfileModel) {\n return ApiClient.patch('users/faan-user', data);\n }\n\n public static async updateClient(data: UpdateClientModel, type?: number) {\n return ApiClient.patch(`${type === 1 ? 'users/corporate' : 'users/government'}`, data);\n }\n\n public static async updateIndividualClient(data: UpdateIndividualClientModel) {\n return ApiClient.patch('users/individual', data);\n }\n\n public static async userActivities(role: string, query?: QueryParams) {\n if (role === Roles.Admin) {\n return ApiClient.get(`activity/all-activities`, query);\n }\n\n return ApiClient.get(`activity/client`);\n }\n}\n","import { ApiClient } from '../util/api-client';\n\nexport class ReportingService {\n public static async getReporting(dateFilter?: { startDate: string; endDate: string }) {\n return ApiClient.get('users/reporting-stats', dateFilter);\n }\n\n public static async getReportinginterval(interval: { startDate: string; endDate: string }) {\n return ApiClient.get(`users/reporting-stats/airports`, interval);\n }\n}\n","import { Dispatch } from 'redux';\nimport { ForgetPasswordModel, ResetPasswordModel, UserLoginModel } from '../../models/request';\nimport { AuthService } from '../../services';\nimport { ApiClient } from '../../util/api-client';\nimport { NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\nimport { AuthActions } from './auth.actions';\n\nexport class AuthThunk {\n public static logIn(loginDetails: UserLoginModel) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(AuthService.logIn(loginDetails), dispatch, 'Logging in');\n\n if (response.data) {\n ApiClient.setToken(response.data.token);\n\n dispatch(AuthActions.logIn(response.data));\n\n NotificationsThunk.create(NotificationTypes.Success, 'Login successful')(dispatch);\n\n return history.push('/app/dashboard');\n }\n\n throw new Error('Login failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static requestPasswordReset(forgotPasswordDetails: ForgetPasswordModel) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n AuthService.requestPasswordReset(forgotPasswordDetails),\n dispatch,\n 'Requesting password reset'\n );\n\n if (response.ok) {\n NotificationsThunk.create(\n NotificationTypes.Success,\n 'Password reset email sent successfully'\n )(dispatch);\n\n return history.push('/login');\n }\n\n throw new Error('Password reset request failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static requestResetPassword(forgotPasswordDetails: ResetPasswordModel) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n AuthService.requestResetPassword(forgotPasswordDetails),\n dispatch,\n 'Resetting password'\n );\n\n if (response.ok) {\n NotificationsThunk.create(NotificationTypes.Success, 'Password reset successful')(dispatch);\n\n return history.push('/login');\n }\n\n throw new Error('Password not changed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static verifyEmail(\n code: string,\n actions: {\n onSuccess: () => any;\n onFail: () => any;\n }\n ) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(AuthService.verifyEmail(code), dispatch, 'Verifying email');\n\n if (response.ok) {\n return actions.onSuccess();\n }\n\n return actions.onFail();\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n\n public static logOut() {\n return async (dispatch: Dispatch) => {\n try {\n dispatch(AuthActions.logOut());\n ApiClient.unsetToken();\n window.localStorage.clear();\n\n return history.push('/login');\n } catch (error) {}\n };\n }\n\n public static clearSession() {\n return async (dispatch: Dispatch) => {\n dispatch(AuthActions.logOut());\n\n ApiClient.unsetToken();\n ApiClient.timedOut = true;\n\n window.localStorage.clear();\n NotificationsThunk.create(\n NotificationTypes.Warning,\n 'Your session has expired. Please login again',\n true\n )(dispatch);\n };\n }\n}\n","import React from 'react';\nimport { Activity, Bell, Clipboard, CreditCard, DollarSign, Flag, Grid, Home, User, Users } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { AuthThunk } from '../../store/auth/auth.thunk';\nimport { NewRoles, Roles } from '../../util/constants';\n\ninterface SidebarLink {\n name: string;\n link: string;\n icon: React.FC;\n inactive?: boolean;\n role?: Roles | Roles[];\n}\n\nexport const useSidebar = () => {\n const dispatch = useDispatch();\n\n const handleLogout = React.useCallback(() => {\n dispatch(AuthThunk.logOut());\n }, [dispatch]);\n\n const links: SidebarLink[] = [\n { name: 'Dashboard', link: '/app/dashboard', icon: Home },\n {\n name: 'All Clients',\n link: '/app/clients',\n icon: Users,\n role: [Roles.Admin, Roles.AirportProtocolCoordinator, Roles.AirportManager, ...NewRoles],\n },\n {\n name: 'All Services',\n link: '/app/services',\n icon: Grid,\n role: [Roles.Client, Roles.Admin],\n },\n {\n name: 'Transactions',\n link: '/app/transaction-services',\n icon: DollarSign,\n role: [\n Roles.Accountant,\n Roles.Auditor,\n Roles.Client,\n Roles.Commercial,\n Roles.Admin,\n Roles.AirportProtocolCoordinator,\n ],\n },\n {\n name: 'Bookings',\n link: '/app/bookings',\n icon: Clipboard,\n role: [Roles.Admin, Roles.AirportManager, Roles.AirportProtocolCoordinator],\n },\n {\n name: 'Users',\n link: '/app/users',\n icon: Users,\n role: Roles.Admin,\n },\n {\n name: 'Users Activities',\n link: '/app/activities',\n icon: Activity,\n role: [Roles.Admin, Roles.AirportManager, Roles.AirportProtocolCoordinator],\n },\n // {\n // name: 'Vcard',\n // link: '/app/vcard',\n // icon: CreditCard,\n // role: [Roles.Admin, Roles.AirportManager, Roles.AirportProtocolCoordinator],\n // },\n {\n name: 'Reporting',\n link: '/app/reporting',\n icon: Flag,\n role: [Roles.Admin, Roles.AirportManager, Roles.AirportProtocolCoordinator],\n },\n {\n name: 'Protocols',\n link: '/app/protocols',\n icon: Users,\n role: [Roles.AirportProtocolCoordinator, Roles.Admin],\n },\n {\n name: 'Notifications',\n link: '/app/notifications',\n icon: Bell,\n inactive: true,\n },\n { name: 'Profile', link: '/app/profile', icon: User },\n ];\n\n return {\n links,\n handleLogout,\n };\n};\n","import styled from 'styled-components';\n\nexport const SidebarMenuStyleWrapper = styled.div`\n width: 300px;\n min-height: 100vh;\n background: #ffffff 0% 0% no-repeat padding-box;\n position: fixed;\n color: white;\n padding: 3rem;\n font-weight: normal;\n line-height: 2rem;\n border: 1px solid #dddddd;\n display: flex;\n flex-direction: column;\n\n img {\n max-width: 100px;\n height: auto;\n }\n\n .navWrapper {\n margin-top: 54px;\n flex: 1;\n }\n\n .nav-item {\n display: grid;\n grid-template-columns: 14px 1fr;\n column-gap: 1rem;\n font-size: 14px;\n font-weight: bold;\n color: black;\n height: 56px;\n border-radius: 7px;\n padding: 0 28px;\n }\n\n .nav-item__icon-container,\n .nav-item__name {\n display: flex;\n align-items: center;\n }\n\n .nav-item__icon {\n height: 12px;\n width: 12px;\n stroke-width: 3px;\n }\n\n .nav-item.active {\n background: #f0f9f4;\n color: var(--primary-color);\n }\n\n .contentBox {\n color: #000;\n font-size: 12px;\n }\n\n .profile-box {\n margin-top: 5rem;\n\n p {\n font-size: 13px;\n font-weight: bold;\n }\n }\n\n .profile-box .profile-box__img {\n width: 30px !important;\n height: auto;\n }\n\n .box {\n flex: 0.3;\n cursor: pointer;\n\n .divCircle {\n height: 30px;\n width: 30px;\n border-radius: 100%;\n background-color: #eafaf1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n svg {\n color: #18a956;\n stroke-width: 3px;\n }\n }\n }\n\n @media only screen and (max-width: 970px) {\n display: none !important;\n }\n`;\n","import React from 'react';\nimport { LogOut } from 'react-feather';\nimport { NavLink } from 'react-router-dom';\nimport { AuthContext } from '../../../context';\nimport { useSidebar } from '../sidebar-hook';\nimport { SidebarMenuStyleWrapper } from './side-bar.style';\n\ntype State = {\n activeMenu?: any;\n};\n\nexport const SidebarMenu: React.FC = (props) => {\n const { user, canAccess } = React.useContext(AuthContext.Context);\n const { links, handleLogout } = useSidebar();\n\n return (\n \n \"logo\"\n
\n {links\n .filter((_) => !_.inactive)\n .filter((_) => (_.role ? canAccess(_.role, true) : true))\n .map(({ name, link, icon: Icon, inactive }, i) => {\n return (\n {\n if (inactive) {\n e.preventDefault();\n }\n }}\n key={i}\n >\n
\n \n
\n
\n {name}\n
\n \n );\n })}\n
\n
\n
\n \"user\"\n
\n
\n {user && (user.lastName || user.business_Name)}\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { ChevronRight } from 'react-feather';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: inline-flex;\n background: #fff 0% 0% no-repeat padding-box;\n border: 1px solid #dadada;\n border-radius: 0.5rem;\n align-items: center;\n padding: 12px 20px;\n\n a.aps-breadcrumb {\n color: black;\n }\n\n .aps-breadcrumb {\n font-size: 14px;\n color: #dadada;\n }\n\n .aps-breadcrumb + .aps-breadcrumb {\n margin-left: 8px;\n }\n\n @media screen and (max-width: 970px) {\n position: absolute;\n opacity: 0;\n }\n`;\n\nexport interface Breadcrumb {\n name: string;\n path: string;\n}\n\nexport const Breadcrumbs: React.FC<{ breadcrumbs: Breadcrumb[] }> = ({ breadcrumbs }) => {\n const previousPages = breadcrumbs.slice(0, -1);\n const currentPage = breadcrumbs.slice(-1)[0];\n\n return breadcrumbs.length > 0 ? (\n \n {previousPages.map(({ name, path }) => {\n return (\n \n \n {name}\n \n \n \n );\n })}\n {currentPage.name}\n \n ) : null;\n};\n","import styled from 'styled-components';\n\nexport const TopBarStyleWrapper = styled.div`\n .topbarWrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 3rem;\n\n .breadcrumbBox {\n flex: 1;\n display: flex;\n justify-content: flex-end;\n margin-right: 50px;\n height: 36px;\n }\n }\n`;\n","import React from 'react';\nimport { FlagTime, SignOutSwitchComponent } from '../../../components';\nimport { Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { TopBarStyleWrapper } from './top-bar.style';\n\ntype Props = {\n breadcrumbs: any;\n};\n\nexport const TopBar: React.FC = (props) => {\n const { breadcrumbs } = props;\n\n return (\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n );\n};\n","import styled from 'styled-components';\n\nexport const TopNavigationStyle = styled.div`\n @media only screen and (min-width: 970px) {\n display: none !important;\n }\n\n -webkit-box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.1);\n box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.1);\n position: sticky !important;\n z-index: 99 !important;\n padding: 20px !important;\n top: 0;\n left: 0;\n right: 0;\n height: 8vh;\n display: block;\n background-color: #fff !important;\n\n nav {\n display: flex;\n flex-direction: row;\n\n span {\n display: block;\n }\n\n .nav__right {\n flex: 1;\n cursor: pointer;\n }\n\n .nav__image {\n flex: 1;\n }\n\n .nav__left {\n flex: 1;\n }\n }\n\n .mobile__sidebar__wrapper {\n background-color: rgb(0, 0, 0);\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 9999;\n width: 100%;\n height: 100%;\n position: fixed;\n top: 0;\n left: 0;\n overflow: auto;\n\n .mobile__sidebar {\n background-color: white;\n width: 80%;\n max-width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n padding: 3rem;\n display: flex;\n flex-direction: column;\n\n .navWrapper {\n margin-top: 54px;\n flex: 1;\n }\n\n .nav-item {\n display: grid;\n grid-template-columns: 14px 1fr;\n column-gap: 1rem;\n font-size: 14px;\n font-weight: bold;\n color: black;\n height: 56px;\n border-radius: 7px;\n padding: 0 28px;\n }\n\n .nav-item__icon-container,\n .nav-item__name {\n display: flex;\n align-items: center;\n }\n\n .nav-item__icon {\n height: 12px;\n width: 12px;\n stroke-width: 3px;\n }\n\n .nav-item.active {\n background: #f0f9f4;\n color: var(--primary-color);\n }\n\n .profile-box {\n margin-top: 5rem;\n\n p {\n font-size: 13px;\n font-weight: bold;\n }\n }\n\n .profile-box .profile-box__img {\n width: 30px !important;\n height: auto;\n }\n }\n }\n`;\n","import React from 'react';\nimport { AlignJustify, LogOut } from 'react-feather';\nimport { NavLink } from 'react-router-dom';\nimport { AuthContext } from '../../../context';\nimport { useSidebar } from '../sidebar-hook';\nimport { TopNavigationStyle } from './top-navigation-style';\n\nexport const TopNavigation: React.FC<{}> = (props) => {\n const { user, canAccess } = React.useContext(AuthContext.Context);\n const [sidebar, setSidebar] = React.useState(false);\n const { links, handleLogout } = useSidebar();\n const toggleSidebar = React.useCallback(() => {\n setSidebar(!sidebar);\n }, [sidebar]);\n\n return (\n \n \n {sidebar && (\n
\n
\n \"logo\"\n
\n {links\n .filter((_) => !_.inactive)\n .filter((_) => (_.role ? canAccess(_.role, true) : true))\n .map(({ name, link, icon: Icon, inactive }, i) => {\n return (\n {\n if (inactive) {\n e.preventDefault();\n }\n }}\n key={i}\n >\n
\n \n
\n
\n {name}\n
\n \n );\n })}\n
\n
\n
\n \n
\n
\n {user && (user.lastName || user.business_Name)}\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n )}\n
\n );\n};\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const ServiceCardStyleWrapper = styled(Link)`\n color: black !important;\n display: flex;\n flex-direction: column;\n border: 1px solid #dadada;\n border-radius: 7px;\n padding: 20px;\n cursor: pointer;\n margin-bottom: 1rem;\n min-width: 250px;\n\n .iconBox {\n margin-bottom: 10px;\n\n img {\n width: 50px;\n }\n }\n\n .contentBox {\n flex: 1;\n\n span {\n font-weight: bold;\n }\n }\n\n p {\n margin-bottom: 10px;\n }\n\n span {\n margin-top: 5px;\n color: var(--primary-color);\n }\n`;\n","import React from 'react';\nimport { ServiceCardStyleWrapper } from './service-card.style';\n\ntype Props = {\n title: string;\n to: string;\n desc: string;\n};\n\nexport const ServiceCardComponent: React.FC = ({ title, to, desc }) => {\n return (\n \n
\n \"departure\"\n
\n
\n {title}\n
\n

{desc}

\n \n Book Service \n \n
\n );\n};\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const ClientServiceCardStyleWrapper = styled(Link)`\n color: black !important;\n display: flex;\n flex-direction: column;\n border: 1px solid #dadada;\n border-radius: 7px;\n padding: 20px;\n cursor: pointer;\n margin-bottom: 1rem;\n min-width: 250px;\n\n .iconBox {\n margin-bottom: 10px;\n\n img {\n width: 50px;\n }\n }\n\n .contentBox {\n flex: 1;\n\n span {\n font-weight: bold;\n }\n }\n\n p {\n margin-bottom: 10px;\n }\n\n span {\n margin-top: 5px;\n color: var(--primary-color);\n }\n`;\n","import React from 'react';\nimport { ClientServiceCardStyleWrapper } from './service-card.style';\n\ntype Props = {\n title: string;\n to: string;\n desc: string;\n price: string;\n};\n\nexport const ClientServiceCardComponent: React.FC = ({ title, to, desc, price }) => {\n return (\n \n
\n \"departure\"\n
\n
\n {title}\n
\n

{desc}

\n

{price}

\n \n Book Service \n \n
\n );\n};\n","import React from 'react';\n\ntype State = {\n children: React.ReactNode;\n};\n\nexport class ErrorBoundary extends React.Component {\n public static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n public state = {\n hasError: false,\n };\n\n public componentDidCatch(error: Error | null | undefined, errorInfo: any) {\n // log error on the server\n }\n\n public render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return

Something went wrong.

;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Collapse, Container, Nav, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\nimport { AuthContext } from '../../context';\nimport { CustomButton } from '../index';\nimport './NavMenu.scss';\n\nexport default class NavMenu extends React.PureComponent<{}, { isOpen: boolean }> {\n public state = {\n isOpen: false,\n };\n\n public render() {\n return (\n
\n \n \n \n \"...\"\n \n \n \n \n \n \n \n
\n );\n }\n\n private toggle = () => {\n this.setState({\n isOpen: !this.state.isOpen,\n });\n };\n}\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport backgroundImage from '../assets/images/patternmm.svg';\nimport NavMenu from './nav-menu/nav-menu';\n\nexport const StickyBackground = styled.div`\n height: 100vh;\n width: 100vw;\n background: white;\n background-position-x: center;\n background-position-y: bottom;\n background-repeat: no-repeat;\n background-size: contain;\n background-image: url(${backgroundImage});\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n`;\n\nexport default (props: { children?: React.ReactNode }) => (\n \n \n
{props.children}
\n
\n);\n","import React from 'react';\n\nexport const LoadingSpinner = ({ ...pros }) => {\n return (\n \n
\n
\n );\n};\n","import { AnimatePresence, motion, Variants } from 'framer-motion';\nimport { keys, map, size } from 'lodash';\nimport React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Spinner } from 'reactstrap';\nimport styled from 'styled-components';\nimport { ApplicationState } from '../store';\nimport { LoadingSpinner } from './utilities/spinner';\n\nconst PageLoaderWrapper = styled(motion.div)`\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1080;\n width: 100vw;\n height: 100vh;\n background: rgba(255, 255, 255, 0.65);\n backdrop-filter: blur(2px);\n color: black;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n .loader__icon {\n color: black;\n }\n\n .loader__message {\n font-size: 1.8rem;\n text-transform: uppercase;\n /* font-weight: bold; */\n margin-top: 30px;\n letter-spacing: 2px;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n`;\n\nexport const PageLoader: React.FC = () => {\n const { tasks } = useSelector((state: ApplicationState) => state.loading);\n const isLoading = size(tasks) > 0;\n const messages = map(tasks);\n\n const variants: Variants = {\n initial: { opacity: 0, display: 'none' },\n visible: { opacity: 1, display: 'flex' },\n };\n\n const variant = useMemo(() => (isLoading ? 'visible' : 'initial'), [isLoading]);\n\n return (\n \n \n \n \n {messages.length > 0\n ? map(keys(tasks), (key) => {\n return (\n \n {tasks[key]}\n \n );\n })\n : 'Loading'}\n \n \n \n );\n};\n","import React, { useContext } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Redirect, Route, RouteProps, useLocation } from 'react-router-dom';\nimport { AuthContext } from '../context/auth.context';\nimport { NotificationsThunk } from '../store/notifications/notifications.thunk';\nimport { NotificationTypes, Roles } from '../util/constants';\n\ninterface ManagedRouteProps extends RouteProps {\n role?: Roles | Roles[];\n authFunction?: () => boolean;\n isPrivate?: boolean;\n}\n\nexport const ManagedRoute: React.FC = ({ role, authFunction, isPrivate, ...props }) => {\n const { user, canAccess } = useContext(AuthContext.Context);\n const dispatch = useDispatch();\n const { pathname: currentLocation, ...location } = useLocation();\n\n // Access checks\n const UNAUTHORIZED = React.useMemo(\n () => (authFunction && !authFunction?.()) || (role && !canAccess(role, true)),\n // eslint-disable-next-line\n [user]\n );\n\n // eslint-disable-next-line\n const REQUIRES_LOGOUT = React.useMemo(() => user && !isPrivate, [user]);\n // eslint-disable-next-line\n const REQUIRES_AUTH = React.useMemo(() => !user && isPrivate, [user]);\n\n const warn = React.useCallback(\n (message: string) => {\n dispatch(NotificationsThunk.create(NotificationTypes.Warning, message));\n },\n [dispatch]\n );\n\n React.useEffect(() => {\n if (REQUIRES_AUTH) {\n return warn('Log in to access that page');\n }\n\n if (UNAUTHORIZED) {\n return warn('You are not authorized to access that page');\n }\n }, [UNAUTHORIZED, REQUIRES_AUTH, REQUIRES_LOGOUT, user, warn]);\n\n if (REQUIRES_AUTH) {\n return (\n \n );\n }\n\n if (UNAUTHORIZED) {\n return (\n \n );\n }\n\n if (REQUIRES_LOGOUT) {\n return (\n \n );\n }\n\n return ;\n};\n\nconst AuthedRoute = (isPrivate: boolean) => (props: ManagedRouteProps) => ;\n\nexport const ProtectedRoute = AuthedRoute(true);\nexport const ExternalRoute = AuthedRoute(false);\n","import styled from 'styled-components';\n\nexport const ActivityItemStyleWrapper = styled.div`\n .activityItemWrapper {\n display: flex;\n flex-direction: row;\n padding: 0.1rem 0rem 0.2rem 0rem;\n border-bottom: 1px solid #dddddd;\n\n .item-1 {\n flex: 1;\n }\n\n .item-2 {\n flex: 4;\n }\n\n .item-3 {\n flex: 0.8;\n padding: 10px;\n\n button {\n cursor: pointer;\n font-weight: bold;\n text-transform: uppercase;\n height: 40px !important;\n padding: 5px 15px 5px 15px;\n font-size: 12px;\n }\n\n .pending {\n background-color: #e5e7e9;\n color: #000;\n }\n\n .success {\n background-color: #eafaf1;\n color: #18a956;\n }\n }\n }\n`;\n","import { Dropdown, DropdownMenu } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const StyledDropdown = styled(Dropdown)``;\n\nexport const CustomDropdownItem = styled.div`\n display: flex;\n width: 100%;\n padding: 0;\n background: transparent;\n border: none;\n font-size: 12px !important;\n font-weight: normal !important;\n justify-content: space-between;\n align-items: center;\n height: 20px;\n color: black;\n cursor: pointer;\n\n * {\n font-weight: normal !important;\n color: black !important;\n }\n`;\n\nexport const CustomDropdownMenu = styled(DropdownMenu)`\n background: var(--unnamed-color-ffffff) 0% 0% no-repeat padding-box;\n background: #ffffff 0% 0% no-repeat padding-box;\n box-shadow: 0px 3px 6px #00000029;\n border-radius: 7px;\n opacity: 1;\n width: 150px;\n min-width: 120px;\n padding: 16px;\n\n ${CustomDropdownItem} + ${CustomDropdownItem} {\n margin-top: 13px;\n }\n`;\n","import React from 'react';\nimport { Button } from 'reactstrap';\nimport { ActivityItemStyleWrapper } from './activity-item.style';\n\ntype Props = {\n title: string;\n timeline: string;\n type: string;\n};\n\nexport class ActivityItem extends React.Component {\n public render() {\n const { title, timeline, type } = this.props;\n const btnTitle = type.toUpperCase();\n\n return (\n \n
\n
\n

\n {timeline}\n

\n
\n
\n

{title}

\n
\n
\n \n
\n
\n
\n );\n }\n}\n","import React from 'react';\nimport { DropdownToggle } from 'reactstrap';\nimport { CustomDropdownItem, CustomDropdownMenu, StyledDropdown } from './custom-dropdown.style';\n\ninterface CustomDropdownProps {\n className?: string;\n triggerComponent: React.ComponentType;\n}\n\nexport const CustomDropdown: React.FC = ({\n className,\n triggerComponent: TriggerComponent,\n children,\n}) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const toggle = () => setIsOpen((prevState) => !prevState);\n\n return (\n \n \n \n \n \n {children}\n \n \n );\n};\n\nexport { CustomDropdownMenu, CustomDropdownItem };\n","import styled from 'styled-components';\n\nexport const CustomTableStyleWrapper = styled.div`\n table {\n color: black;\n font-size: 12px !important;\n\n th {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n th,\n td {\n padding-left: 0;\n }\n\n thead {\n tr,\n th {\n border: 0 !important;\n font-weight: bold !important;\n }\n }\n\n tbody {\n tr td span {\n color: #18a956;\n font-weight: bold;\n }\n\n a {\n color: #18a956;\n }\n\n .viewBtn {\n &:hover {\n background-color: #fff;\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { Table } from 'reactstrap';\nimport { CustomTableStyleWrapper } from './custom-table.style';\n\ntype Props = {\n headData?: string[];\n children: React.ReactNode;\n showHead: boolean;\n};\n\nexport const CustomTable: React.FC = (props) => {\n const { headData, children, showHead } = props;\n\n return (\n \n \n {showHead && (\n \n \n {headData &&\n headData.length > 0 &&\n headData.map((data: string) => )}\n \n \n )}\n {children}\n
{data}
\n
\n );\n};\n","import React from 'react';\nimport { ArrowLeft, ArrowRight } from 'react-feather';\nimport {\n TableInstance,\n TableOptions,\n usePagination,\n UsePaginationInstanceProps,\n UsePaginationState,\n useSortBy,\n useTable,\n} from 'react-table';\nimport { Table } from 'reactstrap';\nimport styled from 'styled-components';\nimport { ApiResponse } from '../../../util/api-client';\nimport { setSearch } from '../../../util/history';\nimport { CustomPrimaryButton } from '../custom-primary-button/custom-primary-button';\n\nconst StyledTable = styled(Table)`\n color: black;\n /* width: unset;\n min-width: 100%; */\n font-size: 14px !important;\n\n thead {\n tr,\n th {\n border: 0 !important;\n font-weight: bold !important;\n }\n }\n\n th,\n td {\n padding-left: 0;\n vertical-align: middle;\n }\n`;\n\nconst ButtonArea = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-between;\n margin-bottom: 1rem;\n overflow-x: auto;\n\n > section {\n margin-bottom: 1rem;\n display: flex;\n\n button:disabled {\n background: #aaa;\n border-color: #aaa;\n color: #333;\n }\n }\n\n .page-separator {\n display: flex;\n }\n\n .page-separator + .page-separator {\n &::before {\n display: block;\n content: '-';\n margin: 0 1rem;\n }\n }\n`;\n\ninterface DataTableProps {\n className?: string;\n hideHead?: boolean;\n meta?: ApiResponse['meta'];\n}\n\ninterface PaginationInstance extends UsePaginationInstanceProps {\n state: UsePaginationState;\n}\n\nconst PAGE_SIZE = 10;\n\nexport function DataTable({\n className,\n hideHead,\n columns,\n data,\n meta,\n ...props\n}: DataTableProps & TableOptions) {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n prepareRow,\n page,\n rows,\n }: TableInstance & PaginationInstance = useTable(\n {\n columns,\n data,\n initialState: { pageSize: PAGE_SIZE },\n ...props,\n },\n useSortBy,\n usePagination\n );\n\n const pageIndex = React.useMemo(() => meta?.pageNumber || 1, [meta]);\n\n const canPreviousPage = React.useMemo(() => meta && meta.pageNumber > meta.firstPage, [meta]);\n const canNextPage = React.useMemo(() => meta && meta.pageNumber < meta.lastPage, [meta]);\n\n const gotoPage = React.useCallback((page: number) => {\n setSearch('page', page);\n }, []);\n\n const nextPage = React.useCallback(() => {\n gotoPage(meta!.nextPage);\n }, [gotoPage, meta]);\n\n const previousPage = React.useCallback(() => {\n gotoPage(meta!.previousPage);\n }, [gotoPage, meta]);\n\n const pageOptions = React.useMemo(() => {\n const pages = [...new Array(meta?.totalPages)].map((_, i) => i + 1);\n const midpoint = Math.floor(pages.length / 2);\n\n if (pages.length <= 8) {\n return [pages];\n }\n\n const head = pages.slice(0, 1);\n const tail = pages.slice(-1);\n\n let body =\n pageIndex === 1 || pageIndex === pages.length\n ? pages.slice(midpoint - 1, midpoint + 2)\n : pages.slice(pageIndex - 2, pageIndex + 1);\n\n if (head.includes(body[0])) {\n body = body.slice(1);\n }\n\n if (tail.includes(body[body.length - 1])) {\n body = body.slice(0, -1);\n }\n\n // if (meta && meta.totalPages > 6) {\n\n // }\n\n // // if (meta && meta.totalPages > 6) {\n // // return pages.slice(0, 2).concat(pages.slice(-2));\n // // }\n\n // // if (!pages.includes(pageIndex)) {\n // // pages.push(pageIndex);\n // // }\n\n return [head, body, tail];\n }, [pageIndex, meta]);\n\n return (\n \n \n {hideHead ? null : (\n \n {headerGroups.map((headerGroup) => (\n \n {headerGroup.headers.map((column) => (\n \n
\n {column.render('Header')}\n
\n \n ))}\n \n ))}\n \n )}\n \n {rows.map((row, i) => {\n prepareRow(row);\n return (\n \n {row.cells.map((cell, j) => {\n return (\n \n {cell.render('Cell')}\n \n );\n })}\n \n );\n })}\n \n
\n {meta && (\n \n
\n previousPage()}\n disabled={!canPreviousPage}\n >\n \n \n {pageOptions.map((section, i) => (\n
\n {section.map((page) => (\n {\n gotoPage(page);\n }}\n disabled={page === pageIndex}\n key={page}\n >\n {page}\n \n ))}\n
\n ))}\n nextPage()} disabled={!canNextPage}>\n \n \n
\n \n Showing {(pageIndex - 1) * PAGE_SIZE + 1} to {(pageIndex - 1) * PAGE_SIZE + page.length} of{' '}\n {meta.totalCount} {meta.totalCount !== 1 ? 'entries' : 'entry'}\n \n
\n )}\n
\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledDiv = styled.div`\n position: relative;\n color: black;\n\n .form__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n }\n\n .form__back-button {\n position: absolute;\n top: 30px;\n left: -160px;\n }\n\n .form__header h1 {\n color: black;\n text-align: center;\n font: Bold 39px/49px Adobe Clean;\n color: #000000;\n opacity: 1;\n }\n\n a {\n color: var(--primary-color);\n }\n\n .form__subheader {\n text-align: left;\n font: Bold 14px/17px Adobe Clean;\n letter-spacing: 1.4px;\n color: #9a9a9a;\n text-transform: uppercase;\n opacity: 1;\n }\n`;\n\nexport const EntryFormContainer: React.FC = ({ children }) => {\n return {children};\n};\n","import { motion, MotionProps } from 'framer-motion';\nimport { capitalize } from 'lodash';\nimport React from 'react';\nimport { Check, Info, Triangle, X } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport styled from 'styled-components';\nimport { SystemNotification } from '../../../models/response';\nimport { NotificationsActions } from '../../../store/notifications/notifications.actions';\nimport { NotificationTypes } from '../../../util/constants';\n\nenum Colors {\n Success = '#18A956',\n Info = '#1A9BFC',\n Error = '#FD6D6B',\n Warning = '#FEBF2C',\n}\n\nconst Container = styled(motion.div)`\n width: 100%;\n display: flex;\n background: white;\n box-shadow: 0px 3px 6px #00000029;\n border-radius: 8px;\n overflow: hidden;\n\n .toast__indicator {\n display: block;\n content: ' ';\n background: red;\n min-height: 70px;\n height: inherit;\n width: 8px;\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n }\n\n .toast__body {\n display: flex;\n flex: 1;\n }\n\n .toast__icon {\n color: white;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n margin: 20px 10px;\n }\n\n .toast__content {\n flex: 1;\n flex-shrink: 0;\n padding: 16px 0;\n }\n\n .toast__dismiss-button {\n background: transparent !important;\n border: none !important;\n outline: none !important;\n padding: 0 !important;\n margin: 20px !important;\n color: #888888;\n }\n\n .toast__header {\n font-size: 14px;\n font-weight: bold;\n }\n\n .toast__message {\n display: block;\n font-size: 12px;\n color: #888888;\n }\n\n .success {\n background: ${Colors.Success};\n }\n\n .info {\n background: ${Colors.Info};\n }\n\n .error {\n background: ${Colors.Error};\n }\n\n .warning {\n background: ${Colors.Warning};\n }\n`;\n\nconst NOTIFICATION_TIMEOUT = 5 * 1000; // 5 Seconds\n\nexport const ToastNotification: React.FC = ({ id, type, content, sticky }) => {\n const dispatch = useDispatch();\n const dismissNotification = React.useCallback(() => {\n dispatch(NotificationsActions.remove(id));\n }, [dispatch, id]);\n\n const timeout_duration = type === NotificationTypes.Error ? NOTIFICATION_TIMEOUT * 10 : NOTIFICATION_TIMEOUT;\n\n const state = React.useMemo(() => {\n switch (type) {\n case NotificationTypes.Success:\n return 'success';\n case NotificationTypes.Info:\n return 'info';\n case NotificationTypes.Error:\n return 'error';\n case NotificationTypes.Warning:\n return 'warning';\n }\n }, [type]);\n\n const Icon = React.useMemo(() => {\n switch (type) {\n case NotificationTypes.Success:\n return Check;\n case NotificationTypes.Info:\n return Info;\n case NotificationTypes.Error:\n return X;\n case NotificationTypes.Warning:\n return Triangle;\n }\n }, [type]);\n\n React.useEffect(() => {\n const timeout = setTimeout(() => {\n if (!sticky) {\n dismissNotification();\n }\n }, timeout_duration);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [dismissNotification, timeout_duration, sticky]);\n\n const animationProps = React.useMemo(\n () =>\n ({\n initial: { x: 200, opacity: 0 },\n animate: { x: 0, opacity: 1 },\n exit: { opacity: 0 },\n } as MotionProps),\n []\n );\n\n return (\n \n
\n
\n
\n \n
\n
\n {capitalize(state)}\n {content.map((message, i) => (\n \n {message}\n \n ))}\n
\n \n
\n \n );\n};\n","import styled from 'styled-components';\n\nexport const FlagTimeStyleWrapper = styled.div`\n display: flex;\n align-items: center;\n\n img {\n max-width: 60px;\n height: auto;\n }\n\n font-weight: bold;\n font-size: 14px;\n\n @media only screen and (max-width: 600px) {\n display: none;\n }\n`;\n","import React from 'react';\nimport { formatTime } from '../../../util/misc/formatters';\nimport { FlagTimeStyleWrapper } from './flag-time.style';\n\nexport const FlagTime: React.FC<{}> = (props) => {\n const [time, setTime] = React.useState(new Date());\n const formattedTime = React.useMemo(() => formatTime(time), [time]);\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date());\n }, 5 * 1000); // Update every five seconds\n\n return clearInterval.bind(globalThis, interval);\n });\n\n return (\n \n \"nigeria-flag\"\n {formattedTime}\n \n );\n};\n","import styled from 'styled-components';\n\nexport const SignoutStyleWrapper = styled.div`\n .wrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: pointer;\n\n .content {\n span {\n color: #18a956;\n font-size: 14px;\n font-weight: bold;\n margin-right: 10px;\n }\n }\n\n .box {\n .divCircle {\n height: 40px;\n width: 40px;\n border-radius: 100%;\n background-color: #eafaf1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #18a956;\n }\n }\n }\n`;\n","import React from 'react';\nimport { LogOut } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { AuthThunk } from '../../../store/auth/auth.thunk';\nimport { SignoutStyleWrapper } from './sign-out-switch.style';\n\nexport const SignOutSwitchComponent: React.FC<{}> = () => {\n const dispatch = useDispatch();\n\n const handleLogout = React.useCallback(() => {\n dispatch(AuthThunk.logOut());\n }, [dispatch]);\n\n return (\n \n
\n
\n Logout\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n","import { AnimatePresence } from 'framer-motion';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { ApplicationState } from '../../../store';\nimport { ToastNotification } from './toast-notification';\n\nconst Container = styled.div`\n position: fixed;\n bottom: 0;\n right: 0;\n z-index: 1081;\n width: 380px;\n padding: 20px;\n\n @media screen and (max-width: 560px) {\n width: 100%;\n }\n\n > * + * {\n margin-top: 20px;\n }\n`;\n\nexport const ToastNotificationArea: React.FC = () => {\n const { notifications } = useSelector((state: ApplicationState) => state.notifications);\n\n return (\n \n \n {notifications.map((notification) => (\n \n ))}\n \n \n );\n};\n","import { IsEmail } from 'class-validator';\nimport { BaseModel } from '../base-model';\n\nexport class ForgetPasswordModel implements BaseModel {\n @IsEmail(undefined, { message: 'Email is not valid' })\n public Email: string = '';\n\n public beforeValidation() {}\n}\n","import { IsEmail, Matches, MinLength } from 'class-validator';\nimport { BaseModel } from '../base-model';\nimport {\n CONTAINS_DIGIT,\n CONTAINS_LOWERCASE,\n CONTAINS_SPECIAL_CHARACTER,\n CONTAINS_UPPERCASE,\n PASSWORD_MIN_LENGTH,\n} from './constants';\n\nexport class UserLoginModel implements BaseModel {\n @IsEmail(undefined, { message: 'Email is not valid' })\n public Email!: string;\n\n @MinLength(1, {\n message: `Password must not be empty`,\n })\n public Password: string;\n\n constructor() {\n this.Email = '';\n this.Password = '';\n }\n\n public beforeValidation() {}\n}\n","import { registerDecorator, ValidationArguments } from 'class-validator';\n\nexport function ConvertToNumber() {\n return function (object: Object, propertyName: string) {\n registerDecorator({\n name: 'convertToNumber',\n target: object.constructor,\n propertyName,\n constraints: [],\n validator: {\n validate(value: any, args: ValidationArguments) {\n (args.object as any)[propertyName] = +value;\n return true;\n },\n },\n });\n };\n}\n","import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';\n\nfunction isValid(n: string) {\n let firstChar;\n let number;\n const pattern = /^([0]{1})([7-9]{1})([0|1]{1})([\\d]{1})([\\d]{7})$/g;\n\n if (!n || n.length < 5) return false;\n\n firstChar = n.substring(0, 1);\n number = firstChar === '0' ? n : '0' + n;\n return pattern.test(number.replace(/\\s+/g, ''));\n}\n\nexport function IsMobileNumber(validationOptions?: ValidationOptions) {\n return function (object: Object, propertyName: string) {\n registerDecorator({\n name: 'isMobileNumber',\n target: object.constructor,\n propertyName,\n options: validationOptions,\n constraints: [],\n validator: {\n validate(value: string, args: ValidationArguments) {\n return isValid(value);\n },\n },\n });\n };\n}\n","import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';\n\nexport function ShouldMatchField(field: string, validationOptions?: ValidationOptions) {\n return function (object: Object, propertyName: string) {\n registerDecorator({\n name: 'shouldMatchField',\n target: object.constructor,\n propertyName,\n options: validationOptions,\n constraints: [],\n validator: {\n validate(value: any, args: ValidationArguments) {\n return value === (args.object as any)[field];\n },\n },\n });\n };\n}\n","import { validateSync } from 'class-validator';\nimport { BaseModel } from '../../models/request/base-model';\nimport { mapErrorsToForm } from './map-errors-to-form';\n\nexport function validateFormValues(values: T) {\n if ('beforeValidation' in values) {\n (values as any).beforeValidation();\n }\n\n const validationErrors = validateSync(values, {\n whitelist: true,\n });\n\n const mappedErrors = mapErrorsToForm(validationErrors);\n return mappedErrors;\n}\n","import { ValidationError } from 'class-validator';\n\ninterface FormErrors extends Record {}\n\nexport function mapErrorsToForm(errors: ValidationError[]) {\n const mappedErrors: FormErrors = {};\n\n return errors.reduce((prev, current) => {\n prev[current.property] = Object.values(current.constraints as Record)[0];\n return prev;\n }, mappedErrors);\n}\n","import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';\n\nexport function IsOptionalWhenPortharcourtServiceFalse(validationOptions?: ValidationOptions) {\n return function (object: Object, propertyName: string) {\n registerDecorator({\n name: 'isOptionalWhenPortharcourtServiceFalse',\n target: object.constructor,\n propertyName: propertyName,\n options: validationOptions,\n validator: {\n validate(value: any, args: ValidationArguments) {\n const obj = args.object as any;\n if (obj.portharcourtService) {\n return typeof value === 'number' && value > 0;\n }\n return true;\n },\n defaultMessage(args: ValidationArguments) {\n return `Default ODC must be greater than zero when Portharcourt Service is true`;\n },\n },\n });\n };\n}\n","// Regex Matchers\nexport const CONTAINS_SPECIAL_CHARACTER = /[^A-Za-z0-9]/;\nexport const CONTAINS_UPPERCASE = /[A-Z]/;\nexport const CONTAINS_LOWERCASE = /[a-z]/;\nexport const CONTAINS_DIGIT = /[\\d]/;\n\nexport const PASSWORD_MIN_LENGTH = 6;\n","import { Matches, MinLength } from 'class-validator';\nimport { ShouldMatchField } from '../../../util/validation';\nimport { BaseModel } from '../base-model';\nimport {\n CONTAINS_DIGIT,\n CONTAINS_SPECIAL_CHARACTER,\n CONTAINS_UPPERCASE,\n PASSWORD_MIN_LENGTH,\n CONTAINS_LOWERCASE,\n} from './constants';\n\nexport class ResetPasswordModel implements BaseModel {\n @Matches(CONTAINS_DIGIT, {\n message: 'Password must contain a digit',\n })\n @Matches(CONTAINS_SPECIAL_CHARACTER, {\n message: 'Password must contain a special character',\n })\n @Matches(CONTAINS_UPPERCASE, {\n message: 'Password must contain an uppercase letter',\n })\n @Matches(CONTAINS_LOWERCASE, {\n message: 'Password must contain an lowercase letter',\n })\n @MinLength(PASSWORD_MIN_LENGTH, {\n message: `Password must be at least ${PASSWORD_MIN_LENGTH} character(s) long`,\n })\n public Password: string = '';\n\n @ShouldMatchField('Password', { message: 'Must match password' })\n public ConfirmPassword: string = '';\n\n public ActivationCode: String = '';\n\n public beforeValidation() {}\n}\n","import { Allow, Equals, IsArray, IsEnum, IsISO8601, MinLength, Validate, ValidateNested } from 'class-validator';\nimport { Service } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { CreatePassenger } from './create-passenger.model';\n\nimport { ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator';\nimport { Airports } from '../../../util/constants';\nimport { DateAfter } from '../../../util/validation/decorators/dates';\n\n@ValidatorConstraint({ name: 'arrayLength', async: false })\nexport class ArrayLength implements ValidatorConstraintInterface {\n public validate(array: any[], args: ValidationArguments) {\n return array.length > 0;\n }\n}\n\nexport class CreateBookingModel implements BaseModel {\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public Flight_Number: string = '';\n\n public clientId: string = '';\n\n @Allow()\n public additionalServiceId: number = 0;\n\n @DateAfter(undefined, { message: 'Select a date in the future' })\n @IsISO8601({}, { message: 'Invalid date format' })\n public Date_Of_Travel: string = '';\n\n @IsISO8601({}, { message: 'Invalid time format' })\n public Date_Of_Arrival: string = '';\n\n @IsEnum(Airports, { message: 'Invalid airport selection' })\n public AirportId: Airports = Airports.ABV;\n\n @ValidateNested()\n @IsArray({ message: 'Invalid passengers' })\n @Validate(ArrayLength, { message: 'Must have at least one passenger' })\n public Passengers: CreatePassenger[] = [];\n\n @Allow()\n public Service?: Service;\n\n @Allow()\n public ServiceId: number = 0;\n\n @Equals(true, { message: 'You must accept the terms and conditions' })\n public Accept?: boolean = false;\n\n constructor(service?: Service) {\n this.Service = service;\n\n if (service) {\n this.ServiceId = service.id;\n }\n }\n\n public beforeValidation() {\n this.AirportId = +this.AirportId;\n this.clientId = this.clientId;\n }\n\n public finalize() {\n delete this.Service;\n delete this.Accept;\n }\n}\n","import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';\nimport moment from 'moment';\n\nexport function DateAfter(date?: string | Date, validationOptions?: ValidationOptions) {\n return function (object: Object, propertyName: string) {\n registerDecorator({\n name: 'DateAfter',\n target: object.constructor,\n propertyName,\n constraints: [],\n options: validationOptions,\n validator: {\n validate(value: string, args: ValidationArguments) {\n return moment(value).isAfter(date || Date.now(), 'd');\n },\n },\n });\n };\n}\n","import { useField } from 'formik';\nimport moment from 'moment';\nimport React, { useEffect, useState } from 'react';\nimport ReactDatePicker from 'react-datepicker';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport styled from 'styled-components';\nimport { FormTextInputContainer, FormTextInputProps, SpecialInput } from './form-text-input';\n\ninterface DatePickerProps extends FormTextInputProps {\n onBlur?: any;\n minDate?: string | Date;\n maxDate?: string | Date;\n isTime?: boolean;\n onChange?: (...args: any[]) => void;\n}\n\nenum Colors {\n Primary = 'var(--primary-color)',\n LightGrey = 'white',\n DarkGrey = '#111',\n}\n\nconst DatePickerContainer = styled(FormTextInputContainer)`\n font-size: inherit;\n\n .react-datepicker-wrapper {\n flex: 1;\n }\n\n .react-datepicker {\n color: #565050;\n background: #ffffffee;\n backdrop-filter: blur(10px);\n border: 1px solid #dadada;\n border-radius: 0;\n position: unset;\n }\n\n .react-datepicker__header {\n background: ${Colors.LightGrey};\n border-radius: 0;\n padding-top: 15px;\n border: none;\n }\n\n .react-datepicker__input-container {\n width: inherit;\n }\n\n .react-datepicker__current-month,\n .react-datepicker-time__header,\n .react-datepicker-year-header {\n margin-bottom: 10px;\n color: ${Colors.Primary};\n font-weight: bold;\n font-size: 1em;\n }\n\n .react-datepicker__day-names {\n white-space: nowrap;\n padding: 5px 20px;\n }\n\n .react-datepicker__week {\n white-space: nowrap;\n padding: 0 20px;\n }\n\n .react-datepicker__day,\n .react-datepicker__day-name {\n margin: 0;\n font-size: 80%;\n }\n\n .react-datepicker__day {\n font-weight: bold;\n }\n\n .react-datepicker__day--outside-month {\n color: ${Colors.DarkGrey};\n background: #f7f7f7;\n }\n\n .react-datepicker__day:hover,\n .react-datepicker__month-text:hover,\n .react-datepicker__quarter-text:hover {\n border-radius: 0;\n background: ${Colors.LightGrey};\n }\n\n .react-datepicker__day--selected,\n .react-datepicker__day--keyboard-selected,\n .react-datepicker__month-text--keyboard-selected,\n .react-datepicker__quarter-text--keyboard-selected {\n border-radius: 0;\n background-color: ${Colors.Primary} !important;\n color: white;\n }\n\n .react-datepicker__triangle {\n display: none;\n }\n\n .react-datepicker__month {\n margin: 0;\n padding: 20px 0;\n }\n\n .react-datepicker__day--disabled {\n background: ${Colors.LightGrey} !important;\n color: ${Colors.DarkGrey} !important;\n cursor: not-allowed;\n font-weight: normal;\n }\n\n .react-datepicker__year-dropdown,\n .react-datepicker__month-dropdown,\n .react-datepicker__month-year-dropdown {\n background-color: white;\n position: absolute;\n border-radius: 0;\n border: 2px solid ${Colors.LightGrey};\n }\n\n .react-datepicker__year-select,\n .react-datepicker__month-select {\n height: 30px;\n padding: 5px;\n border: none;\n }\n\n .react-datepicker__year-dropdown-container--select,\n .react-datepicker__month-dropdown-container--select,\n .react-datepicker__month-year-dropdown-container--select,\n .react-datepicker__year-dropdown-container--scroll,\n .react-datepicker__month-dropdown-container--scroll,\n .react-datepicker__month-year-dropdown-container--scroll {\n display: inline-block;\n margin: 0 5px;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--selected {\n background: var(--primary-color);\n }\n`;\n\nconst CustomInput = React.forwardRef((props: any, ref: any) => {\n const date = moment(props.value);\n\n return (\n \n );\n});\n\nexport const FormDatePicker: React.FC = ({\n label,\n minDate,\n maxDate,\n onChange,\n compact,\n icon: Icon,\n isTime,\n ...props\n}) => {\n const [field, meta, helpers] = useField({ name: props.name });\n const [currentDate, setCurrentDate] = useState(field.value);\n const className = compact ? 'compact ' + (props.className || '') : props.className;\n\n const validState = meta.touched ? (meta.error ? false : true) : null;\n const validationClass = validState === null ? '' : validState ? ' valid' : ' invalid';\n\n const ref = React.useRef(null);\n const [isFocused, setIsFocused] = React.useState(false);\n const focusClass = React.useMemo(() => (isFocused ? ' focus' : ''), [isFocused]);\n\n React.useEffect(() => {\n if (ref.current) {\n ref.current.onfocus = () => {\n setIsFocused(true);\n };\n\n ref.current.onblur = () => {\n setIsFocused(false);\n };\n }\n }, [ref]);\n\n const options = isTime\n ? {\n showTimeSelect: true,\n showTimeSelectOnly: true,\n timeIntervals: 15,\n timeCaption: 'Time',\n dateFormat: 'hh:mm aa',\n selected: currentDate ? moment(currentDate).toDate() : new Date(),\n }\n : {\n minDate: minDate ? moment(minDate).toDate() : null,\n maxDate: maxDate ? moment(maxDate).toDate() : null,\n dateFormat: 'LLLL',\n openToDate: field.value ? new Date(field.value) : new Date(),\n };\n\n useEffect(() => {\n const formattedDate = currentDate ? (isTime ? currentDate : moment(currentDate).format('YYYY-MM-DD')) : '';\n\n field.onChange(field.name)(formattedDate as any);\n\n if (onChange && formattedDate) {\n onChange(formattedDate);\n }\n // eslint-disable-next-line\n }, [currentDate]);\n\n return (\n \n {label && {label}}\n
\n {Icon ? (\n
\n \n
\n ) : null}\n }\n {...field}\n onSelect={(date) => {\n helpers.setTouched(true);\n }}\n onChange={(date, e) => {\n const value = isTime\n ? moment(date?.toString()).format('YYYY-MM-DDTHH:mm:ss.sssZ')\n : (date as Date);\n setCurrentDate(value);\n }}\n {...props}\n placeholderText={props.placeholder || 'ENTER ' + (isTime ? 'TIME' : 'DATE')}\n {...options}\n />\n
\n {validState === false ? (\n \n {meta.error}\n \n ) : null}\n
\n );\n};\n","import { Allow, IsBoolean, IsEnum, MinLength, ValidateIf } from 'class-validator';\nimport { Genders, Honorifics } from '../../../util/constants';\nimport { BaseModel } from '../base-model';\n\nexport class CreatePassenger implements BaseModel {\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public FirstName: string = '';\n\n public additionalServiceId: number = 0;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @ValidateIf((o: CreatePassenger) => !!o.MiddleName)\n public MiddleName: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public LastName: string = '';\n\n @IsEnum(Honorifics, { message: 'Invalid selection' })\n public Designation: Honorifics = Honorifics.Miss;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @ValidateIf((o: CreatePassenger) => o.Others)\n public Special_Requirement: string = '';\n\n @IsBoolean({ message: 'Invalid selection' })\n public Wheel_Chair: boolean = false;\n\n @Allow()\n public Others: boolean = false;\n\n @IsEnum(Genders, { message: 'Invalid gender selection' })\n public Gender: Genders = Genders.Female;\n\n public beforeValidation() {}\n}\n","import { isArray, IsEnum, IsPositive } from 'class-validator';\nimport { BookingStatuses } from '../../../util/constants';\nimport { Booking } from '../../response';\nimport { BaseModel } from '../base-model';\n\nexport class UpdateBookingModel implements BaseModel {\n @IsPositive({ message: 'Invalid id' })\n public Id: number;\n\n @IsEnum(BookingStatuses, { message: 'Must either confirm or decline' })\n public BookingStatus: BookingStatuses;\n\n public protocols: any;\n\n constructor(booking: Booking) {\n this.Id = +booking.id;\n this.BookingStatus = booking.bookingStatus;\n this.protocols = booking.protocols;\n }\n\n public finalize() {}\n}\n","import {\n Allow,\n IsBoolean,\n IsEnum,\n IsISO8601,\n IsNotEmpty,\n IsPositive,\n IsString,\n MinLength,\n ValidateIf,\n} from 'class-validator';\nimport { merge, pick } from 'lodash';\nimport md5 from 'md5';\nimport { CreatePassenger } from '.';\nimport { Genders, Honorifics } from '../../../util/constants';\nimport { Service } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { CreateBookingModel } from './create-booking.model';\n\nexport class CreatePassengerBooking implements BaseModel {\n @IsString()\n @Allow()\n public Flight_Number: string = '';\n\n @IsString()\n @IsNotEmpty({ message: 'Airline must be provided' })\n public airline = '';\n\n @Allow()\n public additionalServiceId: number = 0;\n\n // @DateAfter(undefined, { message: 'Select a date in the future' })\n @IsISO8601({}, { message: 'Invalid date format' })\n public Date_Of_Travel: string = '';\n\n @IsISO8601({}, { message: 'Invalid time format' })\n public Date_Of_Arrival: string = '';\n\n @IsPositive({ message: 'Invalid airport selection' })\n public AirportId: number = 1;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public FirstName: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @ValidateIf((o: CreatePassenger) => !!o.MiddleName)\n public MiddleName: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public LastName: string = '';\n\n @IsEnum(Honorifics, { message: 'Invalid selection' })\n public Designation: Honorifics = Honorifics.Miss;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @ValidateIf((o: CreatePassenger) => o.Others)\n public Special_Requirement: string = '';\n\n @IsBoolean({ message: 'Invalid selection' })\n public Wheel_Chair: boolean = false;\n\n @Allow()\n public Others: boolean = false;\n\n @IsEnum(Genders, { message: 'Invalid gender selection' })\n public Gender: Genders = Genders.Female;\n\n @Allow()\n public Service!: Service;\n\n @Allow()\n public ServiceId: number = 0;\n\n constructor(bookingOrService: Service | CreatePassengerBooking) {\n if ('Service' in bookingOrService) {\n merge(\n this,\n pick(bookingOrService, [\n 'Flight_Number',\n 'Date_Of_Arrival',\n 'Date_Of_Travel',\n // 'additionalServiceId',\n 'AirportId',\n 'Service',\n 'client',\n ] as (keyof CreatePassengerBooking)[])\n );\n\n return;\n }\n\n this.Service = pick(bookingOrService, ['price', 'id']) as Service;\n }\n\n public static hashDetails(booking: CreatePassengerBooking | CreateBookingModel) {\n return md5(\n [booking.Flight_Number, booking.Date_Of_Arrival, booking.Date_Of_Travel, booking.AirportId].join(':')\n );\n }\n\n public toPassenger(): CreatePassenger {\n return merge(new CreatePassenger(), this);\n }\n\n public toBooking(): CreateBookingModel {\n const booking = merge(new CreateBookingModel(this.Service), this);\n booking.ServiceId = this.Service.id;\n booking.Passengers = [this.toPassenger()];\n return booking;\n }\n\n public beforeValidation() {\n this.AirportId = +this.AirportId;\n // this.additionalServiceId = +this.additionalServiceId;\n }\n}\n","import {\n Allow,\n Equals,\n IsArray,\n IsEnum,\n IsISO8601,\n IsPositive,\n MinLength,\n Validate,\n ValidateNested,\n} from 'class-validator';\nimport { Service } from '../../response';\nimport { BaseModel } from '../base-model';\n\nexport class CreatePorthacourtBooking implements BaseModel {\n public clientId: string = '';\n\n @IsPositive({ message: 'Invalid airport selection' })\n public AirportId: number = 24;\n\n public Service?: Service;\n\n @Allow()\n public ServiceId: number = 0;\n\n @Allow()\n public additionalOdc?: number = 0;\n\n @IsPositive({ message: 'Must be greater than zero' })\n public defaultOdc?: number = 4;\n\n @Allow()\n public additionalServiceId?: number = 0;\n constructor(service?: Service) {\n this.Service = service;\n\n if (service) {\n this.ServiceId = service.id;\n }\n }\n\n public beforeValidation?() {\n this.AirportId = +this.AirportId;\n this.clientId = this.clientId;\n this.additionalOdc =\n this.additionalOdc !== null && this.additionalOdc !== undefined && !isNaN(this.additionalOdc)\n ? parseInt(this.additionalOdc.toString())\n : 0;\n }\n}\n","import { IsEnum, IsPositive, MinLength, IsBoolean } from 'class-validator';\nimport { ClientTypes } from '../../../util/constants';\nimport { BaseModel } from '../base-model';\nimport { IsOptionalWhenPortharcourtServiceFalse } from '../../../util/validation/porthacourtvalidation';\n\nexport class CreateServiceModel implements BaseModel {\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public Name: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n public Description: string = '';\n\n @IsPositive({ message: 'Must be greater than zero' })\n public Price: number = 0;\n\n @IsOptionalWhenPortharcourtServiceFalse({ message: 'Must be greater than zero' })\n public defaultOdc?: number = 0;\n\n @IsEnum(ClientTypes, { message: 'Invalid selection' })\n public ServiceTypeId: number = 0;\n\n @IsBoolean({ message: 'Must be a boolean value' })\n public portharcourtService?: boolean = false;\n\n public beforeValidation() {\n this.ServiceTypeId = +this.ServiceTypeId;\n }\n}\n","import { IsBoolean, IsPositive, IsOptional } from 'class-validator';\nimport { Service } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { CreateServiceModel } from './create-service.model';\nimport { IsOptionalWhenPortharcourtServiceFalse } from '../../../util/validation/porthacourtvalidation';\n\nexport class UpdateServiceModel extends CreateServiceModel implements BaseModel {\n @IsPositive({ message: 'Invalid id' })\n public Id: number = 0;\n\n @IsBoolean({ message: 'Must be active or inactive' })\n public Status: boolean = true;\n\n @IsOptional()\n @IsBoolean({ message: 'Must be a boolean value' })\n public portharcourtService?: boolean;\n\n @IsOptional()\n @IsOptionalWhenPortharcourtServiceFalse({ message: 'Must be greater than zero' })\n public defaultOdc?: number;\n\n constructor(service: Service) {\n super();\n\n if (service) {\n this.Id = service.id;\n this.Name = service.name;\n this.Description = service.description;\n this.Price = service.price;\n this.Status = service.status;\n this.ServiceTypeId = service.serviceTypeId;\n this.portharcourtService = service.portharcourtService;\n this.defaultOdc = service.defaultOdc;\n return;\n }\n }\n}\n","import { Allow, IsEnum, Max, Min, MinLength, ValidateIf } from 'class-validator';\nimport { EOptions } from '../../../util/constants';\nimport { BaseModel } from '../base-model';\n\nconst MIN_RANK = 1;\nconst MAX_RANK = 5;\n\nexport class CustomerSurveyModel implements BaseModel {\n @Allow()\n public ActivationCode!: string;\n\n @Min(MIN_RANK, { message: 'Cannot be less than $constraint1' })\n @Max(MAX_RANK, { message: 'Cannot be more than $constraint1' })\n public FriendlinessRank: number = MIN_RANK;\n\n @Min(MIN_RANK, { message: 'Cannot be less than $constraint1' })\n @Max(MAX_RANK, { message: 'Cannot be more than $constraint1' })\n public KnowledgeRank: number = MIN_RANK;\n\n @Min(MIN_RANK, { message: 'Cannot be less than $constraint1' })\n @Max(MAX_RANK, { message: 'Cannot be more than $constraint1' })\n public QuicknessRank: number = MIN_RANK;\n\n @IsEnum(EOptions, { message: 'Invalid selection' })\n public EOptions: EOptions = EOptions.Yes;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @ValidateIf((o: CustomerSurveyModel) => !!o.FeedbackText)\n public FeedbackText: string = '';\n\n constructor(code: string) {\n this.ActivationCode = code;\n }\n\n public beforeValidation() {\n // tslint:disable: no-bitwise\n this.FriendlinessRank = +this.FriendlinessRank | 0;\n this.KnowledgeRank = +this.KnowledgeRank | 0;\n this.QuicknessRank = +this.QuicknessRank | 0;\n this.EOptions = +this.EOptions;\n }\n}\n","import { Allow, IsEmail, IsEnum, Matches, Min, MinLength } from 'class-validator';\nimport { ClientTypes } from '../../../util/constants';\nimport { ConvertToNumber, IsMobileNumber, ShouldMatchField } from '../../../util/validation';\nimport {\n CONTAINS_DIGIT,\n CONTAINS_LOWERCASE,\n CONTAINS_SPECIAL_CHARACTER,\n CONTAINS_UPPERCASE,\n PASSWORD_MIN_LENGTH,\n} from '../auth/constants';\nimport { BaseModel } from '../base-model';\n\nexport class CommonRegistrationModel implements BaseModel {\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Registered_Address: string = '';\n\n @IsEmail(undefined, { message: 'Invalid email format' })\n public Email: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public PhoneNumber: string = '';\n\n @ConvertToNumber()\n @IsEnum(ClientTypes, { message: 'Invalid selection' })\n @Min(1, { message: 'Invalid Client Type Selected' })\n public ClientTypeId: number = 0;\n\n @Matches(CONTAINS_DIGIT, {\n message: 'Must contain a digit',\n })\n @Matches(CONTAINS_SPECIAL_CHARACTER, {\n message: 'Must contain a special character',\n })\n @Matches(CONTAINS_UPPERCASE, {\n message: 'Must contain an uppercase letter',\n })\n @Matches(CONTAINS_LOWERCASE, {\n message: 'Must contain an lowercase letter',\n })\n @MinLength(PASSWORD_MIN_LENGTH, {\n message: `Must be at least $constraint1 character(s) long`,\n })\n public Password: string = '';\n\n @ShouldMatchField('Password', { message: 'Must match password' })\n public Confirm_Password: string = '';\n\n @Allow()\n public Files: File[] = [];\n\n public beforeValidation() {\n this.ClientTypeId = +this.ClientTypeId;\n }\n}\n","import { IsIn, IsString, Matches, MinLength } from 'class-validator';\nimport { BusinessNatures } from '../../../util/constants';\nimport { BaseModel } from '../base-model';\nimport { CommonRegistrationModel } from './common-registration-model';\n\nexport class CreateCorporateOrganizationModel extends CommonRegistrationModel implements BaseModel {\n @IsString()\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Business_Name: string = '';\n\n @IsIn(BusinessNatures, { message: 'Invalid selection' })\n public Business_Nature: string = '';\n\n @Matches(/^[12]\\d{3}$/, { message: 'Invalid year format' })\n public Creation_Year: string = '';\n\n @IsString()\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Registration_Number: string = '';\n}\n","import { IsEmail, IsEnum, IsPositive, IsString, Matches, MinLength, ValidateIf } from 'class-validator';\nimport { Roles } from '../../../util/constants';\nimport { IsMobileNumber } from '../../../util/validation';\nimport { BaseModel } from '../base-model';\n\nexport class CreateUserModel implements BaseModel {\n @IsString()\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Firstname: string = '';\n\n @IsString()\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n @ValidateIf((o: CreateUserModel) => !!o.MiddleName)\n public MiddleName: string = '';\n\n @IsString()\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public LastName: string = '';\n\n @IsEmail(undefined, { message: 'Invalid email format' })\n public Email: string = '';\n\n @IsEnum(Roles, { message: 'Invalid selection' })\n public Role: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public PhoneNumber: string = '';\n\n @IsPositive({ message: 'Invalid selection' })\n public AirportId: number = 0;\n\n public beforeValidation() {\n if (this.Firstname.endsWith(' ')) {\n this.Firstname = this.Firstname.trim();\n }\n\n if (this.MiddleName?.endsWith(' ')) {\n this.MiddleName = this.MiddleName.trim();\n }\n\n if (this.LastName.endsWith(' ')) {\n this.LastName = this.LastName.trim();\n }\n\n this.AirportId = +this.AirportId;\n }\n}\n\nexport class CreateProtocolModel implements BaseModel {\n @IsString()\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public FirstName: string = '';\n\n @IsString()\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public LastName: string = '';\n\n @IsEmail(undefined, { message: 'Invalid email format' })\n public Email: string = '';\n\n @IsEnum(Roles, { message: 'Invalid selection' })\n public Role: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public PhoneNumber: string = '';\n\n @IsPositive({ message: 'Invalid selection' })\n public AirportId: number = 0;\n\n public beforeValidation() {\n if (this.FirstName.endsWith(' ')) {\n this.FirstName = this.FirstName.trim();\n }\n\n if (this.LastName.endsWith(' ')) {\n this.LastName = this.LastName.trim();\n }\n\n this.AirportId = +this.AirportId;\n }\n}\n\nexport class AssigneProtocolModel implements BaseModel {\n @IsEnum(Roles, { message: 'Invalid selection' })\n public protocol: string = '';\n\n // @IsPositive({ message: 'Invalid selection' })\n // public AirportId: number = 0;\n\n public beforeValidation() {\n // if (this.FirstName.endsWith(' ')) {\n // this.FirstName = this.FirstName.trim();\n // }\n // if (this.LastName.endsWith(' ')) {\n // this.LastName = this.LastName.trim();\n // }\n // this.AirportId = +this.AirportId;\n }\n}\n","import { IsEnum, IsIn, IsString, MinLength, ValidateIf } from 'class-validator';\nimport { GovernmentStaffTypes, NigerianStates } from '../../../util/constants';\nimport { BaseModel } from '../base-model';\nimport { CommonRegistrationModel } from './common-registration-model';\n\nexport class CreateGovernmentOfficialModel extends CommonRegistrationModel implements BaseModel {\n @IsString()\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Business_Name: string = '';\n\n @IsString()\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Name_Of_Government_Officials_Office: string = '';\n\n @IsEnum(GovernmentStaffTypes, { message: 'Invalid selection' })\n public GovernmentStaffType?: string = '';\n\n @IsIn(NigerianStates, { message: 'Invalid selection' })\n @ValidateIf((o: CreateGovernmentOfficialModel) => o.GovernmentStaffType === GovernmentStaffTypes.State)\n public State?: string = '';\n\n public beforeValidation() {\n super.beforeValidation();\n this.Business_Name = this.Name_Of_Government_Officials_Office;\n }\n\n public finalize() {\n if (this.GovernmentStaffType === GovernmentStaffTypes.Federal) {\n delete this.State;\n }\n\n delete this.GovernmentStaffType;\n }\n}\n","import { Allow, IsEmail, IsEnum, Matches, MinLength, ValidateIf } from 'class-validator';\nimport { Genders, MeansOfId } from '../../../util/constants';\nimport { IsMobileNumber, ShouldMatchField } from '../../../util/validation';\nimport { CONTAINS_DIGIT, CONTAINS_SPECIAL_CHARACTER, CONTAINS_UPPERCASE, PASSWORD_MIN_LENGTH } from '../auth/constants';\nimport { BaseModel } from '../base-model';\nimport { CONTAINS_LOWERCASE } from './../auth/constants';\n\nexport class CreateIndividualModel implements BaseModel {\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public FirstName: string = '';\n\n // @MinLength(3, {\n // message: 'Must be at least $constraint1 characters long',\n // })\n // @ValidateIf((o: CreateIndividualModel) => !!o.MiddleName)\n // public MiddleName: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public LastName: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n @ValidateIf((o: CreateIndividualModel) => !!o.Registered_Address)\n public Registered_Address: string = '';\n\n @IsEmail(undefined, { message: 'Invalid email format' })\n public Email: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public PhoneNumber: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n @IsEnum(MeansOfId, { message: 'Invalid selection' })\n public MeansOfId: number = 0;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public Identification: string = '';\n\n // @ConvertToNumber()\n // @IsEnum(ClientTypes, { message: 'Invalid selection' })\n @Allow()\n public ClientTypeId: number = 0;\n\n @IsEnum(Genders, { message: 'Invalid selection' })\n @ValidateIf((o: CreateIndividualModel) => !!o.Gender)\n public Gender?: string = '';\n\n @Matches(CONTAINS_DIGIT, {\n message: 'Must contain a digit',\n })\n @Matches(CONTAINS_SPECIAL_CHARACTER, {\n message: 'Must contain a special character',\n })\n @Matches(CONTAINS_UPPERCASE, {\n message: 'Must contain an uppercase letter',\n })\n @Matches(CONTAINS_LOWERCASE, {\n message: 'Must contain an lowercase letter',\n })\n @MinLength(PASSWORD_MIN_LENGTH, {\n message: `Must be at least $constraint1 character(s) long`,\n })\n public Password: string = '';\n\n @ShouldMatchField('Password', { message: 'Must match password' })\n public Confirm_Password: string = '';\n\n public beforeValidation() {\n this.ClientTypeId = +this.ClientTypeId;\n }\n}\n","import { IsEnum, IsIn, IsString, Matches, MinLength } from 'class-validator';\nimport { BusinessNatures, ClientTypes } from '../../../util/constants';\nimport { ConvertToNumber, IsMobileNumber } from '../../../util/validation';\nimport { User } from '../../response';\nimport { BaseModel } from '../base-model';\n\nexport class UpdateClientModel implements BaseModel {\n @IsString({ message: 'Invalid id' })\n public id: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n public business_Name: string = '';\n\n @IsIn(BusinessNatures, { message: 'Invalid selection' })\n public business_Nature: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public registered_Address: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public registration_Number: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public phoneNumber: string = '';\n\n @ConvertToNumber()\n @IsEnum(ClientTypes, { message: 'Invalid selection' })\n public clientTypeId: number = ClientTypes.Domestic;\n\n constructor(client: User) {\n if (client) {\n this.id = client.id;\n this.business_Name = client.business_Name;\n this.business_Nature = client.business_Nature;\n this.registered_Address = client.registered_Address;\n this.registration_Number = client.registration_Number;\n this.phoneNumber = client.phoneNumber;\n this.clientTypeId = client.clientTypeId;\n // this.creation_Year = client.creation_Year;\n return;\n }\n }\n\n public beforeValidation() {\n this.clientTypeId = +this.clientTypeId;\n }\n}\n","import { Allow, IsEnum, IsString, Matches, MinLength } from 'class-validator';\nimport { MeansOfId } from '../../../util/constants';\nimport { IsMobileNumber } from '../../../util/validation';\nimport { User } from '../../response';\nimport { BaseModel } from '../base-model';\n\nexport class UpdateIndividualClientModel implements BaseModel {\n @IsString({ message: 'Invalid id' })\n public id: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public firstName: string = '';\n\n @Allow()\n public middleName: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public lastName: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public phoneNumber: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n @IsEnum(MeansOfId, { message: 'Invalid selection' })\n public meansOfId: number = 0;\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public identification: string = '';\n\n constructor(client: User) {\n if (client) {\n this.id = client.id;\n this.firstName = client.firstName;\n this.middleName = client.middleName;\n this.lastName = client.lastName;\n this.phoneNumber = client.phoneNumber;\n this.meansOfId = client.meansOfId;\n this.identification = client.identification;\n return;\n }\n }\n\n public beforeValidation() {}\n}\n","import { Allow } from 'class-validator';\nimport { Airports } from '../../../util/constants';\nimport { User } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { CreateUserModel } from './create-user.model';\n\nexport class EditUserModel extends CreateUserModel implements BaseModel {\n @Allow()\n public Id: String;\n\n constructor(user: User) {\n super();\n this.Id = user.id;\n this.Firstname = user.firstName;\n this.MiddleName = user.middleName;\n this.Email = user.email;\n this.LastName = user.lastName;\n this.PhoneNumber = user.phoneNumber;\n this.Role = user.role;\n this.AirportId = user.airportId ?? Airports.ABV;\n }\n}\n","import { IsBoolean, IsString } from 'class-validator';\nimport { User } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { EditUserModel } from './edit-user.model';\n\nexport class ChangeUserStatusModel extends EditUserModel implements BaseModel {\n @IsString({ message: 'Invalid id' })\n public Id: string = '';\n\n @IsBoolean({ message: 'Must be active or inactive' })\n public Status: boolean = false;\n\n constructor(user: User) {\n super(user);\n\n if (user) {\n this.Id = user.id;\n this.Status = user.account_Status;\n return;\n }\n }\n}\n","import { Allow, Matches, MinLength, ValidateIf } from 'class-validator';\nimport { CreateUserModel } from '.';\nimport { IsMobileNumber } from '../../../util/validation';\nimport { Profile } from '../../response';\nimport { BaseModel } from '../base-model';\n\nexport class EditUserProfileModel implements BaseModel {\n @Allow()\n public id: string;\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public firstname: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n @ValidateIf((o: CreateUserModel) => !!o.MiddleName)\n public middleName: string = '';\n\n @Matches(/^[^\\s].*[^\\s]$/, { message: 'Cannot begin or end with a space' })\n @MinLength(3, {\n message: 'Must be at least $constraint1 characters long',\n })\n public lastName: string = '';\n\n @IsMobileNumber({ message: 'Invalid phone number format' })\n public phoneNumber: string = '';\n\n constructor(user: Profile) {\n this.id = user.id;\n this.firstname = user.firstName;\n this.middleName = user.middleName;\n this.lastName = user.lastName;\n this.phoneNumber = user.phoneNumber;\n }\n\n beforeValidation() {\n // this.phoneNumber = this.phoneNumber.replace(/\\w/, '');\n }\n}\n","import { IsAlphanumeric, IsNotEmpty, IsNumber, Min } from 'class-validator';\nimport { BaseModel } from '../base-model';\n\nexport class FundWalletModel implements BaseModel {\n @IsNumber()\n @Min(50000, { message: 'Amount cannot be lower than 50000' })\n @IsNotEmpty({ message: 'Please enter an amount' })\n public amount = '';\n\n @IsAlphanumeric()\n public clientId = '';\n\n public beforeValidation() {\n this.amount = this.amount;\n this.clientId = this.clientId;\n }\n}\n","import { IsNotEmpty, IsPositive, MinLength } from 'class-validator';\nimport { BaseModel } from '../base-model';\n\nexport class CreateVcardModel implements BaseModel {\n @IsNotEmpty({ message: 'Field must not be empty!' })\n public cardNumber: string = '';\n\n @MinLength(3, {\n message: 'Must be at least $constraint1 character(s) long',\n })\n @IsNotEmpty({ message: 'Field must not be empty!' })\n public color: string = '';\n\n @IsNotEmpty({ message: 'Field must not be empty!' })\n public AirportId: number | string = 0;\n\n public beforeValidation() {}\n}\n","import React from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\n\ninterface FormBackButtonProps {\n currentStep: number;\n setCurrentStep: React.Dispatch>;\n}\n\nexport const Button = styled.button`\n border: none;\n background: transparent;\n font-size: 18px;\n outline: none !important;\n appearance: none;\n letter-spacing: 0px;\n color: #18a956;\n opacity: 1;\n\n &:hover {\n background-color: #edf3ed;\n border-radius: 7px;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n\n * {\n color: var(--primary-color) !important;\n }\n`;\n\nexport const FormBackButton: React.FC = ({ currentStep, setCurrentStep }) => {\n return currentStep > 1 ? (\n \n ) : null;\n};\n","import { IsPositive } from 'class-validator';\nimport { VCard } from '../../response';\nimport { BaseModel } from '../base-model';\nimport { CreateVcardModel } from './create-vcard.model';\n\nexport class UpdateVcardModel extends CreateVcardModel implements BaseModel {\n @IsPositive({ message: 'Invalid id' })\n public Id: number;\n\n constructor(vcard: VCard) {\n super();\n this.Id = +vcard.id;\n this.cardNumber = vcard.cardNumber;\n this.color = vcard.color;\n this.AirportId = vcard.airpot as any;\n }\n\n public finalize() {}\n}\n","import styled from 'styled-components';\n\nexport const FormButton = styled.button`\n background: var(--primary-color);\n padding: 0 3rem;\n height: 57px;\n text-transform: uppercase;\n font-size: 14px;\n font-weight: bold;\n letter-spacing: 1.4px;\n color: white;\n border-radius: 0.5rem;\n border: none;\n outline: none !important;\n appearance: none;\n display: flex;\n justify-content: center;\n align-items: center;\n\n :disabled {\n background: #848484;\n cursor: not-allowed;\n }\n\n svg {\n margin-right: 5px;\n font-size: 12px;\n }\n\n &.small {\n height: 40px;\n padding: 0 25px;\n\n svg {\n height: 13px;\n width: 13px;\n stroke-width: 3px;\n }\n }\n`;\n","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { FilePond, FilePondProps } from 'react-filepond';\nimport styled from 'styled-components';\n\nconst LabelIdle = renderToString(\n \n \"File\n Drop your files here or click to upload\n Upload CAC certificate and other support documents\n \n);\n\nexport const FormFileUpload = styled(FilePond).attrs(() => {\n return {\n labelIdle: LabelIdle,\n allowRevert: false,\n instantUpload: false,\n onprocessfile: (error, file) => {\n file.abortLoad();\n },\n } as FilePondProps;\n})`\n width: 600px;\n font: inherit;\n\n .filepond--drop-label {\n background: white;\n padding: 40px;\n height: 170px;\n border: 2px dashed #b4b4b4;\n border-radius: 13px;\n\n label {\n display: flex;\n flex-direction: column;\n color: black;\n }\n }\n\n .filepond--list {\n margin-top: 40px;\n }\n\n .filepond--list-scroller {\n margin-left: 80px;\n margin-right: 80px;\n }\n\n .filepond--panel-root {\n background: transparent;\n }\n\n .file-upload__icon {\n margin: auto;\n margin-bottom: 15px;\n width: 30px;\n }\n\n .file-upload__header {\n font-size: 18px;\n font-weight: bold;\n }\n\n .file-upload__tagline {\n font-size: 14px;\n }\n`;\n","import { useField } from 'formik';\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst FormLargeRadioButtonContainer = styled.label`\n background: white;\n border: 1px solid #dadada;\n border-radius: 0.5rem;\n min-width: max-content;\n max-width: 400px;\n padding: 1rem;\n display: flex;\n position: relative;\n align-items: center;\n\n .form-large-radio-button__indicator-container {\n flex-shrink: 0;\n display: block;\n background: white;\n border: 1px solid #dadada;\n width: 27px;\n height: 27px;\n border-radius: 100%;\n padding: 6px;\n }\n\n .form-large-radio-button__indicator {\n display: block;\n height: 100%;\n width: 100%;\n background: var(--primary-color);\n border-radius: 100%;\n }\n\n .form-large-radio-button__input {\n opacity: 0;\n position: absolute;\n }\n\n .form-large-radio-button__label {\n font-size: 18px;\n letter-spacing: 0px;\n color: black;\n text-transform: uppercase;\n }\n`;\n\ninterface FormLargeRadioButtonProps extends React.ComponentPropsWithoutRef<'label'> {\n name: string;\n label: string;\n value: any;\n}\n\nexport const FormLargeRadioButton: React.FC = ({ name, value, label, ...props }) => {\n const [field] = useField({ name, value });\n\n const selected = React.useMemo(() => field.value === value || field.value === `${value}`, [field.value, value]);\n\n return (\n \n
\n {selected && }\n
\n \n {label}\n
\n );\n};\n","import { Field, useField } from 'formik';\nimport React from 'react';\nimport styled from 'styled-components';\n\nexport const RadioContainer: React.ElementType = styled.label`\n display: flex;\n position: relative;\n align-items: center;\n flex-wrap: wrap;\n margin: 0;\n\n input {\n opacity: 0;\n filter: opacity(0);\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n }\n\n i {\n position: relative;\n width: ${(props: any) => (props.size === 'medium' ? '20px' : '10px')};\n height: ${(props: any) => (props.size === 'medium' ? '20px' : '10px')};\n background: white;\n border: 1px solid #e2e2e2;\n padding: 1px;\n border-radius: 12px;\n transition: all 0.5s ease;\n }\n\n i::after {\n transition: background-color 0.15s ease;\n content: ' ';\n display: block;\n background: transparent;\n height: 100%;\n width: 100%;\n border-radius: 100%;\n }\n\n input:checked + i {\n background: white;\n }\n\n input:checked + i::after {\n background: var(--primary-color);\n }\n\n &.disabled {\n cursor: not-allowed;\n\n input + i {\n background: orange;\n border-color: orange;\n }\n\n input + i::after {\n border-color: orange;\n }\n }\n\n .form-radio__body {\n display: flex;\n height: 40px;\n border-radius: 7px;\n background: #ffffff 0% 0% no-repeat padding-box;\n border: 1px solid #dadada;\n padding: 10px 15px;\n justify-content: center;\n position: relative;\n align-items: center;\n\n i {\n width: 20px;\n height: 20px;\n padding: 4px;\n }\n }\n\n .form-radio__body.valid {\n border-color: var(--primary-color);\n }\n\n .form-radio__body.invalid {\n border-color: #e03225;\n }\n\n .form-radio__label {\n margin-left: 15px;\n }\n\n .form-radio__validation-text {\n font-size: 13px;\n padding: 5px 0;\n color: #f44336;\n width: 100%;\n display: block;\n }\n`;\n\ninterface FormRadioProps extends React.ComponentPropsWithoutRef<'input'> {\n name: string;\n disabled?: boolean;\n label: string;\n className?: string;\n value: any;\n}\n\ninterface PresentationalFormRadioProps {\n checked: boolean | undefined;\n size?: string;\n}\n\nexport const FormRadio: React.FC = ({ disabled, className, label, ...props }) => {\n const [field, meta] = useField(props);\n\n const validState = meta.touched ? (meta.error ? false : true) : null;\n const validationClass = validState === null ? '' : validState ? ' valid' : ' invalid';\n\n return (\n \n
\n \n \n {label}\n
\n {/* {validState === false && (\n {meta.error}\n )} */}\n \n );\n};\n\nexport const PresentationalFormRadio: React.FC = ({ checked, size }) => {\n return (\n \n \n \n \n );\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { Tooltip } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const FormRangeInputContainer = styled.label`\n color: black;\n width: 100%;\n\n .focus {\n border-color: #aaa;\n }\n\n .form-range__body {\n display: grid;\n grid-template-columns: 80px 1fr;\n }\n\n .form-range__validation-text {\n font-size: 13px;\n padding: 5px 0;\n color: #f44336;\n width: 100%;\n display: block;\n }\n\n .form-range__body.valid {\n .form-range__icon {\n color: var(--primary-color);\n }\n }\n\n .form-range__body.invalid {\n .form-range__icon {\n color: #e03225;\n }\n }\n\n .form-range__label {\n display: flex;\n font-size: 14px;\n margin-bottom: 3px;\n }\n\n input {\n -webkit-appearance: none;\n width: 100%;\n }\n\n input:focus {\n outline: none;\n }\n\n input::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: #ededed;\n border-radius: 2px;\n }\n\n input::-moz-range-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: #ededed;\n border-radius: 2px;\n }\n\n input::-webkit-slider-thumb {\n height: 10px;\n width: 10px;\n border-radius: 100%;\n border: none;\n background: var(--primary-color);\n cursor: pointer;\n -webkit-appearance: none;\n transition: all 0.5 ease;\n margin-top: -3px;\n }\n\n input::-moz-range-thumb {\n height: 10px;\n width: 10px;\n border-radius: 100%;\n border: none;\n background: var(--primary-color);\n cursor: pointer;\n -webkit-appearance: none;\n transition: all 0.5 ease;\n }\n\n input:focus::-webkit-slider-runnable-track {\n background: #dadada;\n }\n\n input::-ms-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: transparent;\n border-color: transparent;\n border-width: 16px 0;\n color: transparent;\n }\n\n input::-ms-fill-lower {\n background: var(--primary-color);\n border: none;\n border-radius: 2px;\n }\n\n input::-ms-fill-upper {\n background: #ededed;\n border: none;\n border-radius: 2px;\n }\n\n input::-ms-thumb {\n height: 10px;\n width: 10px;\n border-radius: 100%;\n background: var(--primary-color);\n cursor: pointer;\n }\n`;\n\nexport interface FormRangeInputProps {\n className?: string;\n name: string;\n label: string;\n disabled?: boolean;\n min: number;\n max: number;\n step?: number;\n}\n\nexport const FormRangeIndicator: React.FC<{\n min: number;\n max: number;\n step: number;\n className?: string;\n}> = ({ min, max, step, className }) => {\n const values = [...new Array(max - min + 1)].map((_, i) => (\n \n {min + step * i}\n
\n ));\n\n return (\n
\n
\n {values}\n
\n
\n );\n};\n\nexport const FormRangeInput: React.FC = ({\n className,\n name,\n label,\n children,\n disabled,\n min,\n max,\n step,\n ...props\n}) => {\n const [field, meta] = useField({ name });\n const validState = meta.touched ? (meta.error ? false : true) : null;\n const validationClass = validState === null ? '' : validState ? ' valid' : ' invalid';\n\n const id = name;\n const [tooltipOpen, setTooltipOpen] = React.useState(false);\n const toggle = () => setTooltipOpen(!tooltipOpen);\n\n const ref = React.useRef(null);\n const [isFocused, setIsFocused] = React.useState(false);\n const focusClass = React.useMemo(() => (isFocused ? ' focus' : ''), [isFocused]);\n\n React.useEffect(() => {\n if (ref.current) {\n ref.current.onfocus = () => {\n setIsFocused(true);\n };\n\n ref.current.onblur = () => {\n setIsFocused(false);\n };\n }\n }, [ref]);\n\n return (\n \n
\n {label && {label}}\n \n
\n {validState === false ? (\n \n \n {meta.error}\n \n {meta.error}\n \n ) : null}\n
\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\ninterface FormStepperProps {\n steps: number;\n currentStep: number;\n}\n\nexport const Div = styled.div`\n .form-stepper {\n background: #dedede;\n height: 4px;\n width: 113px;\n display: flex;\n }\n\n .form-stepper__step {\n flex: 1;\n height: 100%;\n background: transparent;\n }\n\n .form-stepper__step--active {\n background: var(--primary-color);\n }\n`;\n\nexport const FormStepper: React.FC = ({ steps, currentStep = 1 }) => {\n const stepsActivated: boolean[] = React.useMemo(() => {\n return new Array(steps).fill(false).map((_, index) => index + 1 <= currentStep);\n }, [steps, currentStep]);\n\n return (\n
\n \n {stepsActivated.map((isActivated, i) => (\n \n ))}\n \n
\n );\n};\n","import { Field } from 'formik';\nimport React from 'react';\nimport styled from 'styled-components';\n\nexport const SwitchContainer = styled.label`\n display: flex;\n position: relative;\n align-items: center;\n flex-wrap: wrap;\n margin: 0;\n cursor: pointer;\n\n input {\n opacity: 0;\n filter: opacity(0);\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n position: relative;\n width: 30px;\n height: 17px;\n background: #e1f4e9;\n border-radius: 12px;\n transition: all 0.5s ease;\n }\n\n i::after {\n transition: left 0.15s ease;\n position: absolute;\n content: ' ';\n display: block;\n background: var(--primary-color);\n height: 11px;\n width: 11px;\n border-radius: 100%;\n left: 3px;\n top: 0;\n margin: 3px 0;\n }\n\n input:checked + i,\n input[value='true'] + i {\n background: #e1f4e9;\n }\n\n input:checked + i::after,\n input[value='true'] + i::after {\n left: calc(100% - 15px);\n }\n\n &.disabled {\n cursor: no-drop;\n\n input + i {\n background: orange;\n border-color: orange;\n }\n\n input + i::after {\n border-color: orange;\n }\n }\n`;\n\ninterface FormSwitchProps extends React.ComponentPropsWithoutRef<'input'> {\n name: string;\n disabled?: boolean;\n}\n\ninterface PresentationalFormSwitchProps {\n checked: boolean | undefined;\n}\n\nexport const FormSwitch: React.FC = ({ disabled, ...props }) => {\n return (\n \n \n \n \n );\n};\n\nexport const PresentationalFormSwitch: React.FC = ({ checked }) => {\n return (\n \n \n \n \n );\n};\n","import { Field, useField } from 'formik';\nimport React from 'react';\nimport { Eye, EyeOff } from 'react-feather';\nimport { Tooltip } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const FormTextInputContainer = styled.label`\n color: black;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n\n @media screen and (max-width: 768px) {\n width: 100% !important;\n }\n\n .form-text__body {\n background: white;\n padding: 5px;\n border: 1px solid #dadada;\n border-radius: 0.5rem;\n padding: calc(1rem - 4px) 1rem;\n display: flex;\n align-items: center;\n position: relative;\n font-size: 1rem;\n line-height: 1;\n width: 100%;\n transition: all 0.25s ease;\n\n :hover {\n border-color: #aaa;\n }\n }\n\n .focus {\n border-color: #aaa;\n }\n\n .form-text__body.valid {\n .form-text__icon {\n color: var(--primary-color);\n }\n }\n\n .form-text__body.invalid {\n .form-text__icon {\n color: #e03225;\n }\n }\n\n .form-text__label {\n display: flex;\n font-size: 14px;\n margin-bottom: 3px;\n }\n\n .form-text__label::after {\n content: ' *';\n color: red;\n }\n\n .form-text__icon-container {\n width: calc(1rem + 2px);\n height: calc(1rem + 2px);\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 1rem;\n }\n\n .form-text__eye-container {\n width: calc(1rem + 2px);\n height: calc(1rem + 2px);\n display: flex;\n justify-content: center;\n align-items: center;\n margin-left: 10px;\n cursor: pointer;\n }\n\n .form-text__validation-text {\n font-size: 13px;\n padding: 5px 0;\n color: #f44336;\n width: 100%;\n display: block;\n }\n\n .form-text__icon {\n width: calc(1rem);\n height: calc(1rem);\n color: black;\n stroke-width: 2.25px;\n }\n\n .form-text__input {\n appearance: none;\n padding: 0;\n margin: 0;\n border: none;\n font-family: inherit;\n flex: 1;\n outline: none;\n height: 24px;\n }\n\n textarea {\n height: 86px;\n min-height: 86px;\n max-height: 86px;\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n outline: none;\n }\n\n &.compact {\n width: 100%;\n max-width: unset;\n\n .form-text__body {\n max-width: 100%;\n min-height: 43px;\n }\n\n .form-text__input {\n height: 20px;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n select.form-text__input {\n width: 100%;\n }\n\n .form-text__body.valid {\n border-color: var(--primary-color);\n }\n\n .form-text__body.invalid {\n border-color: #e03225;\n }\n }\n\n &.wide {\n width: 300px;\n }\n`;\n\nexport const SpecialInput = styled(Field)`\n background: white;\n`;\n\nexport interface FormTextInputProps {\n className?: string;\n name: string;\n placeholder?: string;\n label?: string;\n type?: 'number' | 'text' | 'email' | 'password' | 'date' | 'time';\n as?: any;\n disabled?: boolean;\n icon?: React.FC>;\n compact?: boolean;\n inputProps?: React.ComponentPropsWithoutRef<'input'>;\n toggleField?: boolean;\n currency?: boolean;\n handleChange?: any;\n amount?: any;\n special?: boolean;\n startDate?: any;\n value?: number;\n}\n\nexport const FormTextInput: React.FC = ({\n name,\n placeholder,\n label,\n type,\n as,\n children,\n disabled,\n icon: Icon,\n compact,\n inputProps,\n toggleField,\n currency,\n handleChange,\n amount,\n startDate,\n special,\n value,\n ...props\n}) => {\n const [field, meta] = useField({ name });\n const className = compact ? 'compact ' + (props.className || '') : props.className;\n const [fieldType, setFieldType] = React.useState(type);\n\n const validState = meta.touched ? (meta.error ? false : true) : null;\n const [showPassword, setShowPassword] = React.useState(false);\n const validationClass = validState === null ? '' : validState ? ' valid' : ' invalid';\n const validationProps = { [validationClass]: true };\n const EyeIcon = showPassword ? Eye : EyeOff;\n\n const id = name;\n const [tooltipOpen, setTooltipOpen] = React.useState(false);\n const toggle = () => setTooltipOpen(!tooltipOpen);\n\n const togglePassword = React.useCallback(() => {\n const value = fieldType === 'password' ? 'text' : 'password';\n setFieldType(value);\n setShowPassword(!showPassword);\n }, [fieldType, showPassword]);\n\n const ref = React.useRef(null);\n const [isFocused, setIsFocused] = React.useState(false);\n const focusClass = React.useMemo(() => (isFocused ? ' focus' : ''), [isFocused]);\n\n React.useEffect(() => {\n if (ref.current) {\n ref.current.onfocus = () => {\n setIsFocused(true);\n };\n\n ref.current.onblur = () => {\n setIsFocused(false);\n };\n }\n }, [ref]);\n\n return (\n \n {label && {label}}\n\n
\n {Icon ? (\n
\n \n
\n ) : null}\n\n {!currency && (\n \n )}\n {currency && (\n \n )}\n {/* {as === 'select' ? (\n
\n \n
\n ) : null} */}\n\n {toggleField ? (\n
\n \n
\n ) : null}\n
\n {validState === false ? (\n \n \n {meta.error}\n \n {meta.error}\n \n ) : null}\n
\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { InCome, Passenger } from './icons';\nimport { formatCurrencyWithNairaSign } from '../../../../util/misc/formatters';\n\nenum BorderColor {\n Revenue = '#4DBD7D',\n Bookings = '#E6BE4A',\n Generated = '#1A9BFC',\n Passenger = '#6B6B6B',\n}\n\nenum Title {\n Revenue = 'Revenue',\n Bookings = 'Bookings',\n Generated = 'Generated',\n Passenger = 'Passenger',\n}\n\nconst BorderColorMap: any = {\n [Title.Revenue]: BorderColor.Revenue,\n [Title.Bookings]: BorderColor.Bookings,\n [Title.Generated]: BorderColor.Generated,\n [Title.Passenger]: BorderColor.Passenger,\n};\n\nconst CardWrapper: React.ElementType = styled.div<{ borderColor?: string }>`\n width: 100%;\n // max-width: 100%;\n min-width: 210px;\n height: 80px;\n border-left: 10px solid ${({ borderColor }) => borderColor};\n border-radius: 8px;\n background: #fff;\n box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.3), 0px 2px 0px 0px rgba(0, 0, 0, 0.15);\n padding: 0 8px;\n flex-wrap: wrap;\n display: grid;\n // place-items: center;\n\n .bold-text {\n font-weight: 700;\n }\n`;\n\nexport const RevenueCard: React.FC<{ title: string; amount: number | string; money?: boolean | number }> = ({\n title,\n amount,\n money,\n}) => {\n const borderColorTitle = title.split(' ')[1];\n return (\n
\n \n
\n
\n
{title}
\n
\n {money\n ? formatCurrencyWithNairaSign(amount ?? 0)\n : String(amount).replace(/(.)(?=(\\d{3})+$)/g, '$1,') ?? 0}\n
\n
\n {borderColorTitle === Title.Passenger ? : }\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { X } from 'react-feather';\nimport styled from 'styled-components';\n\nconst ButtonBody = styled.button`\n background: white;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n border: 2px solid #dadada;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0 !important;\n outline: none !important;\n`;\n\nexport const ModalButton: React.FC> = (props) => {\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { Modal } from 'reactstrap';\nimport styled from 'styled-components';\nimport { ModalButton } from './modal-button';\n\nconst StyledModal = styled(Modal)`\n width: ${(props) => (props.customSize ? 'none' : '418px')};\n\n @media (max-width: 480px) {\n width: 100%;\n margin: 0;\n }\n\n .modal-content {\n border-radius: 20px !important;\n }\n\n .modal-header {\n padding: 20px 25px;\n }\n\n .modal-body {\n padding: 20px 25px;\n height: ${(props) => (props.lg || props.md ? '640px' : 'none')};\n }\n\n .modal-title {\n font-size: 14px;\n color: black;\n font-weight: bold;\n letter-spacing: 0px;\n }\n\n .modal-footer {\n border: none;\n padding: 30px 25px;\n }\n\n .modal-footer__button {\n color: var(--primary-color);\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n outline: none !important;\n font-size: 14px;\n }\n`;\n\ninterface CustomModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n title: string;\n customSize?: boolean;\n size?: string;\n}\n\nexport const CustomModal: React.FC = ({ isOpen, setIsOpen, title, size, customSize, children }) => {\n const close = setIsOpen.bind(undefined, false);\n\n return (\n \n
\n {title}\n \n
\n {children}\n
\n );\n};\n","import { Formik } from 'formik';\nimport React, { Dispatch, SetStateAction } from 'react';\nimport { Loader } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col } from 'reactstrap';\nimport { CustomPrimaryButton } from '..';\nimport { FundWalletModel } from '../../models/request';\nimport { TransactionsService } from '../../services';\nimport { NotificationsThunk } from '../../store';\nimport { NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { convertCurrencyToDecimal } from '../../util/misc/formatters';\nimport { FormTextInput } from '../form';\nimport { CustomModal } from '../utilities/modal/modal';\n\ninterface Props {\n isOpen: boolean;\n setIsOpen: Dispatch>;\n onComplete?: (value: number) => void;\n client: string;\n isCreatingBooking?: boolean;\n}\n\nexport const FundWalletModal: React.FC = ({ isOpen, setIsOpen, onComplete, client }) => {\n const dispatch = useDispatch();\n\n const currencyMask = (e: React.ChangeEvent) => {\n let value = e.target.value;\n value = value.replace(/\\D/g, '');\n value = value.replace(/(\\d)(\\d{2})$/, '$1. $2');\n value = value.replace(/(?=(\\d{3})+(\\D))\\B/g, ',');\n e.target.value = value;\n return e;\n };\n\n return (\n \n
\n {\n setSubmitting(true);\n // if (!model.amount || convertCurrencyToDecimal(model.amount) < 500000) {\n if (!model.amount) {\n // for test on prod\n dispatch(\n NotificationsThunk.create(\n NotificationTypes.Error,\n 'Amount must not be lower then NGN 500,000.00'\n )\n );\n setSubmitting(false);\n } else {\n model.clientId = client;\n await TransactionsService.fundWallet(model)\n .then((res) => {\n if (res.ok) {\n dispatch(\n NotificationsThunk.create(\n NotificationTypes.Success,\n `Wallet funded successfully`\n )\n );\n onComplete?.(convertCurrencyToDecimal(model.amount));\n }\n })\n .catch(() =>\n dispatch(\n NotificationsThunk.create(NotificationTypes.Error, 'Wallet funding failed')\n )\n )\n .finally(() => {\n setSubmitting(false);\n setIsOpen(false);\n });\n }\n }}\n >\n {({ handleSubmit, isSubmitting, isValid, setFieldValue, values }) => {\n return (\n
\n \n {\n e.preventDefault();\n const { value } = currencyMask(e).target;\n setFieldValue('amount', value);\n }}\n name=\"amount\"\n label=\"Amount (minimum NGN 500,000.00)\"\n currency\n />\n \n\n
\n \n {isSubmitting ? : Fund Wallet}\n \n
\n \n );\n }}\n \n
\n
\n );\n};\n","import React from 'react';\nimport { Modal } from 'reactstrap';\nimport styled from 'styled-components';\nimport { ModalButton } from './modal-button';\n\nconst StyledModal = styled(Modal)`\n width: ${(props) => (props.customSize ? 'none' : '550px')};\n\n @media (max-width: 480px) {\n width: 100%;\n margin: 0;\n }\n\n .modal-content {\n border-radius: 0px !important;\n }\n\n .modal-header {\n padding: 20px 25px;\n }\n\n .modal-body {\n padding: 20px 25px;\n height: ${(props) => (props.lg || props.md ? '640px' : 'none')};\n }\n\n .modal-title {\n font-size: 14px;\n color: black;\n font-weight: bold;\n letter-spacing: 0px;\n }\n\n .modal-footer {\n border: none;\n padding: 30px 25px;\n }\n\n .modal-footer__button {\n color: var(--primary-color);\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n outline: none !important;\n font-size: 14px;\n }\n`;\n\ninterface CustomModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n title: string;\n customSize?: boolean;\n size?: string;\n}\n\nexport const CustomModal: React.FC = ({ isOpen, setIsOpen, title, size, customSize, children }) => {\n const close = setIsOpen.bind(undefined, false);\n\n return (\n \n
\n {title}\n \n
\n {children}\n
\n );\n};\n","import { IsAlphanumeric, IsNotEmpty, IsNumber, Min } from 'class-validator';\nimport { BaseModel } from '../../models/request/base-model';\n\nexport class RenewalsModel implements BaseModel {\n @IsNotEmpty({ message: 'Please enter date' })\n public startDate = '';\n\n @IsAlphanumeric()\n public applicationUserId = '';\n\n public beforeValidation() {\n this.startDate = this.startDate;\n this.applicationUserId = this.applicationUserId;\n }\n}\n","import { Formik } from 'formik';\nimport React, { Dispatch, SetStateAction, useState } from 'react';\nimport { Loader } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '..';\nimport { FundWalletModel } from '../../models/request';\nimport { TransactionsService } from '../../services';\nimport { NotificationsThunk, TransactionsThunk } from '../../store';\nimport { NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { convertCurrencyToDecimal } from '../../util/misc/formatters';\nimport { FormTextInput } from '../form';\nimport DatePicker from 'react-datepicker';\nimport { CustomModal } from '../utilities/modal/renewal-modal';\nimport { RenewalsModel } from './renewal';\n\ninterface Props {\n isOpen: boolean;\n setIsOpen: Dispatch>;\n onComplete?: (value: string) => void;\n client?: string;\n isCreatingBooking?: boolean;\n pageNumber: number;\n}\n\nexport const RenewalModal: React.FC = ({ isOpen, setIsOpen, onComplete, client, pageNumber }) => {\n const dispatch = useDispatch();\n\n return (\n \n
\n {\n setSubmitting(true);\n if (!model.startDate) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Please select a valid date'));\n setSubmitting(false);\n } else {\n model.applicationUserId = client ?? '';\n\n await TransactionsService.renewalDate(model)\n .then((res) => {\n if (res.ok) {\n dispatch(\n NotificationsThunk.create(\n NotificationTypes.Success,\n `Annual renewal date saved successfully`\n )\n );\n if (client !== undefined) {\n dispatch(TransactionsThunk.fetchPayRenewalId(client, pageNumber));\n } else {\n console.error('Client is undefined. Unable to dispatch action.');\n }\n onComplete?.(Date.parse(model.startDate).toString());\n }\n })\n .catch((error) => {\n console.error('Error occurred:', error);\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'An error occurred'));\n })\n\n .finally(() => {\n setSubmitting(false);\n setIsOpen(false);\n });\n }\n }}\n >\n {({ handleSubmit, isSubmitting, isValid, setFieldValue, values }) => (\n
\n \n
\n \n \n Plaese Select Renewal Date for this client\n \n \n \n \n Note: Selected date will be used as annual renewal date going forword\n \n \n
\n
\n \n \n \n
\n
\n \n \n {isSubmitting ? : Submit}\n \n setIsOpen(false)}\n style={{ backgroundColor: 'white', color: 'green' }}\n >\n Cancel\n \n \n
\n )}\n \n
\n
\n );\n};\n","import React, { Dispatch, SetStateAction } from 'react';\nimport { Loader } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { Formik } from 'formik';\nimport { CustomPrimaryButton } from '..';\nimport { TransactionsService } from '../../services';\nimport { NotificationsThunk, TransactionsThunk } from '../../store';\nimport { NotificationTypes } from '../../util/constants';\nimport { CustomModal } from '../utilities/modal/renewal-modal';\n\ninterface Props {\n isOpen: boolean;\n setIsOpen: Dispatch>;\n onComplete?: () => void;\n client_id: string;\n id?: number;\n isCreatingBooking?: boolean;\n pageNumber: number;\n}\n\nexport const PaymentModal: React.FC = ({ isOpen, setIsOpen, onComplete, client_id, id, pageNumber }) => {\n const dispatch = useDispatch();\n\n return (\n \n
\n {\n setSubmitting(true);\n try {\n const res = await TransactionsService.payment(values.client_id, values.id);\n if (res.ok) {\n dispatch(NotificationsThunk.create(NotificationTypes.Success, `Payment successful`));\n if (client_id !== undefined) {\n dispatch(TransactionsThunk.fetchPayRenewalId(client_id, pageNumber));\n } else {\n console.error('Client is undefined. Unable to dispatch action.');\n }\n if (onComplete) onComplete();\n } else {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Payment failed'));\n }\n } catch (error) {\n console.error('Error occurred:', error);\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'An error occurred'));\n } finally {\n setSubmitting(false);\n setIsOpen(false);\n }\n }}\n >\n {({ handleSubmit, isSubmitting, isValid }) => (\n
\n \n
\n \n \n Are you sure you want to pay N200,000 to renew this client's registration?\n \n \n
\n
\n \n \n {isSubmitting ? : Pay Now}\n \n setIsOpen(false)}\n style={{ backgroundColor: 'white', color: 'green' }}\n >\n Cancel\n \n \n
\n )}\n \n
\n
\n );\n};\n","import React from 'react';\nimport { ModalBody } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const Document = styled.iframe`\n width: 100%;\n height: 100%;\n overflow: auto;\n border-radius: 9px;\n border: none;\n`;\n\ninterface Props {\n file?: any;\n}\n\nexport const File = ({ file }: Props) => {\n return (\n \n \n \n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Lock, Mail } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormButton, FormTextInput } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\nimport { UserLoginModel } from '../../../models/request';\nimport { AuthThunk } from '../../../store/auth/auth.thunk';\nimport { validateFormValues } from '../../../util/validation';\n\nexport const LoginPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Login', path: window.location.href },\n ];\n\n const dispatch = useDispatch();\n const handleLogIn = React.useCallback(\n (login: UserLoginModel) => {\n // dispatch an action to call the api service\n dispatch(AuthThunk.logIn(login));\n },\n [dispatch]\n );\n\n return (\n \n \n
\n \n \n \n {({ handleSubmit, isValid, submitCount }) => (\n
\n
\n

Login

\n {!isValid && submitCount > 0 && (\n
Please check the form fields for errors
\n )}\n
\n
\n \n \n Forgot password\n
\n
\n \n Login\n \n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Mail } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormButton, FormTextInput } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\nimport { ForgetPasswordModel } from '../../../models/request';\nimport { AuthThunk } from '../../../store/auth/auth.thunk';\nimport { validateFormValues } from '../../../util/validation';\n\nexport const ForgetPasswordPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Forget password', path: window.location.href },\n ];\n\n const dispatch = useDispatch();\n const handleFogetPassword = React.useCallback(\n (data: ForgetPasswordModel) => {\n dispatch(AuthThunk.requestPasswordReset(data));\n },\n [dispatch]\n );\n\n return (\n \n \n
\n \n \n \n {({ handleSubmit }) => (\n
\n
\n

Forgot password

\n Enter email address to reset your password\n
\n
\n \n
\n
\n \n SEND EMAIL ADDRESS\n \n {/* \n Don't have an account?{' '}\n \n Sign up\n \n */}\n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Lock } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { useParams } from 'react-router';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormButton, FormTextInput } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\nimport { ResetPasswordModel } from '../../../models/request';\nimport { AuthThunk } from '../../../store/auth/auth.thunk';\nimport { validateFormValues } from '../../../util/validation';\n\nexport const ResetPasswordPage: React.FC = (props) => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Reset password', path: window.location.href },\n ];\n\n const { code } = useParams();\n\n const dispatch = useDispatch();\n const handleResetPassword = React.useCallback(\n (data: ResetPasswordModel) => {\n data.ActivationCode = code as string;\n dispatch(AuthThunk.requestResetPassword(data));\n },\n [dispatch, code]\n );\n\n return (\n \n \n
\n \n \n \n {({ handleSubmit }) => (\n
\n
\n

Reset password

\n Enter New Password to reset your old password\n
\n
\n \n \n
\n
\n \n RESET PASSWORD\n \n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import styled from 'styled-components';\nimport backgroundImage from '../../assets/images/admin_bg.jpg';\nimport FAQImage from '../../assets/images/fqa-bg.png';\n\nexport const LandingPageStyleWrapper = styled.div`\n @media only screen and (min-width: 600px) {\n .leaderBoard {\n background-position-x: center;\n background-repeat: no-repeat;\n background-size: cover;\n background-image: url(${backgroundImage});\n height: 100vh;\n .contentWrapper {\n padding-right: 50px;\n // padding-top: 100px;\n\n .titleConatiner {\n padding: 0px;\n margin-bottom: 30px !important;\n }\n\n h5 {\n font-size: 14px !important;\n color: #000000;\n letter-spacing: 1.4px !important;\n font: Bold 14px/17px Adobe Clean !important;\n }\n\n .text {\n letter-spacing: 0px !important;\n font-size: 40px !important;\n font-weight: bolder;\n line-height: 60px !important;\n // margin-bottom: 20px !important;\n }\n\n p {\n font-size: 20px !important;\n line-height: 30px !important;\n }\n\n .btnWrapper {\n display: flex !important;\n flex-direction: row !important;\n margin-top: 20px !important;\n\n .getStartedBtn {\n width: 200px !important;\n background-color: #18a956 !important;\n color: #fff !important;\n font-size: 16px !important;\n letter-spacing: 1.4px !important;\n border-radius: 30px !important;\n border: 0 !important;\n height: 50px !important;\n text-transform: uppercase;\n }\n\n .logBtn {\n height: unset !important;\n width: 200px !important;\n background-color: transparent !important;\n color: #fff !important;\n font-size: 16px !important;\n letter-spacing: 1.4px !important;\n border-radius: 30px !important;\n border: 1px solid #fff !important;\n box-shadow: none !important;\n text-transform: uppercase;\n }\n }\n\n span {\n display: block !important;\n margin-top: 10px !important;\n font-size: 13px !important;\n\n a {\n color: #18a956 !important;\n }\n }\n }\n\n img {\n max-width: 100% !important;\n max-height: 450px !important;\n }\n }\n\n .bg-custom-green {\n background-color: rgba(38, 169, 85, 0.05) !important;\n }\n\n .bg-custom-green-2 {\n background-color: rgba(38, 169, 85, 0.12) !important;\n }\n\n .faq-section {\n background-repeat: no-repeat;\n background-size: cover;\n background-image: url(${FAQImage});\n background-position: center;\n }\n\n .serviceSection {\n background-color: #18a956 !important;\n padding-top: 50px !important;\n border: 1px solid #707070 !important;\n\n img {\n max-width: 200px !important;\n height: auto !important;\n }\n\n .contentWrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n justify-content: center !important;\n\n h1 {\n color: #fff !important;\n font-weight: bold !important;\n }\n\n .btnWrapper {\n display: flex !important;\n flex-direction: row !important;\n margin-top: 10px !important;\n\n .getStartedBtn {\n width: 200px !important;\n background-color: #fff !important;\n color: #18a956 !important;\n font-size: 12px !important;\n letter-spacing: 1.4px !important;\n border-radius: 8px !important;\n border: 0 !important;\n height: 50px !important;\n }\n\n .logBtn {\n width: 250px !important;\n background-color: unset !important;\n color: #fff !important;\n font-size: 13px !important;\n letter-spacing: 1.4px !important;\n border-radius: 8px !important;\n border: 1px solid #fff !important;\n box-shadow: none !important;\n }\n }\n }\n }\n .infoSection {\n .logoWrapper {\n text-align: right !important;\n\n img {\n max-width: 150px !important;\n height: auto;\n }\n }\n .pDiv {\n width: 700px !important;\n\n p {\n font-size: 17px !important;\n }\n }\n\n .row_1.address {\n display: flex !important;\n flex-direction: row !important;\n\n .col_1 {\n margin-right: 40px;\n }\n\n h3 {\n font-weight: bold !important;\n font-size: 24px !important;\n }\n\n p {\n font-size: 14px !important;\n }\n }\n }\n\n .footerSection {\n .topFooter {\n .row_1 {\n display: flex !important;\n flex-direction: row !important;\n }\n\n .col_1 {\n flex: 1;\n }\n\n .col_2 {\n flex: 2;\n display: flex;\n flex-direction: row-reverse;\n }\n }\n\n .footerBottom {\n .row_1 {\n display: flex !important;\n flex-direction: row !important;\n }\n\n .col_1 {\n flex: 1;\n }\n\n .col_2 {\n flex: 2;\n display: flex;\n flex-direction: row-reverse;\n }\n\n font-size: 13px !important;\n }\n }\n }\n\n @media only screen and (max-width: 600px) {\n .leaderBoard {\n background-position-x: center;\n background-repeat: no-repeat;\n background-size: cover;\n background-image: url(${backgroundImage});\n height: 100vh;\n .contentWrapper {\n // border: 2px solid red;\n margin-top: 100px;\n\n h5 {\n font-size: 14px !important;\n color: #000000;\n letter-spacing: 1.4px !important;\n font: Bold 14px/17px Adobe Clean !important;\n }\n\n h1 {\n letter-spacing: 0px !important;\n font-size: 40px !important;\n font-weight: bold;\n line-height: 40px !important;\n margin-bottom: 20px !important;\n }\n\n p {\n font-size: 16px !important;\n line-height: 25px !important;\n margin-top: 20px;\n }\n\n .btnWrapper {\n display: flex !important;\n flex-direction: column !important;\n margin-top: 20px !important;\n justify-content: center;\n align-items: center;\n\n .getStartedBtn {\n width: 100% !important;\n background-color: #18a956 !important;\n color: #fff !important;\n font-size: 16px !important;\n letter-spacing: 1.4px !important;\n border-radius: 30px !important;\n border: 0 !important;\n height: 50px !important;\n text-transform: uppercase;\n margin-bottom: 20px;\n }\n\n .logBtn {\n width: 100% !important;\n height: 50px !important;\n background-color: transparent !important;\n color: #fff !important;\n font-size: 16px !important;\n letter-spacing: 1.4px !important;\n border-radius: 30px !important;\n border: 1px solid #fff !important;\n box-shadow: none !important;\n text-transform: uppercase;\n }\n }\n\n span {\n display: block !important;\n margin-top: 10px !important;\n font-size: 13px !important;\n\n a {\n color: #18a956 !important;\n }\n }\n }\n\n img {\n max-width: 100% !important;\n max-height: 400px !important;\n }\n }\n\n .serviceSection {\n background-color: #fff !important;\n padding: 50px 0 !important;\n border: 1px solid #707070 !important;\n\n img {\n display: none;\n }\n\n .contentWrapper {\n h1 {\n color: #fff !important;\n font-weight: bold !important;\n font-size: 25px;\n text-align: center;\n line-height: 27px !important;\n }\n\n .btnWrapper {\n display: flex !important;\n flex-direction: row !important;\n margin-top: 15px !important;\n padding: 0 2rem !important;\n\n .getStartedBtn {\n width: 200px !important;\n background-color: #fff !important;\n color: #18a956 !important;\n font-size: 12px !important;\n letter-spacing: 1.4px !important;\n border-radius: 8px !important;\n border: 0 !important;\n height: 50px !important;\n }\n\n .logBtn {\n width: 300px !important;\n background-color: unset !important;\n color: #fff !important;\n font-size: 13px !important;\n letter-spacing: 1.4px !important;\n border-radius: 8px !important;\n border: 1px solid #fff !important;\n box-shadow: none !important;\n }\n }\n }\n }\n\n .infoSection {\n .logoWrapper {\n text-align: left !important;\n margin-bottom: 10px;\n\n img {\n max-width: 100px !important;\n height: auto;\n }\n }\n\n .pDiv {\n p {\n font-size: 15px !important;\n }\n }\n\n .row_1.address {\n display: flex !important;\n flex-direction: row !important;\n\n .col_1 {\n margin-right: 40px;\n }\n\n h3 {\n font-weight: bold !important;\n font-size: 20px !important;\n }\n\n p {\n font-size: 12px !important;\n }\n }\n }\n\n .footerSection {\n .topFooter {\n .row_1 {\n display: flex !important;\n flex-direction: column !important;\n }\n }\n\n .footerBottom {\n .row_1 {\n display: flex !important;\n flex-direction: column !important;\n }\n\n .copyright {\n margin-top: 10px;\n }\n\n font-size: 13px !important;\n }\n }\n }\n`;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n Collapse,\n Container,\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n Nav,\n Navbar,\n NavbarBrand,\n NavbarToggler,\n NavItem,\n NavLink,\n UncontrolledDropdown,\n} from 'reactstrap';\n\nimport { CustomPrimaryButton } from '../index';\nimport './NavMenu.scss';\n\nconst LandingPageNav = () => {\n const [isOpen, setOpen] = useState(false);\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, []);\n\n // useEffect(() => {\n // document.body.addEventListener('click', toggle);\n // return () => {\n // document.body.removeEventListener('click', toggle);\n // };\n // }, [toggle]);\n\n return (\n
\n \n \n \n \"...\"\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default LandingPageNav;\n","import React, { useState } from 'react';\nimport { AccordionBody, AccordionHeader, AccordionItem, UncontrolledAccordion } from 'reactstrap';\nimport { CustomPrimaryButton } from '../utilities/custom-primary-button/custom-primary-button';\nimport './accordion-style.scss';\n\nconst FAQ = () => {\n return (\n
\n \n \n \n {' '}\n How to login{' '}\n \n \n
\n
    \n
  1. On the FAAN APS landing page click on the button “LOGIN TO ACCOUNT”.
  2. \n
  3. Type in your registered email and password
  4. \n
  5. Fill the form correctly and click \"NEXT STEP\".
  6. \n
  7. Click on Login.
  8. \n
\n
\n
\n
\n \n \n \n {' '}\n How to Reset Password{' '}\n \n \n
\n
    \n
  1. On the FAAN APS landing page click on the button “LOGIN TO ACCOUNT”.
  2. \n
  3. Select “Forgot password” below the email and password field.
  4. \n
  5. Input your registered email address in the space provided.
  6. \n
  7. An email notification will be sent to your email
  8. \n
  9. Click on the link sent in the email
  10. \n
  11. The link redirects you to the Reset password page
  12. \n
  13. Input your preferred password and confirm the password then click on reset
  14. \n
\n
\n
\n
\n {/* \n \n {' '}\n How to View a Client{' '}\n \n \n
\n
    \n
  1. \n On the \"All Clients\" page click type the name of the client in the Search type\n the name of the client in the Search field and click “Submit”.\n
  2. \n
  3. Select “Forgot password” below the email and password field.
  4. \n
  5. On the selected client, click on “View Client”.
  6. \n
\n
\n
\n
*/}\n \n \n {' '}\n How to View a Client{' '}\n \n \n
\n
    \n
  1. \n On the \"All Clients\" page type the name of the client in the Search field and\n click “Submit”.\n
  2. \n
  3. On the selected client, click on “View Client”.
  4. \n
\n
\n
\n
\n \n \n {' '}\n How to View a Client Booking{' '}\n \n \n
\n
    \n
  1. \n On the \"All Clients\" page type the name of the client in the Search field and\n click “Submit”.\n
  2. \n
  3. On the selected client, click on “View Client”.
  4. \n
  5. Click on the “Client’s Booking” tab.
  6. \n
\n
\n
\n
\n \n \n {' '}\n How to Book a Service{' '}\n \n \n
\n
    \n
  1. \n On the \"All Clients\" page type the name of the client in the Search field and\n click “Submit”.\n
  2. \n
  3. On the selected client, click on “View Client”.
  4. \n
  5. Click on the “Book Service”
  6. \n
  7. Fill out the client’s booking detail.
  8. \n
  9. Click on “Add Passenger”
  10. \n
  11. Check the “I agree to terms and conditions” and click “Continue
  12. \n
  13. Confirm details and you will get a successful message
  14. \n
\n
\n
\n
\n
\n \n \n {' '}\n How to Fund Wallet {' '}\n \n \n
\n
    \n
  1. On the far right of the dashboard click on the button labelled \"FUND\"
  2. \n
  3. \n On the pop-up form, insert an amount to fund wallet with and click \"FUND WALLET\".\n (Example: N500,000)\n
  4. \n
  5. An invoice will be sent to your email
  6. \n
  7. \n {' '}\n Use the RRR number sent to your email to make payment to REMITA and your wallet will\n be funded with the amount on the generated invoice.{' '}\n
  8. \n
\n
\n
\n
\n \n \n {' '}\n How to add Multiple Passengers to a Booking{' '}\n \n \n
\n
    \n
  1. \n On the \"All Clients\" page type the name of the client in the Search field and click\n “Submit”.\n
  2. \n
  3. On the selected client, click on “View Client”.
  4. \n
  5. Click on the “Book Service”
  6. \n
  7. Fill out the client’s booking details
  8. \n
  9. Click on “Add Passengers”
  10. \n
  11. Fill a new form for the additional passenger and click “Add Passenger”
  12. \n
  13. Re-do Step 6 for as many passengers as you want to add
  14. \n
  15. Click the “I agree to terms and conditions” and click “Continue”
  16. \n
  17. Confirm details and you will get a successful message.
  18. \n
\n
\n
\n
\n \n \n {' '}\n How do I Change a Booking Status?{' '}\n \n \n
\n
    \n
  1. Click on \"All Booking\" page from your Dashboard
  2. \n
  3. On the booking you want to change status for click “View Booking”
  4. \n
  5. Select one or more Protocols Officers from the drop-down list
  6. \n
  7. Click on “Assign Protocol”.
  8. \n
  9. Click on “Change Status”
  10. \n
  11. Select the status to be changed and click confirm.
  12. \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default FAQ;\n","import * as React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Button, Col, Row } from 'reactstrap';\nimport { Container, CustomPrimaryButton } from '../../components';\nimport { LandingPageStyleWrapper } from './landing-page.style';\nimport Arrival from '../../assets/images/arrivalService.png';\nimport ArrivalIcon from '../../assets/images/arrivalServiceIcon.png';\nimport Departure from '../../assets/images/departureService.png';\nimport DepartureIcon from '../../assets/images/departureServiceIcon.png';\nimport Car from '../../assets/images/carService.png';\nimport CarIcon from '../../assets/images/carServiceIcon.png';\nimport Lounge from '../../assets/images/loungeService.png';\nimport LoungeIcon from '../../assets/images/loungeServiceIcon.png';\nimport LandingPageNav from '../../components/nav-menu/landing-page-nav';\nimport FAQ from '../../components/accordion/FQA';\nimport Layout from '../../components/layout';\n\nclass LandingPage extends React.Component<{}, {}> {\n public render() {\n return (\n \n \n
\n \n
\n \n
\n
\n
\n {/*

\n The number one provider of fast track airports services in Nigeria.\n

*/}\n
\n {' '}\n
The number one
\n
\n provider of fast track\n
\n
\n airports services in Nigeria.{' '}\n
\n
\n\n

\n From your home to the airport to your destination, we remove the stress\n and hassles, leaving you with a fabulous travel experience.\n

\n
\n \n Log into account\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Our Services

\n

We remove the stress and hassle, and leaving you with a fabulous travel experience.

\n
\n
\n \n \n \n \"arrival\"\n \n \n
\n \"Arrival\n

Arrival Services

\n

\n Receiving arrival clients, handling immigration clearance,
{' '}\n baggage collection and customs formalities.\n

\n
\n \n
\n
\n
\n\n
\n \n \n \n \"departure\"\n \n \n
\n \"Departure\n

Departure Service

\n

\n Receiving intending passengers at departure level and
conducting\n check-in formalities with airlines, border agencies
clearance.\n

\n
\n \n
\n
\n
\n
\n \n \n \n \"car\"\n \n \n
\n \"Car\n

Car Services

\n

\n Securing car hire for clients where needed.
Making reservations\n and logistics arrangement on domestic
routes.\n

\n
\n \n
\n
\n
\n
\n \n \n \n \"Lounge\"\n \n \n
\n \"Lounge\n

Lounge Services

\n

\n Executive lounge access and convenience.\n
And any other travel comfort client may require in line with{' '}\n
best practice.\n

\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n

Frequently Asked Questions

\n

\n We remove the stress and hassle, and leaving you with a fabulous travel\n experience.\n

\n
\n \n
\n
\n
\n\n
\n\n
\n \n \n \n
\n \n
\n \n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n

Lagos

\n

\n Murtala Muhammed International
\n Airport, Lagos.
\n T: +234 8113726382
\n E: hello@faanaps.com\n

\n
\n \n \n
\n

Port Harcourt

\n

\n Port Harcourt Airport, Kaicon Express\n
\n Way, Port Harcourt.
\n T: +234 8113726382
\n E: hello@faanaps.com\n

\n
\n \n \n
\n

Abuja

\n

\n Nnamdi Azikiwe International
\n Airport, Abuja.
\n T: +234 8113726382
\n E: hello@faanaps.com\n

\n
\n \n \n
\n

Kano

\n

\n Mallam Aminu Kano International
\n Airpot, Kano.
\n T: +234 8113726382
\n E: hello@faanaps.com\n

\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n © Copyright {new Date().getFullYear()} Airport Protocol Service. All rights\n reserved.\n
\n
\n
\n
\n Credit -{' '}\n \n Needle Technology\n \n
\n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default LandingPage;\n","import styled from 'styled-components';\n\nexport const DashboardPageStyleWrapper = styled.div`\n @media only screen and (min-width: 970px) {\n .top__content {\n margin-top: 2rem !important;\n }\n\n .icon-row {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n overflow: auto;\n padding: 0 30px;\n }\n\n .icon-row__col {\n margin-right: 10px;\n cursor: pointer;\n }\n\n .icon-row__item {\n padding: 15px 0px;\n border: 1px solid #dadada;\n border-radius: 7px;\n display: flex;\n flex-direction: row;\n\n .oneline__text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n }\n }\n\n .mobile__head {\n padding: 20px;\n\n h3 {\n font-size: 22px;\n font-weight: bold;\n }\n }\n\n .deck {\n margin-top: 1rem;\n }\n\n .recentActivity {\n margin-top: 1rem;\n\n h1 {\n font-size: 30px;\n font-weight: bold;\n }\n\n p {\n a {\n color: #18a956;\n font-weight: bold;\n }\n }\n }\n }\n\n @media only screen and (max-width: 970px) {\n .icon-row {\n padding: 0 30px;\n }\n\n .mobile__head {\n padding: 0 20px;\n margin-top: 30px;\n margin-bottom: 10px;\n\n h3 {\n margin: 0;\n font-size: 20px;\n font-weight: bold !important;\n }\n }\n\n .icon-row__col {\n margin-right: 10px;\n cursor: pointer;\n }\n\n .icon-row__item {\n padding: 15px 0px;\n border: 1px solid #dadada;\n border-radius: 7px;\n display: flex;\n flex-direction: row;\n }\n }\n\n .recentActivity {\n padding: 0 20px;\n\n h1 {\n font-size: 20px;\n font-weight: bold;\n }\n\n p {\n a {\n color: #18a956;\n font-weight: bold;\n }\n }\n }\n\n .top__content {\n margin-top: 30px;\n padding: 0 20px;\n display: flex !important;\n\n .flag,\n .switch {\n flex: 1;\n }\n }\n\n .deck {\n padding: 20px;\n\n .deck__row {\n display: flex !important;\n flex-direction: row;\n align-items: flex-start;\n overflow: auto;\n white-space: nowrap;\n }\n\n .deck__row__item {\n flex: 1;\n cursor: pointer;\n margin-right: 10px;\n }\n }\n`;\n","import { capitalize } from 'lodash';\nimport moment from 'moment';\nimport React, { useMemo } from 'react';\nimport { Clipboard, Grid, Users } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport styled from 'styled-components';\nimport { AuthLayout, DataTable, FlagTime, SignOutSwitchComponent } from '../../../components';\nimport { AuthenticatedUser, Booking, User } from '../../../models/response';\nimport { ApplicationState } from '../../../store';\nimport { BookingsThunk } from '../../../store/bookings/bookings.thunk';\nimport { UsersThunk } from '../../../store/users/users.thunk';\nimport { ClientStatuses, Roles } from '../../../util/constants';\nimport { DashboardPageStyleWrapper } from '../components';\n\nexport const AdminDashbboardStyle = styled(DashboardPageStyleWrapper as any)`\n /* .icon-row__col {\n flex: 1;\n margin-right: 10px;\n cursor: pointer;\n }\n\n .icon-row__item {\n padding: 15px 0px;\n border: 1px solid #dadada;\n border-radius: 7px;\n display: flex;\n flex-direction: row;\n\n .col-md-8 {\n span {\n padding: 7px auto;\n font-weight: bold;\n font-size: 14px;\n }\n }\n\n .col-md-4 {\n span {\n font-weight: bold;\n font-size: 20px;\n }\n }\n }\n */\n\n .deck-container__deck {\n border: 1px solid #dadada;\n border-radius: 7px;\n flex: 1;\n margin-right: 10px;\n\n a {\n color: var(--primary-color);\n }\n\n p {\n font-size: 13px;\n font-weight: bold;\n\n a {\n color: var(--primary-color);\n font-size: 13px;\n }\n }\n }\n /*\n @media only screen and (max-width: 970px) {\n .icon-row {\n padding: 0 30px;\n }\n } */\n`;\n\ninterface TopCardLink {\n name: string;\n icon: React.FC;\n count: number;\n color?: string;\n}\n\nexport const AdminDashboardPage: React.FC = () => {\n const { users, bookings, auth } = useSelector((state: ApplicationState) => state);\n const clients = users.clients.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated));\n const user = auth.authUser as AuthenticatedUser;\n const role = auth.authUser?.role;\n const dashboardStats = users.dashboardStats;\n\n const filteredBookings = React.useMemo(() => {\n switch (user?.role) {\n case Roles.Admin:\n case Roles.AirportManager:\n return bookings.bookings.slice(0, 6);\n default:\n return [];\n }\n }, [bookings.bookings, user]);\n\n const shared_links = useMemo(\n () => [\n { name: 'Clients', icon: Users, count: users.clientStats?.total ?? 0, color: '#18A956' },\n {\n name: 'Active Clients',\n icon: Users,\n count: users.clientStats?.active ?? 0,\n color: '#B1B71C',\n },\n ],\n [users.clientStats]\n );\n\n const admin_links = [\n ...shared_links,\n { name: 'Services', icon: Grid, count: dashboardStats?.services ?? 'N/A', color: '#18A956' },\n {\n name: `Today's Bookings`,\n icon: Clipboard,\n count: dashboardStats?.todaybookings ?? 'N/A',\n color: '#ED0000',\n },\n ];\n\n const manager_links = useMemo(\n () => [\n ...shared_links,\n {\n name: 'Processing',\n icon: Users,\n count: users.clientStats?.new ?? 0,\n color: '#18A956',\n },\n {\n name: 'Declined',\n icon: Users,\n count: users.clientStats?.inActive ?? 0,\n color: '#18A956',\n },\n ],\n [users.clientStats, shared_links]\n );\n\n const cards: TopCardLink[] =\n role === Roles.Admin ? admin_links : role === Roles.AirportManager ? manager_links : [];\n\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(BookingsThunk.list());\n dispatch(UsersThunk.getClients());\n dispatch(UsersThunk.getClientStats());\n dispatch(UsersThunk.getDashboardStats());\n }, [dispatch]);\n\n return (\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n {cards?.map(({ name, icon: Icon, count, color }, i) => (\n
\n
\n
\n \n {name}\n
\n
\n {count}\n
\n
\n
\n ))}\n
\n
\n
\n
\n

Latest Clients

\n
\n
\n

\n \n View all \n \n

\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n accessor: 'business_Name',\n Cell: ({ row: { original } }: Cell) => {\n return (\n \n {original.business_Name ??\n `${original.firstName} ${original.lastName}`}\n \n );\n },\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: user } }: Cell) => {\n return {user.profile_Status};\n },\n },\n {\n accessor: 'profile_Status',\n Cell: ({ row: { original: client } }: Cell) => {\n return (\n \n \n {[ClientStatuses.New, ClientStatuses.Processing].includes(\n client.profile_Status\n )\n ? 'View Request'\n : 'View Client'}\n \n \n );\n },\n },\n ]}\n data={clients.slice(0, 6)}\n />\n
\n\n

\n \n See all \n \n

\n
\n
\n
\n
\n

Latest Bookings

\n
\n
\n

\n \n View all \n \n

\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n Header: 'Client',\n Cell: (cell: Cell) => {\n const user = cell.row.original.applicationUser;\n return user ? (\n \n {user.business_Name || `${user.firstName} ${user.lastName}`}\n \n ) : null;\n },\n },\n {\n Header: 'Status',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n {booking.bookingStatus.replace('_', ' ')}\n \n );\n },\n },\n {\n Header: 'Action',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n View\n \n );\n },\n },\n ]}\n data={filteredBookings}\n />\n

\n \n See all \n \n

\n
\n
\n
\n
\n
\n );\n};\n","import { capitalize } from 'lodash';\nimport moment from 'moment';\nimport React, { useEffect, useMemo } from 'react';\nimport { Grid, Users } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { AuthLayout, DataTable, FlagTime, SignOutSwitchComponent } from '../../../components';\nimport { Transaction, User, UserActivity } from '../../../models/response';\nimport { ApplicationState, TransactionsThunk, UsersThunk } from '../../../store';\nimport { Roles } from '../../../util/constants';\nimport { DashboardPageStyleWrapper } from '../components';\nimport { AdminDashbboardStyle } from './admin-dashboard';\nimport { TopCardLink } from './airport-protocol-dashboard';\n\nexport const AccountantDashboard: React.FC = () => {\n const dispatch = useDispatch();\n const { transactions, users } = useSelector((state: ApplicationState) => state);\n const activities = useMemo(() => users.userActivities || [], [users.userActivities]);\n\n const cards: TopCardLink[] = useMemo(\n () => [\n {\n name: 'Services',\n icon: Grid,\n count: transactions.transactionsMeta?.totalCount ?? 0,\n color: 'var(--primary-color)',\n },\n {\n name: 'Payments Paid',\n icon: Grid,\n count: users.clientStats?.paid ?? 0,\n color: '#ED0000',\n },\n {\n name: 'Clients',\n icon: Users,\n count: users.clientStats?.total ?? 0,\n color: 'var(--primary-color)',\n },\n {\n name: 'Unpaid Payments',\n icon: Grid,\n count: users.clientStats?.unpaid ?? 0,\n color: '#B1B71C',\n },\n ],\n [transactions.transactionsMeta, users.clientStats]\n );\n\n useEffect(() => {\n dispatch(TransactionsThunk.list());\n dispatch(UsersThunk.userActivities(Roles.Client));\n dispatch(UsersThunk.getClientStats());\n }, [dispatch]);\n\n return (\n \n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n {cards.map(({ name, icon: Icon, count, color }, i) => (\n
\n
\n
\n \n {name}\n
\n
\n {count}\n
\n
\n
\n ))}\n
\n
\n
\n
\n

Latest Services

\n
\n
\n

\n \n View all \n \n

\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n accessor: 'transactType',\n Cell: ({ row: { original } }: Cell) => {\n const text =\n original.transactType === 'Protocol Services'\n ? 'Booking service'\n : 'Registration Service';\n return {text};\n },\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: transaction } }: Cell) => {\n return (\n \n View service\n \n );\n },\n },\n ]}\n data={transactions.transactions.slice(0, 5)}\n />\n
\n\n

\n \n See all \n \n

\n
\n
\n
\n
\n

Latest Activities

\n
\n
\n

\n \n View all \n \n

\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n accessor: 'description',\n },\n ]}\n data={activities.slice(0, 5)}\n />\n

\n \n See all \n \n

\n
\n
\n
\n \n \n \n );\n};\n","import { capitalize } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { Clipboard } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { DataTable } from '../../../components';\nimport { AuthContext } from '../../../context';\nimport { Booking, UserActivity } from '../../../models/response';\nimport { ApplicationState } from '../../../store';\nimport { BookingsThunk } from '../../../store/bookings/bookings.thunk';\nimport { UsersThunk } from '../../../store/users/users.thunk';\nimport { BookingStatuses } from '../../../util/constants';\nimport { AdminDashbboardStyle } from './admin-dashboard';\n\nexport interface TopCardLink {\n name: string;\n icon: React.FC;\n count: number;\n color?: string;\n}\n\nexport const AirportProtocolDashboardPage: React.FC<{}> = (props) => {\n const { users, bookings, auth } = useSelector((state: ApplicationState) => state);\n const { isInAirport } = React.useContext(AuthContext.Context);\n\n console.log('bookking', bookings);\n\n const all_bookings = bookings.bookings.filter((booking) => isInAirport(booking.airportId, 'view'));\n const all_activities = (users.userActivities && users.userActivities) || [];\n const sorted_activities = all_activities.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated));\n\n const sorted_bookings = all_bookings.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated));\n\n const pending_bookings = all_bookings.filter(\n (booking: Booking) => booking.bookingStatus === BookingStatuses.Processing\n );\n\n const noshow_bookings = all_bookings.filter((booking: Booking) => booking.bookingStatus === BookingStatuses.NoShow);\n const rendered_bookings = all_bookings.filter(\n (booking: Booking) => booking.bookingStatus === BookingStatuses.ServiceRendered\n );\n\n const latest_bookings = sorted_bookings.slice(0, 6);\n const latest_activities = sorted_activities.slice(0, 6);\n const role = (auth.authUser && auth.authUser.role) || 'Admin';\n\n const links = [\n {\n name: 'Bookings',\n icon: Clipboard,\n count: all_bookings.length,\n color: '#18A956',\n },\n {\n name: 'Service Bookings',\n icon: Clipboard,\n count: rendered_bookings.length,\n color: '#B1B71C',\n },\n {\n name: 'Processing Bookings',\n icon: Clipboard,\n count: pending_bookings.length,\n color: '#B1B71C',\n },\n {\n name: 'No-Show Bookings',\n icon: Clipboard,\n count: noshow_bookings.length,\n color: '#ED0000',\n },\n ];\n\n const cards: TopCardLink[] = links;\n\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(UsersThunk.getAllUsers());\n dispatch(UsersThunk.userActivities(role));\n dispatch(BookingsThunk.list());\n }, [dispatch, role]);\n\n return (\n \n
\n {cards?.map(({ name, icon: Icon, count, color }, i) => (\n
\n
\n
\n \n {name}\n
\n
\n {count}\n
\n
\n
\n ))}\n
\n
\n
\n
\n

Latest Bookings

\n
\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n Header: 'Client',\n Cell: (cell: Cell) => {\n const user = cell.row.original.applicationUser;\n return user ? (\n {user.business_Name || `${user.firstName} ${user.lastName}`}\n ) : null;\n },\n },\n {\n Header: 'Status',\n Cell: ({ row: { original: booking } }: Cell) => {\n return {booking.bookingStatus};\n },\n },\n {\n Header: 'Action',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n View\n \n );\n },\n },\n ]}\n data={latest_bookings}\n />\n
\n\n

\n \n See all \n \n

\n
\n
\n
\n
\n

Latest Activities

\n
\n
\n

\n \n View all \n \n

\n
\n
\n
\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n accessor: 'description',\n },\n ]}\n data={latest_activities}\n />\n

\n \n See all \n \n

\n
\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AdminDashboardPage, AirportProtocolDashboardPage } from '.';\nimport { AuthLayout, DataTable, FlagTime, SignOutSwitchComponent } from '../../../components';\nimport { ApplicationState } from '../../../store';\nimport { ServiceThunk } from '../../../store/services/services.thunk';\nimport { UsersThunk } from '../../../store/users/users.thunk';\nimport { Roles } from '../../../util/constants';\nimport { DashboardPageStyleWrapper } from '../components/dashboard-page.style';\n\nexport const ClientDashboardPage: React.FC<{}> = (props) => {\n const dispatch = useDispatch();\n const { auth } = useSelector((state: ApplicationState) => state);\n const role = (auth.authUser && auth.authUser.role) || '';\n const access_level = [`${Roles.Admin}`, `${Roles.AirportManager}`, `${Roles.AirportProtocolCoordinator}`];\n\n React.useEffect(() => {\n dispatch(UsersThunk.userActivities(role));\n }, [role, dispatch]);\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getAllServices());\n dispatch(UsersThunk.getClientBookingStats());\n }, [dispatch]);\n\n return (\n \n \n {access_level.includes(role) && (\n \n
\n
\n \n
\n
\n \n
\n
\n {role === Roles.AirportProtocolCoordinator ? (\n \n ) : (\n \n )}\n
\n )}\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport { find, last } from 'lodash';\nimport React, { useState } from 'react';\nimport { Check, Info, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { Col, Row } from 'reactstrap';\nimport styled from 'styled-components';\nimport Select from 'react-select';\n\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../../components';\nimport { FormTextInput, PresentationalFormRadio } from '../../../../components/form';\nimport { AuthContext } from '../../../../context';\nimport { AssigneProtocolModel, UpdateBookingModel } from '../../../../models/request';\nimport { AuthenticatedUser, Booking, Transaction } from '../../../../models/response';\nimport { Passenger } from '../../../../models/response/bookings/passenger';\nimport { AirportsThunk, ApplicationState, UsersThunk } from '../../../../store';\nimport { BookingsThunk } from '../../../../store/bookings/bookings.thunk';\nimport {\n BookingStatusAdminAvailableState,\n BookingStatuses,\n BookingStatusesMap,\n Roles,\n} from '../../../../util/constants';\nimport { canCancelBooking, formatCurrency } from '../../../../util/misc';\nimport { formatDate, formatTime } from '../../../../util/misc/formatters';\nimport { validateFormValues } from '../../../../util/validation';\nimport { useParams } from 'react-router';\n\nconst StyleWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-bottom: 1rem;\n\n .detail-row {\n display: grid;\n grid-template-columns: 200px 1fr;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 2px solid #eaeaea;\n }\n`;\n\nexport const HeaderStyleWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n .left__header {\n flex: 1;\n display: flex;\n flex-direction: row;\n }\n\n .right {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n }\n`;\n\ninterface DetailRow {\n property: string;\n value: string | number | [];\n}\n\ninterface Props {\n booking: Booking;\n transaction?: Transaction;\n}\n\ninterface Options {\n value: string;\n label: string;\n}\n\nexport const ViewBookingInformationComponent: React.FC = ({ booking, transaction }) => {\n const { isInAirport, user } = React.useContext(AuthContext.Context);\n const airports = useSelector((state: ApplicationState) => state.airports);\n const { allProtocols } = useSelector((state: ApplicationState) => state.users);\n const dispatch = useDispatch();\n\n const id = booking.id ?? useParams<{ booking_id: string }>().booking_id;\n\n const [values, setValues] = useState([]);\n\n const options: Options[] = [];\n\n allProtocols.forEach((protocol) =>\n options.push({ value: protocol.id, label: protocol.firstName + ' ' + protocol.lastName })\n );\n\n const bookingProtocols: string[] = [];\n\n booking.bookingProtocols.forEach((user: any) =>\n bookingProtocols.push(user.applicationUser.firstName + ' ' + user.applicationUser.lastName)\n );\n\n // const travelDateIsPassedOrEqualToCurrentDate = (targetDate: Date) => {\n // return new Date().getTime() <= new Date(targetDate).getTime();\n // };\n\n const canCancel = React.useMemo(() => {\n return canCancelBooking(booking, user as AuthenticatedUser);\n // eslint-disable-next-line\n }, [booking, booking.bookingStatus, user]);\n\n const canPay = React.useMemo(\n () =>\n !transaction?.paymentVerified &&\n user?.role === Roles.Client &&\n booking.bookingStatus !== BookingStatuses.Canceled,\n [transaction, booking, user]\n );\n\n const handleSetStatus = React.useCallback(\n async (status: BookingStatuses) => {\n if (booking) {\n if (booking.bookingStatus !== status) {\n booking.bookingStatus = status;\n await dispatch(BookingsThunk.update(new UpdateBookingModel(booking)));\n if (id) await dispatch(BookingsThunk.retrieve(+id));\n }\n }\n },\n [dispatch, booking]\n );\n\n const handleAssignProtocol = async () => {\n const updateBooking: any = {\n id: booking.id,\n bookingStatus: booking.bookingStatus,\n protocols: [],\n };\n\n Object.keys(values).forEach((key: any) => {\n updateBooking.protocols.push(values[key]['value']);\n });\n\n await dispatch(BookingsThunk.update(new UpdateBookingModel(updateBooking)));\n if (id) await dispatch(BookingsThunk.retrieve(+id));\n };\n\n const fetchAllProtocols = React.useCallback(() => {\n dispatch(UsersThunk.getAllProtocols());\n }, [dispatch]);\n\n React.useEffect(() => {\n fetchAllProtocols();\n // dispatch(AirportsThunk.list());\n }, [dispatch, fetchAllProtocols]);\n\n const details: DetailRow[] = React.useMemo(\n () => [\n { property: 'Airport', value: find(airports.airports, { id: booking.airportId })?.name ?? 'N/A' },\n { property: 'Travel date', value: formatDate(booking.date_Of_Travel) },\n { property: 'Flight number', value: booking.flight_Number },\n {\n property: 'Flight time',\n value: formatTime(booking.date_Of_Arrival),\n },\n {\n property: 'Updated By',\n value: booking.modifiedBy_FirstName ?? '',\n },\n\n {\n property: 'Booked By',\n value: booking.bookedBy_FirstName ?? '',\n },\n\n {\n property: 'Status',\n value: BookingStatusesMap[booking.bookingStatus]\n .replace('Canceled', 'Cancelled')\n .replace('Flight_Canceled', 'Flight_Cancelled'),\n },\n {\n property: 'Protocol`(s)',\n value: [...(new Set(bookingProtocols) as any)].join(', '),\n },\n ],\n [booking, airports.airports]\n );\n\n return (\n \n \n \n {details.map(({ property, value }, i) => {\n return (\n
\n {property}\n {value}\n
\n );\n })}\n \n \n ) =>\n passenger.wheel_Chair ? (\n \n ) : (\n \n ),\n },\n {\n Header: 'Special requirements',\n accessor: 'special_Requirement',\n Cell: ({ row: { original: passenger } }: Cell) => {\n const id = `passenger${passenger.id}`;\n\n return (\n
\n {passenger.special_Requirement ? (\n \n ) : (\n \n )}\n
\n );\n },\n },\n {\n Header: 'Additional services',\n accessor: 'additionalService',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger?.additionalService?.name ?? '',\n },\n ]}\n data={booking.passengers || []}\n />\n
\n
\n Total price\n {formatCurrency(booking.price)}\n
\n
\n \n
\n {booking.bookingStatus === BookingStatuses.Processing &&\n ![Roles.Accountant, Roles.Auditor, Roles.Commercial].includes(user?.role as any) && (\n
\n
Select protocol
\n
\n {\n setValues(values);\n }}\n />\n
\n
\n )}\n
\n {canCancel && (\n \n Cancel\n \n )}\n {/* {canPay && (\n \n Pay now\n \n )} */}\n {BookingStatusAdminAvailableState[booking.bookingStatus].length > 0 &&\n isInAirport(booking.airportId, 'manage') &&\n (!!booking.bookingProtocols.length ? (\n (\n \n Change status\n \n )}\n >\n \n \n {booking.bookingStatus.replace('_', ' ')}\n \n {BookingStatusAdminAvailableState[booking.bookingStatus].map((status, i) => (\n \n \n {status.replace('_', ' ')}\n \n ))}\n \n ) : null)}\n {booking.bookingStatus === BookingStatuses.Processing &&\n ![Roles.Accountant, Roles.Auditor, Roles.Commercial].includes(user?.role as any) && (\n
\n \n ASSIGN PROTOCOL\n \n
\n )}\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useSelector } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { CreateUserModel } from '../../../../models/request';\nimport { ApplicationState } from '../../../../store';\nimport { CreateUserRolesMap } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\n\ninterface CreateUserModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n handleCreateUser: (userDetails: CreateUserModel) => void;\n}\n\nexport const CreateUserModal: React.FC = ({ isOpen, setIsOpen, handleCreateUser }) => {\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n\n return (\n \n \n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n Middle Name\n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n {Object.entries(CreateUserRolesMap).map(([role, value], i) => (\n \n ))}\n \n \n \n \n \n {airports.map(({ id, name }) => (\n \n ))}\n \n \n
\n
\n \n \n \n Create user\n \n \n Close\n \n \n
\n )}\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { EditUserModel } from '../../../../models/request/users';\nimport { User } from '../../../../models/response/users';\nimport { ApplicationState } from '../../../../store';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { CreateUserRolesMap, NotificationTypes } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\n\ninterface EditModalProps {\n editModalOpen: boolean;\n setEditModalOpen: React.Dispatch>;\n activeUser: User;\n handleUpdateUser: (userDetails: EditUserModel) => void;\n}\n\nexport const EditUserModal: React.FC = ({\n editModalOpen,\n setEditModalOpen,\n activeUser,\n handleUpdateUser,\n}) => {\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const dispatch = useDispatch();\n\n return (\n \n {\n if (isMatch(new EditUserModel(activeUser), userDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n\n return setEditModalOpen(false);\n }\n\n handleUpdateUser(userDetails);\n }}\n >\n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n Middle Name\n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n {Object.values(CreateUserRolesMap).map((role, i) => (\n \n ))}\n \n \n \n \n \n {airports.map(({ id, name }) => (\n \n ))}\n \n \n
\n
\n \n \n {/* */}\n Update user\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import { find } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { PresentationalFormSwitch } from '../../../components/form';\nimport { User } from '../../../models/response';\nimport { ApplicationState } from '../../../store';\nimport { ApiResponse } from '../../../util/api-client';\nimport { Roles } from '../../../util/constants';\n\ninterface UsersTableProps {\n users: User[];\n meta?: ApiResponse['meta'];\n setActiveUser: React.Dispatch>;\n handleSetStatus: (...args: any[]) => void;\n handleModal: React.Dispatch>;\n}\n\nexport const UsersTable: React.FC = ({ users, setActiveUser, meta, handleSetStatus, handleModal }) => {\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const { authUser } = useSelector((state: ApplicationState) => state.auth);\n console.log('role', authUser);\n return (\n ) => {\n return {moment(original.dateCreated).format('Do MMMM, YYYY')};\n },\n },\n {\n Header: 'First Name',\n accessor: 'firstName',\n },\n {\n Header: 'Last name',\n accessor: 'lastName',\n },\n {\n Header: 'Email',\n accessor: 'email',\n },\n {\n Header: 'Profile Status',\n accessor: 'profile_Status',\n },\n {\n Header: 'Airport',\n Cell: ({ row: { original: user } }: Cell) => {\n return {find(airports, { id: user.airportId })?.name};\n },\n },\n {\n Header: 'Role',\n accessor: 'role',\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: user } }: Cell) => {\n return (\n user.id !== authUser?.id && (\n \n {\n return (\n \n \n \n );\n }}\n >\n {\n setActiveUser(user);\n handleModal(true);\n }}\n >\n Edit User\n \n {authUser?.role !== Roles.AirportProtocolCoordinator && (\n \n {user.account_Status ? 'Deactivate' : 'Activate'}\n \n \n )}\n \n \n )\n );\n },\n },\n ]}\n data={users}\n meta={meta}\n />\n );\n};\n","import * as queryString from 'query-string';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, CustomPrimaryButton, TabLink, TopBar } from '../../../components';\nimport { Breadcrumb } from '../../../components/breadcrumbs/breadcrumbs';\nimport { ChangeUserStatusModel, CreateUserModel, EditUserModel } from '../../../models/request';\nimport { User } from '../../../models/response';\nimport { ApplicationState } from '../../../store';\nimport { AirportsThunk } from '../../../store/airports/airports.thunk';\nimport { UsersThunk } from '../../../store/users/users.thunk';\n// import { ClientStatuses } from '../../../util/constants';\nimport { HeaderStyleWrapper } from '../bookings/view-booking/view-booking-page.style';\nimport { CreateUserModal } from './modals';\nimport { EditUserModal } from './modals/edit-user-modal';\nimport { UsersTable } from './users-table';\n\nexport const ManageUsersPage = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Users', path: window.location.href },\n ];\n\n const [createModalOpen, setCreateModalOpen] = React.useState(false);\n const [EditModalOpen, setEditModalOpen] = React.useState(false);\n const [value, setValue] = React.useState('');\n const [activeUser, setActiveUser] = React.useState();\n const [searchTerm, setSearchTem] = React.useState('');\n const { search } = useLocation();\n\n const links: TabLink[] = [\n { index: 1, name: 'All Users', query: [] },\n { index: 2, name: 'Suspended', query: ['status', 'false'] },\n ];\n\n const [activeTab, setActiveTab] = React.useState(1);\n const dispatch = useDispatch();\n const { users, usersMeta } = useSelector((state: ApplicationState) => state.users);\n\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n const status: 'true' | 'false' | undefined = React.useMemo(\n () => (queryString.parse(search) as any).status,\n [search]\n );\n\n const handleCreateUser = React.useCallback(\n (userDetails: CreateUserModel) => {\n dispatch(UsersThunk.createUser(userDetails, setCreateModalOpen.bind(undefined, false)));\n },\n [dispatch]\n );\n\n const handleUpdateUser = React.useCallback(\n (userDetails: EditUserModel) => {\n dispatch(UsersThunk.UpdateUser(userDetails, setEditModalOpen.bind(undefined, false)));\n },\n [dispatch]\n );\n\n const handleSetStatus = React.useCallback(\n (user: User, status: boolean) => {\n if (user.account_Status !== status) {\n user.account_Status = status;\n dispatch(UsersThunk.changeUserStatus(new ChangeUserStatusModel(user)));\n }\n },\n [dispatch]\n );\n\n const fetchUsers = React.useCallback(() => {\n dispatch(UsersThunk.getAllUsers(pageNumber, searchTerm));\n }, [dispatch, pageNumber]);\n\n React.useEffect(() => {\n fetchUsers();\n dispatch(AirportsThunk.list());\n\n switch (status) {\n case 'false':\n setActiveTab(2);\n break;\n default:\n setActiveTab(1);\n }\n }, [dispatch, status, fetchUsers]);\n\n const handleChange = (e: React.ChangeEvent) => {\n setSearchTem(e.target.value);\n };\n\n const handleSearch = () => {\n dispatch(UsersThunk.getAllUsers(pageNumber, searchTerm));\n };\n const filterdUsers: User[] = users.filter((user: User) => {\n return (\n (user.firstName && user.firstName.toLowerCase().indexOf(value.toLowerCase()) !== -1) ||\n (user.email && user.email.toString().toLowerCase().indexOf(value.toLowerCase()) !== -1)\n );\n });\n\n return (\n \n \n\n \n {activeUser && (\n \n )}\n\n \n \n \n
\n

All Users

\n

{users?.length} total Users

\n
\n
\n \n \n Add User\n \n
\n
\n
\n \n \n \n \n \n {filterdUsers.length ? (\n \n ) : (\n

There are no users

\n )}\n
\n \n {filterdUsers.length ? (\n \n ) : (\n

There are no users

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import { Field, useField } from 'formik';\nimport React from 'react';\nimport { Check } from 'react-feather';\nimport styled from 'styled-components';\n\nexport const CheckBoxContainer = styled.label`\n display: flex;\n position: relative;\n align-items: center;\n flex-wrap: wrap;\n margin: 0;\n cursor: pointer;\n\n input {\n opacity: 0;\n filter: opacity(0);\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n }\n\n input:hover ~ .form-checkbox__body {\n border-color: #aaa;\n }\n\n input:focus ~ .form-checkbox__body {\n border-color: black;\n }\n input:checked ~ .form-checkbox__body {\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n color: white;\n }\n\n .form-checkbox__body {\n height: 25px;\n width: 25px;\n background: white;\n border: 1px solid #dadada;\n border-radius: 6px;\n opacity: 1;\n color: var(--primary-color);\n display: flex;\n justify-content: center;\n align-items: center;\n transition: all 0.25s ease;\n }\n\n .form-checkbox__body.valid {\n border-color: var(--primary-color);\n }\n\n .form-checkbox__body.invalid {\n border-color: #e03225;\n }\n\n .form-checkbox__label {\n margin-left: 10px;\n }\n\n .form-checkbox__validation-text {\n font-size: 13px;\n padding: 5px 0;\n color: #f44336;\n width: 100%;\n display: block;\n }\n\n &.disabled {\n cursor: no-drop;\n }\n`;\n\ninterface FormCheckBoxProps extends React.ComponentPropsWithoutRef<'input'> {\n name: string;\n disabled?: boolean;\n hideError?: boolean;\n label?: string | React.ReactNode;\n}\n\ninterface PresentationalFormCheckBoxProps {\n checked: boolean | undefined;\n label?: string | React.ReactNode;\n}\n\nexport const FormCheckBox: React.FC = ({ disabled, hideError, label, ...props }) => {\n const [field, meta] = useField(props);\n\n const validState = meta.touched ? (meta.error ? false : true) : null;\n const validationClass = validState === null ? '' : validState ? ' valid' : ' invalid';\n\n return (\n \n \n
\n {field.value && }\n
\n {label && {label}}\n {!hideError && validState === false && {meta.error}}\n
\n );\n};\n\nexport const PresentationalFormCheckBox: React.FC = ({ checked }) => {\n return (\n \n \n {checked && }\n \n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { CreateServiceModel } from '../../../../models/request';\nimport { ServiceThunk } from '../../../../store/services/services.thunk';\nimport { ClientTypesMap } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\nimport { FormCheckBox } from '../../../../components/form/form-check-box';\n\ninterface CreateServiceModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n}\n\nexport const CreateServiceModal: React.FC = ({ isOpen, setIsOpen }) => {\n const dispatch = useDispatch();\n\n const handleCreateService = React.useCallback(\n (serviceDetails: CreateServiceModel) => {\n dispatch(ServiceThunk.createService(serviceDetails, setIsOpen.bind(undefined, false)));\n },\n [dispatch, setIsOpen]\n );\n\n return (\n \n \n {({ handleSubmit, values }) => (\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n {Object.entries(ClientTypesMap).map(([value, name]) => (\n \n ))}\n \n \n \n \n
\n \n
\n \n\n {values.portharcourtService && (\n
\n \n \n \n
\n )}\n
\n
\n \n \n \n Create service\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { UpdateServiceModel } from '../../../../models/request';\nimport { Service } from '../../../../models/response';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { ServiceThunk } from '../../../../store/services/services.thunk';\nimport { ClientTypesMap, NotificationTypes } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\nimport { FormCheckBox } from '../../../../components/form/form-check-box';\n\ninterface UpdateServiceModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n service: Service;\n}\n\nexport const UpdateServiceModal: React.FC = ({ isOpen, setIsOpen, service }) => {\n const dispatch = useDispatch();\n\n const handleUpdateService = React.useCallback(\n (serviceDetails: UpdateServiceModel) => {\n dispatch(ServiceThunk.updateService(serviceDetails, setIsOpen.bind(undefined, false)));\n },\n [dispatch, setIsOpen]\n );\n\n return (\n \n {\n if (isMatch(new UpdateServiceModel(service), serviceDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n return setIsOpen(false);\n }\n\n handleUpdateService(serviceDetails);\n }}\n >\n {({ handleSubmit, values }) => (\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n {Object.entries(ClientTypesMap).map(([value, name]) => (\n \n ))}\n \n \n\n \n \n
\n \n
\n \n {values.portharcourtService && (\n
\n \n \n \n
\n )}\n
\n
\n \n \n \n Update service\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import React from 'react';\nimport { MoreVertical, Users } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { PresentationalFormSwitch } from '../../../components/form';\nimport { AuthContext } from '../../../context';\nimport { UpdateServiceModel } from '../../../models/request';\nimport { Service } from '../../../models/response';\nimport { ServiceThunk } from '../../../store/services/services.thunk';\nimport { ClientTypes, ClientTypesMap, Roles } from '../../../util/constants';\nimport { formatDate } from '../../../util/misc/formatters';\n\ninterface ServicesTableProps {\n services: Service[];\n setUpdateModalOpen: React.Dispatch>;\n setActiveService: React.Dispatch>;\n}\n\nexport const ServicesTable: React.FC = ({ services, setActiveService, setUpdateModalOpen }) => {\n const { canAccess } = React.useContext(AuthContext.Context);\n const dispatch = useDispatch();\n\n const handleSetStatus = React.useCallback(\n (service: Service, status: boolean) => {\n if (service.status !== status) {\n service.status = status;\n dispatch(ServiceThunk.updateService(new UpdateServiceModel(service)));\n }\n },\n [dispatch]\n );\n\n return (\n ) => {\n return {formatDate(original.dateCreated)};\n },\n },\n {\n Header: 'Name',\n accessor: 'name',\n },\n\n {\n Header: 'Service Type',\n accessor: 'serviceTypeId',\n Cell: ({ row: { original } }: any) => ClientTypesMap[original.serviceTypeId as ClientTypes],\n },\n {\n Header: 'Price',\n accessor: 'price',\n Cell: ({ row: { original } }: Cell) => {\n return NGN {original.price.toLocaleString()};\n },\n },\n {\n Header: 'Bookings',\n Cell: (cell: Cell) => {\n const bookingCount = cell.row.original.bookingCount;\n return (\n \n \n \n {bookingCount} Booking(s)\n \n \n );\n },\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: service } }: Cell) => {\n return (\n \n \n View Bookings\n \n {canAccess(Roles.Client, true) && (\n \n Book service\n \n )}\n {\n return (\n \n \n \n );\n }}\n >\n \n View Service\n \n {canAccess(Roles.Admin) && (\n \n {\n setActiveService(service);\n setUpdateModalOpen(true);\n }}\n >\n Edit Service\n \n \n {service.status ? 'Deactivate' : 'Activate'}\n \n \n \n )}\n \n \n );\n },\n },\n ]}\n data={services}\n />\n );\n};\n","import { filter } from 'lodash';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Row, TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport { AppLayout, AuthLayout, CustomPrimaryButton, ServiceCardComponent, TabLink, TopBar } from '../../../components';\nimport { Breadcrumb } from '../../../components/breadcrumbs/breadcrumbs';\nimport { AuthContext } from '../../../context';\nimport { Service } from '../../../models/response';\nimport { ApplicationState } from '../../../store';\nimport { ServiceThunk } from '../../../store/services/services.thunk';\nimport { Roles } from '../../../util/constants';\nimport { CreateServiceModal } from './modals/create-service-modal';\nimport { UpdateServiceModal } from './modals/update-service-modal';\nimport { ServicesTable } from './services-table';\n\nexport const HeaderStyleWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n .left__header {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n .right {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n }\n`;\n\nexport const ServicePage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Services', path: window.location.href },\n ];\n\n const [createModalOpen, setCreateModalOpen] = React.useState(false);\n const [updateModalOpen, setUpdateModalOpen] = React.useState(false);\n const [activeService, setActiveService] = React.useState();\n\n const links: TabLink[] = [{ index: 1, name: 'All Services' }];\n const [activeTab, setActiveTab] = React.useState(1);\n\n const dispatch = useDispatch();\n const { services, auth } = useSelector((state: ApplicationState) => state);\n const { canAccess, isClientOfType } = React.useContext(AuthContext.Context);\n const authUser = auth.authUser;\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getAllServices());\n }, [dispatch]);\n\n const filtered_services = React.useMemo(\n () =>\n filter(\n services.services.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated)),\n (_) => canAccess(Roles.Admin) || isClientOfType(_.serviceTypeId)\n ),\n // eslint-disable-next-line\n [services, services.services]\n );\n\n return (\n \n \n \n {activeService && (\n \n )}\n \n \n \n
\n

All Services

\n
\n {canAccess(Roles.Admin) && (\n
\n \n \n Create Service\n \n
\n )}\n
\n
\n\n {canAccess(Roles.Admin) && (\n \n \n \n \n \n {filtered_services?.length ? (\n \n ) : (\n

There are no services

\n )}\n
\n
\n
\n
\n )}\n {authUser?.role === Roles.Client && (\n \n {filtered_services?.length > 0 ? (\n filtered_services.map((service) => (\n \n \n \n ))\n ) : (\n

There are no services

\n )}\n
\n )}\n
\n
\n );\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../../components';\nimport { PresentationalFormRadio } from '../../../../components/form';\nimport { AuthContext } from '../../../../context';\nimport { UpdateBookingModel } from '../../../../models/request';\nimport { AuthenticatedUser, Booking } from '../../../../models/response';\nimport { BookingsThunk } from '../../../../store/bookings/bookings.thunk';\nimport { ApiResponse } from '../../../../util/api-client';\nimport {\n BookingStatusAdminAvailableState,\n BookingStatuses,\n BookingStatusesMap,\n Roles,\n} from '../../../../util/constants';\nimport { canCancelBooking, formatCurrency } from '../../../../util/misc';\nimport { formatDate } from '../../../../util/misc/formatters';\n\ninterface BookingsTableProps {\n bookings: Booking[];\n compact?: boolean;\n refreshFunction?: (...args: any[]) => any;\n meta?: ApiResponse['meta'];\n}\n\nexport const BookingsTable: React.FC = ({ bookings, meta, compact, refreshFunction }) => {\n const dispatch = useDispatch();\n const { user, isInAirport } = React.useContext(AuthContext.Context);\n\n const handleUpdateBooking = React.useCallback(\n (bookingDetails: UpdateBookingModel) => {\n dispatch(BookingsThunk.update(bookingDetails, refreshFunction));\n },\n [dispatch, refreshFunction]\n );\n\n const handleSetStatus = React.useCallback(\n (booking: Booking, status: BookingStatuses) => {\n if (booking.bookingStatus !== status) {\n booking.bookingStatus = status;\n handleUpdateBooking(new UpdateBookingModel(booking));\n }\n },\n [handleUpdateBooking]\n );\n\n const extraColumns = compact\n ? [\n {\n Header: 'Date',\n accessor: 'dateCreated',\n Cell: ({ row: { original } }: Cell) => {\n return {capitalize(moment(original.date_Of_Travel).fromNow())};\n },\n },\n ]\n : [\n {\n Header: 'Travel Date',\n accessor: 'date_Of_Travel',\n Cell: ({ row: { original } }: Cell) => {\n return {formatDate(original.date_Of_Travel)};\n },\n },\n {\n Header: 'Client',\n Cell: (cell: Cell) => {\n const _user = cell.row.original.applicationUser;\n\n return user ? {_user.business_Name || `${_user.firstName} ${_user.lastName}`} : null;\n },\n },\n {\n Header: 'Service',\n accessor: 'service.name' as any,\n },\n ];\n\n return (\n ) => {formatCurrency(cell.row.original.price)},\n },\n {\n Header: 'Passengers/ODCs',\n accessor: 'passengers' as any,\n Cell: (cell: Cell) => (\n \n {cell.row.original.passengers.length > 0\n ? cell.row.original.passengers.length\n : cell.row.original.service.defaultOdc + cell.row.original.additionalOdc}\n \n ), //additionalOdc + Service.defaultOdc\n },\n {\n Header: 'Status',\n accessor: 'bookingStatus',\n Cell: (cell: Cell) => (\n \n {BookingStatusesMap[cell.row.original.bookingStatus]\n .replace('_', ' ')\n .replace('Canceled', 'Cancelled')}\n \n ),\n },\n // {\n // Header: 'Updated By',\n // accessor: 'modifiedBy_FirstName',\n // Cell: (cell: Cell) => {cell.row.original.modifiedBy_FirstName},\n // },\n {\n Header: 'Actions',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n {BookingStatusAdminAvailableState[booking.bookingStatus]?.length > 0 &&\n isInAirport(booking.airportId, 'manage') &&\n (!!booking.bookingProtocols.length ? (\n (\n \n Change status\n \n )}\n >\n \n \n \n {BookingStatusesMap[booking.bookingStatus]\n .replace('_', ' ')\n .replace('Canceled', 'Cancelled')}\n \n \n {BookingStatusAdminAvailableState[booking.bookingStatus].map(\n (status, i) => (\n \n \n \n {BookingStatusesMap[status]\n .replace('_', ' ')\n .replace('Canceled', 'Cancelled')}\n \n \n )\n )}\n \n ) : null)}\n {\n return (\n \n \n \n );\n }}\n >\n \n View Booking\n \n {booking.bookingStatus === BookingStatuses.Processing && (\n \n {isInAirport(booking.airportId, 'manage') && (\n \n Reject\n \n )}\n {canCancelBooking(booking, user as AuthenticatedUser) && (\n \n Cancel\n \n )}\n {user?.role === Roles.Admin && (\n \n Cancel\n \n )}\n \n )}\n \n \n );\n },\n },\n ]}\n data={orderBy(bookings, (_) => new Date(_.dateCreated), 'desc')}\n meta={meta}\n />\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Service } from '../../../../models/response';\nimport { ClientTypesMap } from '../../../../util/constants';\nimport { formatCurrency } from '../../../../util/misc';\n\nconst StyleWrapper = styled.div`\n max-width: 500px;\n display: flex;\n flex-direction: column;\n margin-bottom: 5rem;\n\n .detail-row {\n display: grid;\n grid-template-columns: 200px 1fr;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 1px solid #eaeaea;\n }\n`;\n\ninterface DetailRow {\n property: string;\n value: string | number;\n bold?: boolean;\n}\n\ninterface ServiceInformationComponentProps {\n service: Service;\n}\n\nexport const ServiceInformationComponent: React.FC = ({ service }) => {\n const details: DetailRow[] = [\n { property: 'Service Name', value: service.name, bold: true },\n { property: 'Description', value: service.description },\n { property: 'Service Fee', value: formatCurrency(service.price), bold: true },\n {\n property: 'Service Type',\n value: ClientTypesMap[service.serviceTypeId],\n bold: true,\n },\n ];\n return (\n \n {details.map(({ property, value, bold }, i) => {\n const Tag = bold ? 'b' : 'span';\n return (\n
\n {property}\n {value}\n
\n );\n })}\n
\n );\n};\n","import queryString from 'query-string';\nimport React from 'react';\nimport { Edit3 } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport { AppLayout, AuthLayout, CustomPrimaryButton, TabLink, TopBar } from '../../../../components';\nimport { Breadcrumb } from '../../../../components/breadcrumbs/breadcrumbs';\nimport { AuthContext } from '../../../../context';\nimport { ApplicationState } from '../../../../store';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { ServiceThunk } from '../../../../store/services/services.thunk';\nimport { NotificationTypes, Roles } from '../../../../util/constants';\nimport { history } from '../../../../util/history';\nimport { BookingsTable } from '../../bookings/list-bookings/bookings-table';\nimport { UpdateServiceModal } from '../modals/update-service-modal';\nimport { ServiceInformationComponent } from './view-service.style';\n\nconst HeaderStyleWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n .left__header {\n flex: 1;\n display: flex;\n flex-direction: row;\n }\n\n .right {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n }\n`;\n\nexport const ViewServicePage: React.FC = (props) => {\n const { service_id: id } = useParams();\n const {\n serviceDetails: service,\n serviceBookings: bookings,\n serviceBookingsMeta: meta,\n } = useSelector((state: ApplicationState) => state.services);\n const { canAccess, isClientOfType } = React.useContext(AuthContext.Context);\n\n const dispatch = useDispatch();\n const location = useLocation();\n const pageNumber = React.useMemo(() => +(queryString.parse(location.search) as any).page || 1, [location.search]);\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getService(id));\n }, [dispatch, id]);\n\n React.useEffect(() => {\n if (service && !isClientOfType(service.serviceTypeId)) {\n dispatch(\n NotificationsThunk.create(\n NotificationTypes.Warning,\n 'You are not authorized to access this service type'\n )\n );\n\n history.replace('/app/services');\n }\n }, [dispatch, service, isClientOfType]);\n\n React.useEffect(() => {\n if (service && service.id === +id) {\n dispatch(ServiceThunk.listBookings(service.id, pageNumber));\n }\n }, [service, id, pageNumber, dispatch]);\n\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Services', path: '/app/services' },\n {\n name: service?.name ?? '',\n path: window.location.href,\n },\n ];\n\n const [updateModalOpen, setUpdateModalOpen] = React.useState(false);\n\n const links: TabLink[] = [\n { index: 1, name: 'Information' },\n { index: 2, name: 'Bookings' },\n ];\n\n const [activeTab, setActiveTab] = React.useState(location.state && location.state.intent === 'bookings' ? 2 : 1);\n\n return (\n \n \n {service && (\n \n \n \n \n \n
\n \n

{service.name}

\n
\n {canAccess(Roles.Admin) && (\n
\n \n \n Edit Service\n \n
\n )}\n
\n
\n \n \n \n \n \n \n \n \n {bookings?.length ? (\n dispatch(ServiceThunk.getService(id))}\n compact\n />\n ) : (\n This service has not been booked\n )}\n \n \n \n \n
\n
\n )}\n
\n );\n};\n","import style from 'styled-components';\n\nexport const NoMatchPageStyleWrapper = style.div`\n`;\n","import React from 'react';\nimport { NoMatchPageStyleWrapper } from './404-page.style';\n\nexport const NoMatchPage: React.FC<{}> = (props) => {\n return (\n \n

Page not found

\n
\n );\n};\n","import moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { PresentationalFormSwitch } from '../../../components/form';\nimport { User } from '../../../models/response';\nimport { ApiResponse } from '../../../util/api-client';\nimport { ClientStatuses } from '../../../util/constants';\nimport { useSelector } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport { Roles } from '../../../util/constants';\n\ninterface UsersTableProps {\n clients: User[];\n meta?: ApiResponse['meta'];\n setUpdateModalOpen: React.Dispatch>;\n setActiveClient: React.Dispatch>;\n handleSetStatus: (...args: any[]) => void;\n}\n\nexport const ClientsTable: React.FC = ({ clients, meta, handleSetStatus }) => {\n const { authUser } = useSelector((state: ApplicationState) => state.auth);\n\n return (\n ) => {\n return {moment(original.dateCreated).format('Do MMMM, YYYY')};\n },\n },\n {\n accessor: 'business_Name',\n Cell: ({ row: { original: user } }: Cell) => {\n return user.firstName ?? user.business_Name;\n },\n },\n {\n accessor: 'email',\n },\n {\n accessor: 'business_Nature',\n },\n {\n accessor: 'profile_Status',\n Cell: ({ row: { original: user } }: Cell) => {\n return {user.profile_Status};\n },\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: user } }: Cell) => {\n return (\n \n \n \n \n {[ClientStatuses.New, ClientStatuses.Processing].includes(\n user.profile_Status\n )\n ? 'View Request'\n : 'View Client'}\n \n \n \n {[Roles.Admin, Roles.AirportManager].includes(authUser?.role as any) && (\n // {authUser?.role !== Roles.AirportProtocolCoordinator && (\n {\n return (\n \n \n \n );\n }}\n >\n {/* {authUser && valid_access.includes(authUser.role) && (\n {\n setActiveClient(user);\n setUpdateModalOpen(true);\n }}\n >\n Edit Client\n \n )} */}\n\n \n {user.account_Status ? 'Deactivate' : 'Activate'}\n \n \n \n )}\n \n );\n },\n },\n ]}\n data={clients}\n meta={meta}\n />\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { Check } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { UpdateClientModel } from '../../../../models/request';\nimport { User } from '../../../../models/response';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { BusinessNatures, ClientTypesMap, NotificationTypes } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\n\ninterface UpdateClientModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n client: User;\n handleUpdateClient: (userDetails: UpdateClientModel) => void;\n}\n\nexport const UpdateClientModal: React.FC = ({\n isOpen,\n setIsOpen,\n client,\n handleUpdateClient,\n}) => {\n const dispatch = useDispatch();\n\n return (\n \n {\n if (isMatch(new UpdateClientModel(client), clientDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n return setIsOpen(false);\n }\n\n handleUpdateClient(clientDetails);\n }}\n >\n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n \n \n {BusinessNatures.map((value, i) => (\n \n ))}\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n \n \n {client.organization_CategoryId === 2 && (\n \n \n \n {Object.entries(ClientTypesMap).map(([value, name]) => (\n \n ))}\n \n \n )}\n
\n
\n \n \n \n Edit Client\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import queryString from 'query-string';\nimport React from 'react';\nimport { saveAs } from 'file-saver';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { Col, TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, TabLink, TopBar } from '../../../components';\nimport { Breadcrumb } from '../../../components/breadcrumbs/breadcrumbs';\nimport { ChangeUserStatusModel, UpdateClientModel } from '../../../models/request';\nimport { User } from '../../../models/response';\nimport { ApplicationState, NotificationsThunk } from '../../../store';\nimport { UsersThunk } from '../../../store/users/users.thunk';\nimport { ClientStatuses, NotificationTypes } from '../../../util/constants';\nimport { ClientsTable } from './clients-table';\nimport { UpdateClientModal } from './modals/update-client-modal';\nimport { ApiClient } from '../../../util/api-client';\n\nexport const AllClientPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Clients', path: window.location.href },\n ];\n\n const [activeClient, setActiveClient] = React.useState();\n const [updateModalOpen, setUpdateModalOpen] = React.useState(false);\n const [searchTerm, setSearchTem] = React.useState('');\n const { search } = useLocation();\n\n const links: TabLink[] = [\n { index: 1, name: 'All Clients', query: [] },\n { index: 2, name: 'Processing', query: ['filter', 'Processing'] },\n { index: 3, name: 'Active', query: ['filter', 'Active'] },\n { index: 4, name: 'New', query: ['filter', 'New'] },\n { index: 5, name: 'Deactivated', query: ['filter', 'Deactivated'] },\n ];\n\n const [activeTab, setActiveTab] = React.useState(1);\n const dispatch = useDispatch();\n const { clients, clientsMeta, clientStats } = useSelector((state: ApplicationState) => state.users);\n\n const handleUpdateClient = React.useCallback(\n (userDetails: UpdateClientModel) => {\n const type = activeClient!.organization_CategoryId;\n dispatch(UsersThunk.updateClient(userDetails, type, setUpdateModalOpen.bind(undefined, false)));\n },\n [dispatch, activeClient]\n );\n\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n const filter: ClientStatuses | undefined = React.useMemo(() => (queryString.parse(search) as any).filter, [search]);\n\n const fetchClients = React.useCallback(() => {\n dispatch(UsersThunk.getClients(filter, pageNumber, searchTerm));\n }, [dispatch, pageNumber, filter]);\n\n const handleSetStatus = React.useCallback(\n (client: User, status: boolean) => {\n if (client.account_Status !== status) {\n client.account_Status = status;\n dispatch(\n UsersThunk.changeUserStatus(new ChangeUserStatusModel(client), () => {\n fetchClients();\n })\n );\n }\n },\n [dispatch, fetchClients]\n );\n\n React.useEffect(() => {\n fetchClients();\n dispatch(UsersThunk.getClientStats());\n\n switch (filter) {\n case ClientStatuses.Processing:\n setActiveTab(2);\n break;\n case ClientStatuses.Active:\n setActiveTab(3);\n break;\n case ClientStatuses.New:\n setActiveTab(4);\n break;\n case ClientStatuses.Deactivated:\n setActiveTab(5);\n break;\n default:\n setActiveTab(1);\n }\n }, [dispatch, filter, fetchClients]);\n\n const handleChange = (e: React.ChangeEvent) => {\n setSearchTem(e.target.value);\n };\n\n const handleSearch = () => {\n dispatch(UsersThunk.getClients(filter, pageNumber, searchTerm));\n };\n\n return (\n \n \n {activeClient && (\n \n )}\n \n \n \n

All FAAN APS Clients

\n

{clientStats?.total ?? 0} total Clients

\n \n \n
\n \n \n \n \n \n {clients.length ? (\n \n ) : (\n

There are no clients

\n )}\n
\n \n {clients.length ? (\n \n ) : (\n

There are no processing clients

\n )}\n
\n \n {clients.length ? (\n \n ) : (\n

There are no active clients

\n )}\n
\n \n {clients.length ? (\n \n ) : (\n

There are no new clients

\n )}\n
\n \n {clients.length ? (\n \n ) : (\n

There are no deactivated clients

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomPrimaryButton, DataTable } from '../../../../components';\nimport { Booking } from '../../../../models/response';\n\ninterface ClientTableProps {\n bookings: Booking[];\n meta?: any;\n}\n\nexport const ClientPageTable: React.FC = ({ bookings, meta }) => {\n return (\n ) => {\n // return {capitalize(moment(original.dateCreated).fromNow())};\n return {moment(original.dateCreated).format('Do MMMM, YYYY')};\n },\n },\n {\n Header: 'Service',\n Cell: ({ row: { original: booking } }: Cell) => {\n return {booking.service.name};\n },\n },\n {\n Header: 'Status',\n Cell: ({ row: { original: booking } }: Cell) => {\n return {booking.bookingStatus};\n },\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n \n View Booking\n \n \n );\n },\n },\n ]}\n data={orderBy(bookings, (_) => new Date(_.dateCreated), 'desc')}\n />\n );\n};\n","import style from 'styled-components';\n\nexport const ViewClientPageStyleWrapper = style.div`\n\n.infoBox {\n border: 1px solid #DADADA;\n padding: 20px 5px 20px 5px;\n margin-top: 1rem;\n border-radius: 7px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n h4 {\n margin: 0;\n font-size: 18px;\n font-weight: bold;\n }\n\n p {\n font-size: 12px;\n }\n\n .circleBox {\n height: 60px;\n width: 60px;\n border-radius: 100%;\n background-color: #EAFAF1;\n color: #18A956;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-bottom: 10px;\n font-size: 20px;\n font-weight: bold;\n }\n}\n`;\n","import { PDFDownloadLink } from '@react-pdf/renderer';\nimport queryString from 'query-string';\nimport saveAs from 'file-saver';\nimport { find } from 'lodash';\nimport React, { useCallback, useContext } from 'react';\nimport { Download, File, Phone, Send } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useParams } from 'react-router-dom';\nimport { Button, Col, Row, TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport { useLocation } from 'react-router';\nimport { FundsTransactionsTable, Invoice, PaymentTransactionsTable } from '../../..';\nimport {\n AppLayout,\n AuthLayout,\n CustomPrimaryButton,\n CustomTable,\n TabLink,\n TopBar,\n DataTable,\n} from '../../../../components';\nimport { Breadcrumb } from '../../../../components/breadcrumbs/breadcrumbs';\nimport { FundWalletModal, RenewalModal, PaymentModal } from '../../../../components/wallet';\nimport { AuthContext } from '../../../../context';\nimport { AuthenticatedUser } from '../../../../models/response';\nimport { Transaction, User, UserFiles } from '../../../../models/response';\nimport { AirportsThunk, ApplicationState, NotificationsThunk, TransactionsThunk } from '../../../../store';\nimport { UsersThunk } from '../../../../store/users/users.thunk';\nimport { ApiClient } from '../../../../util/api-client';\nimport { NotificationTypes, Roles, TransactionTypes } from '../../../../util/constants';\nimport { formatDate } from '../../../../util/misc/formatters';\nimport { ClientPageTable } from './view-client-page-table';\nimport { ViewClientPageStyleWrapper } from './view-client-page.style';\nimport { TransactionsService } from '../../../../services';\nimport { formatCurrency } from '../../../../util/misc';\nimport moment from 'moment';\n\nconst InsufficientFundsWrapper = styled.div`\n width: 100%;\n font-size: 0.85rem;\n padding: 0.75em;\n color: #f4f4f4;\n background-color: rgb(247, 123, 114);\n font-weight: 500;\n display: flex;\n align-items: center;\n border-radius: 8px;\n justify-content: space-between;\n\n button {\n background-color: #f4f4f4;\n color: rgb(247, 123, 114);\n border: none;\n padding: 0.5em 1em;\n border-radius: 8px;\n font-weight: 700;\n transition: color 0.5s ease-in;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n color: rgba(247, 123, 114, 0.863);\n background-color: #f4f4f4cc;\n }\n }\n`;\nexport const ViewClientPage: React.FC<{}> = () => {\n const [activeTab, setActiveTab] = React.useState(1);\n\n const [isFunding, setFundingModal] = React.useState(false);\n const [isRenewal, setRenewalModal] = React.useState(false);\n const [amount, setAmount] = React.useState(0);\n const [selectedRenewalDate, setSelectedRenewalDate] = React.useState(null);\n const [renewalPaymentId, setRenewalPaymentId] = React.useState(null);\n const [isFundingWallet, setFundingWallet] = React.useState(false);\n const [balance, setBalance] = React.useState(0);\n // const user = useContext(AuthContext.Context).user as AuthenticatedUser;\n const { search } = useLocation();\n\n const { client_id } = useParams();\n const { airports } = useSelector(({ airports }: ApplicationState) => airports);\n\n const {\n openTransaction,\n transactionType: transaction,\n transactionTypeMeta,\n } = useSelector((state: ApplicationState) => state.transactions);\n const { user: loggedInUser } = useContext(AuthContext.Context)!;\n const {\n userDetails: client,\n usersBookings: bookings,\n userBookingMeta: meta,\n } = useSelector((state: ApplicationState) => state.users);\n const dispatch = useDispatch();\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n\n const handleRenewalComplete = (value: string) => {\n console.log('Renewal completed with value:', value);\n\n setSelectedRenewalDate(value);\n };\n\n React.useEffect(() => {\n dispatch(UsersThunk.getUser(client_id));\n dispatch(AirportsThunk.list());\n\n if (activeTab === 1) {\n dispatch(UsersThunk.getUserBoking(client_id, pageNumber));\n } else if (activeTab === 2) {\n dispatch(\n TransactionsThunk.retrieveTransactionTypebyId(client_id, TransactionTypes.Fund, () => {}, pageNumber)\n );\n } else if (activeTab === 4) {\n dispatch(TransactionsThunk.fetchPayRenewalId(client_id, pageNumber));\n TransactionsService.getWalletBalance(client_id)\n .then(({ data }) => {\n const newBalance = data?.balance.balance ?? 0;\n console.log('Remaining balance in wallet now:', newBalance);\n setBalance(newBalance);\n })\n .catch((err) => console.log({ err }));\n }\n }, [dispatch, client_id, activeTab, pageNumber]);\n\n React.useEffect(() => {\n TransactionsService.getWalletBalance(client_id)\n .then(({ data }) => {\n setAmount(data?.balance.balance ?? 0);\n })\n .catch((err) => console.log({ err }));\n }, []);\n const price = 200000;\n const name = !client ? '' : client?.business_Name ?? `${client?.firstName} ${client?.lastName}`;\n\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Clients', path: '/app/clients' },\n {\n name,\n path: window.location.href,\n },\n ];\n\n const links: TabLink[] = React.useMemo(\n () => [\n {\n index: 1,\n name: `Activities`,\n },\n {\n index: 2,\n name: `Funds`,\n },\n {\n index: 4,\n name: `Registrations`,\n },\n ...(client?.clientFiles.length ? [{ index: 3, name: 'Files' }] : []),\n ],\n [client, name]\n );\n\n const exportFile = React.useCallback(\n async (client) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n const name = client.firstName ? `${client.firstName} ${client.lastName}` : client.business_Name;\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/users/form/${client && client.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, name + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n const exportInvoice = useCallback(\n async (transaction: User) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n const name = transaction?.business_Name ?? '';\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/users/export-registration-invoice?userid=${\n transaction && transaction.id\n }`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, name + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n const fetchFile = React.useCallback(\n async (file: UserFiles) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading [${file.name}]`));\n\n const response = await fetch(`${process.env.REACT_APP_BASE_URL}/users/clientfile/${file.id}`, config);\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, file.name + file.fileType);\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n const exportClientActivitiesFile = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/booking-services/export-client-activities/${client && client.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Client Activities';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n const exportClienFunds = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/transactions/export-client-fundings/${client && client.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Client Fundings';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n return (\n \n setAmount((prev) => prev + value)}\n setIsOpen={setFundingModal}\n client={client_id}\n />\n handleRenewalComplete(Date.parse(dateString).toString())}\n setIsOpen={setRenewalModal}\n client={client_id}\n pageNumber={pageNumber}\n />\n \n \n \n \n {activeTab === 4 && balance < price && (\n \n {isFundingWallet && (\n setBalance((prev) => prev + value)}\n isOpen={isFundingWallet}\n setIsOpen={setFundingWallet}\n client={client_id}\n />\n )}\n \n You do not have enough balance to complete this process. Please fund your wallet.\n \n \n \n )}\n \n \n

{name}

\n \n {false && (\n \n \n \n Contact Client\n \n \n )}\n
\n \n \n
\n
\n {(client?.firstName\n ? client.firstName[0] + client.lastName[0]\n : client?.business_Name.slice(0, 1)\n )?.toUpperCase()}\n
\n

{name}

\n

{client?.email}

\n
\n

\n Customer AIN: {client?.customerAIN ?? 'N/A'}\n

\n

\n Updated By: \n {client?.updatedBy ?? 'N/A'}\n

\n

\n Airport Name: \n {find(airports, { id: client?.airportId })?.name ?? 'N/A'}\n

\n

\n Status: \n {client?.profile_Status}\n

\n\n {loggedInUser?.role !== Roles.Admin && (\n

\n RRR Number: processing...\n

\n )}\n
\n \n \n \n \n \n \n \n {client && (\n exportInvoice(client)}\n >\n \n Get Receipt\n \n )}\n \n \n \n \n {\n e.preventDefault();\n exportFile(client);\n }}\n >\n \n \n Export Form\n \n \n \n \n
\n \n \n \n \n \n \n \n {loggedInUser?.role === Roles.AirportProtocolCoordinator ||\n loggedInUser?.role === Roles.Admin ? (\n \n \n Book Service\n \n \n ) : null}\n {bookings && bookings.length ? (\n \n ) : (\n

There are no bookings

\n )}\n
\n \n \n {client?.clientFiles.map((file, i) => (\n \n \n
\n
\n \n
\n
\n

{file.name + file.fileType}

\n
\n
\n {\n e.preventDefault();\n fetchFile(file);\n }}\n >\n \n Download\n \n
\n
\n \n \n ))}\n \n \n \n
\n
\n \n {loggedInUser?.role === Roles.Commercial ||\n loggedInUser?.role === Roles.Admin ? (\n setFundingModal(true)}\n >\n Fund Wallet\n \n ) : null}\n
\n Balance: NGN {amount.toLocaleString()}\n
\n\n {transaction.length ? (\n \n ) : (\n

There are no funds to display

\n )}\n
\n \n \n \n
\n {\n setRenewalModal(true);\n }}\n disabled={transaction.length > 0}\n >\n Renewal\n \n
\n
\n

\n Renewal Date: \n \n {transaction?.[0]?.endDate\n ? moment(transaction[0].endDate).format(\n 'Do MMMM, YYYY'\n )\n : ''}\n \n

\n
\n \n
\n\n {transaction.length ? (\n \n ) : (\n

There are no payments to display

\n )}\n
\n
\n
\n
\n \n
\n
\n
\n
\n );\n};\n","import style from 'styled-components';\n\nexport const RegistrationRequestStyleWrapper = style.div`\n .titleBox {\n button {\n background-color: #18A956;\n color: #fff;\n border: 0;\n }\n\n h3 {\n margin: 0;\n font-weight: bold;\n }\n\n p {\n color: #A5A5A5;\n margin-top: 0;\n }\n }\n\n .contentBox {\n background: #FFFFFF;\n border: 1px solid #DADADA;\n border-radius: 7px;\n margin-top: 1rem;\n height: 100%;\n padding: 1.5rem 2rem 1rem 2rem;\n\n h4 {\n font-size: 14px;\n text-transform: uppercase;\n color: #c5c5c5;\n margin: 0;\n }\n\n h3 {\n font-weight: bold;\n font-size: 24px;\n }\n\n p {\n margin-top: 1rem;\n }\n\n .singleBtn {\n &:hover {\n background-color: #fff;\n color: #18A956;\n }\n }\n\n .downloadBox {\n display: flex;\n flex-direction: row;\n\n .contentWrapper {\n display: flex;\n flex-direction: column;\n flex: 2;\n\n p {\n margin: 0;\n font-weight: bold;\n font-size: 13px;\n }\n\n span {\n color: #c5c5c5;\n }\n }\n\n .iconBox {\n flex: 0.3;\n padding-top: 7px;\n }\n\n .linkBox {\n flex: 0.8;\n padding-top: 12px;\n }\n }\n\n .btnBox {\n margin-top: 2rem;\n }\n }\n`;\n","import { PDFDownloadLink } from '@react-pdf/renderer';\nimport { saveAs } from 'file-saver';\nimport { find } from 'lodash';\nimport moment from 'moment';\nimport React, { useContext } from 'react';\nimport { Download, File, MapPin, Send } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { Col, Row } from 'reactstrap';\nimport { Invoice } from '../../..';\nimport {\n AppLayout,\n AuthLayout,\n CustomDropdown,\n CustomDropdownItem,\n CustomPrimaryButton,\n CustomTable,\n TopBar,\n} from '../../../../components';\nimport { Breadcrumb } from '../../../../components/breadcrumbs/breadcrumbs';\nimport { PresentationalFormRadio } from '../../../../components/form';\nimport { AuthContext } from '../../../../context';\nimport { ChangeUserStatusModel } from '../../../../models/request';\nimport { Booking, Transaction, User, UserFiles } from '../../../../models/response';\nimport { AirportsThunk, ApplicationState, TransactionsThunk } from '../../../../store';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { UsersThunk } from '../../../../store/users/users.thunk';\nimport { ApiClient } from '../../../../util/api-client';\nimport { ClientStatuses, NotificationTypes, Roles } from '../../../../util/constants';\nimport { history } from '../../../../util/history';\nimport { formatDate } from '../../../../util/misc/formatters';\nimport { HeaderStyleWrapper } from '../../bookings/view-booking/view-booking-page.style';\nimport { RegistrationRequestStyleWrapper } from './registration-request.style';\n\ninterface Props {\n clientId?: string;\n breadcrumbs?: Breadcrumb[];\n abortFetchTransaction?: boolean;\n}\n\nexport const RegistrationRequestPage: React.FC = ({\n clientId: id,\n breadcrumbs: crumbs,\n abortFetchTransaction,\n}) => {\n const clientId: string = id ?? useParams().client_id;\n const { userDetails: client } = useSelector(({ users }: ApplicationState) => users);\n const { openTransaction: transaction } = useSelector(({ transactions }: ApplicationState) => transactions);\n const { bookingDetails: booking } = useSelector(({ bookings }: ApplicationState) => bookings);\n const { airports } = useSelector(({ airports }: ApplicationState) => airports);\n const { canAccess } = useContext(AuthContext.Context);\n const dispatch = useDispatch();\n\n const breadcrumbs: Breadcrumb[] = crumbs ?? [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Clients', path: window.location.href },\n ];\n\n const handleSetStatus = React.useCallback(\n (status: boolean) => {\n if (client && client.account_Status !== status) {\n client.account_Status = status;\n dispatch(\n UsersThunk.changeUserStatus(new ChangeUserStatusModel(client), () => {\n if (status === true) history.replace(`/app/client/${client.id}`);\n })\n );\n }\n },\n [dispatch, client]\n );\n\n const fetchFile = React.useCallback(\n async (file: UserFiles) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading [${file.name}]`));\n\n const response = await fetch(`${process.env.REACT_APP_BASE_URL}/users/clientfile/${file.id}`, config);\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, file.name + file.fileType);\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n const exportFile = React.useCallback(\n async (client) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n const name = client.firstName ? `${client.firstName} ${client.lastName}` : client.business_Name;\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/users/form/${client && client.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, name + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n React.useEffect(() => {\n dispatch(UsersThunk.getUser(clientId));\n dispatch(AirportsThunk.list());\n\n if (!abortFetchTransaction) {\n dispatch(TransactionsThunk.retrieveByTrasactionId(clientId));\n }\n }, [dispatch, clientId, abortFetchTransaction]);\n\n return (\n \n \n \n {true && (\n \n \n \n \n
\n \n
\n

Client registration request

\n {transaction ? (\n \n Invoice No: {transaction?.id ?? 'N/A'}\n \n ) : null}\n \n {client?.transaction?.paymentStatus}\n \n
\n
\n
\n {\n e.preventDefault();\n exportFile(client);\n }}\n >\n \n \n Export Form\n \n \n
\n
\n
\n
\n \n \n \n \n

\n {client?.firstName\n ? `${client.firstName} ${client.lastName}`\n : client?.business_Name}\n

\n

{moment(client?.dateCreated).format('LLLL')}

\n \n
\n

\n \n {client?.registered_Address}\n

\n \n \n \n {client?.state && (\n \n State\n {client.state}\n \n )}\n \n Phone Number\n {client?.phoneNumber}\n \n \n Customer AIN\n {client?.customerAIN}\n \n \n Email Address\n {client?.email}\n \n \n Payment Status\n {client?.paymentStatus ?? 'Unpaid'}\n \n \n Updated By\n {client?.updatedBy ?? 'N/A'}\n \n \n Airport Name\n \n {find(airports, { id: client?.airportId })?.name ?? 'N/A'}\n \n \n \n \n \n {!!client?.clientFiles.length && (\n \n \n Uploaded Files\n \n \n {client?.clientFiles.map((file, i) => (\n \n \n
\n
\n \n
\n
\n

{file.name + file.fileType}

\n
\n
\n {\n e.preventDefault();\n fetchFile(file);\n }}\n >\n \n Download\n \n
\n
\n \n \n ))}\n \n \n \n
\n )}\n \n
\n {canAccess([Roles.Accountant, Roles.Auditor, Roles.Commercial], true) ? null : (\n
\n {(client && client.profile_Status === ClientStatuses.New) ||\n (client?.profile_Status === ClientStatuses.Processing && (\n \n Approve\n \n ))}\n\n \n !canAccess([Roles.AirportProtocolCoordinator], true) ? (\n \n Change Status\n \n ) : null\n }\n >\n \n \n Active\n \n \n \n Inactive\n \n \n
\n )}\n \n
\n
\n
\n
\n )}\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { EditUserProfileModel } from '../../../../models/request';\nimport { Profile } from '../../../../models/response';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { NotificationTypes } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\n\ninterface EditUserProfileModalProps {\n editModalOpen: boolean;\n setEditModalOpen: React.Dispatch>;\n handleUpdateUser: (userDetails: EditUserProfileModel) => void;\n activeUser: Profile;\n}\n\nexport const EditUserProfileModal: React.FC = ({\n editModalOpen,\n setEditModalOpen,\n handleUpdateUser,\n activeUser,\n}) => {\n const dispatch = useDispatch();\n\n return (\n \n {\n if (isMatch(new EditUserProfileModel(activeUser), userDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n\n return setEditModalOpen(false);\n }\n\n handleUpdateUser(userDetails);\n }}\n >\n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n Middle Name\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n {/* */}\n Update Profile\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { Briefcase, Book, Check } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../../components';\nimport { FormTextInput } from '../../../../components/form';\nimport { CustomModal } from '../../../../components/utilities/modal/modal';\nimport { UpdateIndividualClientModel } from '../../../../models/request';\nimport { User } from '../../../../models/response';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { MeansOfIdList, NotificationTypes } from '../../../../util/constants';\nimport { validateFormValues } from '../../../../util/validation';\n\ninterface Props {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n client: User;\n handleUpdateClient: (userDetails: UpdateIndividualClientModel) => void;\n}\n\nexport const UpdateIndividualClientModal: React.FC = ({ isOpen, setIsOpen, client, handleUpdateClient }) => {\n const dispatch = useDispatch();\n\n return (\n \n {\n if (isMatch(new UpdateIndividualClientModel(client), clientDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n return setIsOpen(false);\n }\n\n handleUpdateClient(clientDetails);\n }}\n >\n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n {MeansOfIdList.map((value, i) => (\n \n ))}\n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n \n Edit Client\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import moment from 'moment';\nimport * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// import { Link } from 'react-router-dom';\nimport { Col, Row, TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport {\n AppLayout,\n AuthLayout,\n CustomPrimaryButton,\n FlagTime,\n SignOutSwitchComponent,\n TabLink,\n} from '../../../../components';\nimport { AuthContext } from '../../../../context';\nimport { EditUserProfileModel, UpdateClientModel, UpdateIndividualClientModel } from '../../../../models/request';\nimport { AirportsThunk, ApplicationState } from '../../../../store';\n// import { AuthThunk } from '../../../../store/auth/auth.thunk';\nimport { UsersThunk } from '../../../../store/users/users.thunk';\nimport { ClientTypesMap, Roles } from '../../../../util/constants';\nimport { UpdateClientModal } from '../../manage-clients/modals/update-client-modal';\nimport { EditUserProfileModal } from '../modals/edit-profile-modal';\nimport { HeaderStyleWrapper } from '../../bookings/view-booking/view-booking-page.style';\nimport { UpdateIndividualClientModal } from '../../manage-clients/modals/update-individual-client-modal';\nimport { User } from '../../../../models/response';\n\nconst StyleWrapper = styled.div`\n .detail-row {\n display: grid;\n grid-template-columns: 200px 1fr;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 1px solid #eaeaea;\n }\n\n .detail-row-others {\n display: flex;\n flex-direction: column;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 1px solid #eaeaea;\n }\n`;\n\ninterface DetailRow {\n property: string;\n value?: string | number | undefined;\n bold?: boolean;\n link?: string;\n isLogout?: boolean;\n}\n\nexport const UserProfilePage: React.FC = () => {\n const links: TabLink[] = [\n { index: 1, name: 'My Profile' },\n // { index: 2, name: 'Other' },\n ];\n const [activeTab, setActiveTab] = React.useState(1);\n const [EditModalOpen, setEditModalOpen] = React.useState(false);\n const [ClientModalOpen, setClientModalOpen] = React.useState(false);\n const { canAccess } = React.useContext(AuthContext.Context);\n\n const { auth, users, airports } = useSelector((state: ApplicationState) => state);\n const userProfile = users.userDetails;\n const business_name = userProfile?.business_Name;\n const full_name = userProfile && `${userProfile.firstName} ${userProfile.lastName}`;\n const role = userProfile?.role;\n\n const dispatch = useDispatch();\n\n const fetchUser = React.useCallback(() => {\n dispatch(UsersThunk.getUser(auth.authUser?.id));\n }, [dispatch, auth.authUser]);\n\n const handleUpdateUserProfile = React.useCallback(\n (userDetails: EditUserProfileModel) => {\n dispatch(\n UsersThunk.UpdateUserProfile(userDetails, () => {\n setEditModalOpen(false);\n fetchUser();\n })\n );\n },\n [dispatch, fetchUser]\n );\n\n const handleUpdateClient = React.useCallback(\n (userDetails: UpdateClientModel) => {\n const type = userProfile!.organization_CategoryId;\n dispatch(\n UsersThunk.updateClient(userDetails, type, () => {\n setClientModalOpen(false);\n fetchUser();\n })\n );\n },\n [dispatch, userProfile, fetchUser]\n );\n\n const handleUpdateIndividualClient = React.useCallback(\n (userDetails: UpdateIndividualClientModel) => {\n dispatch(\n UsersThunk.updateIndividualClient(userDetails, () => {\n setClientModalOpen(false);\n fetchUser();\n })\n );\n },\n [dispatch, fetchUser]\n );\n\n React.useEffect(() => {\n fetchUser();\n dispatch(AirportsThunk.list());\n }, [dispatch, auth, fetchUser]);\n\n const details: DetailRow[] = (\n role !== Roles.Client\n ? [\n { property: 'Full Name', value: full_name },\n { property: 'Airport', value: airports.airports.find((x) => x.id === userProfile?.airportId)?.name },\n { property: 'Role', value: role },\n ]\n : (userProfile?.firstName\n ? [{ property: 'Full Name', value: full_name }]\n : [\n { property: 'Business Name', value: business_name },\n { property: 'Nature of Business', value: userProfile?.business_Nature },\n ]\n ).concat([\n { property: 'Client Type', value: ClientTypesMap[userProfile!.clientTypeId] },\n { property: 'Address', value: userProfile?.registered_Address },\n ])\n ).concat([\n { property: 'Email Address', value: userProfile?.email },\n { property: 'Phone Number', value: userProfile?.phoneNumber },\n { property: 'Date Registered', value: moment(userProfile?.dateCreated).format('Do MMMM, YYYY') },\n ]);\n\n // const others: DetailRow[] = [\n // // { property: 'Help', link: '/' },\n // // { property: 'Contact Us', link: '/' },\n // // { property: 'Privacy Policy', link: '/' },\n // // { property: 'Terms & Conditions', link: '/' },\n // { property: 'Logout', isLogout: true },\n // ];\n\n return (\n \n \n {userProfile && canAccess([Roles.Admin, Roles.AirportManager, Roles.AirportProtocolCoordinator]) && (\n \n )}\n\n {userProfile && canAccess(Roles.Client) && !userProfile.firstName ? (\n \n ) : (\n \n )}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n

My Profile

\n
\n
\n {canAccess([\n Roles.Admin,\n Roles.AirportManager,\n Roles.AirportProtocolCoordinator,\n ]) && (\n \n Edit Profile\n \n )}\n\n {role === Roles.Client && (\n \n Edit Profile\n \n )}\n
\n
\n
\n \n \n \n \n \n \n {details.map(({ property, value }, i) => {\n return (\n
\n {property}\n {value}\n
\n );\n })}\n
\n
\n {/* \n \n {others.map(({ property, isLogout, link }, i) => {\n const display_link = isLogout ? (\n \n {property}\n \n ) : (\n \n {property}\n \n );\n return (\n
\n {display_link}\n
\n );\n })}\n
\n
*/}\n
\n
\n
\n
\n \n
\n
\n
\n );\n};\n","import { capitalize } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { Cell } from 'react-table';\nimport { DataTable } from '../../../../components';\nimport { UserActivity } from '../../../../models/response';\nimport { ApiResponse } from '../../../../util/api-client';\n\ninterface ActivitiesTableProps {\n activities: UserActivity[];\n meta?: ApiResponse['meta'];\n role: string;\n}\n\nexport const ActivitiesTable: React.FC = ({ activities, meta }) => {\n const latest_activities = activities\n .sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated))\n .slice(0, 7);\n\n return (\n ) => (\n {moment(original.dateCreated).format('Do MMMM, YYYY')}\n ),\n },\n {\n Header: 'User',\n Cell: ({ row: { original: activity } }: Cell) => {\n const name =\n (activity.user && activity.user.business_Name) ||\n (activity.user && `${activity.user.firstName} ${activity.user.lastName}`);\n return {name};\n },\n },\n {\n Header: 'Email',\n Cell: ({ row: { original: activity } }: Cell) => {\n const email = activity.user && activity.user.email;\n return {email};\n },\n },\n {\n Header: 'Activity',\n accessor: 'description',\n },\n ]}\n meta={meta}\n data={latest_activities}\n />\n );\n};\n","import * as queryString from 'query-string';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { Col, TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, Breadcrumb, TabLink, TopBar } from '../../../../components';\nimport { ApplicationState } from '../../../../store';\nimport { UsersThunk } from '../../../../store/users/users.thunk';\nimport { ActivitiesTable } from './user-activities-table';\n\nexport const UserActivitiesPage: React.FC = () => {\n const { search } = useLocation();\n const dispatch = useDispatch();\n const auth = useSelector(({ auth }: ApplicationState) => auth);\n const { userActivitiesMeta, userActivities: activities } = useSelector(({ users }: ApplicationState) => users);\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Activities', path: window.location.href },\n ];\n\n const links: TabLink[] = [{ index: 1, name: 'All Activities' }];\n const [activeTab, setActiveTab] = React.useState(1);\n\n const role = (auth && auth.authUser?.role) || 'Admin';\n const page = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n\n React.useEffect(() => {\n dispatch(UsersThunk.userActivities(role, { PageNumber: page }));\n }, [dispatch, role, page]);\n\n return (\n \n \n \n \n \n

All Activities

\n \n
\n \n \n \n \n \n {activities && activities.length ? (\n \n ) : (\n

There are no activities

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import React from 'react';\n\nexport const InCome = () => (\n \n \n \n);\n\nexport const Passenger = () => (\n \n \n \n);\n","import React from 'react';\nimport { CustomPrimaryButton, TabLink } from '../../../../../components';\nimport styled from 'styled-components';\nimport { Send } from 'react-feather';\nimport { SelectDropDown } from './dropdown';\n\nconst TabsWrapper = styled.div`\n .export {\n border-radius: 8px;\n padding: 1.2rem 0.8rem;\n }\n`;\n\nconst TabHeader = styled.div`\n width: 400px;\n cursor: pointer;\n border-bottom: 2px solid #dcdcdc;\n\n .text {\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n letter-spacing: 0.1px;\n color: #000000;\n }\n\n .active {\n border-bottom: 2px solid #18a956;\n }\n`;\n\nexport const TabBody = styled.div`\n background: #f6fcf8;\n border-radius: 8px;\n box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.3), 0px 2px 0px 0px rgba(0, 0, 0, 0.15);\n margin-top: 2rem;\n\n .size {\n // height: 327px;\n border: 2px solid red;\n }\n\n & .select {\n float: right;\n margin-top: 0.5rem;\n }\n`;\n\nexport enum Title {\n Revenue = 1,\n Bookings = 2,\n Passenger = 3,\n}\n\nexport const TabsHeader: React.FC<{ tabs: TabLink[]; activeTab: number; setActiveTab: (tab: number) => void }> = ({\n tabs,\n activeTab,\n setActiveTab,\n}) => {\n return (\n \n \n {tabs.map(({ name, index }) => (\n setActiveTab(index)}\n >\n {name}\n
\n ))}\n \n {/* { }} className=\"export inverted small\">\n \n {'Export'}\n */}\n \n );\n};\n\nexport const TabsBody: React.FC<{ setInterval?: (val: string) => void; interval: string }> = ({\n children,\n setInterval,\n interval,\n}) => {\n // const options = ['Daily', 'Monthly', 'Yearly'];\n\n return (\n \n {/*
\n \n
*/}\n {children}\n
\n );\n};\n","import React from 'react';\nimport './chart.style.scss';\n\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, ArcElement } from 'chart.js';\n\nimport { Bar, Pie } from 'react-chartjs-2';\n\nChartJS.register(ArcElement, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend);\n\nexport const options = {\n responsive: true,\n plugins: {\n legend: {\n position: 'top' as const,\n },\n title: {\n display: false,\n text: '',\n },\n },\n};\n\nexport const BarChart: React.FC<{ labels: string[]; datas: any; title: string }> = ({ labels, datas, title }) => {\n const data = {\n labels,\n datasets: [\n {\n label: title,\n // barPercentage: 6,\n barThickness: 70,\n // maxBarThickness: 100,\n // minBarLength: 2,\n // data: [1000000, 300000, 40000, 1222222],\n data: datas,\n backgroundColor: '#4DBD7D',\n },\n ],\n };\n return (\n
\n
\n \n
\n
\n );\n};\n\nexport const PieChart: React.FC<{ datas: number[]; labels: string[] }> = ({ labels, datas }) => {\n const data = {\n labels,\n datasets: [\n {\n data: datas,\n backgroundColor: ['#4DBD7D', '#7031AC', '#BD4D8D', '#E4BF58', '#4174C9'],\n borderColor: ['#4DBD7D', '#7031AC', '#BD4D8D', '#E4BF58', '#4174C9'],\n borderWidth: 1,\n },\n ],\n };\n return (\n
\n
\n \n
\n
\n );\n};\n","export enum Airlines {\n A_A_RANO = 'A. A RANO',\n AERO_CONTRACTORS = 'AERO CONTRACTORS',\n AFRIQIYAH = 'AFRIQIYAH',\n AFRICA_WORLD_AIRLINES = 'AFRICA WORLD AIRLINES',\n AIR_CÔTE_D_IVOIRE = \"AIR CÔTE D'IVOIRE\",\n AIR_FRANCE = 'AIR FRANCE',\n AIR_PEACE = 'AIR PEACE',\n ARIK_AIR = 'ARIK AIR',\n ASKY_AIRLINES = 'ASKY AIRLINES',\n AZMAN = 'AZMAN',\n BRITISH_AIRWAYS = 'BRITISH AIRWAYS',\n CABO_VERDE_AIRLINES = 'CABOVERDE AIRLINES',\n CAMAIR_CO = 'CAMAIR CO',\n CRONOS_AIRLINEE = 'CRONOS AIRLINEE',\n DANA_AIR = 'DANA AIR',\n DELTA_AIRLINES = 'DELTA AIRLINES',\n DORNIER_AVIATION = 'DORNIER AVIATION',\n EAS_AIRLINES = 'EAS AIRLINES',\n EGYPT_AIR = 'EGYPT AIR',\n EMIRATES = 'EMIRATES',\n ETHIOPIAN_AIRLINES = 'ETHIOPIAN AIRLINES',\n FIRST_NATION = 'FIRST NATION',\n GREEN_AFRICA_AIRLINE = 'GREEN AFRICA AIRLINE',\n IBERIA_AIRLINES = 'IBERIA AIRLINES',\n IBOM_AIR = 'IBOM AIR',\n KABO_AIR = 'KABO AIR',\n KANEM_AIR = 'KANEM AIR',\n KENYA_AIRWAYS = 'KENYA AIRWAYS',\n KLM = 'KLM',\n K_IMPEX_AIRLINE = 'K-IMPEX AIRLINE',\n LUFTHANSA = 'LUFTHANSA',\n MAX_AIR = 'MAX AIR',\n MIDDLE_EAST_AIRLINE = 'MIDDLE EAST AIRLINE',\n OVERLAND_AIRWAYS = 'OVERLAND AIRWAYS',\n QATAR_AIRWAYS = 'QATAR AIRWAYS',\n ROYAL_AIR_MOROC = 'ROYAL AIR MOROC',\n RWANDAIR = 'RWANDAIR',\n SOUTH_AFRICAN_AIRWAYS = 'SOUTH AFRICAN AIRWAYS',\n SWISS_AIR = 'SWISS AIR',\n TAT_NIGERIA = 'TAT NIGERIA',\n TAAG_ANGOLA = 'TAAG ANGOLA',\n TURKISH_AIRLINES = 'TURKISH AIRLINES',\n UNITED_AIRLINES = 'UNITED AIRLINES',\n UNITED_NIGERIA_AIRLINES = 'UNITED NIGERIA AIRLINES',\n VALUE_JET = 'VALUE JET',\n VIRGIN_ATLANTIC_AIRLINE = 'VIRGIN ATLANTIC AIRLINE',\n WEST_LINK_AIRLINES = 'WEST LINK AIRLINES',\n XEJET = 'XEJET',\n}\n\nexport const AirlinesMap = {\n [Airlines.A_A_RANO]: 'A. A RANO',\n [Airlines.AERO_CONTRACTORS]: 'AERO CONTRACTORS',\n [Airlines.AFRIQIYAH]: 'AFRIQIYAH',\n [Airlines.AFRICA_WORLD_AIRLINES]: 'AFRICA WORLD AIRLINES',\n [Airlines.AIR_CÔTE_D_IVOIRE]: \"AIR CÔTE D'IVOIRE\",\n [Airlines.AIR_FRANCE]: 'AIR FRANCE',\n [Airlines.AIR_PEACE]: 'AIR PEACE',\n [Airlines.ARIK_AIR]: 'ARIK AIR',\n [Airlines.ASKY_AIRLINES]: 'ASKY AIRLINES',\n [Airlines.AZMAN]: 'AZMAN',\n [Airlines.BRITISH_AIRWAYS]: 'BRITISH AIRWAYS',\n [Airlines.CABO_VERDE_AIRLINES]: 'CABOVERDE AIRLINES',\n [Airlines.CAMAIR_CO]: 'CAMAIR CO',\n [Airlines.CRONOS_AIRLINEE]: 'CRONOS AIRLINEE',\n [Airlines.DANA_AIR]: 'DANA AIR',\n [Airlines.DELTA_AIRLINES]: 'DELTA AIRLINES',\n [Airlines.DORNIER_AVIATION]: 'DORNIER AVIATION',\n [Airlines.EAS_AIRLINES]: 'EAS AIRLINES',\n [Airlines.EGYPT_AIR]: 'EGYPT AIR',\n [Airlines.EMIRATES]: 'EMIRATES',\n [Airlines.ETHIOPIAN_AIRLINES]: 'ETHIOPIAN AIRLINES',\n [Airlines.FIRST_NATION]: 'FIRST NATION',\n [Airlines.GREEN_AFRICA_AIRLINE]: 'GREEN AFRICA AIRLINE',\n [Airlines.IBERIA_AIRLINES]: 'IBERIA AIRLINES',\n [Airlines.IBOM_AIR]: 'IBOM AIR',\n [Airlines.KABO_AIR]: 'KABO AIR',\n [Airlines.KANEM_AIR]: 'KANEM AIR',\n [Airlines.KENYA_AIRWAYS]: 'KENYA AIRWAYS',\n [Airlines.KLM]: 'KLM',\n [Airlines.K_IMPEX_AIRLINE]: 'K-IMPEX AIRLINE',\n [Airlines.LUFTHANSA]: 'LUFTHANSA',\n [Airlines.MAX_AIR]: 'MAX AIR',\n [Airlines.MIDDLE_EAST_AIRLINE]: 'MIDDLE EAST AIRLINE',\n [Airlines.OVERLAND_AIRWAYS]: 'OVERLAND AIRWAYS',\n [Airlines.QATAR_AIRWAYS]: 'QATAR AIRWAYS',\n [Airlines.ROYAL_AIR_MOROC]: 'ROYAL AIR MOROC',\n [Airlines.RWANDAIR]: 'RWANDAIR',\n [Airlines.SOUTH_AFRICAN_AIRWAYS]: 'SOUTH AFRICAN AIRWAYS',\n [Airlines.SWISS_AIR]: 'SWISS AIR',\n [Airlines.TAT_NIGERIA]: 'TAT NIGERIA',\n [Airlines.TAAG_ANGOLA]: 'TAAG ANGOLA',\n [Airlines.TURKISH_AIRLINES]: 'TURKISH AIRLINES',\n [Airlines.UNITED_AIRLINES]: 'UNITED AIRLINES',\n [Airlines.UNITED_NIGERIA_AIRLINES]: 'UNITED NIGERIA AIRLINES',\n [Airlines.VALUE_JET]: 'VALUE JET',\n [Airlines.VIRGIN_ATLANTIC_AIRLINE]: 'VIRGIN ATLANTIC AIRLINE',\n [Airlines.WEST_LINK_AIRLINES]: 'WEST LINK AIRLINES',\n [Airlines.XEJET]: 'XEJET',\n};\n","import React from 'react';\nimport { TabLink } from '../../../../../components';\nimport { TabBody, TabsBody, TabsHeader, Title } from './tab';\nimport { BarChart, PieChart } from './chart';\nimport styled from 'styled-components';\nimport { SelectDropDown } from './dropdown';\nimport { generateChartMetadata } from '../../../../../util/misc';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ApplicationState, ReportinThunk } from '../../../../../store';\nimport { ReportingInterval } from '../../../../../models/response';\n\nconst Pie = styled(TabBody)`\n padding-bottom: 5px;\n .title {\n font-size: 1.5em;\n font-weight: 400;\n line-height: 154.3%;\n }\n`;\n\nexport const Intervals: any = {\n Daily: 0,\n Monthly: 30,\n Yearly: 365,\n};\n\ninterface ChartsTableProps {\n topClientsServiceRendered: { name: string; totalRevenue: number }[];\n topClients: { name: string; totalRevenue: number }[];\n airpotIntervals?: ReportingInterval;\n dateFilter: { startDate: string; endDate: string };\n}\n\nexport const ChartsTable: React.FC = ({\n topClients,\n topClientsServiceRendered,\n dateFilter,\n airpotIntervals,\n}) => {\n const [activeTab, setActiveTab] = React.useState(2);\n const [interval, setInterval] = React.useState('Yearly');\n\n const { reportingsIntervals } = useSelector((state: ApplicationState) => state.reportings);\n const dispatch = useDispatch();\n\n const { lebels: topClientsLebels, dataValue: topClientsRevenue } = generateChartMetadata(\n topClients,\n 'name',\n 'totalRevenue'\n );\n const { lebels: topClientsServiceRenderedLebel, dataValue: topClientsServiceRenderedRevenue } =\n generateChartMetadata(topClientsServiceRendered, 'name', 'totalRevenue');\n const { lebels: airportNames, dataValue: totalBookings } = generateChartMetadata(\n reportingsIntervals?.airportBookings,\n 'airportName',\n 'totalBookings',\n true\n );\n\n const { lebels: airportNamesPassengers, dataValue: passengers } = generateChartMetadata(\n reportingsIntervals?.airportPassengers,\n 'airportName',\n 'passengers',\n true\n );\n\n const { lebels: airportNamesRevenue, dataValue: revenue } = generateChartMetadata(\n reportingsIntervals?.airportRevenues,\n 'airportName',\n 'totalRevenue',\n true\n );\n\n const handleGetReportingStats = React.useCallback(async () => {\n await dispatch(ReportinThunk.getReportingsInterval(dateFilter));\n }, [dispatch, topClients, topClientsServiceRendered, interval]);\n\n React.useEffect(() => {\n handleGetReportingStats();\n }, [handleGetReportingStats, dateFilter]);\n\n const tabs: TabLink[] = [\n // { index: 1, name: 'Revenue' },\n { index: 2, name: 'Bookings' },\n { index: 3, name: 'Passenger' },\n ];\n\n const selectStyle = {\n borderRadius: '5px',\n padding: '5px',\n border: '1px solid #ccc',\n width: '200px',\n marginRight: '10px',\n };\n\n const options = ['Revenue Generated', 'Service Rendered Bookings'];\n const [selectedOption, setSelectedOption] = React.useState(options[0]);\n\n const handleOptionChange = (event: React.ChangeEvent) => {\n setSelectedOption(event.target.value);\n };\n\n const topsClientLables = topClientsLebels.map((x) => x.toUpperCase());\n const topsClientServiceLebel = topClientsServiceRenderedLebel.map((y) => y.toUpperCase());\n\n return (\n
\n \n\n {/* {activeTab === Title.Revenue && (\n \n \n \n )} */}\n\n {activeTab === Title.Bookings && (\n \n \n \n )}\n\n {/* {activeTab === Title.Registration && (\n \n \n \n )} */}\n\n {activeTab === Title.Passenger && (\n \n \n \n )}\n\n \n
\n
Top 5 Clients
\n
\n \n
\n
\n {selectedOption === 'Revenue Generated' ? (\n // Render Pie chart based on revenue data\n \n ) : (\n // Render Pie chart based on service rendered data\n \n )}\n
\n
\n );\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Field, Formik } from 'formik';\n\nimport { AuthLayout, Breadcrumb, TopBar } from '../../../components';\nimport { ChartsTable, RevenueCard } from './components';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ApplicationState, ReportinThunk } from '../../../store';\nimport { setSearch } from '../../../util/history';\nimport { Button } from '../../../components/form';\nimport styled from 'styled-components';\n\nconst HeaderStyleWrapper = styled.div`\n > form {\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n gap: 20px;\n padding: 0;\n\n .input {\n border-radius: 10px;\n border-width: 1px;\n }\n\n label {\n display: flex;\n font-weight: 500;\n flex-direction: column;\n font-weight: 700;\n }\n }\n`;\n\nexport const Reporting = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'Reporting', path: window.location.href },\n ];\n\n const [date, setDate] = React.useState<{ startDate: string; endDate: string }>({} as any);\n\n const { reportings } = useSelector((state: ApplicationState) => state.reportings);\n const dispatch = useDispatch();\n\n const handleGetReportingStats = React.useCallback(() => {\n dispatch(ReportinThunk.getReportings());\n }, [dispatch]);\n\n React.useEffect(() => {\n handleGetReportingStats();\n }, [handleGetReportingStats]);\n\n const handleFilter = async (filter: { startDate: string; endDate: string }) => {\n // const start = new Date(filter.startDate).getDate();\n // const end = new Date(filter.endDate).getDate();\n // const date = end - start;\n setDate(filter);\n await dispatch(ReportinThunk.getReportings(filter));\n };\n\n return (\n \n
\n \n {\n ReactDOM.unstable_batchedUpdates(() => {\n console.log('DATA', values);\n // setSearch('page', 1);\n handleFilter({ startDate: values.startDate, endDate: values.endDate });\n });\n }}\n >\n {({ handleSubmit, values }) => {\n return (\n \n
\n

Filter By Date:

\n \n \n \n Filter\n \n \n
\n );\n }}\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n \n
\n
\n );\n};\n","import React, { useContext, useMemo } from 'react';\nimport { AuthContext } from '../../context';\nimport { AuthenticatedUser } from '../../models/response';\nimport { Roles } from '../../util/constants';\nimport { AccountantDashboard, AdminDashboardPage, ClientDashboardPage } from './pages';\n\nexport const DashboardPage = () => {\n const user = useContext(AuthContext.Context).user as AuthenticatedUser;\n\n const Page = useMemo(() => {\n switch (user.role) {\n case Roles.Accountant:\n case Roles.Auditor:\n case Roles.Commercial:\n return AccountantDashboard;\n case Roles.Admin:\n case Roles.AirportManager:\n return AdminDashboardPage;\n default:\n return ClientDashboardPage;\n }\n }, [user]);\n\n return ;\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { UpdateBookingModel } from '../../../models/request';\nimport { Booking, Transaction } from '../../../models/response';\nimport { BookingsThunk } from '../../../store/bookings/bookings.thunk';\nimport { ApiResponse } from '../../../util/api-client';\nimport { BookingStatuses } from '../../../util/constants';\nimport { formatCurrency } from '../../../util/misc';\n\ninterface BookingsTableProps {\n transactions: Transaction[];\n compact?: boolean;\n refreshFunction?: (...args: any[]) => any;\n meta?: ApiResponse['meta'];\n}\n\nexport const BookingsTransactionsTable: React.FC = ({ transactions, meta, refreshFunction }) => {\n const dispatch = useDispatch();\n\n const handleUpdateBooking = React.useCallback(\n (bookingDetails: UpdateBookingModel) => {\n dispatch(BookingsThunk.update(bookingDetails, refreshFunction));\n },\n [dispatch, refreshFunction]\n );\n\n const handleSetStatus = React.useCallback(\n (booking: Booking, status: BookingStatuses) => {\n if (booking.bookingStatus !== status) {\n booking.bookingStatus = status;\n handleUpdateBooking(new UpdateBookingModel(booking));\n }\n },\n [handleUpdateBooking]\n );\n\n return (\n ) => {\n return {capitalize(moment(original.dateCreated).fromNow())};\n },\n },\n {\n Header: 'Airport',\n accessor: 'airportId',\n Cell: ({ row: { original } }: Cell) => {\n return {original.createdBy ?? 'N/A'};\n },\n },\n {\n Header: 'Service',\n accessor: 'service.name' as any,\n Cell: ({ row: { original } }: Cell) => {\n return {original.transactType};\n },\n },\n\n {\n Header: 'Booking Price',\n Cell: (cell: Cell) => {formatCurrency(cell.row.original.amount)},\n },\n {\n Header: 'Passengers',\n accessor: 'quantity' as any,\n Cell: (cell: Cell) => {cell.row.original.quantity},\n },\n {\n Header: 'Status',\n accessor: 'status',\n Cell: (cell: Cell) => {cell.row.original.status ?? 'Unpaid'},\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: booking } }: Cell) => {\n return (\n \n {\n return (\n \n \n \n );\n }}\n >\n \n View Booking\n \n \n \n );\n },\n },\n ]}\n data={orderBy(transactions, (_) => new Date(_.dateCreated), 'desc')}\n meta={meta}\n />\n );\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React, { useContext } from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { AuthContext } from '../../../context';\nimport { Transaction } from '../../../models/response';\nimport { TransactionsActions } from '../../../store';\nimport { ApiResponse } from '../../../util/api-client';\nimport { Roles } from '../../../util/constants';\n\ninterface FundTransactionTableProps {\n transactions: Transaction[];\n hideOptions?: boolean;\n refreshFunction?: (...args: any[]) => any;\n meta?: ApiResponse['meta'];\n}\n\nexport const FundsTransactionsTable: React.FC = ({ transactions, meta, hideOptions }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const { user } = useContext(AuthContext.Context)!;\n const extraColumns =\n user?.role === Roles.Client && !hideOptions\n ? [\n {\n Header: 'Status',\n accessor: 'paymentStatus',\n Cell: (cell: Cell) => {cell.row.original.paymentStatus ?? 'Unpaid'},\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: transaction } }: Cell) => {\n return (\n {\n return (\n \n \n \n );\n }}\n >\n {\n dispatch(TransactionsActions.retrieveType([transaction], undefined));\n history.push(\n `/app/transaction-service/${transaction.transactionId}?type=${transaction.transactionType}`\n );\n }}\n >\n View More\n \n \n );\n },\n },\n ]\n : [\n {\n Header: 'Funded By',\n accessor: 'createdBy',\n Cell: (cell: Cell) => {cell.row.original.createdBy},\n },\n {\n Header: 'Status',\n accessor: 'paymentStatus',\n Cell: (cell: Cell) => {cell.row.original.paymentStatus ?? 'Unpaid'},\n },\n ];\n\n // const dispatch = useDispatch();\n // const makePayment = () => window.open('https://www.faan.gov.ng/faan-payments/', '_blank');\n\n return (\n ) => (\n {moment(original.dateCreated).format('Do MMMM, YYYY')}\n ),\n },\n {\n Header: 'Amount',\n accessor: 'amount' as any,\n Cell: ({ row: { original } }: Cell) => (\n NGN {original.amount.toLocaleString()}\n ),\n },\n {\n Header: 'RRR Number',\n accessor: 'rrrNo' as any,\n Cell: ({ row: { original } }: Cell) => {original.rrrNo ?? 'N/A'},\n },\n {\n Header: 'Invoice Number',\n accessor: 'invoiceNo' as any,\n Cell: ({ row: { original } }: Cell) => {original.invoiceNo ?? 'N/A'},\n },\n ...extraColumns,\n ]}\n data={orderBy(transactions, (_) => new Date(_.dateCreated), 'desc')}\n meta={meta}\n />\n );\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomPrimaryButton, DataTable } from '../../../components';\nimport { UpdateBookingModel } from '../../../models/request';\nimport { Transaction } from '../../../models/response';\nimport { BookingsThunk } from '../../../store/bookings/bookings.thunk';\nimport { ApiResponse } from '../../../util/api-client';\n\ninterface Props {\n transactions: Transaction[];\n compact?: boolean;\n refreshFunction?: (...args: any[]) => any;\n meta?: ApiResponse['meta'];\n}\n\nexport const RegistrationTransactionsTable: React.FC = ({ transactions, meta, refreshFunction }) => {\n const dispatch = useDispatch();\n\n const handleUpdateBooking = React.useCallback(\n (bookingDetails: UpdateBookingModel) => {\n dispatch(BookingsThunk.update(bookingDetails, refreshFunction));\n },\n [dispatch, refreshFunction]\n );\n\n return (\n ) => (\n {capitalize(moment(original.dateCreated).fromNow())}\n ),\n },\n {\n Header: 'Amount',\n accessor: 'amount' as any,\n Cell: ({ row: { original } }: Cell) => (\n NGN {original.amount.toLocaleString()}\n ),\n },\n {\n Header: 'RRR Number',\n accessor: 'rrrNo' as any,\n Cell: ({ row: { original } }: Cell) => {original.rrrNo ?? 'N/A'},\n },\n {\n Header: 'Invoice Number',\n accessor: 'invoiceNo' as any,\n Cell: ({ row: { original } }: Cell) => {original.invoiceNo ?? 'N/A'},\n },\n {\n Header: 'Status',\n accessor: 'paymentStatus',\n Cell: (cell: Cell) => {cell.row.original.paymentStatus ?? 'Unpaid'},\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: transaction } }: Cell) => {\n return (\n \n {\n return (\n \n \n \n );\n }}\n >\n \n View service\n \n \n \n );\n },\n },\n ]}\n data={orderBy(transactions, (_) => new Date(_.dateCreated), 'desc')}\n meta={meta}\n />\n );\n};\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport { Cell, Column } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { Transaction } from '../../../models/response';\nimport { TransactionsActions } from '../../../store';\nimport { ApiResponse } from '../../../util/api-client';\nimport { formatCurrency } from '../../../util/misc';\nimport { formatDate } from '../../../util/misc/formatters';\nimport { MoreVertical } from 'react-feather';\nimport { TransactionsService } from '../../../services/transactions.service';\nimport { NotificationsThunk } from '../../../store/notifications/notifications.thunk';\nimport { NotificationTypes } from '../../../util/constants';\ninterface Props {\n transactions: Transaction[];\n meta?: ApiResponse['meta'];\n isBooking?: boolean;\n}\n\nexport const TransactionServicesTable: React.FC = ({ transactions, meta, isBooking }) => {\n const history = useHistory();\n const dispatch = useDispatch();\n\n const handleRefreshPayment = (invoiceNumber: string, page: number) => {\n TransactionsService.refreshInvoicePayment(invoiceNumber, page)\n .then((response: any) => {\n console.log('Payment refreshed successfully', response);\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'Invoice Status Checked Successfully'));\n })\n .catch((error: any) => {\n console.error('Error refreshing payment', error);\n dispatch(\n NotificationsThunk.create(NotificationTypes.Error, 'Error Invoice Status Not Checked Successfully')\n );\n });\n };\n\n const extraBookingColumns: any = {\n Header: 'POS/Wallet',\n };\n\n const extraColumns: Column[] = isBooking\n ? [\n {\n Header: 'BookedBy',\n accessor: 'createdBy',\n Cell: ({ row: { original } }: Cell) => {\n return {original.createdBy ?? 'N/A'};\n },\n },\n // {\n // Header: 'Airport',\n // accessor: 'airportId',\n // Cell: ({ row: { original } }: Cell) => {\n // return {original.createdBy ?? 'N/A'};\n // },\n // },\n {\n Header: 'RRR Number',\n accessor: 'rrrNo',\n Cell: ({ row: { original } }: Cell) => {\n return {original.rrrNo ?? 'N/A'};\n },\n },\n\n {\n Header: 'POS/Wallet',\n Cell: ({ row: { original } }: Cell) => {\n return {original.invoiceNo ? 'POS' : 'Wallet'};\n },\n },\n {\n Header: 'Invoice Number',\n accessor: 'invoiceNo',\n Cell: ({ row: { original } }: Cell) => {\n return {original.invoiceNo ?? 'N/A'};\n },\n },\n {\n Header: 'Payment Status',\n accessor: 'paymentStatus',\n Cell: ({ row: { original } }: Cell) => {\n // const color = original.paymentStatus ? 'var(--primary-color)' : '#D09611';\n // return {original.paymentStatus ?? 'Unpaid'};\n\n const color = original.paymentStatus === 'Paid' ? 'var(--primary-color)' : '#D09611';\n return {original.paymentStatus ?? 'unPaid'};\n },\n },\n ]\n : [\n // {\n // Header: 'Funded By',\n // accessor: 'createdBy',\n // Cell: ({ row: { original } }: Cell) => {\n // return {original.createdBy ?? 'N/A'};\n // },\n // },\n // {\n // Header: 'RRR Number',\n // accessor: 'rrrNo',\n // Cell: ({ row: { original } }: Cell) => {\n\n // if (original.transactionType !== 1) {\n // return (\n // {original.rrrNo ?? 'Processing...'}\n // );\n // }\n // return null; // Hide the column when transactionType is 1\n // },\n // },\n // {\n // Header: 'Funded By',\n // accessor: 'createdBy',\n // Cell: ({ row: { original } }: Cell) => {\n // return {original.createdBy ?? 'N/A'};\n // },\n // },\n // {\n // Header: 'RRR Number',\n // accessor: 'rrrNo',\n // Cell: ({ row: { original } }: Cell) => {\n // if (original.transactionType !== 1) {\n // return (\n // {original.rrrNo ?? 'Processing...'}\n // );\n // }\n // return null; // Hide the column when transactionType is 1\n // },\n // },\n\n {\n Header: ({ column }) => {\n // Check the condition for hiding the column header\n if (transactions.some((row) => row.transactionType !== 1)) {\n return 'Invoice Number'; // Show the column header\n }\n return null; // Hide the column header\n },\n accessor: 'invoiceNo',\n Cell: ({ row: { original } }: Cell) => {\n if (original.transactionType !== 1) {\n return (\n \n {original.invoiceNo ?? 'Processing...'}\n \n );\n }\n return null; // Hide the column when transactionType is 1\n },\n },\n {\n Header: ({ column }) => {\n // Check the condition for hiding the column header\n if (transactions.some((row) => row.transactionType !== 1)) {\n // const color = original.paymentStatus ? 'var(--primary-color)' : '#D09611';\n // return {original.paymentStatus ?? 'Unpaid'};\n\n return 'Payment Status'; // Show the column header\n }\n return null; // Hide the column header\n },\n accessor: 'paymentStatus',\n Cell: ({ row: { original } }: Cell) => {\n if (original.transactionType !== 1) {\n const color = original.paymentStatus === 'Paid' ? 'var(--primary-color)' : '#D09611';\n return {original.paymentStatus};\n }\n return null; // Hide the column when transactionType is 1\n },\n },\n ];\n\n return (\n ) => {\n return {formatDate(original.dateCreated)};\n },\n },\n {\n Header: 'Service',\n accessor: 'transactType',\n Cell: ({ row: { original } }: Cell) => {\n return {original.transactType};\n },\n },\n {\n Header: 'Client',\n accessor: 'business_Name',\n },\n {\n Header: 'Amount',\n accessor: 'amount',\n Cell: ({ row: { original } }: Cell) => {\n return {formatCurrency(original.amount)};\n },\n },\n // {\n // Header: 'BookedBy',\n // accessor: 'createdBy',\n // Cell: ({ row: { original } }: Cell) => {\n // return {original.createdBy ?? 'N/A'};\n // },\n // },\n ...extraColumns,\n {\n Header: ({ column }) => {\n // Check the condition for hiding the column name\n if (column.id === 'transactionType' && transactions.some((row) => row.transactionType === 1)) {\n return null; // Hide the column name\n }\n return 'Action'; // Show the column name for other cases\n },\n accessor: 'transactionType',\n Cell: ({ row: { original: transaction } }: Cell) => {\n if (transaction.transactionType === 1) {\n return null; // Hide the column when transactionType is 1\n }\n return transaction.transactType === 'Funding' ? (\n {\n return (\n \n \n \n );\n }}\n >\n \n {\n dispatch(TransactionsActions.retrieveType([transaction], undefined));\n history.push(\n `/app/transaction-service/${transaction.transactionId}?type=${transaction.transactionType}`\n );\n }}\n >\n View Service\n \n \n \n {transaction.paymentStatus !== 'Paid' && (\n \n transaction.invoiceNo &&\n handleRefreshPayment(transaction.invoiceNo.toString(), 1)\n }\n >\n Refresh\n \n )}\n \n \n ) : transaction.transactionType !== 1 ? (\n transaction.invoiceNo !== null ? (\n {\n return (\n \n \n \n );\n }}\n >\n \n \n View service\n \n \n \n {transaction.paymentStatus !== 'Paid' && (\n \n transaction.invoiceNo &&\n handleRefreshPayment(transaction.invoiceNo.toString(), 1)\n }\n >\n Refresh\n \n )}\n \n \n ) : (\n \n View service\n \n )\n ) : null;\n },\n },\n ]}\n data={transactions}\n meta={meta}\n />\n );\n};\n","import { capitalize, orderBy } from 'lodash';\nimport moment from 'moment';\nimport React, { useCallback, useContext } from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Link, useParams } from 'react-router-dom';\nimport { Cell } from 'react-table';\nimport { Download, File, Phone, Send } from 'react-feather';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../components';\nimport { AuthContext } from '../../../context';\nimport { Transaction, User } from '../../../models/response';\nimport { NotificationsThunk, TransactionsActions } from '../../../store';\nimport { ApiClient, ApiResponse } from '../../../util/api-client';\nimport { NotificationTypes, Roles } from '../../../util/constants';\nimport { PaymentModal } from '../../../components/wallet';\nimport saveAs from 'file-saver';\n\ninterface PaymentTransactionTableProps {\n transactions: Transaction[];\n hideOptions?: boolean;\n refreshFunction?: (...args: any[]) => any;\n meta?: ApiResponse['meta'];\n}\n\nexport const PaymentTransactionsTable: React.FC = ({\n transactions,\n meta,\n hideOptions,\n}) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const { user } = useContext(AuthContext.Context)!;\n const [isPayment, setIsPaymentModal] = React.useState(false);\n const [selectedTransactionId, setSelectedTransactionId] = React.useState(0);\n const { client_id } = useParams();\n\n const pageNumber = 1;\n\n const handlePayNowClick = (id: number) => {\n setSelectedTransactionId(id);\n setIsPaymentModal(true);\n };\n\n const exportRenewalInvoice = useCallback(\n async (renewalId: number) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/renewals/export-renewal-invoice?renewalid=${renewalId}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, `Invoice_${renewalId}.pdf`);\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n return (\n <>\n \n\n ) => (\n {moment(original.startDate).format('Do MMMM, YYYY')}\n ),\n },\n {\n Header: 'Amount',\n accessor: 'amount' as any,\n Cell: ({ row: { original } }: Cell) => (\n NGN {original.amount.toLocaleString()}\n ),\n },\n {\n Header: 'Renewal Payment Status',\n accessor: 'renewalPaymentStatus' as any,\n Cell: ({ row: { original } }: Cell) => (\n {original.renewalPaymentStatus ?? 'Unpaid'}\n ),\n },\n {\n Header: 'Payment',\n Cell: ({ row: { original } }: Cell) =>\n original.renewalPaymentStatus !== 'Paid' ? (\n handlePayNowClick(original.id)}>\n Pay Now\n \n ) : null,\n },\n\n {\n Header: 'Get Receipt',\n Cell: ({ row: { original } }: Cell) =>\n original.renewalPaymentStatus === 'Paid' ? (\n exportRenewalInvoice(original.id)}\n >\n \n Get Receipt\n \n ) : null,\n },\n ]}\n data={orderBy(transactions, (_) => new Date(_.dateCreated), 'desc')}\n meta={meta}\n />\n \n );\n};\n","import { saveAs } from 'file-saver';\nimport { Field, Formik } from 'formik';\nimport queryString from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport { useCallback } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport { AppLayout, AuthLayout, TabLink, TopBar } from '../../components';\nimport { Button } from '../../components/form';\nimport { Booking, Transaction } from '../../models/response';\nimport { ApplicationState, NotificationsThunk, TransactionsThunk } from '../../store';\nimport { setSearch } from '../../util/history';\nimport { TransactionServicesTable } from './components';\nimport { ApiClient } from '../../util/api-client';\nimport { NotificationTypes } from '../../util/constants';\n\nconst HeaderStyleWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n > form {\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n gap: 20px;\n padding: 0;\n\n label {\n display: flex;\n font-weight: 500;\n flex-direction: column;\n }\n }\n`;\n\nexport const OtherUsersTransactionServices: React.FC = () => {\n const dispatch = useDispatch();\n const [value, setValue] = useState('');\n const [dateFilter, setDateFilter] = useState({\n startDate: '',\n endDate: '',\n });\n const [activeTab, setActiveTab] = React.useState(1);\n const [searchTerm, setSearchTerm] = React.useState('');\n const { transactionType, transactionTypeMeta } = useSelector((state: ApplicationState) => state.transactions);\n const { search } = useLocation();\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n\n const links: TabLink[] = [\n { name: 'Booking Services', index: 1, query: ['page', 1] },\n { name: 'Funds Services', index: 3, query: ['page', 1] },\n { name: 'Registration Services', index: 2, query: ['page', 1] },\n ];\n\n useEffect(() => {\n dispatch(TransactionsThunk.retrieveByTransactionType(activeTab - 1, { pageNumber, ...dateFilter }, searchTerm));\n }, [dispatch, activeTab, pageNumber, dateFilter]);\n\n const handleChange = (e: React.ChangeEvent) => {\n setSearchTerm(e.target.value);\n };\n\n const handleSearch = () => {\n dispatch(TransactionsThunk.retrieveByTransactionType(activeTab - 1, { pageNumber, ...dateFilter }, searchTerm));\n };\n\n const filterdTransactionType: Transaction[] = transactionType.filter((transaction: Transaction) => {\n return transaction.customerName && transaction.customerName.toLowerCase().indexOf(value.toLowerCase()) !== -1;\n });\n\n const exportBookingFile = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/transactions/export-booking-transactions`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Booking transactions';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n const exportFundsFile = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/transactions/export-funds-transactions`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Fund transactions';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n const exportRegFile = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/transactions/export-registration-transactions`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Registrations transactions';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n // console.log(\"ac\", activeTab)\n\n // const exportTransactionFile = React.useCallback(() => {\n // switch (activeTab) {\n // case 1:\n // return exportFile\n // case 2:\n // return;\n // case 3:\n // return;\n // default:\n // return exportFile;\n // }\n // }, [activeTab, exportFile]);\n\n return (\n \n \n \n \n \n All Transaction\n {\n ReactDOM.unstable_batchedUpdates(() => {\n setSearch('page', 1);\n setDateFilter({ startDate: values.startDate, endDate: values.endDate });\n });\n }}\n >\n {({ handleSubmit, values }) => {\n return (\n
\n

Filter By:

\n \n \n \n Filter\n \n \n );\n }}\n \n
\n
\n \n \n\n \n \n \n {filterdTransactionType.length > 0 ? (\n \n ) : (\n

There are no transactions

\n )}\n
\n\n \n {filterdTransactionType.length > 0 ? (\n \n ) : (\n

There are no transactions

\n )}\n
\n\n \n {filterdTransactionType.length > 0 ? (\n \n ) : (\n

There are no transactions

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import * as queryString from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, Breadcrumb, TabLink, TopBar } from '../../../components';\nimport { AuthenticatedUser } from '../../../models/response';\nimport { ApplicationState, TransactionsThunk } from '../../../store';\nimport { BookingsTransactionsTable, FundsTransactionsTable, RegistrationTransactionsTable } from '../components';\n\nexport const ClientTransactionServices: React.FC<{\n user: AuthenticatedUser;\n}> = ({ user }) => {\n const [dateFilter, setDateFilter] = useState({\n startDate: '06/10/2021',\n endDate: '06/1/2022',\n });\n const [activeTab, setActiveTab] = useState(1);\n const { transactionType, transactionTypeMeta } = useSelector(({ transactions }: ApplicationState) => transactions);\n const dispatch = useDispatch();\n const { search } = useLocation();\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n\n const links: TabLink[] = [\n { name: 'Bookings', index: 1, query: ['page', 1] },\n { name: 'Funds', index: 2, query: ['page', 1] },\n { name: 'Registrations', index: 3, query: ['page', 1] },\n ];\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'Transactions', path: '/app/transaction-services' },\n ];\n\n useEffect(() => {\n const type = activeTab === 1 ? 0 : activeTab === 2 ? 2 : 1;\n dispatch(TransactionsThunk.retrieveByTransactionType(type, { pageNumber, dateFilter }));\n }, [activeTab, dispatch, pageNumber, dateFilter]);\n\n return (\n \n \n \n \n
\n

All Transactions

\n
\n
\n\n \n \n\n \n \n \n {transactionType.length ? (\n \n ) : (\n

There are no bookings to display

\n )}\n
\n \n {transactionType.length ? (\n \n ) : (\n

There are no fund transactions to display

\n )}\n
\n \n {transactionType.length ? (\n \n ) : (\n

There are no registration transactions to display

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import { PDFDownloadLink } from '@react-pdf/renderer';\nimport saveAs from 'file-saver';\nimport React, { useContext } from 'react';\nimport { File, Send } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Redirect, useParams } from 'react-router';\nimport { TabContent, TabPane } from 'reactstrap';\nimport styled from 'styled-components';\nimport { HeaderStyleWrapper, Invoice } from '../..';\nimport { AppLayout, AuthLayout, Breadcrumb, CustomPrimaryButton, TopBar } from '../../../components';\nimport { AuthContext } from '../../../context';\nimport { Transaction, User } from '../../../models/response';\nimport { AirportsThunk, ApplicationState, NotificationsThunk, UsersThunk } from '../../../store';\nimport { ApiClient } from '../../../util/api-client';\nimport { NotificationTypes, Roles } from '../../../util/constants';\nimport { formatDate } from '../../../util/misc/formatters';\nimport { FundsTransactionsTable } from '../components';\n\ninterface Props {\n bookingId?: string;\n breadcrumbs: Breadcrumb[];\n abortFetchTransaction?: boolean;\n}\n\nexport const ViewFundingTransaction: React.FC = ({ bookingId, breadcrumbs: crumbs, abortFetchTransaction }) => {\n const id = bookingId ?? useParams<{ booking_id: string }>().booking_id;\n const { user: loggedInUser } = useContext(AuthContext.Context)!;\n const { userDetails } = useSelector(({ users }: ApplicationState) => users);\n const { airports } = useSelector(({ airports }: ApplicationState) => airports);\n const { transactionType, transactionTypeMeta } = useSelector((state: ApplicationState) => state.transactions);\n const dispatch = useDispatch();\n\n const makePayment = () => window.open('https://www.faan.gov.ng/faan-payments/', '_blank');\n React.useEffect(() => {\n dispatch(AirportsThunk.list());\n dispatch(UsersThunk.getUser(transactionType[0]?.transactionId));\n\n // if (!abortFetchTransaction) {\n // dispatch(TransactionsThunk.retrieveByTrasactionId(+(id as string)));\n // }\n }, [dispatch, id, abortFetchTransaction, transactionType]);\n const canPay = React.useMemo(\n () => !transactionType[0]?.paymentStatus && loggedInUser?.role === Roles.Client,\n [transactionType, loggedInUser]\n );\n\n const exportInvoice = React.useCallback(\n async (transaction: Transaction, fileType: string) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n const path =\n fileType === 'invoice'\n ? '/transactions/transaction-receipt/' // if fileType is invoice return '/tras....../'\n : fileType === 'receipt'\n ? '/transactions/transaction-receipt/' // else if fileType is reciept return '/tras....../'\n : ''; // elase return emplty string\n\n const name = `${transactionType[0].business_Name} - ${transactionType[0].transactType} - ${formatDate(\n transactionType[0].dateCreated\n )}`;\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n const response = await fetch(`${process.env.REACT_APP_BASE_URL}${path}${transaction.id}`, config);\n\n try {\n const downloadedFile = await response.blob();\n saveAs(downloadedFile, name + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch]\n );\n\n const exportFile = React.useCallback(async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/booking-services/export/${transactionType[0]?.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const documentName = transactionType[0]?.business_Name;\n saveAs(downloadedFile, documentName + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n }, [dispatch, transactionType]);\n\n const breadcrumbs: Breadcrumb[] = crumbs ?? [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Bookings', path: '/app/bookings' },\n ];\n\n if (!transactionType.length) {\n return ;\n }\n\n return (\n \n \n {true && (\n \n \n \n \n
\n \n
\n
\n {transactionType.length > 0 &&\n (transactionType[0]?.paymentStatus &&\n transactionType[0]?.paymentStatus.toLocaleLowerCase() === 'paid' ? (\n exportInvoice(transactionType[0], 'receipt')}\n >\n \n Get Receipt\n \n ) : (\n exportInvoice(transactionType[0], 'invoice')}\n >\n \n Get Invoice\n \n ))}\n {/* {\n e.preventDefault();\n exportFile();\n }}\n >\n \n Export\n */}\n
\n
\n
\n \n \n
Fund Details
\n
\n \n \n \n \n {transactionType.length ? (\n \n ) : (\n

There are no funds transactions

\n )}\n
\n\n {canPay && (\n \n Pay now\n \n )}\n
\n
\n
\n
\n
\n
\n )}\n
\n );\n};\n\nexport const StyleWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-bottom: 1rem;\n\n .detail-row {\n display: grid;\n grid-template-columns: 200px 1fr;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 2px solid #eaeaea;\n }\n`;\n","import React from 'react';\nimport { OtherUsersTransactionServices } from '.';\nimport { AuthContext } from '../../context';\nimport { Roles } from '../../util/constants';\nimport { ClientTransactionServices } from './views';\n\nexport const TransactionServicesPage: React.FC = () => {\n const { user } = React.useContext(AuthContext.Context);\n\n return user?.role === Roles.Client ? : ;\n};\n","import { filter } from 'lodash';\nimport { Field, Formik } from 'formik';\nimport queryString from 'query-string';\nimport ReactDOM from 'react-dom';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { useLocation } from 'react-router';\nimport { saveAs } from 'file-saver';\nimport { Col, TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, Breadcrumb, TabLink, TopBar } from '../../../../components';\nimport { AuthContext } from '../../../../context';\nimport { Booking } from '../../../../models/response';\nimport { ApplicationState, NotificationsThunk } from '../../../../store';\nimport { BookingsThunk } from '../../../../store/bookings/bookings.thunk';\nimport { NotificationTypes, Roles } from '../../../../util/constants';\nimport { BookingsTable } from './bookings-table';\nimport { Button } from '../../../../components/form';\nimport { setSearch } from '../../../../util/history';\nimport { ApiClient } from '../../../../util/api-client';\n\nconst HeaderStyleWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n > form {\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n gap: 20px;\n padding: 0;\n\n label {\n display: flex;\n font-weight: 500;\n flex-direction: column;\n }\n }\n`;\n\nexport const BookingsPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Bookings', path: window.location.href },\n ];\n\n const links: TabLink[] = [{ index: 1, name: 'All Bookings' }];\n const [activeTab, setActiveTab] = React.useState(1);\n const [searchTerm, setSearchTerm] = React.useState('');\n const { user } = React.useContext(AuthContext.Context);\n const { bookings, meta } = useSelector((state: ApplicationState) => state.bookings);\n const { search } = useLocation();\n\n const filteredBookings = React.useMemo(() => {\n switch (user?.role) {\n case Roles.Admin:\n case Roles.Client:\n return bookings;\n case Roles.AirportManager:\n case Roles.AirportProtocolCoordinator:\n return filter(bookings, { airportId: user.airportId });\n default:\n return [];\n }\n }, [bookings, user]);\n\n const latest_bookings = filteredBookings.sort((a, b) => Date.parse(b.dateCreated) - Date.parse(a.dateCreated));\n\n const dispatch = useDispatch();\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n\n React.useEffect(() => {\n dispatch(BookingsThunk.list(pageNumber, searchTerm));\n }, [dispatch, pageNumber]);\n\n const handleChange = (e: React.ChangeEvent) => {\n setSearchTerm(e.target.value);\n };\n\n const handleSearch = () => {\n dispatch(BookingsThunk.list(pageNumber, searchTerm));\n };\n\n const handleFilter = (filter?: any) => {\n dispatch(BookingsThunk.list(pageNumber, searchTerm, filter));\n };\n\n const exportBookingFile = async () => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(`${process.env.REACT_APP_BASE_URL}/booking-services/export-bookings`, config);\n\n try {\n const downloadedFile = await response.blob();\n const documentName = 'Bookings';\n saveAs(downloadedFile, documentName + '.csv');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n };\n\n return (\n \n \n \n \n \n {/* */}\n

All Bookings

\n {/* */}\n {\n ReactDOM.unstable_batchedUpdates(() => {\n setSearch('page', 1);\n handleFilter({ startDate: values.startDate, endDate: values.endDate });\n });\n }}\n >\n {({ handleSubmit, values }) => {\n return (\n
\n

Filter By:

\n \n \n \n Filter\n \n \n );\n }}\n \n
\n
\n \n \n \n \n \n {latest_bookings.length ? (\n \n ) : (\n

There are no bookings

\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport { find, last } from 'lodash';\nimport React, { useState } from 'react';\nimport { Check, Info, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { Col, Row } from 'reactstrap';\nimport styled from 'styled-components';\nimport Select from 'react-select';\n\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../../../components';\nimport { FormTextInput, PresentationalFormRadio } from '../../../../components/form';\nimport { AuthContext } from '../../../../context';\nimport { AssigneProtocolModel, UpdateBookingModel } from '../../../../models/request';\nimport { AuthenticatedUser, Booking, Transaction } from '../../../../models/response';\nimport { Passenger } from '../../../../models/response/bookings/passenger';\nimport { AirportsThunk, ApplicationState, UsersThunk } from '../../../../store';\nimport { BookingsThunk } from '../../../../store/bookings/bookings.thunk';\nimport {\n BookingStatusAdminAvailableState,\n BookingStatuses,\n BookingStatusesMap,\n Roles,\n} from '../../../../util/constants';\nimport { canCancelBooking, formatCurrency } from '../../../../util/misc';\nimport { formatDate, formatTime } from '../../../../util/misc/formatters';\nimport { validateFormValues } from '../../../../util/validation';\nimport { useParams } from 'react-router';\n\nconst StyleWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-bottom: 1rem;\n\n .detail-row {\n display: grid;\n grid-template-columns: 200px 1fr;\n padding: 20px 0;\n font-size: 14px;\n border-bottom: 2px solid #eaeaea;\n }\n`;\n\nexport const HeaderStyleWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n .left__header {\n flex: 1;\n display: flex;\n flex-direction: row;\n }\n\n .right {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n }\n`;\n\ninterface DetailRow {\n property: string;\n value: string | number | [];\n}\n\ninterface Props {\n booking: Booking;\n transaction?: Transaction;\n}\n\ninterface Options {\n value: string;\n label: string;\n}\n\nexport const ViewPorthacourtBookingInformationComponent: React.FC = ({ booking, transaction }) => {\n const { isInAirport, user } = React.useContext(AuthContext.Context);\n const airports = useSelector((state: ApplicationState) => state.airports);\n const { allProtocols } = useSelector((state: ApplicationState) => state.users);\n const dispatch = useDispatch();\n\n const id = booking.id ?? useParams<{ booking_id: string }>().booking_id;\n\n const [values, setValues] = useState([]);\n\n const options: Options[] = [];\n\n allProtocols.forEach((protocol) =>\n options.push({ value: protocol.id, label: protocol.firstName + ' ' + protocol.lastName })\n );\n\n const bookingProtocols: string[] = [];\n\n booking.bookingProtocols.forEach((user: any) =>\n bookingProtocols.push(user.applicationUser.firstName + ' ' + user.applicationUser.lastName)\n );\n\n console.log('Bookings', booking);\n console.log('Transaction', transaction);\n\n // const travelDateIsPassedOrEqualToCurrentDate = (targetDate: Date) => {\n // return new Date().getTime() <= new Date(targetDate).getTime();\n // };\n\n const canCancel = React.useMemo(() => {\n return canCancelBooking(booking, user as AuthenticatedUser);\n // eslint-disable-next-line\n }, [booking, booking.bookingStatus, user]);\n\n const canPay = React.useMemo(\n () =>\n !transaction?.paymentVerified &&\n user?.role === Roles.Client &&\n booking.bookingStatus !== BookingStatuses.Canceled,\n [transaction, booking, user]\n );\n\n const handleSetStatus = React.useCallback(\n async (status: BookingStatuses) => {\n if (booking) {\n if (booking.bookingStatus !== status) {\n booking.bookingStatus = status;\n await dispatch(BookingsThunk.update(new UpdateBookingModel(booking)));\n if (id) await dispatch(BookingsThunk.retrieve(+id));\n }\n }\n },\n [dispatch, booking]\n );\n\n const handleAssignProtocol = async () => {\n const updateBooking: any = {\n id: booking.id,\n bookingStatus: booking.bookingStatus,\n protocols: [],\n };\n\n Object.keys(values).forEach((key: any) => {\n updateBooking.protocols.push(values[key]['value']);\n });\n\n await dispatch(BookingsThunk.update(new UpdateBookingModel(updateBooking)));\n if (id) await dispatch(BookingsThunk.retrieve(+id));\n };\n\n const fetchAllProtocols = React.useCallback(() => {\n dispatch(UsersThunk.getAllProtocols());\n }, [dispatch]);\n\n React.useEffect(() => {\n fetchAllProtocols();\n // dispatch(AirportsThunk.list());\n }, [dispatch, fetchAllProtocols]);\n\n const details: DetailRow[] = React.useMemo(\n () => [\n { property: 'Airport ', value: find(airports.airports, { id: booking.airportId })?.name ?? 'N/A' },\n { property: 'Booking date ', value: formatDate(booking.dateCreated) },\n { property: 'Additional ODC', value: booking?.additionalOdc },\n { property: 'Default ODC', value: booking?.service?.defaultOdc },\n {\n property: 'Total number of ODC',\n value: (booking?.additionalOdc ?? 0) + (booking?.service?.defaultOdc ?? 0),\n },\n {\n property: 'Flight time porthacourt',\n value: 'N/A',\n },\n\n {\n property: 'Updated By',\n value: booking.modifiedBy_FirstName ?? '',\n },\n\n {\n property: 'Booked By',\n value: booking.bookedBy_FirstName ?? '',\n },\n\n {\n property: 'Status',\n value: BookingStatusesMap[booking.bookingStatus]\n .replace('Canceled', 'Cancelled')\n .replace('Flight_Canceled', 'Flight_Cancelled'),\n },\n {\n property: 'Protocol`(s)',\n value: [...(new Set(bookingProtocols) as any)].join(', '),\n },\n ],\n [booking, airports.airports]\n );\n\n return (\n \n \n \n {details.map(({ property, value }, i) => {\n return (\n
\n {property}\n {value}\n
\n );\n })}\n \n \n {/* ) => {\n return {original.firstName ?? 'N/A'};\n },\n \n },\n {\n Header: 'Last name',\n accessor: 'lastName',\n Cell: ({ row: { original } }: Cell) => {\n return {original.lastName || 'N/A'};\n },\n },\n {\n Header: 'Designation',\n accessor: 'designation',\n },\n {\n Header: 'Airline',\n accessor: 'airline',\n },\n {\n Header: 'Wheel chair',\n accessor: 'wheel_Chair',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger.wheel_Chair ? (\n \n ) : (\n \n ),\n },\n {\n Header: 'Special requirements',\n accessor: 'special_Requirement',\n Cell: ({ row: { original: passenger } }: Cell) => {\n const id = `passenger${passenger.id}`;\n\n return (\n
\n {passenger.special_Requirement ? (\n \n ) : (\n \n )}\n
\n );\n },\n },\n {\n Header: 'Additional services',\n accessor: 'additionalService',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger?.additionalService?.name ?? '',\n },\n ]}\n data={booking.passengers || []}\n /> */}\n
\n
\n Total price\n {formatCurrency(booking.price)}\n
\n
\n \n
\n {booking.bookingStatus === BookingStatuses.Processing &&\n ![Roles.Accountant, Roles.Auditor, Roles.Commercial].includes(user?.role as any) && (\n
\n
Select protocol
\n
\n {\n setValues(values);\n }}\n />\n
\n
\n )}\n
\n {canCancel && (\n \n Cancel\n \n )}\n {/* {canPay && (\n \n Pay now\n \n )} */}\n {BookingStatusAdminAvailableState[booking.bookingStatus].length > 0 &&\n isInAirport(booking.airportId, 'manage') &&\n (!!booking.bookingProtocols.length ? (\n (\n \n Change status\n \n )}\n >\n \n \n {booking.bookingStatus.replace('_', ' ')}\n \n {BookingStatusAdminAvailableState[booking.bookingStatus].map((status, i) => (\n \n \n {status.replace('_', ' ')}\n \n ))}\n \n ) : null)}\n {booking.bookingStatus === BookingStatuses.Processing &&\n ![Roles.Accountant, Roles.Auditor, Roles.Commercial].includes(user?.role as any) && (\n
\n \n ASSIGN PROTOCOL\n \n
\n )}\n
\n
\n );\n};\n","import { saveAs } from 'file-saver';\nimport React from 'react';\nimport { File, Send } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router';\nimport { TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, Breadcrumb, CustomPrimaryButton, TopBar } from '../../../../components';\nimport { AuthContext } from '../../../../context';\nimport { Booking } from '../../../../models/response';\nimport { BookingsService } from '../../../../services';\nimport { AirportsThunk, ApplicationState, TransactionsThunk } from '../../../../store';\nimport { BookingActions } from '../../../../store/bookings/bookings.actions';\nimport { BookingsThunk } from '../../../../store/bookings/bookings.thunk';\nimport { NotificationsThunk } from '../../../../store/notifications/notifications.thunk';\nimport { ApiClient } from '../../../../util/api-client';\nimport { BookingStatuses, BookingStatusesMap, NotificationTypes } from '../../../../util/constants';\nimport { history } from '../../../../util/history';\nimport { formatDate } from '../../../../util/misc/formatters';\nimport { FundsTransactionsTable } from '../../../transaction-services';\nimport { HeaderStyleWrapper, ViewBookingInformationComponent } from './view-booking-page.style';\nimport { ViewPorthacourtBookingInformationComponent } from './view-pbooking-page.style';\n\ninterface Props {\n bookingId?: string;\n breadcrumbs: Breadcrumb[];\n isFunding?: boolean;\n abortFetchTransaction?: boolean;\n}\n\nexport const ViewBookingPage: React.FC = ({\n bookingId,\n isFunding,\n breadcrumbs: crumbs,\n abortFetchTransaction,\n}) => {\n const id = bookingId ?? useParams<{ booking_id: string }>().booking_id;\n const { bookingDetails: booking } = useSelector((state: ApplicationState) => state.bookings);\n const {\n openTransaction: transaction,\n transactionType,\n transactionTypeMeta,\n } = useSelector((state: ApplicationState) => state.transactions);\n const { user, isInAirport } = React.useContext(AuthContext.Context);\n const dispatch = useDispatch();\n\n const exportFile = React.useCallback(\n async (_booking: Booking) => {\n const config: RequestInit = {\n ...ApiClient.getFetchConfig(),\n };\n\n try {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, `Downloading document`));\n\n const response = await fetch(\n `${process.env.REACT_APP_BASE_URL}/booking-services/export/${booking && booking.id}`,\n config\n );\n\n try {\n const downloadedFile = await response.blob();\n const { applicationUser: _user } = _booking;\n const documentName = _user?.business_Name ?? `${_user?.firstName} ${user?.lastName}`;\n saveAs(downloadedFile, documentName + '.pdf');\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error saving file'));\n }\n } catch (e) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Error downloading file'));\n }\n },\n [dispatch, booking, user]\n );\n\n React.useEffect(() => {\n if (id) dispatch(BookingsThunk.retrieve(+id));\n dispatch(AirportsThunk.list());\n\n if (!abortFetchTransaction) {\n dispatch(TransactionsThunk.retrieveByTrasactionId(+(id as string)));\n }\n }, [dispatch, id, abortFetchTransaction]);\n\n React.useEffect(() => {\n if (booking && !isInAirport(booking.airportId, 'view') && booking.applicationUserId !== user?.id) {\n dispatch(\n NotificationsThunk.create(NotificationTypes.Warning, 'You are not authorized to view this booking')\n );\n dispatch(BookingActions.clear());\n history.push('/app/transaction-services');\n }\n }, [booking, user, isInAirport, dispatch]);\n\n const breadcrumbs: Breadcrumb[] = crumbs ?? [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Bookings', path: '/app/transaction-services' },\n {\n name: `${(booking && booking.service && booking.service.name) || '[Service name]'}`,\n path: window.location.href,\n },\n ];\n\n const porthacourtProcess = booking?.service?.portharcourtService;\n\n return (\n \n \n {booking && (\n \n \n \n \n
\n \n
\n

{booking.service?.name || '[Service name]'}

\n \n Movement No: {transaction?.id ?? 'N/A'}\n \n
\n
\n
\n {transaction &&\n ![BookingStatuses.Processing].includes(booking.bookingStatus) &&\n (transaction.paymentStatus &&\n transaction?.paymentStatus.toLocaleLowerCase() === 'paid' ? (\n \n BookingsService.exportBooking(\n booking.batchCode,\n `${transaction.business_Name} - ${\n transaction.transactType\n } - ${formatDate(transaction.dateCreated)}`,\n dispatch,\n 'receipt'\n )\n }\n >\n \n Get Receipt\n \n ) : (\n \n BookingsService.exportBooking(\n booking.batchCode,\n `${transaction.business_Name} - ${\n transaction.transactType\n } - ${formatDate(transaction.dateCreated)}`,\n dispatch,\n 'invoice'\n )\n }\n >\n \n Get Invoice\n \n ))}\n {\n e.preventDefault();\n exportFile(booking);\n }}\n >\n \n Export\n \n
\n
\n
\n \n \n
\n Service booking details\n {(booking.passengers && booking.passengers.length) || '[x]'} Passenger(s)\n
\n
\n \n \n \n {isFunding ? (\n \n ) : porthacourtProcess ? (\n \n ) : (\n \n )}\n \n \n \n
\n
\n
\n )}\n
\n );\n};\n","import * as queryString from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation, useParams } from 'react-router';\nimport { ApplicationState, TransactionsThunk } from '../../store';\nimport { ViewBookingPage } from '../admin/bookings';\nimport { RegistrationRequestPage } from '../admin/manage-clients/registration-request/registration-request-page';\nimport { ViewFundingTransaction } from './views';\n\nexport const ViewTransactionServicePage: React.FC = () => {\n const dispatch = useDispatch();\n const [ready, setReady] = useState(false);\n const { transactionId } = useParams<{ transactionId: string }>();\n const transactions = useSelector((state: ApplicationState) => state.transactions);\n const { search } = useLocation();\n const { pageNumber, type } = React.useMemo(\n () => ({\n pageNumber: +(queryString.parse(search) as any).page || 1,\n type: +(queryString.parse(search) as any).type ?? 0,\n }),\n [search]\n );\n const { openTransaction: transaction } = transactions;\n\n useEffect(() => {\n if (type === 0) {\n dispatch(TransactionsThunk.retrieveByTrasactionId(transactionId, () => setReady(true)));\n } else if (type === 1) {\n dispatch(TransactionsThunk.retrieveTransactionTypebyId(transactionId, type, () => setReady(true)));\n }\n }, [dispatch, transactionId, pageNumber]);\n\n // if (!transaction || !ready) {\n // return null;\n // }\n\n return (\n \n {type === 1 ? (\n \n ) : type === 2 ? (\n \n ) : (\n \n )}\n \n );\n};\n","import { Document, Image, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\nimport { find } from 'lodash';\nimport React, { useMemo } from 'react';\nimport Logo from '../../assets/images/logo_faan.png';\nimport { Airport, Booking, Transaction, User } from '../../models/response';\nimport { formatDate } from '../../util/misc/formatters';\n\nconst addBorder = (width = 1, color = '#e4f5eb', style = 'solid') => ({\n borderWidth: width,\n borderColor: color,\n borderStyle: style,\n});\n\nconst Pair = ({ children }: { children: React.ReactNode }) => (\n \n {children}\n \n);\n\nconst Listing = ({ name, value, styles }: { name: string; value: any; styles?: any }) => (\n \n \n {name.toUpperCase()}\n \n \n {'' + value}\n \n \n);\n\nconst TableHead = ({ name, width, flex }: { name: string; width?: number; flex?: number }) => (\n \n {name.toUpperCase()}\n \n);\n\nconst TableCell = ({ value, width, flex }: { value: number | string; width?: number; flex?: number }) => (\n \n {value}\n \n);\n\ninterface Props {\n transaction: Transaction;\n airports: Airport[];\n details: User | Booking;\n}\n\nexport const Invoice: React.FC = ({ transaction, airports, details }) => {\n const isBooking = useMemo(() => details && 'applicationUserId' in details, [details]);\n const client = isBooking ? (details as Booking).applicationUser : (details as User);\n const airport = useMemo(() => find(airports, { id: details?.airportId })?.name ?? 'N/A', [airports, details]);\n const date = new Date().getFullYear();\n\n const description = useMemo(() => {\n return transaction.transactType === 'Protocol Services'\n ? `${transaction.transactType} - ${(details as Booking)?.service?.name} at ${airport}`\n : transaction.transactType;\n }, [details, airport, transaction.transactType]);\n\n return (\n \n \n \n \n \n Federal Airports Authority of Nigeria\n \n {isBooking && {airport}}\n \n {transaction.transactType}\n \n \n INVOICE\n \n {}\n Invoice No: {transaction.id ?? 'N/A'}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ITEMS\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Please note that TSA processing fee applies.\n \n ©Copyright {date} Airport Protocol Service. All rights reserved.\n \n \n \n );\n};\n\n// Font.register({\n// family: 'Oswald',\n// src: 'https://fonts.gstatic.com/s/oswald/v13/Y_TKV6o8WovbUd3m_X9aAA.ttf',\n// });\n\nconst styles = StyleSheet.create({\n body: {\n paddingTop: 35,\n paddingBottom: 65,\n paddingHorizontal: 30,\n // fontFamily: 'Oswald',\n },\n header: {\n marginBottom: 30,\n },\n});\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router';\nimport { Col, TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, Breadcrumb, TopBar } from '../../../../components';\nimport { CreatePassengerBooking } from '../../../../models/request';\nimport { CreatePorthacourtBooking } from '../../../../models/request';\nimport { ApplicationState } from '../../../../store';\nimport { ServiceThunk } from '../../../../store/services/services.thunk';\nimport {\n CreateBookingInvoice,\n CreateBookingVerificationPage,\n CreatePorthacourtBookingVerificationPage,\n} from './components';\nimport { CreateBookingForm } from './components/create-booking-form';\nimport { CreateBookingFormP } from './components/create-porthacourt-booking-form';\n\nexport enum ProgressSteps {\n DetailsStep,\n VerificationStep,\n invoiceStep,\n}\n\nexport const CreateBookingPage: React.FC = () => {\n const { service_id, client_id } = useParams<{ service_id: string; client_id: string }>();\n const { serviceDetails: service } = useSelector((state: ApplicationState) => state.services);\n const { services: allServices } = useSelector((state: ApplicationState) => state.services);\n const [booking, setBooking] = React.useState({});\n\n const dispatch = useDispatch();\n const [passengerBookings, setPassengerBookings] = React.useState([]);\n const [porthacourtBooking, setPorthacourtBooking] = React.useState(\n new CreatePorthacourtBooking()\n );\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getService(service_id));\n }, [dispatch, service_id]);\n\n const selectedService = allServices.find((service) => service.id === parseInt(service_id));\n const portharcourtService = selectedService ? selectedService.portharcourtService : false;\n // React.useEffect(() => {\n // if (service && !isClientOfType(service.serviceTypeId)) {\n // dispatch(\n // NotificationsThunk.create(NotificationTypes.Warning, 'You are not authorized to book this service type')\n // );\n\n // dispatch(ServiceActions.clearService());\n // history.replace('/app/services');\n // }\n // }, [dispatch, service, isClientOfType]);\n\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Services', path: '/app/services' },\n {\n name: `${(service && service.name) || ''}`,\n path: `/app/service/${service_id}`,\n },\n {\n name: `Create Booking`,\n path: window.location.href,\n },\n ];\n\n const [currentStep, setCurrentStep] = React.useState(ProgressSteps.DetailsStep);\n\n return (\n \n \n {service && (\n \n \n \n \n currentStep === ProgressSteps.VerificationStep}\n action={() => {\n if (currentStep === ProgressSteps.VerificationStep) {\n setCurrentStep(ProgressSteps.DetailsStep);\n return;\n }\n }}\n />\n

{service.name}

\n \n
\n
\n \n \n {portharcourtService ? (\n \n ) : (\n \n )}\n \n \n {portharcourtService ? (\n \n ) : (\n \n )}\n \n \n \n \n \n
\n
\n
\n )}\n
\n );\n};\n","import { Formik, FormikHelpers } from 'formik';\nimport { find, indexOf } from 'lodash';\nimport React, { useState } from 'react';\nimport { Calendar, Check, Info, Trash2, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { Col, Row } from 'reactstrap';\nimport { AppLayout, CustomPrimaryButton, DataTable } from '../../../../../components';\nimport { FormButton, FormDatePicker, FormTextInput } from '../../../../../components/form';\nimport { FormCheckBox } from '../../../../../components/form/form-check-box';\nimport { CustomModal } from '../../../../../components/utilities/modal/modal';\nimport { CreatePassengerBooking } from '../../../../../models/request';\nimport { Service } from '../../../../../models/response';\nimport { ApplicationState, ServiceThunk } from '../../../../../store';\nimport { AirportsThunk } from '../../../../../store/airports/airports.thunk';\nimport { GendersMap, HonorificsMap } from '../../../../../util/constants';\nimport { AirlinesMap } from '../../../../../util/constants/airline';\nimport { formatDate, formatTime } from '../../../../../util/misc/formatters';\nimport { validateFormValues } from '../../../../../util/validation';\nimport { formatCurrency } from '../../../../../util/misc';\n\ninterface Props {\n service: Service;\n client: string;\n setPassengerBookings: (bookings: CreatePassengerBooking[]) => void;\n proceed: () => void;\n}\n\nexport const CreateBookingForm: React.FC = ({ service, setPassengerBookings, proceed, client }) => {\n const [passengerBookings, setPassengerbookings] = React.useState([]);\n const [isTermsOpen, setTermsOpen] = useState(false);\n const [lastPassengerBooking, setLastPassengerBooking] = React.useState(\n new CreatePassengerBooking(service)\n );\n const dispatch = useDispatch();\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const { services } = useSelector((state: ApplicationState) => state);\n const [additionalService, setAdditionalService] = React.useState(0);\n\n const additionalServicePrice = services && services.services.find((s) => s.id === +additionalService)?.price;\n const addBooking = (booking: CreatePassengerBooking, helpers: FormikHelpers) => {\n setPassengerbookings(passengerBookings.concat(booking));\n setLastPassengerBooking(booking);\n helpers.resetForm();\n };\n\n const removePassenger = (index: number) => {\n const newPassengersList = passengerBookings.slice(0, index).concat(passengerBookings.slice(index + 1));\n setPassengerbookings(newPassengersList);\n };\n\n const verifyBookings = () => {\n setPassengerBookings(passengerBookings);\n proceed();\n };\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getAllServices());\n }, [dispatch]);\n\n React.useEffect(() => {\n dispatch(AirportsThunk.list());\n }, [dispatch]);\n\n if (isTermsOpen) {\n return (\n \n
Terms are Unavailable
\n
\n );\n }\n\n return (\n \n {/* Create Passenger Booking */}\n \n \n
\n Kindly fill out the information for booking service\n
\n
\n \n {({ handleSubmit, values, setFieldValue }) => {\n return (\n
\n
\n
\n Passenger airport details\n
\n
\n \n \n \n {airports.map(({ id, name }) => (\n \n ))}\n \n \n \n \n \n \n Flight Number\n \n \n \n \n \n
\n
\n \n \n \n {Object.entries(AirlinesMap).map(([air, i]) => (\n \n ))}\n \n \n
\n
\n Passenger's details\n
\n
\n \n \n \n \n \n \n \n \n \n {Object.entries(HonorificsMap).map(([id, name]) => (\n \n ))}\n \n \n \n \n \n {Object.entries(GendersMap).map(([id, name]) => (\n \n ))}\n \n \n
\n
\n Passenger special requirement\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {values.Others && (\n
\n \n
\n )}\n {/*
\n \n {\n setFieldValue('additionalServiceId', e.target.value);\n setAdditionalService(e.target.value);\n }}\n amount={values.additionalServiceId}\n compact\n >\n \n {services.services.map(({ id, name }) => (\n \n ))}\n \n \n
*/}\n {/* {find(services.services, { id: +values.additionalServiceId })?.name == 'Arrival' ? (\n \n \n \n \n {airports.map(({ id, name }) => (\n \n ))}\n \n \n \n \n \n \n ) : null} */}\n
\n
\n \n Sub total\n \n {formatCurrency(service.price * passengerBookings.length)}\n
\n
\n \n +\n \n {formatCurrency(additionalServicePrice ?? 0)}\n
\n
\n \n Total\n \n \n {formatCurrency(\n passengerBookings.length * service.price +\n (additionalServicePrice ?? 0)\n )}\n \n
\n
\n
\n \n Add passenger\n \n
\n
\n
\n );\n }}\n \n
\n\n {/* Passenger listings */}\n \n {passengerBookings.length ? (\n
\n
\n Passengers added \n
\n ) => cell.row.index + 1,\n },\n {\n Header: 'Name',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger.FirstName + ' ' + passenger.LastName,\n },\n {\n Header: 'Airport',\n accessor: 'AirportId',\n Cell: ({ row: { original: passenger } }: Cell) =>\n find(airports, { id: passenger.AirportId })?.name,\n },\n {\n Header: 'Airline',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger.airline,\n },\n {\n Header: 'Flight No.',\n accessor: 'Flight_Number',\n },\n {\n Header: 'Travel date',\n accessor: 'Date_Of_Travel',\n Cell: ({ row: { original: passenger } }: Cell) =>\n formatDate(passenger.Date_Of_Travel),\n },\n {\n Header: 'Flight time',\n accessor: 'Date_Of_Arrival',\n Cell: ({ row: { original: passenger } }: Cell) =>\n formatTime(passenger.Date_Of_Arrival),\n },\n {\n Header: 'Special R.',\n accessor: 'special_Requirement' as any,\n Cell: ({ row: { original: passenger } }: Cell) => {\n return (\n
\n {passenger.Wheel_Chair ? (\n Wheel chair\n ) : !passenger.Special_Requirement ? (\n \n ) : (\n {passenger.Special_Requirement}\n )}\n
\n );\n },\n },\n // {\n // Header: 'Addtional service',\n // accessor: 'additionalServiceId' as any,\n // Cell: ({ row: { original: passenger } }: Cell) =>\n // find(services.services, { id: passenger.additionalServiceId })?.name ?? '',\n // },\n {\n Header: 'Action',\n Cell: (cell: Cell) => (\n \n \n \n \n \n ),\n },\n ]}\n data={passengerBookings}\n />\n
\n ) : (\n
\n You have not added any passengers\n
\n )}\n
\n\n {\n return values.Accepted ? {} : { Accepted: 'You must accept the terms and conditions' };\n }}\n initialValues={{ Accepted: false }}\n onSubmit={verifyBookings}\n >\n {({ handleSubmit, errors }) =>\n passengerBookings.length > 0 && (\n
\n
\n I agree to the } />\n \n
\n {errors && errors.Accepted && {errors.Accepted}}\n \n Continue\n \n
\n )\n }\n \n
\n );\n};\n","import { find } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { Check, Info, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport styled from 'styled-components';\nimport { useParams } from 'react-router-dom';\nimport { AppLayout, CustomPrimaryButton, DataTable, FundWalletModal } from '../../../../../components';\nimport { CreateBookingModel, CreatePassengerBooking } from '../../../../../models/request';\nimport { TransactionsService } from '../../../../../services';\nimport { ApplicationState } from '../../../../../store';\nimport { BookingsThunk } from '../../../../../store/bookings/bookings.thunk';\nimport { formatCurrency, formatDate, formatTime } from '../../../../../util/misc/formatters';\nimport { PresentationalFormRadio } from '../../../../../components/form';\n\nimport Card from '../../../../../assets/images/card.png';\nimport { CreateBookingInvoice } from './create-booking-invoice';\nimport { history } from '../../../../../util/history';\n\ninterface Props {\n passengerBookings: CreatePassengerBooking[];\n goBack: () => void;\n proceed: () => void;\n client: string;\n setBooking: (bookings: any) => void;\n}\n\nconst InsufficientFundsWrapper = styled.div`\n width: 100%;\n font-size: 0.85rem;\n padding: 0.75em;\n color: #f4f4f4;\n background-color: rgb(247, 123, 114);\n font-weight: 500;\n display: flex;\n align-items: center;\n border-radius: 8px;\n justify-content: space-between;\n\n button {\n background-color: #f4f4f4;\n color: rgb(247, 123, 114);\n border: none;\n padding: 0.5em 1em;\n border-radius: 8px;\n font-weight: 700;\n transition: color 0.5s ease-in;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n color: rgba(247, 123, 114, 0.863);\n background-color: #f4f4f4cc;\n }\n }\n`;\n\nexport const CreateBookingVerificationPage: React.FC = ({\n passengerBookings,\n goBack,\n client,\n proceed,\n setBooking,\n}) => {\n const [isFundingWallet, setFundingWallet] = useState(false);\n const [balance, setBalance] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n const params: any = useParams();\n\n const { services } = useSelector((state: ApplicationState) => state);\n\n const getAdditionalServicePrice = (serviceId: number) => {\n let price = 0;\n for (let service of services.services) {\n if (service.id === serviceId) {\n price = service.price;\n }\n }\n\n return price;\n };\n\n const calculateAdditionalServicePrices = () => {\n let total = 0;\n for (let pass of passengerBookings) {\n total += getAdditionalServicePrice(pass.additionalServiceId);\n }\n return total;\n };\n\n const totalAdditionalService: number = calculateAdditionalServicePrices();\n\n const price = React.useMemo(\n () => passengerBookings.length * passengerBookings[0]?.Service.price + totalAdditionalService,\n [passengerBookings]\n );\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const dispatch = useDispatch();\n\n const handleCreateBooking = async () => {\n const bookingsMap: Record = {};\n\n passengerBookings.forEach((passengerBooking) => {\n const hash = CreatePassengerBooking.hashDetails(passengerBooking);\n\n if (hash in bookingsMap) {\n bookingsMap[hash]?.Passengers.push(passengerBooking.toPassenger());\n return;\n }\n\n const booking = passengerBooking.toBooking();\n booking.finalize();\n bookingsMap[hash] = booking;\n });\n\n let bookings = Object.values(bookingsMap);\n // bookings.clientId = client;\n const data: any = await dispatch(BookingsThunk.create(bookings, client));\n if (data['item2'][0]?.invoiceNumber !== null) {\n const returnBooking = { ...data['item1'][0], transaction: { ...data['item2'][0] } };\n await setBooking(returnBooking);\n }\n };\n\n const handledleConfirmBooking = async () => {\n await handleCreateBooking();\n await proceed();\n };\n\n useEffect(() => {\n TransactionsService.getWalletBalance(client)\n .then(({ data }) => {\n setBalance(data?.balance.balance ?? 0);\n })\n .catch((err) => console.log({ err }));\n }, []);\n\n return (\n \n {/* Booking Verification Page */}\n {balance < price && (\n \n {isFundingWallet && (\n setBalance((prev) => prev + value)}\n isOpen={isFundingWallet}\n isCreatingBooking\n setIsOpen={setFundingWallet}\n client={client}\n />\n )}\n \n You do not have enough balance to complete this process, Please Fund your wallet or use the Pay\n with Card option below\n \n\n \n \n )}\n \n \n
\n Kindly review and confirm your Service booking details\n {passengerBookings.length} Passenger(s)\n
\n
\n
\n ) => cell.row.index + 1,\n },\n {\n Header: 'Name',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger.FirstName + ' ' + passenger.LastName,\n },\n {\n Header: 'Airport',\n accessor: 'AirportId',\n Cell: ({ row: { original: passenger } }: Cell) =>\n find(airports, { id: passenger.AirportId })?.name,\n },\n {\n Header: 'Airline',\n Cell: ({ row: { original: passenger } }: Cell) =>\n passenger.airline,\n },\n {\n Header: 'Flight No.',\n accessor: 'Flight_Number',\n },\n {\n Header: 'Travel date',\n accessor: 'Date_Of_Travel',\n Cell: ({ row: { original: passenger } }: Cell) =>\n formatDate(passenger.Date_Of_Travel),\n },\n {\n Header: 'Flight time',\n accessor: 'Date_Of_Arrival',\n Cell: ({ row: { original: passenger } }: Cell) =>\n formatTime(passenger.Date_Of_Arrival),\n },\n // {\n // Header: 'Wheel chair',\n // accessor: 'Wheel_Chair',\n // Cell: ({ row: { original: passenger } }: Cell) =>\n // passenger.Wheel_Chair ? (\n // \n // ) : (\n // \n // ),\n // },\n {\n Header: 'Special requirements',\n accessor: 'special_Requirement' as any,\n Cell: ({ row: { original: passenger } }: Cell) => {\n return (\n
\n {passenger.Wheel_Chair ? (\n Wheel chair\n ) : !passenger.Special_Requirement ? (\n \n ) : (\n {passenger.Special_Requirement}\n )}\n
\n );\n },\n },\n // {\n // Header: 'Addtional service',\n // accessor: 'additionalServiceId' as any,\n // Cell: ({ row: { original: passenger } }: Cell) =>\n // find(services.services, { id: passenger.additionalServiceId })?.name ?? '',\n // },\n ]}\n data={passengerBookings}\n />\n
\n Total Price {formatCurrency(price)}\n
\n
\n
\n \n Edit Details\n \n {balance >= price && (\n \n Confirm\n \n )}\n
\n
\n
\n
\n {balance < price && (\n
\n
\n Alternative Method\n
\n
\n \n
\n \n
\n
\n \n
Pay with Card
\n
\n
\n
\n
\n \n Confirm\n \n
\n \n )}\n
\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { CustomPrimaryButton } from '../../../../../components';\nimport { formatCurrency } from '../../../../../util/misc';\nimport { history } from '../../../../../util/history';\n\nconst Container = styled.div`\n margin: 1rem 2rem;\n border: 1px solid #dddddd;\n padding: 1rem 5rem 2rem 2rem;\n border-radius: 20px;\n`;\n\ninterface createBookingInvoiceProps {\n goBack: () => void;\n booking: any;\n}\n\nexport const CreateBookingInvoice: React.FC = ({ goBack, booking }) => {\n return (\n \n
\n Payment Summary\n
\n
\n
\n
\n
{booking?.transaction?.invoiceNumber}
\n Invoice No\n
\n
\n
{booking?.transaction?.paymentStatus ?? 'Unpaid'}
\n Status\n
\n\n
\n
{booking?.transaction?.rrrNo ?? '0'}
\n RRR\n
\n\n
\n
Federal Airport Authority of Nigeria
\n Agency Name\n
\n
\n
\n
\n
{formatCurrency(booking?.price)}
\n Invoice Amount\n
\n
\n
\n
\n Use the RRR generated to pay on the POS\n
    \n
  • Ensure the Payment is successful
  • \n
  • Then click on the Back to Transactions button below
  • \n
  • This will redirect you to the transaction page
  • \n
\n
\n history.replace('/app/transaction-services')}>\n Back to Transactions\n \n
\n
\n
\n // \n );\n};\n","import { Formik, FormikHelpers } from 'formik';\nimport { find, indexOf } from 'lodash';\nimport React, { useState } from 'react';\nimport { Calendar, Check, Info, Trash2, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { Col, Row } from 'reactstrap';\nimport { AppLayout, CustomPrimaryButton, DataTable } from '../../../../../components';\nimport { FormButton, FormDatePicker, FormTextInput } from '../../../../../components/form';\nimport { FormCheckBox } from '../../../../../components/form/form-check-box';\nimport { CustomModal } from '../../../../../components/utilities/modal/modal';\nimport { CreatePorthacourtBooking } from '../../../../../models/request';\nimport { Service } from '../../../../../models/response';\nimport { ApplicationState, ServiceThunk } from '../../../../../store';\nimport { AirportsThunk } from '../../../../../store/airports/airports.thunk';\nimport { validateFormValues } from '../../../../../util/validation';\nimport { formatCurrency } from '../../../../../util/misc';\n\ninterface Props {\n service: Service;\n client: string;\n setPassengerBooking: (booking: CreatePorthacourtBooking) => void;\n proceed: () => void;\n}\n\nexport const CreateBookingFormP: React.FC = ({ service, setPassengerBooking, proceed, client }) => {\n const [passengerBooking, setPassengerbooking] = React.useState(\n new CreatePorthacourtBooking()\n );\n const [passengerBookings, setPassengerBookings] = React.useState([]);\n const [isTermsOpen, setTermsOpen] = useState(false);\n const isMountedRef = React.useRef(false);\n const [lastPassengerBooking, setLastPassengerBooking] = React.useState(\n new CreatePorthacourtBooking()\n );\n const [bookingAdded, setBookingAdded] = React.useState(false);\n const dispatch = useDispatch();\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const { services: srvice } = useSelector((state: ApplicationState) => state);\n\n console.log('Service', service);\n const defaultODCValue = service ? service.defaultOdc : 0;\n console.log('ODC value', defaultODCValue);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const verifyBookings = () => {\n setPassengerbooking(passengerBooking);\n proceed();\n };\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getAllServices());\n }, [dispatch]);\n\n React.useEffect(() => {\n dispatch(AirportsThunk.list());\n }, [dispatch]);\n\n if (isTermsOpen) {\n return (\n \n
Terms are Unavailable
\n
\n );\n }\n\n const handleAdditionalODCChange = (event: React.ChangeEvent, setFieldValue: any) => {\n const value = parseInt(event.target.value);\n setFieldValue('additionalOdc', value);\n };\n\n const addBookingToTable = (booking: CreatePorthacourtBooking) => {\n // Check if the booking already exists in passengerBookings\n const existingBookingIndex = passengerBookings.findIndex(\n (existingBooking) =>\n existingBooking.AirportId === booking.AirportId &&\n // existingBooking.ServiceId === booking.ServiceId &&\n existingBooking.additionalOdc === booking.additionalOdc\n );\n\n // If the booking already exists, inform the user or handle it as needed\n if (existingBookingIndex !== -1) {\n // Handle the case of a duplicate booking\n console.log('This booking already exists!');\n // Optionally, you can prevent adding the duplicate booking or take other actions\n } else {\n // If the booking doesn't exist, add it to passengerBookings\n setPassengerBookings([...passengerBookings, booking]);\n // Set bookingAdded to true\n setBookingAdded(true);\n }\n };\n\n const removeBookingFromTable = (bookingToRemove: CreatePorthacourtBooking) => {\n setPassengerBookings(passengerBookings.filter((booking) => booking !== bookingToRemove));\n setBookingAdded(false);\n };\n\n return (\n \n {/* Create Passenger Booking */}\n \n \n Airport Department Service \n
\n Kindly fill out the information for booking service for porthacourt\n
\n
\n {\n const booking: CreatePorthacourtBooking = {\n clientId: client,\n AirportId: values.AirportId,\n ServiceId: service.id,\n additionalOdc: values.additionalOdc,\n };\n\n setPassengerBooking(booking);\n addBookingToTable(booking);\n resetForm();\n\n console.log('Passenger Booking:', booking);\n\n setSubmitting(false);\n }}\n >\n {({ handleSubmit, values, setFieldValue, handleChange }) => {\n return (\n
\n
\n
\n Booking Details\n
\n
\n \n \n \n {airports.map(({ id, name }) => (\n \n ))}\n \n \n {/* \n \n */}\n
\n\n
\n ODC's Details\n
\n
\n \n Default ODC Number\n \n \n \n Additional ODC(s)\n \n \n
\n
\n
\n \n Sub total\n \n {formatCurrency(service.price)}\n
\n
\n \n +\n \n \n {formatCurrency(\n (values.additionalOdc ?? 0) > 0\n ? ((values.additionalOdc ?? 0) - 1) * 300000 + 200000\n : 0\n )}\n \n
\n
\n \n Total\n \n \n {formatCurrency(\n service.price +\n ((values.additionalOdc ?? 0) > 0\n ? ((values.additionalOdc ?? 0) - 1) * 300000 + 200000\n : 0)\n )}\n \n
\n
\n
\n \n Add booking\n \n
\n
\n
\n );\n }}\n \n
\n {/* Passenger listings */}\n \n {passengerBookings.length ? (\n
\n
\n Booking added \n
\n ) => cell.row.index + 1,\n },\n // {\n // Header: 'Service Type',\n // accessor: (row: CreatePorthacourtBooking) => row.Service?.serviceTypeId ?? '',\n // Cell: ({ row: { original } }: any) => ClientTypesMap[original.serviceTypeId as ClientTypes],\n // },\n\n {\n Header: 'Airport',\n accessor: 'AirportId',\n Cell: ({ row: { original: booking } }: Cell) => (\n {find(airports, { id: booking.AirportId })?.name}\n ),\n },\n\n // {\n // Header: 'Default ODC',\n // accessor: (values: CreatePorthacourtBooking) => values.defaultOdc,\n // // Render the value within the table cell\n // Cell: ({ value }: { value: number }) => {4},\n // },\n {\n Header: 'Additional ODC.',\n accessor: 'additionalOdc',\n },\n {\n Header: 'Booking date',\n // accessor: 'Date_Of_Travel',\n // Cell: ({ row: { original: passenger } }: Cell) =>\n // formatDate(passenger.Date_Of_Travel),\n },\n\n {\n Header: 'Action',\n\n // Cell: (cell: Cell) => (\n // \n // \n // \n // \n // \n // ),\n // },\n Cell: (cell: Cell) => (\n \n removeBookingFromTable(cell.row.original)}\n >\n \n \n \n ),\n },\n ]}\n data={passengerBookings}\n />\n
\n ) : (\n
\n You have not added any booking\n
\n )}\n
\n {\n return values.Accepted ? {} : { Accepted: 'You must accept the terms and conditions' };\n }}\n initialValues={{ Accepted: false }}\n onSubmit={verifyBookings}\n >\n {({ handleSubmit, errors }) => (\n
\n
\n I agree to the } />\n \n
\n {errors && errors.Accepted && {errors.Accepted}}\n \n Continue\n \n
\n )}\n \n\n {/* */}\n
\n );\n};\n","import { find } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { Check, Info, X } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport styled from 'styled-components';\nimport { useParams } from 'react-router-dom';\nimport { AppLayout, CustomPrimaryButton, DataTable, FundWalletModal } from '../../../../../components';\nimport { CreateBookingModel, CreatePassengerBooking, CreatePorthacourtBooking } from '../../../../../models/request';\nimport { BookingsService, TransactionsService } from '../../../../../services';\nimport { ApplicationState, NotificationsThunk } from '../../../../../store';\nimport { BookingsThunk } from '../../../../../store/bookings/bookings.thunk';\nimport { PBookingsThunk } from '../../../../../store/bookings/pbooking.thunk';\nimport { formatCurrency, formatDate, formatTime } from '../../../../../util/misc/formatters';\nimport { PresentationalFormRadio } from '../../../../../components/form';\nimport Card from '../../../../../assets/images/card.png';\n\ninterface Props {\n passengerBooking: CreatePorthacourtBooking;\n goBack: () => void;\n proceed: () => void;\n client: string;\n setBooking: (booking: any) => void;\n}\n\nconst InsufficientFundsWrapper = styled.div`\n width: 100%;\n font-size: 0.85rem;\n padding: 0.75em;\n color: #f4f4f4;\n background-color: rgb(247, 123, 114);\n font-weight: 500;\n display: flex;\n align-items: center;\n border-radius: 8px;\n justify-content: space-between;\n\n button {\n background-color: #f4f4f4;\n color: rgb(247, 123, 114);\n border: none;\n padding: 0.5em 1em;\n border-radius: 8px;\n font-weight: 700;\n transition: color 0.5s ease-in;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n color: rgba(247, 123, 114, 0.863);\n background-color: #f4f4f4cc;\n }\n }\n`;\n\nexport const CreatePorthacourtBookingVerificationPage: React.FC = ({\n passengerBooking,\n goBack,\n client,\n proceed,\n setBooking,\n}) => {\n const [isFundingWallet, setFundingWallet] = useState(false);\n const [balance, setBalance] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n const [formData, setFormData] = useState(new CreatePorthacourtBooking());\n const params: any = useParams();\n\n const { services: service } = useSelector((state: ApplicationState) => state);\n\n const defaultODCValue = service.serviceDetails?.defaultOdc ?? 0;\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const addODCValue = passengerBooking.additionalOdc ?? 0;\n\n const dispatch = useDispatch();\n\n const handleCreateSingleBooking = async () => {\n const booking = passengerBooking;\n\n setBooking(booking);\n try {\n const data: any = await dispatch(PBookingsThunk.createporthacourtbooking(booking, client));\n console.log('Data Sent', data);\n await setBooking(data); // Update the booking with the response data\n } catch (error) {\n console.error('Error creating single booking:', error);\n }\n };\n\n const handledleConfirmBooking = async () => {\n await handleCreateSingleBooking();\n await proceed();\n };\n\n useEffect(() => {\n TransactionsService.getWalletBalance(client)\n .then(({ data }) => {\n setBalance(data?.balance.balance ?? 0);\n })\n .catch((err) => console.log({ err }));\n }, []);\n\n const calculateDefaultODCValue = (numberOfODC: number): number => {\n let totalODCPrice = 0;\n\n if (numberOfODC > 0) {\n totalODCPrice = 200000; // Initial price for the first ODC\n if (numberOfODC > 1) {\n totalODCPrice += (numberOfODC - 1) * 300000; // Adding 300000 for each additional ODC\n }\n }\n\n return totalODCPrice;\n };\n\n const initialprice = service.serviceDetails?.price ?? 0;\n const tprice = calculateDefaultODCValue(addODCValue);\n const totalPrice = initialprice + tprice;\n return (\n \n {/* Booking Verification Page */}\n {balance < totalPrice && (\n \n {isFundingWallet && (\n setBalance((prev) => prev + value)}\n isOpen={isFundingWallet}\n isCreatingBooking\n setIsOpen={setFundingWallet}\n client={client}\n />\n )}\n \n You do not have enough balance to complete this process, Please Fund your wallet or use the Pay\n with Card option below\n \n\n \n \n )}\n \n \n
\n Kindly review and confirm your Service booking details\n Passenger(s)\n
\n
\n
\n ) => cell.row.index + 1,\n },\n // {\n // Header: 'Service Type',\n // accessor: (row: CreatePorthacourtBooking) => row.Service?.serviceTypeId ?? '',\n // Cell: ({ row: { original } }: any) => ClientTypesMap[original.serviceTypeId as ClientTypes],\n // },\n\n {\n Header: 'Airport',\n accessor: 'AirportId',\n Cell: ({ row: { original: booking } }: Cell) => (\n {find(airports, { id: booking.AirportId })?.name}\n ),\n },\n\n // {\n // Header: 'Default ODC',\n // accessor: (values: CreatePorthacourtBooking) => values.defaultOdc,\n // // Render the value within the table cell\n // Cell: ({ value }: { value: number }) => {4},\n // },\n {\n Header: 'Additional ODC.',\n accessor: 'additionalOdc',\n },\n {\n Header: 'Booking date',\n // accessor: 'Date_Of_Travel',\n // Cell: ({ row: { original: passenger } }: Cell) =>\n // formatDate(passenger.Date_Of_Travel),\n },\n ]}\n data={[passengerBooking]}\n />\n
\n Total Price {formatCurrency(totalPrice)}\n
\n
\n
\n \n Edit Details\n \n {balance >= totalPrice && (\n \n Confirm\n \n )}\n
\n
\n
\n
\n {/* {balance < totalPrice && (\n
\n
\n Alternative Method\n
\n
\n \n
\n \n
\n
\n \n
Pay with Card
\n
\n
\n
\n
\n \n Confirm\n \n
\n \n )} */}\n
\n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormButton, FormLargeRadioButton } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\n\nenum AccountTypes {\n GovernmentOfficial,\n CorporateOrganization,\n Individual,\n}\n\ninterface RegistrationAccountOptions {\n accountType: AccountTypes;\n}\n\nexport const RegisterAccountPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Create account', path: window.location.href },\n ];\n\n const history = useHistory();\n\n return (\n \n \n
\n \n \n {\n const registrationPage =\n '/register-' +\n (+accountType === AccountTypes.CorporateOrganization\n ? 'corporate-organization'\n : +accountType === AccountTypes.GovernmentOfficial\n ? 'government-official'\n : 'individual');\n\n history.push(registrationPage);\n }}\n >\n {({ handleSubmit }) => (\n
\n
\n

Select a role to register

\n
\n
\n \n \n \n
\n
\n \n Continue\n \n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Row } from 'reactstrap';\nimport styled from 'styled-components';\nimport { AppLayout, AuthLayout, ClientServiceCardComponent, TopBar } from '../../../components';\nimport { Breadcrumb } from '../../../components/breadcrumbs/breadcrumbs';\nimport { ApplicationState } from '../../../store';\nimport { ServiceThunk } from '../../../store/services/services.thunk';\nimport { useParams } from 'react-router';\nimport { formatCurrency } from '../../../util/misc';\n\nconst HeaderStyleWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n .left__header {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n .right {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n }\n`;\n\nexport const ClientServicePage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'All Services', path: window.location.href },\n ];\n const { client_id } = useParams();\n\n const dispatch = useDispatch();\n const { services } = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n dispatch(ServiceThunk.getAllServices());\n }, [dispatch]);\n\n return (\n \n \n \n \n \n
\n

All Services

\n
\n
\n
\n\n \n {services.services?.length > 0 ? (\n services.services.map((service) => (\n \n \n \n ))\n ) : (\n

There are no services

\n )}\n
\n
\n
\n );\n};\n","export enum RegistrationStages {\n FirstStage = 1,\n SecondStage,\n}\n","import FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size';\nimport FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type';\nimport 'filepond/dist/filepond.min.css';\nimport { Formik } from 'formik';\nimport { isMatch, uniqBy } from 'lodash';\nimport React from 'react';\nimport { Briefcase, Calendar, Lock, Mail, MapPin, Phone } from 'react-feather';\nimport { FilePond, registerPlugin } from 'react-filepond';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormBackButton, FormButton, FormFileUpload, FormStepper, FormTextInput } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\nimport { CreateCorporateOrganizationModel } from '../../../models/request';\nimport { NotificationsThunk } from '../../../store/notifications/notifications.thunk';\nimport { UsersThunk } from '../../../store/users/users.thunk';\nimport { BusinessNatures, ClientTypesMap, NotificationTypes } from '../../../util/constants';\nimport { validateFormValues } from '../../../util/validation';\nimport { RegistrationStages } from './common';\n// import { FileStatus } from 'filepond';\n\nregisterPlugin(FilePondPluginFileValidateSize, FilePondPluginFileValidateType);\n\nexport const RegisterCorporateOrganizationPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Create account', path: window.location.href },\n ];\n\n const [currentStage, setCurrentStage] = React.useState(RegistrationStages.FirstStage);\n const atLastStage = React.useMemo(() => currentStage === RegistrationStages.SecondStage, [currentStage]);\n const pond = React.useRef(null);\n\n const dispatch = useDispatch();\n const handleRegister = React.useCallback(\n async ({ Files: files, ...values }: CreateCorporateOrganizationModel) => {\n const formData = new FormData();\n\n if (files.length < 1) {\n dispatch(NotificationsThunk.create(NotificationTypes.Error, 'Please select at least one file'));\n return;\n }\n\n // filter(files, (file) => file.status !== FileStatus.LOAD_ERROR).forEach((file) => {\n // formData.append(file.filenameWithoutExtension, file.file, file.filename);\n // });\n\n Object.entries(values).forEach(([key, value]) => {\n formData.append(key, value);\n });\n\n dispatch(UsersThunk.createCorporateOrganization(formData));\n },\n [dispatch]\n );\n\n // Set up FilePond\n React.useEffect(() => {\n if (pond.current) {\n (pond.current as any)._pond.setOptions({\n allowProcess: false,\n maxFileSize: '2MB',\n acceptedFileTypes: ['application/pdf', 'image/jpeg'],\n labelFileTypeNotAllowed: 'Only PDF and JPEG files are accepted',\n });\n }\n });\n\n return (\n \n \n
\n \n \n \n {({ handleSubmit, isValid, values, setFieldValue, initialValues, submitCount }) => (\n
\n
\n Corporate Organization\n \n

Create an account

\n \n {!isValid && submitCount > 0 && (\n
Please check the form fields for errors
\n )}\n {atLastStage && values.Files.length < 1 && (\n
\n File upload is mandatory. Either PDF or JPEG with the maximum size of 2MB\n
\n )}\n
\n
\n {atLastStage ? (\n \n
\n {\n setFieldValue('Files', uniqBy(files, 'filename'));\n }}\n />\n
\n
\n ) : (\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n {' '}\n {BusinessNatures.map((value, i) => (\n \n ))}\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n {Object.entries(ClientTypesMap).map(([value, name], i) => (\n \n ))}\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n )}\n
\n
\n {atLastStage ? (\n file.status !== FileStatus.LOAD_ERROR)\n // .length < 1\n // }\n >\n Complete registration\n \n ) : (\n {\n e.preventDefault();\n e.stopPropagation();\n setCurrentStage(RegistrationStages.SecondStage);\n }}\n >\n Next Step\n \n )}\n \n Already have an account?{' '}\n \n Log in\n \n \n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Link, useRouteMatch } from 'react-router-dom';\nimport Check from '../../../assets/images/check (1).svg';\nimport { EntryFormContainer } from '../../../components';\nimport { Breadcrumb, Breadcrumbs } from '../../../components/breadcrumbs/breadcrumbs';\nimport { FormStepper } from '../../../components/form';\nimport Layout, { StickyBackground } from '../../../components/layout';\nimport { AuthThunk } from '../../../store/auth/auth.thunk';\n\nexport const VerifyEmailPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Create account', path: window.location.href },\n ];\n\n const [successful, setSuccessful] = React.useState(null);\n const dispatch = useDispatch();\n const match = useRouteMatch();\n\n const handleResult = React.useCallback(\n (value: boolean) => {\n setSuccessful(value);\n },\n [setSuccessful]\n );\n\n useEffect(() => {\n dispatch(\n AuthThunk.verifyEmail((match as any).params.code, {\n onSuccess: handleResult.bind(undefined, true),\n onFail: handleResult.bind(undefined, false),\n })\n );\n }, [dispatch, match, handleResult]);\n\n return (\n \n \n
\n \n \n {successful === null ? null : (\n
\n
\n {successful ? (\n \n \n \"registration\n
\n
\n

\n Email verified successfully!\n

\n
\n \n \n ) : (\n
\n

\n Email verification failed\n

\n
\n )}\n \n
\n

\n {successful ? 'Your email has been verified.' : 'Email verfication code invalid'}\n

\n
\n
\n \n Go to Login Page \n \n
\n
\n )}\n \n \n
\n );\n};\n","import { CustomerSurveyModel } from '../models/request';\nimport { AuthenticatedUser } from '../models/response';\nimport { ApiClient } from '../util/api-client';\n\nexport class FeedbackService {\n public static async sumbitSurvey(survey: CustomerSurveyModel) {\n return ApiClient.post('feedbacks', survey);\n }\n}\n","import { Dispatch } from 'redux';\nimport { CustomerSurveyModel } from '../../models/request';\nimport { FeedbackService } from '../../services/feedback.service';\nimport { NotificationTypes } from '../../util/constants';\nimport { history } from '../../util/history';\nimport { generateLoader } from '../../util/misc';\nimport { NotificationsThunk } from '../notifications/notifications.thunk';\n\nexport class FeedbackThunk {\n public static submit(survey: CustomerSurveyModel) {\n return async (dispatch: Dispatch) => {\n try {\n const response = await generateLoader(\n FeedbackService.sumbitSurvey(survey),\n dispatch,\n 'Submitting survey'\n );\n\n if (response.data) {\n NotificationsThunk.create(NotificationTypes.Success, 'Survey submitted successfully')(dispatch);\n\n return history.replace('/');\n }\n\n throw new Error('Survey submission failed');\n } catch (error) {\n // TODO: dispatch error to errorReducer\n // to be implemented\n }\n };\n }\n}\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useParams } from 'react-router';\nimport { Breadcrumb, Breadcrumbs, EntryFormContainer, StickyBackground } from '../../components';\nimport { FormButton, FormRadio, FormRangeIndicator, FormRangeInput, FormTextInput } from '../../components/form';\nimport Layout from '../../components/layout';\nimport { CustomerSurveyModel } from '../../models/request';\nimport { FeedbackThunk } from '../../store/feedback/feedback.thunk';\nimport { EOptions } from '../../util/constants';\nimport { validateFormValues } from '../../util/validation';\n\nexport const CustomerSurveyPage: React.FC = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Home', path: '/' },\n { name: 'Customer survey', path: window.location.href },\n ];\n\n const dispatch = useDispatch();\n const { code } = useParams<{ code: string }>();\n\n const handleSubmitSurvey = React.useCallback(\n async (survey: CustomerSurveyModel) => {\n dispatch(FeedbackThunk.submit(survey));\n },\n [dispatch]\n );\n\n return (\n \n \n
\n \n \n \n {({ handleSubmit, isValid, submitCount }) => (\n
\n
\n

Customer service feedback form

\n {!isValid && submitCount > 0 && (\n
Please check the form fields for errors
\n )}\n
\n
\n
\n Overall satisfaction of service\n \n
\n \n \n \n
\n Would you use our service in the future?\n
\n \n \n \n
\n
\n
\n How can we improve our services?\n \n
\n
\n
\n \n Submit survey\n \n
\n
\n )}\n \n
\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useSelector } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../components';\nimport { FormTextInput } from '../../../components/form';\nimport { CustomModal } from '../../../components/utilities/modal/modal';\nimport { CreateProtocolModel } from '../../../models/request';\nimport { ApplicationState } from '../../../store';\nimport { CreateProtocolRoleMap, Roles } from '../../../util/constants';\nimport { validateFormValues } from '../../../util/validation';\n\ninterface CreateUserModalProps {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n handleCreateUser: (userDetails: CreateProtocolModel) => void;\n}\n\nexport const CreateUserModal: React.FC = ({ isOpen, setIsOpen, handleCreateUser }) => {\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const { authUser: user } = useSelector((state: ApplicationState) => state.auth);\n\n const airpot = airports.find((airport) => airport.id === user?.airportId);\n\n return (\n \n \n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n {/* {Object.entries(CreateUserRolesMap).map(([role, value], i) => (\n \n ))} */}\n \n \n \n \n \n {user?.role !== Roles.Admin ? (\n \n ) : (\n airports.map(({ id, name }) => (\n \n ))\n )}\n \n \n
\n
\n \n \n \n Create protocol\n \n \n Close\n \n \n
\n )}\n
\n
\n );\n};\n","import { Formik } from 'formik';\nimport { isMatch } from 'lodash';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, ModalBody, ModalFooter } from 'reactstrap';\nimport { CustomPrimaryButton } from '../../../components';\nimport { FormTextInput } from '../../../components/form';\nimport { CustomModal } from '../../../components/utilities/modal/modal';\nimport { EditUserModel } from '../../../models/request/users';\nimport { User } from '../../../models/response/users';\nimport { ApplicationState } from '../../../store';\nimport { NotificationsThunk } from '../../../store/notifications/notifications.thunk';\nimport { CreateProtocolRoleMap, NotificationTypes, Roles } from '../../../util/constants';\nimport { validateFormValues } from '../../../util/validation';\n\ninterface EditModalProps {\n editModalOpen: boolean;\n setEditModalOpen: React.Dispatch>;\n activeUser: User;\n handleUpdateUser: (userDetails: EditUserModel) => void;\n}\n\nexport const EditUserModal: React.FC = ({\n editModalOpen,\n setEditModalOpen,\n activeUser,\n handleUpdateUser,\n}) => {\n const { airports } = useSelector((state: ApplicationState) => state.airports);\n const { authUser: user } = useSelector((state: ApplicationState) => state.auth);\n\n const dispatch = useDispatch();\n\n const airpot = airports.find((airport) => airport.id === user?.airportId);\n\n return (\n \n {\n if (isMatch(new EditUserModel(activeUser), userDetails)) {\n dispatch(NotificationsThunk.create(NotificationTypes.Info, 'No changes were made'));\n\n return setEditModalOpen(false);\n }\n\n handleUpdateUser(userDetails);\n }}\n >\n {({ handleSubmit }) => (\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n {/* {Object.entries(CreateUserRolesMap).map(([role, value], i) => (\n \n ))} */}\n \n \n \n \n \n {user?.role !== Roles.Admin ? (\n \n ) : (\n airports.map(({ id, name }) => (\n \n ))\n )}\n \n \n
\n
\n \n \n {/* */}\n Update Protocol\n \n \n Close\n \n \n
\n )}\n \n
\n );\n};\n","import moment from 'moment';\nimport React from 'react';\nimport { MoreVertical } from 'react-feather';\nimport { useSelector } from 'react-redux';\nimport { Cell } from 'react-table';\nimport { CustomDropdown, CustomDropdownItem, CustomPrimaryButton, DataTable } from '../../components';\nimport { PresentationalFormSwitch } from '../../components/form';\nimport { User } from '../../models/response';\nimport { ApplicationState } from '../../store';\nimport { ApiResponse } from '../../util/api-client';\nimport { Roles } from '../../util/constants';\n\ninterface ProtocolsTableProps {\n users: User[];\n meta?: ApiResponse['meta'];\n setActiveUser: React.Dispatch>;\n handleSetStatus: (...args: any[]) => void;\n handleModal: React.Dispatch>;\n}\n\nexport const ProtocolTable: React.FC = ({\n users,\n setActiveUser,\n meta,\n handleSetStatus,\n handleModal,\n}) => {\n const { authUser } = useSelector((state: ApplicationState) => state.auth);\n\n return (\n ) => {\n return {moment(original.dateCreated).format('Do MMMM, YYYY')};\n },\n },\n {\n Header: 'First Name',\n accessor: 'firstName',\n },\n {\n Header: 'Last name',\n accessor: 'lastName',\n },\n {\n Header: 'Email',\n accessor: 'email',\n },\n {\n Header: 'Profile Status',\n accessor: 'profile_Status',\n },\n // {\n // Header: 'Airport',\n // Cell: ({ row: { original: user } }: Cell) => {\n // return {find(airports, { id: user.airportId })?.name};\n // },\n // },\n {\n Header: 'Role',\n accessor: 'role',\n },\n {\n Header: 'Actions',\n Cell: ({ row: { original: user } }: Cell) => {\n return (\n user.id !== authUser?.id && (\n \n {\n return (\n \n \n \n );\n }}\n >\n {\n setActiveUser(user);\n handleModal(true);\n }}\n >\n Edit User\n \n \n {user.account_Status ? 'Deactivate' : 'Activate'}\n \n \n \n \n )\n );\n },\n },\n ]}\n data={users}\n meta={meta}\n />\n );\n};\n","import * as queryString from 'query-string';\nimport React from 'react';\nimport { Plus } from 'react-feather';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { TabContent, TabPane } from 'reactstrap';\nimport { AppLayout, AuthLayout, CustomPrimaryButton, TabLink, TopBar } from '../../components';\nimport { ChangeUserStatusModel, CreateProtocolModel, CreateUserModel, EditUserModel } from '../../models/request';\nimport { User } from '../../models/response';\nimport { ApplicationState } from '../../store';\nimport { AirportsThunk } from '../../store/airports/airports.thunk';\nimport { UsersThunk } from '../../store/users/users.thunk';\nimport { Breadcrumb } from '../../components';\n// import { ClientStatuses } from '../../../util/constants';\nimport { HeaderStyleWrapper } from '../admin/bookings/view-booking/view-booking-page.style';\nimport { CreateUserModal } from './modals';\nimport { EditUserModal } from './modals/edit-protocol-modal';\nimport { ProtocolTable } from './protocols-table';\nimport { Roles } from '../../util/constants';\n\nexport const ProtocolOfficersPage = () => {\n const breadcrumbs: Breadcrumb[] = [\n { name: 'Dashboard', path: '/app/dashboard' },\n { name: 'Protocols', path: window.location.href },\n ];\n\n const [createModalOpen, setCreateModalOpen] = React.useState(false);\n const [EditModalOpen, setEditModalOpen] = React.useState(false);\n const [value, setValue] = React.useState('');\n const [activeUser, setActiveUser] = React.useState();\n const [searchTerm, setSearchTem] = React.useState('');\n const { search } = useLocation();\n\n const links: TabLink[] = [\n { index: 1, name: 'All Protocols', query: [] },\n // { index: 2, name: 'Suspended', query: ['status', 'false'] },\n ];\n\n const [activeTab, setActiveTab] = React.useState(1);\n const dispatch = useDispatch();\n const { protocols, protocolsMeta } = useSelector((state: ApplicationState) => state.users);\n\n const handleCreateUser = React.useCallback(\n (userDetails: CreateProtocolModel) => {\n const protocolDetails = { ...userDetails };\n dispatch(\n UsersThunk.createUser(protocolDetails as CreateProtocolModel, setCreateModalOpen.bind(undefined, false))\n );\n },\n [dispatch]\n );\n\n const handleUpdateProtocol = React.useCallback(\n (prtocolDetails: EditUserModel) => {\n dispatch(\n UsersThunk.UpdateUser(prtocolDetails, setEditModalOpen.bind(undefined, false), () => {\n fetchProtocols();\n })\n );\n },\n [dispatch]\n );\n\n const pageNumber = React.useMemo(() => +(queryString.parse(search) as any).page || 1, [search]);\n const status: 'true' | 'false' | undefined = React.useMemo(\n () => (queryString.parse(search) as any).status,\n [search]\n );\n\n const fetchProtocols = React.useCallback(() => {\n dispatch(UsersThunk.getProtocols(pageNumber, searchTerm));\n }, [dispatch, pageNumber]);\n\n const handleSetStatus = React.useCallback(\n (protocol: User, status: boolean) => {\n if (protocol.account_Status !== status) {\n protocol.account_Status = status;\n dispatch(\n UsersThunk.changeUserStatus(new ChangeUserStatusModel(protocol), () => {\n fetchProtocols();\n })\n );\n }\n },\n [dispatch, fetchProtocols]\n );\n\n React.useEffect(() => {\n fetchProtocols();\n dispatch(AirportsThunk.list());\n\n switch (status) {\n case 'false':\n setActiveTab(2);\n break;\n default:\n setActiveTab(1);\n }\n }, [dispatch, status, fetchProtocols]);\n\n const handleChange = (e: React.ChangeEvent) => {\n setSearchTem(e.target.value);\n };\n\n const handleSearch = () => {\n dispatch(UsersThunk.getProtocols(pageNumber, searchTerm));\n };\n\n const filterdUsers: User[] = protocols.filter((user: User) => {\n return (\n (user.firstName && user.firstName.toLowerCase().indexOf(value.toLowerCase()) !== -1) ||\n (user.email && user.email.toString().toLowerCase().indexOf(value.toLowerCase()) !== -1)\n );\n });\n\n return (\n \n \n\n \n {activeUser && (\n \n )}\n\n \n \n \n
\n

All Protocols

\n

{filterdUsers?.length} total Users

\n
\n
\n \n \n Add Protocol\n \n
\n
\n
\n \n \n \n \n \n {filterdUsers.length ? (\n \n ) : (\n

There are no users

\n )}\n
\n {/* \n {filterdUsers.length ? (\n \n ) : (\n

There are no users

\n )}\n
*/}\n
\n
\n
\n
\n
\n );\n};\n","import { Font } from '@react-pdf/renderer';\nimport * as React from 'react';\nimport { Route, Switch } from 'react-router';\nimport { PageLoader, ToastNotificationArea } from './components';\nimport { ExternalRoute, ProtectedRoute } from './components/protected-route';\nimport { AuthContext } from './context';\nimport {\n AllClientPage,\n DashboardPage,\n ForgetPasswordPage,\n LoginPage,\n ManageUsersPage,\n NoMatchPage,\n RegistrationRequestPage,\n Reporting,\n ResetPasswordPage,\n ServicePage,\n TransactionServicesPage,\n UserActivitiesPage,\n UserProfilePage,\n Vcard,\n ViewClientPage,\n ViewServicePage,\n ViewTransactionServicePage,\n} from './pages';\nimport { BookingsPage, ViewBookingPage } from './pages/admin/bookings';\nimport { CreateBookingPage } from './pages/admin/bookings/create-booking';\nimport { CreateBookingForm, CreateBookingInvoice } from './pages/admin/bookings/create-booking/components';\nimport { ClientServicePage } from './pages/admin/client-services/service-page';\nimport { VerifyEmailPage } from './pages/auth/registration';\nimport { CustomerSurveyPage } from './pages/customer-survey';\nimport { Invoice } from './pages/invoice';\nimport LandingPage from './pages/landing-page/landing-page';\nimport { ProtocolOfficersPage } from './pages/protocol-officer/protocol-officer-page';\nimport { NewRoles, Roles } from './util/constants';\n\nFont.register({\n family: 'Oswald',\n src: 'https://fonts.gstatic.com/s/oswald/v13/Y_TKV6o8WovbUd3m_X9aAA.ttf',\n});\n\nexport default () => (\n \n \n \n \n \n \n \n \n \n\n {/* TODO: Protected routes here */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n\n {/* */}\n \n \n {/* When there is no page match */}\n \n \n \n \n \n \n);\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string;\n const publicUrl = new URL(url, window.location.toString());\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import { ConnectedRouter } from 'connected-react-router';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { PersistGate } from 'redux-persist/integration/react';\nimport App from './app';\nimport { ErrorBoundary } from './components';\nimport registerServiceWorker from './register-service-worker';\nimport configureStore from './store/configure-store';\nimport { history } from './util/history';\n\nimport './assets/css/global.css';\nimport './assets/scss/argon-design-system-react.scss?v1.1.0';\n\n// Create browser history to use in the Redux store\n// Get the application-wide store instance, prepopulating with state from the server where available.\nexport const { store, persistor } = configureStore(history);\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\nregisterServiceWorker();\n","import { connectRouter, routerMiddleware } from 'connected-react-router';\nimport { History } from 'history';\nimport { applyMiddleware, combineReducers, compose, createStore } from 'redux';\nimport { persistStore } from 'redux-persist';\nimport thunk from 'redux-thunk';\nimport { ApplicationState, reducers } from './';\n\nexport default function configureStore(history: History, initialState?: ApplicationState) {\n const middleware = [thunk, routerMiddleware(history)];\n\n const rootReducer = combineReducers({\n ...reducers,\n router: connectRouter(history),\n });\n\n const enhancers = [];\n const windowIfDefined = typeof window === 'undefined' ? null : (window as any);\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\n }\n\n const store = createStore(rootReducer, compose(applyMiddleware(...middleware), ...enhancers));\n\n const persistor = persistStore(store);\n return { store, persistor };\n}\n"],"sourceRoot":""}